繁体   English   中英

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

[英]Android mediacodec decoding h264 stream in real time with about 1 second latency

我试图通过Galaxy S3中的madiacodec从WIFI摄像头解码h264直播流,视频播放正常,但似乎mediacode低电平总是缓冲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单元,它取决于编码器的实现。 第二件事,我在使用Qualcomm芯片组的设备时遇到了类似的问题。 我没有使用MediaCodec,而是使用IOMX接口,但基本上我得到了相同的延迟。 我想知道你是否在logcat中有关于如何分配mnay输入缓冲区的打印件。 这些与问题更相关,而不是输出端口上的缓冲区。

暂无
暂无

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

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