Control de la reproducción de vídeo

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

La clase NetStream ofrece cuatro métodos principales para controlar la reproducción de vídeo:

pause(): detiene la reproducción de un flujo de vídeo. Si el vídeo ya está en pausa, la llamada a este método no tendrá ningún efecto.

resume(): reanuda la reproducción de un flujo de ví­deo que se ha detenido. Si el vídeo ya se está reproduciendo, la llamada a este método no tendrá ningún efecto.

seek(): busca el fotograma clave más cercano a la ubicación especificada (un desplazamiento, en segundos, desde el comienzo del flujo).

togglePause(): realiza una pausa o reanuda la reproducción de un flujo.

Nota: el método stop() no está disponible. Para detener un flujo, se debe pausar la reproducción y buscar el principio del flujo de vídeo.
Nota: el método play() no reanuda la reproducción; se utiliza para cargar archivos de vídeo.

En el ejemplo siguiente se demuestra cómo controlar un vídeo mediante diferentes botones. Para ejecutar el siguiente ejemplo, cree un nuevo documento y añada cuatro instancias de botón al espacio de trabajo (pauseBtn, playBtn, stopBtn y togglePauseBtn):

var nc:NetConnection = new NetConnection(); 
nc.connect(null); 
 
var ns:NetStream = new NetStream(nc); 
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); 
ns.play("video.flv"); 
function asyncErrorHandler(event:AsyncErrorEvent):void 
{ 
    // ignore error 
} 
 
var vid:Video = new Video(); 
vid.attachNetStream(ns); 
addChild(vid); 
 
pauseBtn.addEventListener(MouseEvent.CLICK, pauseHandler); 
playBtn.addEventListener(MouseEvent.CLICK, playHandler); 
stopBtn.addEventListener(MouseEvent.CLICK, stopHandler); 
togglePauseBtn.addEventListener(MouseEvent.CLICK, togglePauseHandler); 
 
function pauseHandler(event:MouseEvent):void 
{ 
    ns.pause(); 
} 
function playHandler(event:MouseEvent):void 
{ 
    ns.resume(); 
} 
function stopHandler(event:MouseEvent):void 
{ 
    // Pause the stream and move the playhead back to 
    // the beginning of the stream. 
    ns.pause(); 
    ns.seek(0); 
} 
function togglePauseHandler(event:MouseEvent):void 
{ 
    ns.togglePause(); 
}

Si se hace clic en la instancia de botón pauseBtn, el archivo de vídeo quedará en pausa. Si el vídeo ya está en pausa, hacer clic en este botón no tendrá ningún efecto. Si se hace clic en el botón playBtn, se reanuda la reproducción de vídeo si ésta estaba en pausa anteriormente; de lo contrario, el botón no tendrá ningún efecto si el vídeo ya estaba en reproducción.

Detección del final de un flujo de vídeo

Para poder detectar el principio y el final de un flujo de vídeo, se debe añadir un detector de eventos a la instancia de NetStream para el evento netStatus. En el código siguiente se demuestra cómo detectar varios códigos mediante la reproducción del vídeo:

ns.addEventListener(NetStatusEvent.NET_STATUS, statusHandler); 
function statusHandler(event:NetStatusEvent):void 
{ 
    trace(event.info.code) 
}

El código anterior genera el resultado siguiente:

NetStream.Play.Start 
NetStream.Buffer.Empty 
NetStream.Buffer.Full 
NetStream.Buffer.Empty 
NetStream.Buffer.Full 
NetStream.Buffer.Empty 
NetStream.Buffer.Full 
NetStream.Buffer.Flush 
NetStream.Play.Stop 
NetStream.Buffer.Empty 
NetStream.Buffer.Flush

Los dos códigos que se desean detectar específicamente son "NetStream.Play.Start" y "NetStream.Play.Stop", que señalan el principio y el final de la reproducción del vídeo. El siguiente fragmento utiliza una sentencia switch para filtrar estos dos códigos y rastrear un mensaje:

function statusHandler(event:NetStatusEvent):void 
{ 
    switch (event.info.code) 
    { 
        case "NetStream.Play.Start": 
            trace("Start [" + ns.time.toFixed(3) + " seconds]"); 
            break; 
        case "NetStream.Play.Stop": 
            trace("Stop [" + ns.time.toFixed(3) + " seconds]"); 
            break; 
    } 
}

Si se detecta el evento netStatus (NetStatusEvent.NET_STATUS), se puede crear un reproductor de vídeo que cargue el vídeo siguiente de una lista de reproducción una vez que haya terminado de reproducirse el vídeo actual.