H.264 - 识别图像的访问单位

时间:2017-10-27 15:06:24

标签: ffmpeg h.264

我需要解析H.264流以仅收集形成仅一帧的完整图像所需的NAL。我正在阅读H.264标准,但它令人困惑且难以阅读。我做了一些实验,但没有奏效。例如,我提取了一个访问单元,其中primary_pic_type == 0只包含slice_type == 7(I-Slice),它应该给我一个框架,但我试图从ffmpeg中提取,它不起作用。但是,当我追加下一个access_unit时,只包含slice_type == 5(P-Slice)就可以了。也许我需要提取POC信息,但我想不是,因为我只需要提取一帧,但我不确定。有人知道如何只获得NAL我需要形成一个完整的图像吗?

2 个答案:

答案 0 :(得分:1)

我假设您有一个“附件B”样式流,如下所示:

(AUD)(SPS)(PPS)(I-Slice)(PPS)(P-Slice)(PPS)(P-Slice)...(AUD)(SPS)(PPS)(I-Slice)

我假设您要解码单个I帧,我们希望您的I帧也是IDR帧。

你在溪流中间的某个地方。

继续阅读,直到找到(AUD)= 0x00 0x00 0x00 0x01 0x09。

现在将所有内容都推入解码器,直到你在|前面标记第二个(PPS):( AUD)(SPS)(PPS)(I-Slice)| (PPS)

刷新解码器以发出未压缩的帧。

这并不能解决一般情况,但可能会解码性能最好的流。

答案 1 :(得分:1)

万一有人遇到同样的问题,我解决了。直到我找到一个AUD的primary_pic_type == 0.所以我提取AUD和下一个(当它是一个字段时),将两个AUD发送到服务器,并使用ffmpeg解码帧以生成JPG图像。