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 esta 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.