如何从DJI相机Phantom 3 Professional drone中检索NV21数据

正如我在之前的文章中所描述的那样,我正在开发面向无人机相机视图的实时增强可视化的Android移动应用程序(具体而言,我正在使用相对SDK开发DJI Phantom 3 Professional),使用Wikitude框架AR部分。 感谢Alex的回应,我将自己的Wikitude输入插件与dji的视频流解码相结合。

我现在有一些问题。 首先,“DJI的视频流解码”演示使用FFmpeg进行视频帧解析,使用MediaCodec进行硬件解码。 因此,它有助于解析视频帧并解码DJI Camera的原始视频流数据并输出YUV数据。 您建议我“从dji sdk获取原始视频数据并将其传递到Wikitude SDK”:由于Wikitude输入插件需要YUV 420格式,为了提供自定义相机,我们应该按照NV21标准进行安排传递给它MediaCodec的YUV数据输出,对吧?

关于这一点,我尝试从MediaCodec输出中检索字节缓冲区(通过将Surface参数设置为null,将其设置为configure()方法,可以调用回调并将其传递给外部侦听器),但是我因为编码的视频颜色不正确(蓝色和红色似乎颠倒过来,并且相机移动时噪音太大)(请注意,当我通过Surface时没有null,在指令codec.releaseOutputBuffer(outIndex,true)之后,MediaCodec渲染帧并正确显示视频流,但我需要将视频流传递给Wikitude插件,因此我必须将曲面设置为空)。

我试图设置不同的MediaFormat.KEY_COLOR_FORMAT,但没有一个能正常工作。 我该如何解决这个问题?


使用MediaCodec解码为字节缓冲区时,无法确定缓冲区使用的是什么颜色格式; 解码器决定,你必须处理它。 每个解码器可以使用不同的格式; 其中一些可以是像COLOR_FormatYUV420Planar (对应于I420)或COLOR_FormatYUV420SemiPlanar (对应于NV12 - 不是NV21)的标准格式,而其他可以使用完全专有格式。

有关格式的示例,请参阅https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java#401。解码器可以返回支持,以及https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java#963 for表明解码器返回私有格式的参考文献。

你可以看看例如http://git.videolan.org/?p=vlc.git;a=blob;f=modules/codec/omxil/qcom.c;h=301e9150ae66075ca264e83566504802ed57578c;hb=bdc690e9c0e2516c00a6d3733a77a87a25d9b6e3举一个例子如何解释一种通用的专有颜色格式。

链接地址: http://www.djcxy.com/p/92547.html

上一篇: how to retrieve NV21 data from DJI camera Phantom 3 Professional drone

下一篇: Why is video made with MediaCodec garbled for Samsung Galaxy S7?