gpt4 book ai didi

android - 使用 MediaMuxer 混合相机预览 h264 编码的基本流

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:11:30 25 4
gpt4 key购买 nike

我正在研究 Android Test Cases 之一的实现关于使用 Android 4.3 的新 MediaCodec 和 MediaMuxer API 录制预览纹理。

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

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

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

mMuxer.writeSampleData(mTrackIndex, encodedData, mBufferInfo);

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

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

由于网上没有太多关于这些新 API 的信息,非常感谢任何帮助!

最佳答案

我怀疑您被 MediaMuxer 磁盘写入所困扰。确定的最佳方法是在录制期间运行 systrace 并查看暂停期间实际发生的情况。 (systrace docsexplanationbigflake example——截至目前,只有后者针对 Android 4.3 进行了更新)

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

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

关于android - 使用 MediaMuxer 混合相机预览 h264 编码的基本流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19361770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com