Decodificación de flujo de vídeo en Android de DJI drone
Hola me gustaría hacer algún procesamiento de imágenes con el uso de OpenCv en la secuencia de vídeo de DJI phantom 3 pro. Desafortunadamente para esto es necesario hacer su propio vídeo de decodificación. Sé que debe ser el trabajo con el uso de Media Codec clase Android, pero no sé cómo hacer. He visto algunos ejemplos para la decodificación de vídeo de archivo de vídeo, pero no pude modificar este código para mi objetivo. ¿Podría alguien mostrar algún ejemplo o tutorial cómo hacerlo? Gracias por la ayuda
mReceivedVideoDataCallBack = new DJIReceivedVideoDataCallBack(){ @Override public void onResult(byte[] videoBuffer, int size){ //recvData = true; //DJI methods for decoding //mDjiGLSurfaceView.setDataToDecoder(videoBuffer, size); } };
Este es el método que está enviando flujo de codificación desde el drone, y tengo que enviar para decodificar el videoBuffer y luego modificar a Mat para OpenCV.
- Reproducción de vídeo local en WebView en Android
- Acceder a imágenes y video ordenados en el mismo cursor
- Android - Integración de ffmpeg y android-ndk-r9c
- Aplicación de la aplicación demo de Android app?
- Intención de tomar video en android
- La aplicación de vista web de Android no permite que el reproductor de video pase a pantalla completa
- MediaPlayer seekTo () no actualiza SurfaceView
- SeekTo en VideoView
- Reproducción de archivos .m3u8 a través de HTTPS en android 2.3
- Grabación de video en un buffer circular en Android
- Reproducción de vídeo de Android Things en Raspberry Pi
- Recortar video como whatsapp
- ExoPlayer - reproduce 10 archivos uno tras otro
Inicializar la devolución de video de este modo
mReceivedVideoDataCallBack = new DJICamera.CameraReceivedVideoDataCallback() { @Override public void onResult(byte[] videoBuffer, int size) { if(mCodecManager != null){ // Send the raw H264 video data to codec manager for decoding mCodecManager.sendDataToDecoder(videoBuffer, size); }else { Log.e(TAG, "mCodecManager is null"); } } }
Haga que su actividad implemente TextureView.SurfaceTextureListener y para el TextureView mVideoSurface llame a esta línea después de que se inicialice:
mVideoSurface.setSurfaceTextureListener(this);
Y luego implementar:
@Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { Log.v(TAG, "onSurfaceTextureAvailable"); DJICamera camera = FPVDemoApplication.getCameraInstance(); if (mCodecManager == null && surface != null && camera != null) { //Normal init for the surface mCodecManager = new DJICodecManager(this, surface, width, height); Log.v(TAG, "Initialized CodecManager"); } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { Log.v(TAG, "onSurfaceTextureSizeChanged"); } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { Log.v(TAG, "onSurfaceTextureDestroyed"); if (mCodecManager != null) { mCodecManager.cleanSurface(); mCodecManager = null; } return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { final Bitmap image = mVideoSurface.getBitmap(); //Do whatever you want with the bitmap image here on every frame }
¡Espero que esto ayude!
- Analizar: Recibe devolución de llamada cuando se completa el registro de GCM
- Escriba el número dentro de ayah end unicode símbolo árabe