我正在使用Android 4.3 的新 MediaCodec 和 MediaMuxer API 实现有关 previewTexture 录制的Android 测试用例之一。
通过将recordingHint设置为相机参数,我设法以大约30fps的帧速率记录预览流。
但是,我遇到了延迟/滞后问题,并不知道如何解决。当使用相当标准的质量设置(1280x720,比特率约为 8.000.000)录制相机预览时,预览和编码材料偶尔会出现延迟。更具体地说:这种延迟大约每 2-3 秒发生一次,大约需要 300-600 毫秒。
通过跟踪延迟,我发现延迟来自“drainEncoder”方法中的以下代码行:
mMuxer.writeSampleData(mTrackIndex, encodedData, mBufferInfo);
如果编码器有可用于复用的数据,则循环调用此行。目前我不录制音频,所以只有 h264 流由 MediaMuxer 转换为 mp4 格式。
我不知道这是否与该延迟有关,但它总是在循环需要两次迭代以使编码器的所有可用数据出列时发生(更具体地说,它总是发生在这两次迭代中的第一次) . 在大多数情况下,一次迭代足以使编码器出队。
由于在线上没有太多关于这些新 API 的信息,因此非常感谢您的帮助!