Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android mediacodec:实时解码h264 NAL_Android_Real Time_Media_H.264_Codec - Fatal编程技术网

android mediacodec:实时解码h264 NAL

android mediacodec:实时解码h264 NAL,android,real-time,media,h.264,codec,Android,Real Time,Media,H.264,Codec,我正在尝试用android低级媒体api实时解码h264 NAL。 每个nal都包含一个完整的帧,因此我希望在使用我的nal输入并调用dequeueOutputBuffer后,它会“立即”(当然会稍微延迟)显示我的帧,但它不会。我看到了第一帧,只有在向解码器提供第二帧(此时应该呈现第二帧)后,出列才会返回第一个缓冲区。帧使用x264的zerolatency预设进行编码,因此没有b帧等 我想可能有一种方法可以将编码器设置为在获得帧后立即渲染帧,但我找不到任何关于这方面的好文档/解释。 有什么建议吗

我正在尝试用android低级媒体api实时解码h264 NAL。
每个nal都包含一个完整的帧,因此我希望在使用我的nal输入并调用
dequeueOutputBuffer
后,它会“立即”(当然会稍微延迟)显示我的帧,但它不会。我看到了第一帧,只有在向解码器提供第二帧(此时应该呈现第二帧)后,出列才会返回第一个缓冲区。帧使用x264的zerolatency预设进行编码,因此没有b帧等

我想可能有一种方法可以将编码器设置为在获得帧后立即渲染帧,但我找不到任何关于这方面的好文档/解释。
有什么建议吗?

仅仅因为帧是用零延迟设置编码的,并不意味着它们将以零延迟解码。两件不同的事情。因此,根据编解码器级别(分辨率、比特率、帧率)和配置文件,您可能需要解码多达16帧的h264视频才能得到一帧。

只有在解码前一帧后才能解码p帧。

谢谢您的回答,但根据我的测试,当解码器与下一帧一起馈送时,会显示该帧,无论两个操作之间的延迟(20秒或10秒不变),这与解码时间无关,但似乎是api的限制。我遇到了同样的问题。我目前的理论是H.264似乎缺少任何类型的“帧结束”标记。因此,解码器必须等到有下一帧的数据时才能完成解码并显示当前帧。对我来说,它只增加了大约25毫秒,但我想回到25毫秒。我有同样的问题,即使是I-Frames。但我仍然没有解决办法。您是否成功渲染“实时”?@soccertrash,您成功了吗?