首页 > 解决方案 > 如何将相机的原始数据直接提供给android NDK中的编码器

问题描述

我正在开发本机应用程序(没有 Java API 调用),我需要在该应用程序上编码相机的实时提要并转储它。并避免对编码器的输入缓冲区进行任何 memcpy。以前我可以使用 AImage 读取器从相机捕获 yuv 数据并保存它,也可以通过将保存的 yuv 传递到编码器的输入缓冲区来对其进行编码,但现在想避免保存然后将其传递给编码器。有什么方法可以仅使用 android ndk 中可用的 AMediacodec API 来实现这一点。

标签: androidandroid-ndkandroid-mediacodec

解决方案


无法保证内置编码器会接受您从相机接收到的其中一种图像格式,但如果可以,则无需“保存”帧。棘手的部分是相机和编码器都是异步工作的,因此您从 AImageReader 接收到的帧必须排队等待 AMediaCodec 使用。如果您不想将这些线程 memcpy 到队列中,当没有空闲缓冲区时,您的相机可能会绊倒,

但是通过AMediaCodec_createInputSurface()将编码器连接到表面可能更容易和更有效,而不是依赖缓冲区。


推荐阅读