繁体   English   中英

Muxing相机使用MediaMuxer预览h264编码的基本流

[英]Muxing camera preview h264 encoded elementary stream with MediaMuxer

我正在使用Android 4.3的新MediaCodec和MediaMuxer API开发一个关于previewTexture录制的Android测试用例的实现。

通过将recordingHint设置为摄像机参数,我设法以大约30fps的帧速率记录预览流。

但是,我遇到了延迟/滞后问题,并不知道如何解决这个问题。 当使用相当标准的质量设置(1280x720,比特率为~8.000.000)录制相机预览时,预览和编码材料会偶尔出现滞后。 更具体地说:这种滞后大约每2-3秒发生一次,大约需要300-600毫秒。

通过跟踪延迟,我能够找出延迟来自“drainEncoder”方法中的以下代码行:

mMuxer.writeSampleData(mTrackIndex, encodedData, mBufferInfo);

如果编码器具有可用于多路复用的数据,则在循环中调用该行。 目前我不录制音频,因此MediaMuxer只将h264流转换为mp4格式。

我不知道这是否与延迟有关,但它总是发生在循环需要两次迭代以使编码器的所有可用数据出列时(更具体地说,它始终在这两次迭代的第一次出现) 。 在大多数情况下,一次迭代足以使编码器出列。

由于网上关于这些新API的信息不多,所以非常感谢任何帮助!

我怀疑你被MediaMuxer磁盘写入了。 最好的方法是在录制过程中运行systrace,看看暂停期间实际发生了什么。 (systrace docs解释bigflake示例 - 截至目前,只有后者更新为Android 4.3)

如果是这种情况,您可以通过在单独的线程上运行MediaMuxer实例来缓解问题,通过同步队列将H.264数据提供给它。

这些停顿是否每5秒钟定期发生一次? CameraToMpegTest示例将编码器配置为每5秒输出一个I帧(预期帧速率为30fps),这将导致输出一个全尺寸的帧而不是微小的增量。

正如@fadden所指出的,这是一个磁盘写入问题,主要发生在写入闪存速度较低的设备上,或者如果您尝试写入SD卡。

我已经写了关于如何缓冲MediaMuxer的写在一个类似的问题的解决方案在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM