嗨,我想在DJI phantom 3 pro的视频流上使用OpenCv进行一些图像处理.不幸的是,这件事是必要的自己解码视频.我知道应该使用Media Codec Android类,但我不知道该怎么做.我看到了一些从视频文件中解码视频的例子,但我无法根据我的目标修改此代码.有人可以展示一些示例或教程怎么做?感谢帮助
mReceivedVIDeoDataCallBack = new DJIReceivedVIDeoDataCallBack(){ @OverrIDe public voID onResult(byte[] vIDeoBuffer,int size){ //recvData = true; //DJI methods for deCoding //mDjiGLSurfaceVIEw.setDataToDecoder(vIDeoBuffer,size); } };
这是从无人机发送编码流的方法,我需要发送解码vIDeoBuffer然后修改为Mat for OpenCV.最佳答案像这样初始化视频回调
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"); } } }
让您的活动实现TextureVIEw.SurfaceTextureListener
并且对于TextureVIEw mVIDeoSurface在初始化之后调用此行:
mVIDeoSurface.setSurfaceTextureListener(this);
然后实施:
@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,"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 }
希望这可以帮助! 总结
以上是内存溢出为你收集整理的从DJI无人机解码Android上的视频流全部内容,希望文章能够帮你解决从DJI无人机解码Android上的视频流所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)