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

Android mediacodec实时解码h264流,延迟约1秒,android,h.264,rtsp,rtp,android-mediacodec,Android,H.264,Rtsp,Rtp,Android Mediacodec,我正在尝试解码Galaxy S3中madiacodec的WIFI摄像头的h264实时流,视频播放正常,但似乎mediacode低电平总是缓冲1秒的视频帧,新帧只能由新的传入NAL单元解码。这会导致大约1秒的延迟 当MediaCodec.createDecoderByType(“视频/avc”)被调用,我可以从logcat中看到分配了22个缓冲区 01-04 15:39:02.799: I/ExtendedCodec(13374): Smoothstreaming Enabled 01-04 15

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

MediaCodec.createDecoderByType(“视频/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接口,但基本上我得到了相同的延迟。我想知道您是否在logcat中有打印说明mnay输入缓冲区是如何分配的。这些与问题更相关,而不是输出端口上的缓冲区。

我非常确定编码器实现为一帧设置了一个NAL,在我的情况下,我认为分配了16个缓冲区,这是由低级驱动程序完成的。它实际上与我的1秒延迟相匹配,因为我的帧速率是15fps。奇怪的是,我的软件解码器在延迟方面有更好的性能,无论如何,我都实现了以防万一。我指的是logcat打印,上面说“从本机窗口分配22个缓冲区”。这似乎是输出缓冲区,我想知道它是否打印输入端口的编号