gpt4 book ai didi

Android mediacodec 实时解码 h264 流,延迟约 1 秒

转载 作者:太空狗 更新时间:2023-10-29 15:07:05 30 4
gpt4 key购买 nike

我正在尝试通过 Galaxy S3 中的 madiacodec 解码来自 WIFI 摄像头的 h264 实时流,视频播放正常,但似乎 mediacode low level 总是缓冲 1 秒的视频帧,新帧只能通过新的解码器解码传入的 NAL 单元。这会导致大约 1 秒的延迟。

MediaCodec.createDecoderByType("video/avc"); 被调用时,我可以从 logcat 中看到分配了 22 个缓冲区,

01-04 15:39:02.799: I/ExtendedCodec(13374): Smoothstreaming Enabled
01-04 15:39:02.809: I/ACodec(13374): [OMX.qcom.video.decoder.avc] Now Loaded->Idle
01-04 15:39:02.809: I/ACodec(13374): [OMX.qcom.video.decoder.avc] Allocating 22 buffers from a native window of size 245760 on output port
01-04 15:39:02.889: D/DecodeActivity(13374): Decoder started at --- 1388867942894
01-04 15:39:02.889: I/ACodec(13374): [OMX.qcom.video.decoder.avc] Now Idle->Executing
01-04 15:39:03.019: I/ACodec(13374): [OMX.qcom.video.decoder.avc] Now Executing

我可以看到大约需要将 16 个 NAL 单元插入解码器才能输出任何帧。

我的问题是为什么这个视频缓冲?如果这是问题所在,我可以尝试分配更少的缓冲区。无论如何我可以减少这个视频缓冲吗?

最佳答案

首先,你确定每个NAL单元对应一帧吗? H.264 没有规定每帧有多少个 NAL 单元,它取决于编码器的实现。第二件事,我在使用带有高通芯片组的设备时遇到了类似的问题。我没有使用 MediaCodec,而是使用 IOMX 接口(interface),但基本上我得到了相同的延迟。我想知道您是否在 logcat 中打印了说明如何分配 mnay 输入缓冲区的信息。这些将与问题更相关,而不是输出端口上的缓冲区。

关于Android mediacodec 实时解码 h264 流,延迟约 1 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20926581/

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