Recepción de flujo de vídeo desde una cámara IP en android
Tengo una cámara IP que es de streaming de vídeo en formato MJPEG. Ahora mi objetivo es recibirlo y mostrarlo en mi propia aplicación Android personalizada. Para esto tengo tres alternativas de programación en la plataforma android:
- Uso de la clase incorporada de Anrdroid MediaPlayer
- Utilizar la biblioteca FFMPEG en C nativo y acceder a ella a través de JNI
- Uso del puerto GStreamer en android para recibir el flujo
Así que por favor sugerir una mejor solución?
- Descodificación de hardware de video en Android usando GStreamer
- MediaCodec y Camera: los colores no coinciden
- Uso de Gstreamer o ffmpeg para crear cliente rtsp en Android
- GStreamer en Android
- Juega RTP stream withouth RTSP en Android VideoView
No tengo experiencia con FFMPEG o GStreamer. Entonces, ¿cuál es la viabilidad de hacer esto?
- Transmisión en tiempo real en RTP en un cliente Android
- Implementación de la muestra de codecs de medios en android 4.1
- No se pueden crear tutoriales de GStreamer con Android Studio
- Flujo de vídeo en tiempo real / latencia cero: ¿qué parámetros de codec utilizar?
- Utilizar el complemento personalizado de GStreamer en Android
- RTSP a través de streaming de vídeo HTTPS por GStreamer
- Carga de bibliotecas compartidas que dependen de otras librerías compartidas
- Android enviar mpegts arroyos sobre udp
Utilice gstreamer para ello.
He utilizado gstreamer en beagleboard que tiene 1GHz procesador para tomar la imagen de 2 cámaras en 30 fps con muy bajo poder de procesamiento de la CPU.
Gstreamer capaz de combinar imágenes, agregar cadenas, cambiar de formato. Y te presenta lo que quieres fácilmente en stream. Lo único que tienes que hacer es agregar cajas negras entre sí.
Puede agregar casillas negras tanto dinámicamente como estáticamente.
Si no va a cambiar su flujo depende de la entrada en su programa, sugiero que use una estática . Pero no estoy seguro de si funciona en android ..
Para probar la tercera opción (gstreamer), puedes usar esta aplicación: https://play.google.com/store/apps/details?id=pl.effisoft.rpicamviewer2 . También puede abrir la vista previa de gstreamer desde su código usando el código siguiente:
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);
- Android No se puede cifrar la base de datos utilizando sqlcipher usando greendao
- Detección de solicitud de aplicación de VPN Service + Packets bloqueando