Получил мой внешний NetStream, но как загрузить.flv из моей библиотеки?

Как загружать.flv (позволяет называть его "library.flv"), сидящим в моей (внутренней) Flash-библиотеке в моем Netstream?

Я могу легко загрузить внешний.flv с помощью ниже, но мне нужно загрузить.flv из моей библиотеки

//Creating the video object
var ADFvideo = new Video(110,180);
videoContainer.addChild(ADFvideo);
ADFvideo.x = 0;
ADFvideo.y = 0;

//Loading the flv into the video object 
var ADFnc:NetConnection = new NetConnection();
ADFnc.connect(null);
var ADFns:NetStream = new NetStream(ADFnc);
ADFvideo.attachNetStream(ADFns);

//Handling metaData (it arrives as the video starts playing, so it is the pefect time to fire the first event);
var ADFcustomClient:Object = new Object();
ADFcustomClient.onMetaData = ADFmetaDataHandler;
ADFns.client = ADFcustomClient;
var ADFinfoObj:Object;
function ADFmetaDataHandler(ADFinfo:Object):void
{
 //meta stuff
}

ADFns.play("files/external.flv"); /* current way of loading the external .flv */

ADFns.addEventListener(NetStatusEvent.NET_STATUS, statusChanged);

function statusChanged(stats:NetStatusEvent)
{
 //event changes
}
2 ответа

Я не думаю, что вы можете использовать NetStream со встроенным FLV-видео. Когда вы импортируете видео в свою библиотеку, у вас будет возможность преобразовать его в мувиклип или сохранить его как простое видео, которое будет сидеть на временной шкале. Для более позднего варианта вы не можете создать AS Linkage. Это не рекомендуется для более длительного клипа, так как вы столкнетесь с проблемой синхронизации, проблемами с воспроизведением и проблемами с предварительной загрузкой.


Вы можете попробовать эту настройку вашего опубликованного кода в качестве отправной точки. Протестировано с использованием 3-секундного видео (H.263/Sorenson) с шириной 1280 на высоту 720 с разрешением 44100 Гц 128 MP3 и не было "..опытствующего вялого поведения", на моей стороне с дерьмовой испытательной машиной.

Когда видео заканчивается, вам нужно использовать функцию statusChanged(stats:NetStatusEvent) чтобы обрабатывать то, что происходит дальше (я отредактировал код, чтобы сделать постоянный повтор в качестве примера)

В любом случае этот код означает, что окончательный скомпилированный SWF и FLV существуют как один пакет. Таким образом, FLV объемом 200 КБ добавит +200kb к размеру выходного SWF. Просто имейте в виду, особенно с большими/множественными вставками FLV.

//// Specify embed item and create Class to store such item
[ Embed(source = "yourFileName.flv", mimeType = "application/octet-stream") ]
var bytes_FLV : Class; 
//// End embedded item setup

//create bytes for NStream from embedded item
var file_BA:ByteArray = new bytes_FLV(); 

//Creating the video object
var ADFvideo = new Video(110,180);
videoContainer.addChild(ADFvideo);
ADFvideo.x = 0;
ADFvideo.y = 0;

//Loading the flv into the video object 
var ADFnc:NetConnection = new NetConnection();
ADFnc.connect(null);
var ADFns:NetStream = new NetStream(ADFnc);
ADFvideo.attachNetStream(ADFns);

//Handling metaData (it arrives as the video starts playing, so it is the pefect time to fire the first event);
var ADFcustomClient:Object = new Object();
ADFcustomClient.onMetaData = ADFmetaDataHandler;
ADFns.client = ADFcustomClient;
var ADFinfoObj:Object;
function ADFmetaDataHandler(ADFinfo:Object):void
{
 //meta stuff
}

///ADFns.play("files/external.flv"); /* current way of loading the external .flv */

//Send file_BA to NStream for playback.. 
ADFns.play(null);
ADFns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN); 
ADFns.appendBytes(file_BA);

ADFns.addEventListener(NetStatusEvent.NET_STATUS, statusChanged);

function statusChanged(stats:NetStatusEvent)
{
 //event changes
 //trace("NetStream Status : " + stats.info.code);

 if (stats.info.code == "NetStream.Buffer.Empty") 
 { 
 //Buffer.Empty = video has ended..
 ADFns.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN); 
 ADFns.appendBytes(file_BA);

 }
}

licensed under cc by-sa 3.0 with attribution.