actionscript 3 - Cómo hacer un bucle de FLV sin problemas
actionscript-3 flash (5)
La única forma de pasar un flv sin interrupciones es insertar dentro del swf. Se convierte en un MovieClip y luego lo manejas con play (), stop (), nextFrame (), prevFrame (), etc.
Al incrustar en la herramienta de creación de Flash (arrastrando el archivo flv en el escenario), asegúrese de seleccionar:
- "Incrustar FLV en SWF ..."
- Tipo de símbolo: "Clip de película"
- Todo marcado: "Colocar instancia en el escenario", "Expandir línea de tiempo ...", "Incluir audio"
Estoy jugando FLV en bucle de la "manera estándar":
netstream.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
...
public function onStatus(item:Object):void {
if (item.info.code == "NetStream.Play.Stop") {
if (loop) netstream.seek(0);
}
Cuando se reproducen a través de la herramienta de creación de Flash CS 5.5 (Probar película o Depurar película), los videos se repiten sin interrupciones. ¡Pero! Cuando se reproduce en el navegador o en el reproductor Flash de depuración independiente (ambos v.11.2.202.233), hay una pausa anormal de aproximadamente 1 segundo antes de que el video "rebobine" .
¿Es esto un error con la última versión de Flash Player?
Notamos esto en la transición de Flash 10 a Flash 11. Flash 10 realiza un bucle sin interrupciones, pero Flash 11 tiene un bloqueo de ~ 1 segundo al llamar a seek (0) desde NetStream.Play.Stop.
Incrustar los medios en el SWF no es una opción para nosotros.
El siguiente código proporciona un bucle más continuo, aún no perfecto, pero mucho mejor.
var mStream:NetStream;
var mDuration:Number;
...
addEventListener(Event.ENTER_FRAME, onEnterFrame);
...
function onEnterFrame(e:Event):void
{
if( mStream.time > (mDuration-0.05) )
{
if( mLooping )
{
mStream.seek(0);
}
}
}
function onMetaData(info:Object)
{
mDuration = info.duration;
}
Espero eso ayude.
Para las personas que tienen el mismo problema, intente cambiar el código antes mencionado a este:
public function onStatus(item:Object):void {
if (item.info.code == "NetStream.Buffer.Empty") {
if (loop) netstream.seek(0);
}
Deshará el parpadeo. Si escuchas "NetStream.Play.Stop", provocará un parpadeo.
No necesita incrustar nada. Esto funciona bien en IOS, Android y PC.
Parece que lo he logrado utilizando un componente FLVPlayback junto con algunas sugerencias.
Además, funciona sin problemas en el escritorio, iPhone 4S y 3GS. (a través de una aplicación de AIR)
_videoFLV = new FLVPlayback();
_videoFLV.fullScreenTakeOver = false;
_videoFLV.autoPlay = false;
_videoFLV.autoRewind = true;
_videoFLV.isLive = false;
_videoFLV.skin = null;
_videoFLV.y = 150;
_videoFLV.bufferTime = .1;
_videoFLV.width = 320;
_videoFLV.height = 320;
_videoFLV.addEventListener(MetadataEvent.CUE_POINT, video_cp_listener, false, 0, true);
_videoFLV.source = "includes/10sec.flv";
addChild(_videoFLV);
Con la función de oyente ...
function video_cp_listener(eventObject:MetadataEvent):void {
if (eventObject.info.name == "endpoint") {
_videoFLV.seek(0);
_videoFLV.play();
}
}
Es importante destacar que creo que debe establecer el ancho y alto para que coincida con su archivo FLV. es decir, no escalar en absoluto.
El flv tiene un punto de referencia llamado ''punto final'' que agregó 1 fotograma antes del final del archivo (suponiendo que el fotograma de inicio y final sea el mismo, será necesario). Lo agregué usando Adobe Media Encoder.
Este es un error conocido con Flash Player 11+ y AIR 3+. El informe de error está aquí, y debes votar de regreso y: https://bugbase.adobe.com/index.cfm?event=bug&id=3349340
Soluciones conocidas que crearán un bucle sin interrupciones:
1) Incruste el video en el archivo SWF. No es ideal, y no es posible en algunos casos.
2) Cree objetos duales NetSteam y cambie entre ellos. Un ejemplo del evento disparado cuando ns1, el primero de dos objetos NetStreams, llega a su fin:
if (e.info.code == "NetStream.Play.Stop"){
vid.attachNetStream(ns2);
ns2.resume();
activeNs = ns2;
ns1.seek(0);
ns1.pause();
}
Reemplace ns1 con ns2 en el otro oyente de eventos. Una duplicación inútil de objetos y manipuladores, pero ahí tienes.
3) Utilice AIR 2.x / Flash Player 10.x (realmente no es una solución, excepto para usuarios de Linux)