H264 profile-iop 解释

Posted

技术标签:

【中文标题】H264 profile-iop 解释【英文标题】:H264 profile-iop explained 【发布时间】:2014-06-23 00:51:05 【问题描述】:

Identify h264 profile and level from profile-level-id in sdp?

如何确定约束的实际含义? 例如,我有一个 profile-type-id: 42801e 可以转换为:

我如何将其与表 here 中定义的功能联系起来?

上述参考表明Constraint_set0_flag: 1 表示它是受约束的基线配置文件。但是如何将标志与区分 基线配置文件受约束的基线配置文件 的三个不同 NO(从表中)联系起来?

更新

无法确认上述关于识别Constrained Baseline profile 的内容是否正确。 Reference(第 306 页)该声明:

Decoders conforming to the Constrained Baseline profile at a 
specific level shall be capable of decoding all bitstreams 
in which all of the following are true:

– profile_idc is equal to 66 or constraint_set0_flag is equal to 1,
– constraint_set1_flag is equal to 1, 
– level_idc and constraint_set3_flag represent a level 
less than or equal to the specified level.

似乎只满足第一个条件,但第二个条件不成立。基线配置文件状态的参数

在特定级别符合基线配置文件的解码器应能够解码所有比特流,其中 profile_idc 等于 66 或 constraint_set0_flag 等于 1,其中 level_idc 和 constraint_set3_flag 代表一个 等级小于或等于指定等级。

他们都在场。

【问题讨论】:

【参考方案1】:

请参阅 RFC 6184 中的下表: 表 5. profile_idc 和 profile-iop 的组合 表示对应于完整的相同子配置文件 一个配置文件支持的一组编码工具。在里面 接下来,x 可以是 0 或 1,而配置文件名称 表示如下。 CB:受约束的基线配置文件, B:基线配置文件,M:主要配置文件,E:扩展配置文件, H:高配置,H10:高 10 配置,H42:高 4:2:2 配置文件,H44:高 4:4:4 预测配置文件,H10I:高 10 内部配置文件,H42I:高 4:2:2 内部配置文件,H44I:高 4:4:4 帧内配置文件和 C44I:CAVLC 4:4:4 帧内配置文件。

          Profile     profile_idc        profile-iop
                      (hexadecimal)      (binary)

          CB          42 (B)             x1xx0000
             same as: 4D (M)             1xxx0000
             same as: 58 (E)             11xx0000
          B           42 (B)             x0xx0000
             same as: 58 (E)             10xx0000
          M           4D (M)             0x0x0000
          E           58                 00xx0000
          H           64                 00000000
          H10         6E                 00000000
          H42         7A                 00000000
          H44         F4                 00000000
          H10I        6E                 00010000
          H42I        7A                 00010000
          H44I        F4                 00010000
          C44I        2C                 00010000

它是 Baseline Profile Level 3.0。

【讨论】:

【参考方案2】:

你能澄清你的问题吗?你到底有什么不明白的?您已经将 42801e 解析为受约束的基线配置文件级别 3.0。

由 constraint_set0_flag=1 标识的约束基线配置文件意味着编码流不使用此配置文件之外的任何功能(如***表中的 FMO 或 ASO),因此可以使用任何支持约束基线的解码器进行解码,主要或高配置文件。使用基线配置文件(非约束)配置文件编码的流可以使用此附加功能(或不使用但仍不指示为约束),但如果它们将在流中使用,则仅支持约束基线、主要或高配置文件的解码器不会可以解码。

更新

我错了。它是 Baseline Profile Level 3.0,因为 constraint_set1_flag=0,所以没有约束 Baseline Profile 的指示。

【讨论】:

更新了,我对鉴定有些疑惑。请发表评论。 您对 H.264 的引用不是关于如何指示约束基线配置文件,而是关于支持它的特定级别支持的解码器应该能够解码。您应该阅读“7.4.2.1.1 序列参数集数据语义”,其中说:constraint_set0_flag equal to 1 indicates that the coded video sequence obeys all constraints specified in clause A.2.1. 即是受约束的基线配置文件。此外,您的 profile_idc 等于 66 (0x42),constraint_set0_flag=1 并且未指定解码器支持级别(因此任何流值都可以),因此您满足 A.2.1 的所有条件。 A.2.1 是基线配置文件(第 283 页)。受约束的基线配置文件是A.2.1.1。在A.2.1.1 中它声明Conformance of a bitstream to the Constrained Baseline profile is indicated by profile_idc being equal to 66 with constraint_set1_flag being equal to 1. 这不是我的示例的原因。请发表评论。 对不起,我的错。你是对的,它不是受约束的基线配置文件,因为我们有 constraint_set0_flag=1(它只表示基线配置文件)和 constraint_set1_flag=0。我通过混合constraint_set0_flag和constraint_set1_flag误读了规范。但顺便说一句,几乎没有人真正使用非约束基线配置文件(但并非每个编码器都将其标记为约束)。 是的。那可能仍然是受约束的基线配置文件。我不知道为什么它也被标记为扩展配置文件兼容(constraint_set2_flag = 1),几乎没有人使用/设置。但这只会增加“序列参数集的 direct_8x8_inference_flag 等于 1”的约束。这个参数并没有真正影响任何东西,因为流不使用 B 帧。

以上是关于H264 profile-iop 解释的主要内容,如果未能解决你的问题,请参考以下文章

H264 Profile对比分析

从 sdp 中的 profile-level-id 识别 h264 配置文件和级别?

H264编码profile & level控制

H264视频编码级别说明profile level Encoder

sprop-parameter-sets 或 profile-level-id 是解码 H264 所需的 SDP 参数吗?

FFmpeg基础知识之————H264编码profile & level控制