Comunidad de diseño web y desarrollo en internet online

¿Cómo puedo reiniciar un NetStream que se ha quedado congelado?

Citar            
MensajeEscrito el 11 Feb 2014 09:14 am
Hola, estoy teniendo problemas con la clase NetStream de AS3, resulta que estoy suscrito a un canal y de vez en cuando la imagen que estoy recibiendo (en vivo) se queda congelada, aunque el emisor sigue emitiendo. Para solucionar el problema tengo un botón que se suscribe de nuevo al canal, pero no es óptimo.
¿Alguien sabe si hay alguna forma de detectar que la imagen recibida se ha congelado?
¿Hay algun evento que lo indique?
Les dejo la forma en la que me estoy conectando por si sirve de algo:

Código ActionScript :

netRemoteStream = new NetStream(myNetConnection);
netRemoteStream.play("channelToView");
netRemoteStream.bufferTime = 0;
myViewer.attachNetStream(netRemoteStream);
netRemoteStream.receiveAudio(true);
netRemoteStream.receiveVideo(true);

Muchas gracias de antemano

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Feb 2014 01:40 pm
Esta es una mala idea

netRemoteStream.bufferTime = 0;

Esto quiere decir que no tienes buffer, y en cuanto la conexión decae un poco se congela. Usa un tiempo de 10 segundos para evitar que haya tanto congelamiento. Luego si quieres saber que pasa, agrega un listener al netstatus, ej:

Código ActionScript :

public function NetConnectionExample() {
            connection = new NetConnection();
            connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
            connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            connection.connect(null);
        }

        private function netStatusHandler(event:NetStatusEvent):void {
          trace(event.info.code+": "+event.info.message)   
         switch (event.info.code) {
                case "NetConnection.Connect.Success":
                    connectStream();
                    break;
                case "NetStream.Play.StreamNotFound":
                    trace("Stream not found: " + videoURL);
                    break;
            }
        }


Hay varios tipos de mensaje, debes estas recibiendo un evento de buffering

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Feb 2014 02:18 pm
Hola Jorge, pero si pongo buffer pierdo el tiempo real no?
Como es para una conversación entre 2 usuarios, no quiero que haya buffer, para que puedan tener una conversación natural.

Gracias

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Feb 2014 02:25 pm
Ok, si lo que estas haciendo es videoconferencia igual tienes un delay. Eso ya es una estrategia. Lo habitual es que la velocidad de conexión varíe. Se suele hacer un ping para evaluar la velocidad (es bastante grueso pero da una idea) y en base a eso se setea el buffer. Hay mucho tuto, sobre todo si usas Flash Media Server

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Feb 2014 02:34 pm
Hola Jorge, estoy usando RED5.
he probado a poner un listener de NetStatusEvent, pero cuando se corta y con buffer>Time = 0, no recibo ningún evento de buffering.
Por otro lado, que valor consideras adecuado para tener algo de buffer pero que no afecte a la videoconferencia?
No hay forma de detectar siiin buffer que se ha cortado y que reconecte de nuevo?

Muchas fgracias

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Feb 2014 03:37 pm
Como te puse en el ejemplo, traza todos los eventos, si se corta deberías recibir algún evento .... aunque o se como va Red5 con eso. Un buffer de 10 segundos está bien, por lo menos evitas que se congele, si le pones cero igual se corta y la sensación es peor. Igual si ambos usuarios no tienen métricas aducuadas de conectividad, realizar la videoconferencia es medio imposible, por eso el testing sobre cada usuario conectado. Reconectar lleva mucho mas tiempo que esperar a que se llene el buffer, no te da ninguna ventaja

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Feb 2014 12:05 pm
Hola Jorge, he puesto los siguientes eventos:

Código ActionScript :

nc.addEventListener(NetStatusEvent.NET_STATUS, netConnectionStatus);
netRemoteStream.addEventListener(NetStatusEvent.NET_STATUS, netRemoteStatus);
netRemoteStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
private function netConnectionStatus(event:NetStatusEvent):void 
{
   trace("netStatus = " + event.info.code);
}
private function netRemoteStatus(e:NetStatusEvent):void
{
   trace("netRemoteStatus = " + e.info.code);
}
private function asyncErrorHandler(e:AsyncErrorEvent):void
{
   trace("asyncErrorHandler " + e.error);
}

Y cuando se corta no me genera ningún evento.
No sé si he dicho que cuando se corta, lo que se corta es la imagen, porqué el vídeo sigue llegando sin problema y tengo suficiente ancho de banda para emitir y recibir.
Por otro lado he puesto un WireShark para ver como iba el tráfico y he podido ver que cuando se corta es porque recibo la última traza de video y a contnuación recibo: "Set chunk size 513". No sé si esto puede ayudar y como puedo hacer que detecte el FlashPlayer esta traza para forzar una resuscripción al canal.

Alguna idea?

Por manel.pi

71 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Feb 2014 12:07 pm
Si se corta y no da mensaje, mala espina. Intenta con Flash Media Server, el código que tienes que usar es practicamente el mismo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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