学习SMPTE标准 2110-20之——RTP视频数据包格式
本文源于组织的SMPTE ST 2110-20:2017技术标准里的内容,翻译整理后,供需要的朋友们学习和分享,如有问题请指正。
文档里第6节介绍了视频RTP数据包格式:
6 Video RTP
6.1 and 有效载荷的设计和数据包格式
6.2 RTP : Row Data 有效载荷: 采样行数据分段
6.3 on the RTP 封包方式的不同
如上图,对RTP视频数据包的技术,我们可以去了解如下3个部分:
(1)RTP 包头的内容:
(2)RTP 有效荷载的包头内容:
例如下图的和值变化:
(3)图像数据:RTP的有效载荷,像素组
示例:如4:2:2 10bit采样, 1个包含2个像素(),共40bit,占用5个字节Byte。
第6节的最后,视频信号映射到RTP数据进行封包的时候, 也有两种模式:
在了解了RTP视频数据包的所有结构以后,我们可以进行如下大致推算:
•1个UDP数据包有多少个有效数据字节:
UDP =1460-8(UDP)-12(RTP)-14( )=
•1个UDP数据包能发多少个视频像素:(4:2:2 10bit采样)
/ =285.2≈
x 2 (/) = 570
•1帧高清视频画面需要多少个UDP数据包发送:HD 1920 x 1080
1920 x 1080 lines = /frame
/ 570 (/) = 3637.89 ≈ 3638
•1个网络传输的IP数据包大小是多少字节:
(IP (20), + VLAN (22)+ and gap (20))+1460(UDP)+ 20(IP ) +22(VLAN)+ 20 = 1521 bytes/pkt
•1个2110-20的视频流速率大小是多少:高清信号
3638 /frame x 50 x 1521 x 8 = 2.213 Gbit/s
-------------------------------------------------------------------------
以下为翻译内容,仅供参考:
6 无压缩有效视频流的RTP包格式
6.1有效载荷的设计和数据包格式 and
6.1.1概述
有效的视频数据应使用RTP(IETF RFC 3550)进行传输,但要遵守以下约束和有效载荷定义:
6.1.2 RTP 包头
如图1,在IETF RFC 3550中定义的RTP包头的数据位字段及其顺序,具体含义如下:
有效载荷类型字段应引用SMPTE ST 2110-10第6.2节“实时传输协议(RTP)”中指定的动态分配的有效载荷类型。即这段话:
” 所有RTP流均应使用在96到127范围内选择的动态有效载荷类型,并按照IETF RFC 4566第6节的规定发出信号,除非在指定该IETF标准的RETF流中存在固定的有效载荷类型名称“
时间戳字段应包含SMPTE ST 2110-10中规定的RTP时间戳。
SSRC字段应符合IETF RFC 3550中的规定。
对于逐行扫描视频,标记位为1的时表示该RTP数据包是视频帧数据的最后一个数据包。
对于隔行扫描视频,标记位为1的时表示该RTP数据包是视频场数据的最后一个数据包。
对于所有其他数据包,标志位为0。
RTP包头的序列号字段应包含扩展的32位RTP序号的16个低位。
当扩展位为1时,在SSRC字段之后会跟着一个RTP的扩展包头。
6.1.3 媒体时钟(Media Clock)、RTP时钟(RTP Clock)、以及RTP时间戳(RTP )
媒体时钟和RTP时钟应符合SMPTE ST 2110-10的规定。符合该标准的媒体时钟和RTP时钟的速率应为90 kHz。
属于同一帧的所有RTP数据包应具有相同的RTP时间戳值。
属于同一场的所有RTP数据包也具有相同的RTP时间戳值。
6.1.4 RTP有效荷载的包头—扩展序列号和采样行数据包头
如下图所示,一个RTP有效荷载的包头包含两个采样行数据包头:
RTP有效载荷包头应包括扩展序列号,后面跟一个,两个或三个采样行数据(SRD: Row Data)包头。
每个SRD采样行数据的包头组成如下:
采样行长度(SRD ):16比特
SRD长度字段应指示从指示的样本行中包含数据的字节数,并且应为字节长度的倍数。除非存在一个完全正确的SRD包头,否则应禁止将SRD长度设置为零,在这种情况下,SRD长度为零表示没有采样行数据跟随此包头。
场标识(Field (F): 1比特
在第一个场的信号,字段标识位应设置为0,第二个场的信号,字段标识位应设置为1。
对于逐行扫描数据,除逐行分段帧(PsF)数据外,字段标识位应设置为0。
样本行的行号(SRD Row ): 15 比特
SRD行号应和图像的行号对应,行号从图像顶部的0开始。在隔行扫描的情况下
数值从图像顶部的0开始。对于逐行分段帧(PsF)数据,采样行编号应从每个分段顶部的0开始。SRD行号只能在场或帧内增加(样本行数据从上到下依次发送)。
连续位 (C): 1 bit
如果在RTP有效载荷包头中当前的行数据包头后面有一个附加的采样行数据包头,则连续位应设置为1,表示该信号RTP数据包正在承载一个以上采样行的数据。否则连续位比特应设置为0。
采样行偏移(SRD ): 15 bits
SRD偏移值表示在整行的采样数据段中,与第一个采样数据的位置偏移。
注:如果要传输4:2:2格式的数据,则SRD偏移是全带宽样本矩阵中全带宽样本的样本偏移。对于4:4:4格式的采样,它是每个分量的样本偏移量,每个分量在其各自的全带宽矩阵内。
6.1.5荷载数据的其他限制
如果有必要对一行数据进行分段,则连续的RTP数据包可能来自同一采样行(他们具有递增的RTP序列号,但具有相同的时间戳)。
对于4:2:0采样的逐行视频,SRD行号设置为成组的采样行对中的第一个采样行。在SRD行号字段中,仅应发送其他所有样本行的信号。
SRD偏移仅应在同一采样行内增加(样本在行中从左到右依次发送)。
隔行扫描图像的场按时间顺序传输,第一场图像先发送。
对于隔行扫描系统和逐行分段帧(PsF)系统,如果高度为偶数,则行在场(或段)之间平均分配,如果高度为奇数,则第一场(或段)应比第二场多一行。
在逐行扫描中,单个RTP数据包不得包含来自多个画面帧的采样数据。
在隔行扫描中,单个RTP数据包不得包含来自多个画面场的采样数据。
在逐行分段帧(PsF)扫描中,单个RTP数据包不得包含来自多个分段的数据。
6.2 RTP有效载荷: 采样行数据片段
6.2.1 概述
采样行数据包头后面应跟随采样行数据片段data,在特殊情况下,会出现一个采样行数据中指示SRD长度为零。RTP有效载荷中的样本行数据段的顺序应与它们之前的样本行数据标头的顺序相对应。对于每个数据的包头,有效载荷中应有一个样本行数据段。
鉴于第6.3.2节和6.3.3节中所述的要求,在图像的场或帧末尾的RTP数据包,可能会在最后一个样本行数据段之后填充字节。
RTP数据包不得包含3个以上的采样行数据包头。
每个采样行数据片段可以包括来一整行采样数据或只是其中的一部分数据。在所有情况下,每个采样行数据片段的长度应为8位字节中像素组大小的整数倍。每个RTP数据包的UDP大小应小于SMPTE -10中定义的现行UDP大小限制(标准或扩展)。
一个采样行的数据长度可能无法被组大小均匀地整除,从而导致本行的最后个数据会被数据填充。在这种情况下,发送方应使用0填充最终的其余采样位置,而接收方应忽略填充数据。采样行数据包头中的“长度”值需包括此填充数据。
6.2.2像素组大小及组成
像素组是以8位字节为单位的最小采样组。每个应该由整数个字节数据组组成。不得跨数据包分段,也不应代表多个行的图像像素的采样。
中代表哪些采样的定义应由SDP参数确定(在第7节中定义)。中采样的数量,位置和顺序由第7.2节中定义的采样元数据确定。如果使用颜色二次采样,则样本只能在中共享。
下表中的“覆盖范围”是指活动图像的连续像素个数。可以在场或帧内的相邻行。
下表中“ 采样顺序 order”列中,像素组内的所有像素均会平均分配。如果像素组中存在多个相同成分的样本,则使用数字索引(C0’B, C1’B, C2’B等)来区分,位于图像最左侧的编号数字最小。
以下各节定义了的大小和构造。
6.2.3 构造---4:4:4采样
当使用4:4:4采样时,像素组的构建应如表1所述。
6.2.4 构造---4:2:2采样
当使用4:2:2采样系统时,的构建应如表2所述
图4显示了4:2:2信号的亮度和色度的样本编号:
图5显示了4:2:2 10bit的采样,一个像素组包含2个像素,包含4个10bit采样数据,刚好5个字节。
6.2.5 构造---4:2:0采样
4:2:0采样仅应用于逐行扫描图像。
当使用4:2:0采样系统时,的构建应如表3所述。使用图6中所示的编号。
下图显示了4:2:0 采样10bit的Y’C’BC’R格式的15个字节像素组的示例:一个像素组包含8个像素,包含12个10bit采样数据,刚好15个字节。
注:4:2:0采样系统中亮度和色度之间的实际关系如下图:
6.2.6 构造–Key键信号
Key键信号(也称为Alpha信号)使用组件“Key”表示。具体参数包括如depth量化深度,信号宽高width,,以及帧率来描述。
键信号应符合标准SMPTE RP 157中所定义。键信号的像素组的构造应如表4所示:
6.3 RTP有效负载定义上的其他限制
6.3.1封包方式
上面的规定允许用于将活动视频信号映射到RTP数据报中的多种做法。为了促进互操作性,在第6.3.2节和6.3.3节中通过封装方式的规范记录了将活动视频样本映射到RTP的更多限制。
符合本标准的发送端应按照这些封装方式进行操作,并应通过使用“媒体类型Media Type”参数描述方式。符合本标准的接收端应能够支持所有的封装方式。
6.3.2常规封包模式(GPM)
此封装方式适用于本标准的通常应用。
当以这种模式操作时,可以使用行“连续位”(“ C”)以将来自一个以上样本行的采样数据打包到当前数据包中,以避免使数据包变得太小。除非是场或帧的末尾,否则应避免少于1000个字节的IP数据包。发送方应努力使RTP数据包接近SMPTE ST 2110-10中定义的现行UDP大小限制(标准或扩展)。字段或帧的最后一个数据包可以填充一个或多个零值的八位字节数据。
符合此封包模式的发送端应描述其PM媒体类型参数的值为。
6.3.3块封包模式(BPM)
此模式是第6.3.2节中定义的通用封包模式(GPM)的受约束子集,因此,采样行数据段的长度之和应为180个字节的倍数。必须使用与当前最大UDP大小限制一致的180的最大倍数。在这种模式下工作时,使用行“连续位”(“ C”)将一个以上样本行中的样本打包到当前数据包中,以便每个数据包保持180个字节块。根据ST 2110-10第5节,并考虑12个字节(最小)RTP头,最大可用有效负载空间为1428个字节。因此,应使用每个包7 x 180=1260个字节的有效载荷。字段或帧的最后一个数据包不受上述180个八位位组倍数规则的限制,可以被截断或填充零,从而得到与之前的数据包相同大小的数据包。信息性附录A包含一个表块大小表,该表与上面的7x180个字节有效载荷大小一致。
在块打包模式下不得使用SMPTE ST 2110-10中定义的扩展UDP大小限制。
符合此封包模式的发送端应描述其PM媒体类型参数的值为。
注:官方SMPTE的2110标准英文文档,目前可以免费下载: