Comunidad de diseño web y desarrollo en internet online

Problema con "seek" FLV_Playback as3

Citar            
MensajeEscrito el 20 Feb 2012 03:22 pm
Hola a todos, estoy haciendo una aplicación en la que muestro 2 videos ya grabados con 2 visores de FLV_Playback, el tema es que necesito que cuando en uno de ellos se modifique el segundo que se está visualizando, en el otro también se vaya a dicho segundo.
A groso modo necesito algo como lo siguiente:

Código ActionScript :

flv1.addEventListener("onSeek", onSeek1)
flv2.addEventListener("onSeek", onSeek2)

onSeek1(e:Event)
{
    flv2.setSeekPosition(flv1.getSeekPosition());
}
onSeek2(e:Event)
{
    flv1.setSeekPosition(flv2.getSeekPosition());
}

Alguna idea de como hacerlo?
Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Feb 2012 05:27 pm
Tu código genera un loop, porque un seek genera un seek en el otro y nunca acaba. Cuando una operación de seek termina se genera un evento seeked ( http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/video/FLVPlayback.html#event:seeked )
Debes escuchar el evento seeked en ambos FLVPlayback, en cuando se dispare uno, lo cancelas en el otro (para evitar el loop sin fin) y lo mueves a la posición, usa un Timer para restaurarle el listener. Idealmente, bloquea los controles mientras hace esto, porque es lo típico que alguien se pone a jugar con tu barra de seek y bloquea tu player

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Feb 2012 08:16 am
Hola Jorge, el código que puse era un "prototipo", la verdad que voy un poco pez. Como puedo hacerlo para obtener el segundo en el que está la barra de "seek"? Todas las funciones que he encontrado son para colocar la barra de "seek" en cierto punto, no para obtener en que punto está.
Alguna idea?

Mucvhas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Feb 2012 12:22 pm
Algo así

Código ActionScript :

player1.addEventListener(VideoEvent.SEEKED, onSeek)
player2.addEventListener(VideoEvent.SEEKED, onSeek)

//quito los listeners para evitar un loop circular, hago el seek del otro player, 
//agrego un listener para cuando termine para  restituir los listeners
function onSeek(evt:VideoEvent):void{
      var dest:Number = evt.target.playheadTime
       player1.removeEventListener(VideoEvent.SEEKED, onSeek) 
       player2.removeEventListener(VideoEvent.SEEKED, onSeek)
      if(evt.target==player1){
            player2.addEventListener(VideoEvent.SEEKED, reset);
           player2.seek(dest);
       } else {
          player1.addEventListener(VideoEvent.SEEKED, reset);
          player1.seek(dest);
       }
}
//quito el listener al reset y restituyo los listeners originales
function reset(evt:VideoEvent):void{
    evt.target.removeEventListener(VideoEvent.SEEKED, reset);
    player1.removeEventListener(VideoEvent.SEEKED, onSeek) 
    player2.removeEventListener(VideoEvent.SEEKED, onSeek)
}


Lo puse así coimo me salió, no lo he probado, si te da error pon exactamente cual

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Feb 2012 04:20 pm
Hola jorge, muchas gracias, el código funciona más o menos, ya que la primera vez que muevo el seek, me cambia la posición de ambos players, pero no lo coloca en el mismo sitio, además una vez movido una vez, ya no vuelve a hacerme caso sii muevo el seek por segunda vez.

Alguuna opción?
Gracias por tu tiempo

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Feb 2012 06:10 pm
¿Ambos players reproducen el mismo archivo?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Feb 2012 08:35 am
No, cada uno reproduce un archivo distinto pero de igual tiempo.

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Feb 2012 09:37 am
Al momento del encoding se decide cada cuanto tiempo se pone un fotograma clave. Cuando se hace seek, Flash intenta ir a un fotograma clave en el tiempo que le indicas, si no existe va al mas cercano. La única forma de clavar cualquier seek en el tiempo que deseas es encodear con un fotograma clave cada segundo, lo cual incrementa bastante el tamaño del FLV, porque lo usual es cada 3 segundos o mas. Entonces a menos que sea el mismo archivo o ambos estén encodeados con fotograma claves cada 1 segundo, el seek será aproximado. Luego incluso si fuera el mismo encoding, deberías pausar el primero hasta que termine el seek del segundo para luego arrancar ambos, sino también desfasarían. El tunning fino de video no se puede hacer con un FLVPlayer, hay que manejar directamente el NetStream y trabajar con los callbacks que generan cada operación (que son bastantes mas que los que ofrece el API del FLVPlayer)
Si no te vuelve a hacer caso será que no se ejecuta la función reset, agrega un trace a ver si esto es verdad.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Feb 2012 12:37 pm
Muchas gracias jorge por la clase maestra que me has dado. He podido comprender muchas cosas.
Seguiré probando y seguro que lo saco.

Un saludo

Por Palacio

Claber

198 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.