SMPTE ST 2110 概论(一)

时间:2024-04-04 18:20:56

前言

这是一份我在实习期间制作的,关于SMPTE ST 2110的简单介绍。
这篇文章主要以梳理总结 SMPTE ST 2110 的概念为主,关于具体的内容,比如IP数据报的格式、RTP时间戳的具体代码内容等等,大家可以查阅 SMPTE ST 2110标准的原文和其他的资料。
后续的内容会在几天内持续更新,文章如果存在问题欢迎大家指正。

ST 2110与ST 2022-6

ST 2110 和 ST 2022-6 都是SDI over IP技术的一种。
ST 2022-6 相当于 ST 2110 的前代技术,2110 弥补了 2022-6 的一些不足。
两者最主要的差别在于,ST 2022-6 就是单纯地把SDI信号封装进了IP包里,视频部分、音频部分、辅助数据部分都在同一个包里;而 ST 2110 把SDI信号中的视频、音频、辅助数据三大块给分开了,分别封装进不同的IP包里传输。

这就导致了两者在系统设计上的思路存在根本性的不同。一个血统纯正的 2022-6 系统中,干路上跑的基本都是经过某种方式压缩的(如TICO方式),装着SDI信号的IP流,当某台设备需要单独处理 视频 / 音频 / 辅助数据 的时候,需要对流进行解嵌,然后处理完了再加嵌回去。

而一个血统纯正的 2110 系统中, 干路上跑的是三种流。视频、音频、辅助数据流分开传输,就免去了刚才提的 加嵌 / 解嵌 这种麻烦事。而且这么传输不光提升了系统的可扩展性,系统的带宽限制也更富有弹性。但随之而来的是对同步的更高要求:比起2022-6的单一流,同步三种不同的流要难得多,所以 2110 采用了 PTP协议与RTP时间戳等方式同步,这也是 2110-10的内容。

ST 2110 协议原文主要讲的就是这三种不同的流具体该怎么传输的问题。

ST 2110-10:基本结构与时序

ST 2110-10 部分主要讲的是对IP包的一些具体格式要求,其中最重要的内容就是 PTP协议 、 RTP时间戳 、 SDP 协议三大块。

先说PTP,这里说的PTP不是图片传输协议,全称是Precision Time Protocol(精确时间控制协议)。ST 2110 中这部分内容取自 ST 2059-2。协议的主要内容是通过网络,向网上的每个设备发送一个公用参考时钟,设备内部还含有一个内部设备时钟,并且每种信号类型又关联一个媒体时钟

首先选择一个设备的时钟作为公用参考时钟,再让其他设备的时钟同步于该时钟,这就是PTP协议中主钟(Master)和从钟(Slave)的概念。接下来把每种单独的媒体类型关联一个媒体时钟,视频流有视频流的时钟,音频流有音频流的时钟。需要注意的是标准规定媒体时钟相对于主钟的偏移量(offset)必须为零。将以上提到的所有时钟都关联起来,我们就得到了一套完整的时间轴,方便接下来的处理。此外该方式还支持IP流数据报的无缝保护静净切换。

接着是RTP时间戳,如果说PTP是面向设备的“时间轴”,RTP时间戳可以理解成面向数据本身的“时间点”。发送端使用RTP时间戳标记每个视频、音频和辅助数据包,用来表示采样时间。其中:

–对于视频,每一帧内所有数据包的RTP时间戳相同
–对于实时信号源,RTP时间戳应表示图像捕获的时间
–对于SDI转换器,RTP时间戳是视频帧对齐点的时间,由ST 2059-1定义。

如此,一旦信号通过网络,就根据RTP时间戳重新调整信号的定时关系。采用这种方法,广电系统上任意一点都有了准确同步多种媒体类型的能力。

接着说 SDP (Session Description Protocol),会话描述协议。每个流里都有一组元数据,告诉接收端如何解释收到的内容,这就是SDP数据。接下来我们看看SDP究竟长什么样:
SMPTE ST 2110 概论(一)
可以看到这个包里有很多我们的老朋友,比如中间写的 sampling=4:2:2,colorimetry=BT709这种。前几行v、o这种主要是一些判断位。传输到接收端的时候,SDP把关于这个流的所有信息跟接收端磨叨一遍,让接收端知道到底收了什么东西进来,就像是个出门买菜的老太太,拎着菜筐回家的时候要跟全家人念叨一遍菜筐里所有的菜。在 ST 2110 系统中,所有信息描述都依赖着SDP,如果SDP丢包了,接收端无法解释流的内容,会导致系统出问题。

ST 2110-20:未压缩的视频流

顾名思义,ST 2110-20 传输的是三种流中的视频流。格式如下:
SMPTE ST 2110 概论(一)
中间的pg代表pixel group(像素组)。像素组的大小取决于采样格式,大小必须是8的整数倍,并且同一次抽样获得的像素必须包含在同一个像素组里。

我们举个极端的栗子,比如现在有一帧图像中的一个像素,采样格式为YCbCr 4:2:2,采样深度为10,这个像素的数据就长这样:
SMPTE ST 2110 概论(一)
这种传输的方式有一些特性:
-仅发送“有效”图像区域–不消隐
-支持最大32k x 32k的图像尺寸
-支持Y’Cb’Cr’,RGB,XYZ,I’Ct’Cp’
-支持4:2:2 / 10、4:2:2 / 12、4:4:4/16等
-支持HDR(PQ和HLG)
-消除了通常用于嵌入式音频信号的HANC(水平辅助)空间以及消除经常用于传输其他相关信息(例如时间码,格式说明,广告)的VANC(垂直辅助)空间。

当多个像素拼成一个像素组,数据大概就长这样:
SMPTE ST 2110 概论(一)
由此可见,视频流传输得非常紧密,去掉了辅助数据之后,释放了大量带宽用于传输。对于一个50p的4K图像,甚至可以释放30.3%的带宽!

但实际上 ST 2110-20 这种传输方式是存在隐患的。这里就不得不提一下广电系统的buffer模型。实际上,整个系统是公用一个或数个数量有限的缓存池,由于传输优先级顺序不同,ST 2110-20将像素与辅助数据分开传送,辅助数据传输优先级低于像素,当多个设备同时发起传输时,ANC数据会累积在共享且有限的缓冲区中,这在将多个视频源锁定到一个公共时钟的系统中经常发生。

因此,为防止网络问题并简化信号接收端的设计,有必要对数据包突发的大小和持续时间设置一些限制。这些限制在网络术语中通常称为流量整形,即为 ST 2110-21。

后续

这段博客还未结束,博主下次会继续更新 ST 2110-21、ST 2110-30 等内容。
博主目前还是个刚入行的小白,如果文章存在问题欢迎大家指正。我的邮箱是[email protected],欢迎大家邮件讨论,相互分享知识和经验!

*主要参考资料:
[1]: https://www.smpte.org/
[2]: What is SMPTE ST2110 and Why Does It Matter? - John Mailhot
[3]: SMPTE ST 2110 in 60 Minutes - Wes Simpson