H.264 - 识别图像的访问单元
H.264 - Identify Access Units of an image
我需要解析 H.264 流以仅收集形成完整图像所需的 NAL,只有一帧。我正在阅读 H.264 标准,但它很混乱且难以阅读。我做了一些实验,但没有奏效。例如,我提取了一个 primary_pic_type == 0 只包含 slice_type == 7 (I-Slice) 的访问单元,它应该给我一个框架,但我试图从 ffmpeg 中提取,它做到了不行。但是,当我附加下一个 access_unit,仅包含 slice_type == 5 (P-Slice) 时,它起作用了。也许我需要提取 POC 信息,但我认为不需要,因为我只需要提取一帧,但我不确定。有人知道如何只获取我需要的 NAL 来形成一个完整的图像吗?
我假设您有一个 "Annex B" 风格的流,如下所示:
(AUD)(SPS)(PPS)(I-Slice)(PPS)(P-Slice)(PPS)(P-Slice) ... (AUD)(SPS)(PPS)(I-切片)
我假设你想解码单个I帧,我们希望你的I帧也是一个IDR帧。
你正处于中间位置。
继续阅读直到找到 (AUD) = 0x00 0x00 0x00 0x01 0x09。
现在将所有内容推入你的解码器,直到你在 |标记第二个 (PPS) : (AUD)(SPS)(PPS)(I-Slice) | (PPS)
刷新解码器以发出未压缩的帧。
这不能解决一般情况,但可能会解码大多数表现良好的流。
以防万一有人遇到同样的问题,我解决了。我一直走到找到 primary_pic_type == 0 的 AUD。所以我提取 AUD 和下一个(当它是一个字段时),将两个 AUD 发送到服务器,并使用 ffmpeg 解码帧以生成一个JPG 图片。
我需要解析 H.264 流以仅收集形成完整图像所需的 NAL,只有一帧。我正在阅读 H.264 标准,但它很混乱且难以阅读。我做了一些实验,但没有奏效。例如,我提取了一个 primary_pic_type == 0 只包含 slice_type == 7 (I-Slice) 的访问单元,它应该给我一个框架,但我试图从 ffmpeg 中提取,它做到了不行。但是,当我附加下一个 access_unit,仅包含 slice_type == 5 (P-Slice) 时,它起作用了。也许我需要提取 POC 信息,但我认为不需要,因为我只需要提取一帧,但我不确定。有人知道如何只获取我需要的 NAL 来形成一个完整的图像吗?
我假设您有一个 "Annex B" 风格的流,如下所示:
(AUD)(SPS)(PPS)(I-Slice)(PPS)(P-Slice)(PPS)(P-Slice) ... (AUD)(SPS)(PPS)(I-切片)
我假设你想解码单个I帧,我们希望你的I帧也是一个IDR帧。
你正处于中间位置。
继续阅读直到找到 (AUD) = 0x00 0x00 0x00 0x01 0x09。
现在将所有内容推入你的解码器,直到你在 |标记第二个 (PPS) : (AUD)(SPS)(PPS)(I-Slice) | (PPS)
刷新解码器以发出未压缩的帧。
这不能解决一般情况,但可能会解码大多数表现良好的流。
以防万一有人遇到同样的问题,我解决了。我一直走到找到 primary_pic_type == 0 的 AUD。所以我提取 AUD 和下一个(当它是一个字段时),将两个 AUD 发送到服务器,并使用 ffmpeg 解码帧以生成一个JPG 图片。