3.6.2. Interpreting imageattr Attributes (解释 imageattr 属性)
3.6.2. Interpreting imageattr Attributes (解释 imageattr 属性)
[RFC6236] 将 "a=imageattr" 定义为建议性字段。这意味着它不会绝对约束发送方可以使用的视频格式, 但会给出首选值的指示。
本规范规定了更具体的行为。当产生特定分辨率视频 ("轨道分辨率") 的 MediaStreamTrack 附加到 RtpSender 时, RtpSender 以相同或更低的分辨率 ("编码器分辨率") 对轨道视频进行编码, 并且应用了引用发送方并包含有效 "a=imageattr recv" 属性的远程描述, 则必须遵循以下规则以确保发送方不会传输超出属性中指定的大小标准的分辨率。只要属性保留在远程描述中, 就必须遵循这些规则, 包括轨道更改其分辨率或被替换为不同轨道的情况。
根据 RtpSender 的配置方式, 它可能以特定分辨率产生单个编码, 或者如果已协商联播 (第 3.7 节), 则产生多个编码, 每个编码都具有其自己的特定分辨率。此外, 根据配置, 每个编码可能具有在需要时降低分辨率的灵活性, 或者可能锁定到特定的输出分辨率。
对于 RtpSender 产生的每个编码, 处理远程描述的相应 "m=" 段中的 "a=imageattr recv" 属性集以确定应该传输什么。仅考虑引用为编码选择的媒体格式的属性; 从具有最高 "q=" 值的属性开始单独评估每个此类属性。如果多个属性具有相同的 "q=" 值, 则按它们在其包含的 "m=" 段中出现的顺序进行评估。请注意, 虽然 JSEP 端点每个媒体格式最多包含一个 "a=imageattr recv" 属性, 但 JSEP 端点可能会从非 JSEP 端点接收包含多个此类属性的 "m=" 段的会话描述。
对于每个 "a=imageattr recv" 属性, 应用以下规则。如果此处理成功, 则相应地传输编码, 并且不再考虑该编码的其他属性。否则, 按上述顺序评估下一个属性。如果提供的属性都无法成功处理, 则绝对不能传输编码, 并且应该向应用程序引发错误。
-
将属性中的限制与编码器分辨率进行比较。仅考虑下面提到的特定限制; 必须忽略任何其他值, 例如图像宽高比。在考虑产生旋转视频的 MediaStreamTrack 时, 必须使用未旋转的分辨率进行检查。无论接收方是否支持执行接收侧旋转 (例如, 通过视频方向协调 (CVO) [TS26.114]), 都需要这样做, 因为它显著简化了匹配逻辑。
-
如果属性包含设置为 "1.0" 以外的值的 "sar=" (样本宽高比) 值, 表示接收方希望接收非方形像素, 则无法满足此要求, 并且绝对不能使用该属性。
-
如果编码器分辨率超过属性允许的最大大小, 并且允许编码器调整其分辨率, 则编码器应该应用缩小以满足限制。缩小绝对不能改变编码的图像宽高比, 忽略由于舍入导致的任何微小差异。例如, 如果编码器分辨率为 1280x720 并且属性指定最大值为 640x480, 则预期的输出分辨率将为 640x360。如果无法应用缩小, 则绝对不能使用该属性。
-
如果编码器分辨率小于属性允许的最小大小, 则绝对不能使用该属性; 编码器绝对不能应用放大。JSEP 实现应该通过允许接收任意小的分辨率来避免这种情况, 也许可以通过回退到软件解码器。
-
如果编码器分辨率在最大和最小大小之内, 则不需要采取任何行动。