[Jderobot-dev] RTSP y MJPEG sin delay en Android

Oscar Garcia oscar.robotica en linaresdigital.com
Dom Mar 31 21:48:27 CEST 2013


El 28/03/13 14:57, Roberto Calvo escribi�:
> El problema es que si programas en nativo en Android utiliando el 
> componente VideoView que permite reproducir streaming RTSP, siempre 
> siempre siempre tiene un delay de 10seg, independientemente de los 
> paquetes, red y conexi�n. Est� ya m�s que documentado este bug 
> (feature para otros) en Android, pero de momento sigue as�. Est� claro 
> la ventaja de UDP contra TCP en este tipo de aplicaciones, pero el 
> delay de 10seg en Android utilizando VideoView est� hardcodeado y es 
> una faena.


Tienes toda la raz�n, no todas las aplicaciones permiten modificar el 
tama�o del "prebuffer", incluso algunas lo permiten pero a�n as� luego 
tienen un b�ffer interno previo a la reproducci�n que no se puede salvar 
(y muchas veces es inherente al algoritmo de decodificaci�n). Como dije 
anteriormente, pr�cticamente todo es problema del cliente, muy pocas 
veces suele ser problema del servidor, aunque hay implementaciones de 
servidor que no dan salida de datos hasta que no se ha codificado una 
secuencia completa (fotograma completo, o fotograma "I", y estimaciones 
temporales, o fotogramas "B" y "P"), sobre todo por el problema de 
reordenaci�n que conlleva los fotogramas "B". Una implementaci�n MJPEG 
es como si todos los fotogramas fueran fotogramas "I".



> La implementaci�n que has hecho de MJPEG en android es est�ndar? Es 
> decir, da igual si lo enganchamos a un cameraserver o a una webcam que 
> exporte video usando MJPEG �funciona?


Como has podido ver en el v�deo, el m�vil Android hace de "servidor" y 
no de cliente. Es simplemente un servidor HTTP basado en NIO que permite 
enviar mediante streaming los fotogramas de la preview de la c�mara 
Android. El cliente puede ser cualquier navegador web que soporte 
streaming MJPEG (como chrome, firefox, safari, etc) o un cliente 
espec�fico como VLC, Quicktime, etc.

Es decir, no se puede enganchar a un cameraserver o a una webcam que 
exporte v�deo usando MJPEG porque precisamente la funci�n de mi 
aplicaci�n es esa, hacer de servidor y exportar el v�deo.



> Ser�a ideal que cameraserver exportara im�genes o v�deo de una manera 
> est�ndar para poder utilizar los clientes que quisieramos. Hay veces 
> donde JDEROBOT no podemos integrarlo donde quisieramos (por ejemplo en 
> una webcam IP) y entonces los clientes no se puede utilizar. Yo lo vi 
> claro con mi PFC del M�ster, donde si no estaba JDEROBOT por medio, no 
> pod�a visualizar ning�na webcam.


Realmente lo hace as�, lo hace con una interfaz bien definida. Bueno, 
pero por dentro permite usar una variedad de codificaci�n de fotogramas 
(RGB, YUV, combinaci�n de los anteriores con diferentes anchos de bit 
por pixel, etc), pero yo no lo ver�a como algo "no est�ndar", si no un 
abanico diferente de posibilidades de codificar cada fotograma.

Jderobot puede obtener im�genes desde una c�mara IP, s�lo necesita un 
cliente HTTP intermedio que realice el trabajo de la descarga de 
fotogramas usando transporte HTTP, podr�a llamarse "cameraserverhttp" 
por ejemplo, y convertirlo a un formato de fotograma compatible. 
Actuar�a como representante (proxy) de la c�mara IP real y se podr�a 
ejecutar en la misma m�quina que tuviera cameraview o en una m�quina 
diferente.

Habr�a dos formas de implementarlo, que tras una petici�n realice una 
conexi�n HTTP al servidor y se descargue �nicamente un fotograma, o que 
mantenga esa conexi�n obteniendo fotogramas continuamente y atienda las 
peticiones conforme les vayan llegando con el siguiente fotograma del 
streaming (mejorar�a la latencia al eliminar los tiempos de 
establecimiento de conexi�n, etc).

Un tercer escal�n a salvar es que la interfaz camera no soporta 
fotogramas en JPEG, habr�a que convertirlos a RGB u otro formato 
similar. Yo tuve ese problema en cameraserver para Android, en el que 
termin� por implementar en JDErobot la lectura de fotogramas codificados 
en NV21 para evitar hacer esa transformaci�n en un m�vil que suele tener 
menos capacidad de c�mputo que un ordenador port�til o de sobremesa 
(aunque �ltimamente las cosas se van equiparando, pero en m�viles con un 
precio que no est� al alcance de cualquiera).

Un saludo y espero que hay�is disfrutado de la semana santa :)


More information about the Jde-developers mailing list