PDA

Просмотр полной версии : прелоадер для flv видео


B0Bka
26.11.2007, 00:03
в хелпе есть такой пример прелоадера видео:


Example
The following example creates a progress bar using the Drawing API and the bytesLoaded and bytesTotal properties that displays the loading progress of video1.flv into the video object instance called my_video. A text field called loaded_txt is dynamically created to display information about the loading progress as well.

var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
my_video.attachVideo(stream_ns);
stream_ns.play("video1.flv");

this.createTextField("loaded_txt", this.getNextHighestDepth(), 10, 10, 160, 22);
this.createEmptyMovieClip("progressBar_mc", this.getNextHighestDepth());
progressBar_mc.createEmptyMovieClip("bar_mc", progressBar_mc.getNextHighestDepth());
with (progressBar_mc.bar_mc) {
beginFill(0xFF0000);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 10);
lineTo(0, 10);
lineTo(0, 0);
endFill();
_xscale = 0;
}
progressBar_mc.createEmptyMovieClip("stroke_mc", progressBar_mc.getNextHighestDepth());
with (progressBar_mc.stroke_mc) {
lineStyle(0, 0x000000);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 10);
lineTo(0, 10);
lineTo(0, 0);
}

var loaded_interval:Number = setInterval(checkBytesLoaded, 500, stream_ns);
function checkBytesLoaded(my_ns:NetStream) {
var pctLoaded:Number = Math.round(my_ns.bytesLoaded/my_ns.bytesTotal*100);
loaded_txt.text = Math.round(my_ns.bytesLoaded/1000)+" of "+Math.round(my_ns.bytesTotal/1000)+" KB loaded ("+pctLoaded+"%)";
progressBar_mc.bar_mc._xscale = pctLoaded;
if (pctLoaded>=100) {
clearInterval(loaded_interval);
}
}

B0Bka
27.11.2007, 12:04
как все же заставить видео сначала скачаться а потом воспроизвестись... даже если оно стримовое, в приведенном примере, видео все равно скачивает какой-то объем и воспроизводит его (не дождавшись конца загрузки).

alekslitvinenk
27.11.2007, 15:43
Если в потоковом видео, которое ты качаешь есть метаданные, то присвой размеру буфера длину скачиваемого видео.

var duration:Number;

stream_ns.onMetaData = function(myMeta){
trace(myMeta['duration']);
duration = Number(myMeta['duration']);
stream_ns.setBufferTime(duration);
};

B0Bka
29.11.2007, 01:56
alekslitvinenk ага, была такая идея, только не знал как получить длительность до воспроизведения файла, думал пока я получу duration файл уже начнет проигрывать и я не успею выставить значение setBufferTime для потока, спасибо за этот код, попробую

B0Bka
30.11.2007, 00:58
да, все работает замечательно, спасибо...

з.ы. уже проблема нийти узкий инет канал для проверки загрузки.
и simulate download не помогает, флэшплеер кеширует куда-то в себя видео, не в курсе как сбросить кэш у него?

alekslitvinenk
30.11.2007, 01:52
Сбросить кеш у флеша можно либо через сайт адоб, либо с помощью контекстного меню флеша.
А разве нельзя ограничить скорость собственного канала для проверки ?

B0Bka
30.11.2007, 02:01
наверно можно какими-нибудь программами или фаерволами но я не знаю таких (если что-то есть такое подскажи)
з.ы. программно кэш не сбрасывается? (чтобы его сразу при запуске флэшки отчищать)

alekslitvinenk
30.11.2007, 02:08
Неуверен, что кеш автоматически очищаеться, поэтому лучше каждый раз вручную чистить...А почему собственно SimulateDownload не подходит ?

B0Bka
30.11.2007, 03:17
...А почему собственно SimulateDownload не подходит ? первый раз при компиляции (crtl+enter) все ок, но т.к. файл локально, он быстро загружается и начинает воспроизводиться, а когда нажимаешь второй раз ctrl+enter == SimulateDownload, то он его уже не грузит, т.е. он эмулирует загрузку самой флэшки - плеера, а вот видео у него уже в кэше и он его сразу воспроизводит. (по крайней мере у меня такое впечатление возникает)