2011-12-14 27 views
7

Uso DDMS para obtener capturas de pantalla de mi teléfono Android y necesito una forma eficiente de convertirlas en video y transmitir el video a través de la red.Tienda, convierte a video una pantalla de Android de secuencia

Tengo un RawImage que se llena con los datos de la pantalla:

RawImage mRawImage; 

Hasta saben que uso SWT para crear la imagen y guardarla:

PaletteData paletteData = new PaletteData(
    mRawImage.getRedMask(), 
    mRawImage.getGreenMask(), 
    mRawImage.getBlueMask()); 

ImageData imageData = new ImageData(
    mRawImage.width, 
    mRawImage.height, 
    mRawImage.bpp, 
    paletteData, 
    1, 
    mRawImage.data); 

ImageLoader s = new ImageLoader(); 
s.data = new ImageData[] {imageData}; 
s.save("temp.jpg",SWT.IMAGE_JPEG); 
  • Puede usted proponer una forma de convertir esas secuencias de imágenes a video y luego transmitir el video?

He encontrado NanoHTTPD que se puede utilizar para la transmisión, pero ¿cómo puedo convertir y comprimir las imágenes para vídeo?

  • ¿Crees que puedo hacer eso con ffmpeg?

me pareció una buena Tutorial para la transmisión de la cámara Web FFMPEG y video4linux2.

¿Es posible enviar el bytes desde el RawImage al FFMPEG para convertirlo a una transmisión de video en vivo?

código real:

$ffmpeg -f video4linux2 -i /dev/video0 http://78.47.18.19:8090/cam1.ffm 

reemplazarlo con algo similar a:

$ffmpeg -f video4linux2 -i **<add here java stream>** http://78.47.18.19:8090/cam1.ffm 

¿Alguna sugerencia?

Gracias

PD: espero una solución que me ayudará a convertir las imágenes en un vídeo comprimido y luego transmitir el vídeo por la red con el fin de jugar, ya sea con HTML5 o Flash Player

+0

Hola Salamis, ¿cuál es la velocidad a la que capturarás la imagen estática? – Janvo

+0

5-10 fotogramas por segundo sería suficiente. – glarkou

+0

Hola Salamina, creo que mi respuesta a continuación responde a tus preguntas anteriores. Debería asegurarse de que la captura en el dispositivo le proporciona suficientes fotogramas por segundo para codificar en un video (consulte el parámetro -r en ffmpeg). – Janvo

Respuesta

5

Hay dos maneras de abordar esto:

1) Captura, codificará y en y desde el propio dispositivo

o

2) Capturar en el dispositivo, codificará y desde un servidor

No sé todos sus requisitos, pero yo supongo que la opción 2 es la ruta a seguir. Tendrás un mejor rendimiento y una gama más amplia de herramientas para usar con el fin de lograr tu objetivo final.

Capture Capture las imágenes JPEG casi exactamente de la manera que describe. Excepto agregar un índice a cada uno de manera que tenga FILE1.JPG FILE2.JPG FILE3.JPG FILE4.jpg etc.

Ahora, en algún intervalo, dependiendo de sus requisitos, suba estas imágenes a un servidor.

Codificar Uso mencode para ajustar la tasa de compresión con pérdida, así:

mencoder "./*.jpg" -mf fps=5 -o yourvideo.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800

Una vez hecho esto, entonces puede utilizar ffmpeg para crear el MP4, así:

ffmpeg -r 5 -b 1800 -i %01d.jpg yourvideo.mp4 

Streaming Ahora, para poder transmitir el mp4 a través de una red, me gustaría ETUP una página web como:

http://myserver/androidStream 

que carga una lista de reproducción M3U que se escribe dinámicamente de tal manera que siempre está señalando el video más actualizada para transmitir. Según el reproductor que use, puede apuntar la lista de reproducción M3U a la lista de reproducción "siguiente" M3U que cargará el siguiente video. Es posible que también desee ver formatos alternativos de lista de reproducción como ASX o PLS según sus requisitos.

Vea: http://en.wikipedia.org/wiki/Advanced_Stream_Redirector y http://en.wikipedia.org/wiki/PLS_(file_format) como ejemplos de otros formatos de listas de reproducción que no sean M3U.

Usando los pasos generales anteriores, tendrá un sistema donde el dispositivo está capturando imágenes a una velocidad de n imágenes por minuto y luego cargando esas imágenes a un servidor para su codificación. Una vez que esas imágenes están codificadas, puede transmitir la película directamente haciendo referencia al archivo o puede configurar una lista de reproducción tipo M3U que le permitirá al jugador pasar del video 'actual' al 'siguiente' cuando esté disponible.

Cuestiones relacionadas