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