使用ffmpeg解码H.264帧时出错

时间:2013-02-21 15:01:36

标签: ffmpeg h.264

在解码从基于H.264的SIP视频呼叫的远程端接收的H.264帧时,我遇到以下错误。理解有关错误的任何帮助。

non-existing PPS 0 referenced
decode_slice_header error
non-existing PPS 0 referenced
decode_slice_header error
no frame!

non-existing PPS 0 referenced
decode_slice_header error
non-existing PPS 0 referenced
decode_slice_header error
no frame!

3 个答案:

答案 0 :(得分:28)

这只意味着ffmpeg还没有看到一个带有SPS和PPS信息的关键帧。 SPS和PPS在解码输入帧/切片时至关重要。关键帧定期发送(即每5-10秒或更长时间);所以,如果你在关键帧到达之前加入了一个流,那么在关键帧出现之前,您将看到每个帧的此警告。

一旦关键帧从线上显示出来,ffmpeg将有足够的信息来解码该帧(以及任何后续帧直到下一个关键帧),因此这些警告将消失。

答案 1 :(得分:2)

要解码帧或切片,sliceHeader将被解码,这是指PPS或“图片参数集”。它有关于框架细节的信息,如宽度,高度等。

我猜你的数据是通过流输入通道传输的,在这种情况下,SPS和PPS会先前在流中发送。

您可能必须将相同内容连接到您的流。

答案 2 :(得分:2)

您需要添加框架 sps pps 信息。 ffmpeg需要这些信息才能进行解码。您可以在SDP文件中找到这些值。

在SDP文件中,你应该看看NAL单位,你可以看到像z0IAHukCwS1xIADbugAzf5GdyGQl,aM4xUg

这样的东西

这些基于64编码的值应该将其转换为十六进制格式。我正在使用wireshark和wireshark为你自己转换这些值。之后你有sps和pps值。

现在您必须在数据框之前添加这些Nal信息。

<00> 00 00 00 01 sps 00 00 00 01 pps 00 00 00 01数据

对于h264这些我一直用来解码的格式。