2012-05-21 14 views
9

Tengo una cámara IP que está transmitiendo video en formato MJPEG. Ahora mi objetivo es recibirlo y mostrarlo en mi propia aplicación de Android personalizada. Para esto tengo tres alternativas de programación en la plataforma Android:Recepción de transmisión de video desde una cámara IP en android

  1. Uso incorporado clase Anrdroid MediaPlayer
  2. El uso de la biblioteca FFmpeg en C nativa y para acceder a él a través de JNI
  3. Mediante el puerto de GStreamer en android para recibir la corriente

¿Por favor sugiera una solución mejor?

No tengo experiencia con FFMPEG o GStreamer. Entonces, ¿cuál es la viabilidad de hacer esto?

+0

Para añadir algunos detalles, quiero recibir la corriente en el Samsung Galaxy Tab 10.1 (con Android 3.2 de nido de abeja) y la cámara IP es la transmisión de vídeo RTSP (TCP sobre UDP en MPEG-4) con una URL particular y en un puerto no especificado. Ahora sugiero una opción de la lista ... –

+0

Para actualizar el progreso, he probado la opción 1 (usando MediaPlayer) con URL en el formato especificado para transmitir el RTSP. Pero se bloquea lanzando una excepción IOException "Prepare failed .: status = 0x1". Alguna idea sobre eso? –

+0

Para verificar si la transmisión en particular es compatible o no, he revisado el sitio web de Android y también he instalado algunas aplicaciones de Android como VPlayer y IPCamViewer para verificar la transmisión. Ellos pueden jugarlo sin ningún problema. Eso significa que el formato de video es compatible, entonces, ¿dónde más podría estar el problema? –

Respuesta

1

Use gstreamer para elt.

He usado gstreamer en beagleboard que tiene procesador de 1GHz para tomar imágenes de 2 cámaras en 30 fps con muy baja potencia de procesamiento de la CPU.

Gstreamer capaz de combinar imágenes, agregar cadenas, cambiar formatos. Y te presenta lo que deseas fácilmente en la transmisión. Lo único que debe hacer es agregar black boxes entre sí.

Puede agregar blackboxes dinámicamente y estáticamente.

Si no va a cambiar su flujo depende de la entrada de su programa, sugiero usar static one. Pero no estoy seguro de si funciona en Android ..

0

Para probar la tercera opción (gstreamer) puede utilizar esta aplicación: https://play.google.com/store/apps/details?id=pl.effisoft.rpicamviewer2. También puede abrir previsualización gstreamer su código utilizando las siguiente código:

Intent intent = new Intent("pl.effisoft.rpicamviewer2.PREVIEW"); 
int camera =0; 

//--------- Basic settings 
intent.putExtra("full_screen", true); 

intent.putExtra("name"+camera, "My pipeline name"); 
intent.putExtra("host"+camera, "192.168.0.1"); 
intent.putExtra("port"+camera, 5000); 
intent.putExtra("description"+camera, "My pipeline description"); 
intent.putExtra("uuid"+camera, UUID.randomUUID().toString()); 
intent.putExtra("aspectRatio"+camera, 1.6); 
intent.putExtra("autoplay"+camera, true); 

//--------- Enable advanced mode 
intent.putExtra("advanced"+camera, true); //when advanced=true, then  custom_pipeline will be played 
             //when advanced=false, then pipeline will be generated from host, port (use only for backward compatibility with previous versions) 
intent.putExtra("custom_pipeline"+camera, "videotestsrc ! warptv ! autovideosink"); 

//--------- Enable application extra features 
intent.putExtra("extraFeaturesEnabled"+camera, false); 

//--------- Add autoaudiosink to featured pipeline 
intent.putExtra("extraFeaturesSoundEnabled"+camera, false); 

//--------- Scale Video Stream option 
intent.putExtra("extraResizeVideoEnabled"+camera, false); 
intent.putExtra("width"+camera, 320);  //used only when extraResizeVideoEnabled=true 
intent.putExtra("height"+camera, 200);  //used only when extraResizeVideoEnabled=true 

//--------- Add plugins 
ArrayList<String> plugins = new ArrayList<String>(); 
intent.putExtra("plugins"+camera, plugins); 

intent.setPackage("pl.effisoft.rpicamviewer2"); 
startActivityForResult(intent, 0); 
Cuestiones relacionadas