2011-07-12 9 views
5

Używam flash.net.NetStream i flash.media.Video grać flv Oto niektóre kodu:AS3 - Jak sprawdzić, czy wideo się skończyło?

var stream:NetStream = new NetStream(connection); 

//next line is to avoid an error message 
stream.client = {onMetaData: function(obj:Object):void {}} 

var video:Video = new Video(); 
video.attachNetStream(stream); 
stream.play("url.to/video"); 

addChild(video); 

który odtwarza wideo, ale jak mogę wiedzieć, kiedy grał wideo od początku do końca? Jak sprawdzić, czy film został odtworzony CAŁKOWITA?

PS: Przepraszam za mój zły angielski.

Odpowiedz

14

Bartek odpowiedź jest najbardziej dokładne, ale znalazłem, że kod jest mi potrzebne "NetStream.Play.Stop"

Kod "NetStream.Play.Complete" nie istnieje.

stream.addEventListener(NetStatusEvent.NET_STATUS, statusChanged); 

function statusChanged(stats:NetStatusEvent) { 
    if (stats.info.code == 'NetStream.Play.Stop') { 
     trace('the video has ended'); 
    } 
} 

To działa, ponieważ nie może zatrzymać strumień, tylko wstrzymać ją (i wznowić go), więc jedynym sposobem, aby tego statusu pojawić ma się zakończyć odtwarzanie wideo dojściu do końca (i to, co potrzebne)

PS: Przepraszam za mój zły angielski.

0

wierzę, będziemy chcieli, aby dodać kolejną funkcję do stream.client obiektu, zwanego „onPlayStatus”

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#event:onPlayStatus

Więc utworzyć funkcję gdzie indziej w kodzie, a następnie może odwołać go tak jak :

function myFunction(obj:Object):void 
{ 
    //do something here 
} 
stream.client = {onPlayStatus: myFunction} 
+0

Albo zrobić coś źle lub nie wiem dlaczego, ale funkcja nigdy nie jest wywoływana. –

+0

Upewnij się, że metadane są zakodowane na początku pliku. –

0

Wystarczy dodać detektor zdarzeń dla NET_STATUS:

stream.addEventListener(NetStatusEvent.NET_STATUS, statusChanged); 

function statusChanged(stats:NetStatusEvent) { 
    if (stats.info.code == 'NetStream.Play.Complete') { 
     // do some stuff 
    } 
} 
+0

Nie ma takiego kodu "NetStream.Play.Complete" dla NetStatusEvent. Nie w plikach pomocy, a nie w uruchomionym kodzie, śledzę KAŻDE wydarzenie, a jedyne, co widzę na końcu, to "NetStream.Play.Stop". –

+2

@ rachunki Jeśli szukasz zdarzenia "NetStream.play.stop". Po uruchomieniu tego zdarzenia można sprawdzić, czy czas NetStream.time jest równy całkowitemu czasowi działania filmu. Wtedy wiesz, że film zagrał do końca. – Bakapii

1

Kod trzeba było:

 public function statusChanged(stats:NetStatusEvent):void 
     { 
      trace(stats.info.code); 
      if (stats.info.code == 'NetStream.Buffer.Empty') 
      { 
       trace('the video has ended'); 
      } 
     } 

(jedyna zmiana musiałem zrobić zmieniał Play.Stop do Buffer.Empty)

+1

Bufor może stać się pusty z wielu innych powodów oprócz ukończenia wideo, chociaż ... –