正如我在上一篇文章中所描述的,我正在开发一个 Android 移动应用程序,该应用程序面向无人机摄像头视图的实时增强可视化(特别是我正在开发带有相关 SDK 的 DJI Phantom 3 Professional),使用 Wikiitude 框架AR部分。感谢Alex 的回复,我结合dji 的 Video Stream Decoding实现了我自己的Wikitude Input Plugin。
我现在有一些问题。首先,《大疆的视频流解码》demo使用FFmpeg进行视频帧解析,使用MediaCodec进行硬件解码。因此,它有助于解析视频帧并解码来自 DJI Camera 的原始视频流数据并输出 YUV 数据。您建议我“从 dji sdk 获取原始视频数据并将其传递给 Wikitude SDK”:由于 Wikitude 输入插件需要 YUV 420 格式,为了提供自定义相机,我应该符合 NV21 标准将 MediaCodec 的 YUV 数据输出传递给它,对吗?
关于这一点,我尝试从 MediaCodec 输出中检索字节缓冲区(这可以通过在 configure() 方法中将 Surface 参数设置为 null 来实现,这具有调用回调并将其传递给外部侦听器的效果),但是我'我在可视化中遇到了一些关于颜色的问题,因为编码的视频颜色不正确(蓝色和红色似乎颠倒了,相机移动时噪音太大)..(请注意,当我通过 Surface 时不是null,在 codec.releaseOutputBuffer(outIndex, true) 指令之后,MediaCodec 在其上渲染帧并正确显示视频流,但我需要将视频流传递给 Wikitude 插件,因此我必须将表面设置为 null)。
我尝试设置不同的 MediaFormat.KEY_COLOR_FORMAT 但它们都不能正常工作。我该如何解决这个问题?