【发布时间】:2017-06-28 15:21:58
【问题描述】:
正如我在上一篇文章中所描述的,我正在开发一个 Android 移动应用程序,该应用程序面向无人机相机视图的实时增强可视化(特别是我正在开发具有相关 SDK 的 DJI Phantom 3 Professional),使用AR 部分的 Wikiitude 框架。感谢Alex's response,我结合dji's 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 不为空,在指令 codec.releaseOutputBuffer(outIndex, true) 之后,MediaCodec 会在其上渲染帧并正确显示视频流,但我需要将视频流传递给 Wikitude 插件,因此我必须将表面设置为 null)。
我尝试设置不同的 MediaFormat.KEY_COLOR_FORMAT 但它们都不能正常工作。我该如何解决这个问题?
【问题讨论】:
标签: android android-mediacodec yuv wikitude dji-sdk