2011-07-12 14 views
5

estoy usando flash.net.NetStream y flash.media.Video jugar un .flv, he aquí algo de código:AS3 - ¿Cómo saber si un video ha finalizado?

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); 

que reproduce el video, pero ¿cómo puedo saber cuando el vídeo se ha reproducido ¿Desde el principio hasta el final? ¿Cómo saber si el video se reprodujo TODO su longitud?

PD: Perdón por mi mal inglés.

Respuesta

14

Bartek respuesta es la más exacta pero he encontrado que el código que necesito es "NetStream.Play.Stop"

El código "NetStream.Play.Complete" no existe.

stream.addEventListener(NetStatusEvent.NET_STATUS, statusChanged); 

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

Esto funciona ya que no se puede detener el flujo, sólo se realice una pausa (y reanudarlo), por lo que la única manera de este estatus surgir es poner fin a la reproducción de vídeo de llegar al final (y eso es lo que necesito)

PD: Perdón por mi mal inglés.

0

Creo que usted querrá agregar otra función a su objeto stream.client, llamado 'onPlayStatus'

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

Por lo tanto crear la función en otra parte de su código tal vez y luego hacer referencia a ella como tal :

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

O he hecho algo mal o no sé por qué, pero la función nunca se llama. –

+0

Asegúrese de que los metadatos estén codificados al principio del archivo –

0

Apenas añada detector de eventos para NET_STATUS:

stream.addEventListener(NetStatusEvent.NET_STATUS, statusChanged); 

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

No existe el código "NetStream.Play.Complete" para NetStatusEvent. No en los archivos de ayuda, y no en el código de ejecución, rastreamos CADA evento y el único que veo al final es "NetStream.Play.Stop". –

+2

@unkiwii Si busca el evento 'NetStream.play.stop'. Cuando se active ese evento, puedes verificar que NetStream.time sea igual al tiempo total de ejecución de tu película. Entonces sabrá que la película se ha completado. – Bakapii

1

El código Necesito fue:

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

(el único cambio que tuve que hacer fue cambiando a Play.Stop Buffer.Empty)

+1

El búfer podría quedar vacío por muchas otras razones además de completar el video, aunque ... –

Cuestiones relacionadas