searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

RTP协议在IPTV系统中的应用

2024-10-10 02:06:59
19
0

一、IPTV系统中的CDN流媒体系统要求

       IPTV业务经过将近20年的发展,用户已经超过4亿,其已经和传统有线电视、OTT互联网视频等深度融合,互相渗透,互相影响。IPTV本身作为IP网络基础之上的IP专网视频业务,为了更好的兼容传统有线电视业务,在IP网络之上采用了TS流格式的封装媒体流。如下图所示:

       业务音视频媒体流,包括MPEG4或者H264、H.265等编码格式数据,首先经过TS系统流的封装之后,再使用IP网络进行传输。从上图可以看出,TS 流本身也可以直接经过UDP 或者TCP 的方式传输,无需再次进行RTP封装,而且TS本身也有音视频合成,以及同步机制等。但是TS流本身是为广播传输系统设计的,为单向传输服务,没有考虑到IP网络本身的特性,无法进行丢包重传,也未考虑快进快退等问题,为了更好的解决这些问题,在IPTV系统内TS流之上,一般采用RTP机制进行传输。
      但是我们可以看到原有的标准RTP传输机制在IPTV中,只是解决点到点,或者点到多点的媒体传输和服务,它只负责解决CDN流媒体服务器或者网络设备直接到终端传输的最后这一个服务环节。而 IPTV 要在IP 网络基础上提供大容量、高并发的服务,并保证较好的QoS,为用户提供良好的观看体验,保证良好的音视频质量,仅仅依靠这些机制是不够的。它还需要一个有效的后台服务体系,该体系负责从节目的源头开始,对节目进行各种处理和分发,或者录制,并且保证处理、分发和录制的及时性、有效性,并能适应IP 网络条件将节目数据分发到不同的地域,分发到距离用户最近的服务器为用户提供服务,还能应付各种突发事件,某些情况下,能够从不同地域重新组合节目数据,保证节目完整性。

       如上图所示,在实际部署的IPTV CDN服务系统中,传统RTP传输机制只能解决图中绿线所示部分的传输问题,而对于更加复杂,更加重要的内容传输和分发没有考虑,如上图黄色部分所示。为此采用了RTP协议扩展的方式,为IPTV系统中CDN的工作机制提供基础,力求不同的厂商系统之间的媒体流数据可以达到互通,互相使用的目的。

二、RTP格式要求

遵循RFC3550的规定,以RFC3550为基础进行扩展。按照RFC规定,RTP包头可以分为两部分,第一部分是固定格式部分,第二部分是扩展部分。

2.1 RTP固定格式部分

RTP包头固定格式部分如下图所示:

该格式严格遵循RFC3550 的规定,以下为各个字段的意义和要求:

字段 位数(bit) 含义 说明
version (V) 2 RTP 的版本号 严格遵循RFC3550,在RFC3550 中,规定该值为2。
padding (P) 1 表明该 RTP 包后面是否有加密用的填充数据。0 表示无,1 表示有。  
extension(X) 1 扩展标识,表明该RTP 的固定格式包头后是否跟有扩展部分包头。0表示无,1 表示有。 通过扩展 RTP 的方式来实现的,因此符合要求的格式中,该字段取值为1。
CSRC count(CC) 4 CSRC 的个数,表示该包头中包含的CSRC 数量 IPTV 中,一般为0
marker (M) 1 不同的 profile 有不同的意义,一般表示是否是帧边界 IPTV 中,一般为0
payload type
(PT)
  RTP 负荷类型

当前 IPTV 采用H.264 、H.265等编码 TS流封装,在原有的在RFC 中并没有对应的规定。因此规定直接使用原有RFC 中MPEG2 的取值,该值为33。

sequence
number
16 RTP 包的序列号 该值表示当前 RTP 包的序列号,
从0 开始,每次加1,到尾循环
timestamp 32 RTP 包传输的时间戳  
SSRC 32 发送流的源标识  
CSRC list 32 (多个) 流数据中间穿插者标识,0-15 个 一般不使用

2.2 RTP扩展部分

按照RFC3550 规定的方法扩展了RTP 包头,具体扩展格式如下图所示:

以下为各个字段的意义和要求:

字段 位数(bit) 含义 说明
version (V) 2 扩展格式的版本号 取值为01,其他内容请参考表后【说明】中的详细描述。
frame_type(FT) 2 帧类型指示,表明该帧的类型,指明当前RTP 负荷中的视频数据是属于I 帧还是P帧或者B帧。 请参考表后【说明】中的详细
描述。
frame_pos(FP) 2 帧位置指示,表明当前 RTP 包中的视频数据处于当前帧的位置,是开始还是中间,或者结。 参考表后【说明】中的详细描述
segment_pos(SP) 2 存储片段位置指示,表明当前RTP 包中的视频数据处于当前存储片段的位置,是开始还是中
间,或者结尾。
参考表后【说明】中的详细描述
reserve(rev) 8 保留字段 各厂家可自行定义
length 16 该 RTP 包头扩展部分长度,以32bit 为单位,不包括前面16 个bits 和length 本身。  
segment_id 32 当前存储片段标识 当前存储片段标识号,32 位无符号整数,从0 开始,每个片段加一,到尾循环。其他内容请参考表后【说明】中的详细描述
segment_offset 32 当前 RTP 包负荷数据相对于本存储片段的偏移地址 参考表后【说明】中的详细描述
reserve field 32 保留字段 各厂家可自行定义

字段说明

为符合实际业务运营需要,针对现有的 IPTV 业务中对于RTP 包头扩展部分的部分字段进行详细说明如下:

  • version (V)
    在中国电信IPTV4.0规范中,单独为扩展格式部分设定了版本号,目的是为了和RTP 格式版本相分离。在这两个版本之间并没有必然的联系,有可能RTP 版本未变的情况,该扩展格式版本号升级到10,或者其他。也有可能RTP 版本号升级了,但是本扩展格式版本号,继续使用01。在具体实现时,各处理单元要对该版本号进行验证,以便判断是否支持,本扩展协议的后续版本,格式可能并不一致。
  • frame_type(FT):
    取值 定义
    0 I帧
    1 P帧
    2 B帧
    3 预留

    在 IPTV 中,RTP 负荷中包含的是TS 流数据,而且一个RTP 包含了多个TS 包,因此可能存在一个情况,就是一个RTP 包包含的多个TS 包中,有一部分是I 帧的,一部分可能是B 帧的。这种情况下,上述机制就不能正常工作。因此规定,在使用RTP 包进行传输时,一个RTP 包中包含的数据,只能属于一个帧,不能包含两个帧的数据。这样以来,一个帧可能会分成多个RTP 包,而一个RTP 中不可能含有多个帧的数据。如果一个RTP包含的数据到了帧尾,只剩下少数数据,那么该RTP 包大小可以小于正常的大小值。
  • frame_pos(FP)
    取值 定义
    0 开始
    1 中间
    2 结尾
    3 开始和结尾(完整)
    如上所述,一个RTP 包只能包含一个帧的数据,但是一个帧可能会分为多个RTP包,因此这里用FP 来表示当前的RTP 中的数据是当前帧的开始,还是结束,或者是中间,还是头尾都包含。
  • segment_pos(SP)

       该值取值范围和意义如下,关于存储片段的描述,请参见segment_id 相关介绍:

取值 定义
0 开始
1 中间
2 结尾
3 开始和结尾(完整)
  • segment_id

           在 IPTV 业务系统中,流媒体数据不仅要发送到终端,为终端提供音视频数据流服务,也需在后台要进行录制,保存和分发,或者重新组织。那么在进行存储和分发的时候,总是需要以一段数据为单位进行组织,在这里,定义了一个单位—存储片段,把它作为流媒体能力分发和存储的最小单位。这意味者,流媒体能力的分发和存储最小只能存储和分发这样的一个单位,不能再进行更小的划分。

         一个存储片段对应一个节目流中的某一时间段的全部数据,互相相邻的两个时间段,存储片段标识的差为1,也就是N,N+1。而且两段相邻的数据不能有重复,不能缺少部分流数据。

         在 IPTV 媒体分发网络中进行分发和录制时,建议整个网络中的流媒体数据采用一致的segment_id 标识,也就是说,在整个网络范围内,要保证所有节点,所有服务器,对于同一个节目的相同时间的存储片段,他们的标识都是相同的,数据也要相同。   

           要实现以上目的,最好在节目源头,或者节目进入IPTV 媒体分发网络的开始就对流媒体数据进行分片处理,打上segment_id 标识,保证全网存储片段 标识和数据的一致性。在进行分片处理时,可以设置一定的时间间隔,过了这个时间,就生成一个新的片段,标识的值加1。同时,为了方便处理,每个片段的都以I 帧数据开始,完整帧结尾。
           各个节点对存储片段进行处理时,要保证数据的完整性和一致性,不能随意更改存储片段标识,当数据不完整时,必须进行适当处理。数据的完整性可以依靠segment_pos 进行判断和处理。

  • segment_offset

       该字段主要是为了保证在进行节目录制时,如果出现了丢包,服务器仍然可以正常进行录制。如下所述:
      在 IP 网络中传输数据,经常出现丢包,或者顺序不一致,有可能先发的RTP 包后到,或者中间发送的一个RTP包出现了丢失,重传还没有完成,但是后续的RTP包已经达到了,在这种情况,后来的RTP 数据也需要进行保存。这个时候,就需要为中间丢失的那些数据保留一定的磁盘空间,而segment_offset 就指出了保留的位置。
      该 segment_offset 值包含了RTP 包头和TS 流数据中的媒体数据大小,如果在录制时,不保存RTP 包头,要进行换算才能得出实际的存储偏移量。

  • sreserve field

       该字段主要是为了适应当前 IPTV 发展的实际情况,预留给厂商自己使用,不同的厂商可以自己定义这些字段,但前提是要保证遵循上述的所有规定,同时不同厂商之间的设备和系统将忽略该字段。

  • 其他说明

      重传机制:采用RTP 协议作为基础,因此如果需要重传,就可以以RTP 的序列号作为标识进行重传。

      存储机制:采用存储片段作为分发和存储的最小片段,只是一个逻辑上的区分,并不限制存储机制本身,一个片段本身不和任何实际存储单位关联,比如文件,分区等。

0条评论
0 / 1000
李****利
4文章数
0粉丝数
李****利
4 文章 | 0 粉丝
原创

RTP协议在IPTV系统中的应用

2024-10-10 02:06:59
19
0

一、IPTV系统中的CDN流媒体系统要求

       IPTV业务经过将近20年的发展,用户已经超过4亿,其已经和传统有线电视、OTT互联网视频等深度融合,互相渗透,互相影响。IPTV本身作为IP网络基础之上的IP专网视频业务,为了更好的兼容传统有线电视业务,在IP网络之上采用了TS流格式的封装媒体流。如下图所示:

       业务音视频媒体流,包括MPEG4或者H264、H.265等编码格式数据,首先经过TS系统流的封装之后,再使用IP网络进行传输。从上图可以看出,TS 流本身也可以直接经过UDP 或者TCP 的方式传输,无需再次进行RTP封装,而且TS本身也有音视频合成,以及同步机制等。但是TS流本身是为广播传输系统设计的,为单向传输服务,没有考虑到IP网络本身的特性,无法进行丢包重传,也未考虑快进快退等问题,为了更好的解决这些问题,在IPTV系统内TS流之上,一般采用RTP机制进行传输。
      但是我们可以看到原有的标准RTP传输机制在IPTV中,只是解决点到点,或者点到多点的媒体传输和服务,它只负责解决CDN流媒体服务器或者网络设备直接到终端传输的最后这一个服务环节。而 IPTV 要在IP 网络基础上提供大容量、高并发的服务,并保证较好的QoS,为用户提供良好的观看体验,保证良好的音视频质量,仅仅依靠这些机制是不够的。它还需要一个有效的后台服务体系,该体系负责从节目的源头开始,对节目进行各种处理和分发,或者录制,并且保证处理、分发和录制的及时性、有效性,并能适应IP 网络条件将节目数据分发到不同的地域,分发到距离用户最近的服务器为用户提供服务,还能应付各种突发事件,某些情况下,能够从不同地域重新组合节目数据,保证节目完整性。

       如上图所示,在实际部署的IPTV CDN服务系统中,传统RTP传输机制只能解决图中绿线所示部分的传输问题,而对于更加复杂,更加重要的内容传输和分发没有考虑,如上图黄色部分所示。为此采用了RTP协议扩展的方式,为IPTV系统中CDN的工作机制提供基础,力求不同的厂商系统之间的媒体流数据可以达到互通,互相使用的目的。

二、RTP格式要求

遵循RFC3550的规定,以RFC3550为基础进行扩展。按照RFC规定,RTP包头可以分为两部分,第一部分是固定格式部分,第二部分是扩展部分。

2.1 RTP固定格式部分

RTP包头固定格式部分如下图所示:

该格式严格遵循RFC3550 的规定,以下为各个字段的意义和要求:

字段 位数(bit) 含义 说明
version (V) 2 RTP 的版本号 严格遵循RFC3550,在RFC3550 中,规定该值为2。
padding (P) 1 表明该 RTP 包后面是否有加密用的填充数据。0 表示无,1 表示有。  
extension(X) 1 扩展标识,表明该RTP 的固定格式包头后是否跟有扩展部分包头。0表示无,1 表示有。 通过扩展 RTP 的方式来实现的,因此符合要求的格式中,该字段取值为1。
CSRC count(CC) 4 CSRC 的个数,表示该包头中包含的CSRC 数量 IPTV 中,一般为0
marker (M) 1 不同的 profile 有不同的意义,一般表示是否是帧边界 IPTV 中,一般为0
payload type
(PT)
  RTP 负荷类型

当前 IPTV 采用H.264 、H.265等编码 TS流封装,在原有的在RFC 中并没有对应的规定。因此规定直接使用原有RFC 中MPEG2 的取值,该值为33。

sequence
number
16 RTP 包的序列号 该值表示当前 RTP 包的序列号,
从0 开始,每次加1,到尾循环
timestamp 32 RTP 包传输的时间戳  
SSRC 32 发送流的源标识  
CSRC list 32 (多个) 流数据中间穿插者标识,0-15 个 一般不使用

2.2 RTP扩展部分

按照RFC3550 规定的方法扩展了RTP 包头,具体扩展格式如下图所示:

以下为各个字段的意义和要求:

字段 位数(bit) 含义 说明
version (V) 2 扩展格式的版本号 取值为01,其他内容请参考表后【说明】中的详细描述。
frame_type(FT) 2 帧类型指示,表明该帧的类型,指明当前RTP 负荷中的视频数据是属于I 帧还是P帧或者B帧。 请参考表后【说明】中的详细
描述。
frame_pos(FP) 2 帧位置指示,表明当前 RTP 包中的视频数据处于当前帧的位置,是开始还是中间,或者结。 参考表后【说明】中的详细描述
segment_pos(SP) 2 存储片段位置指示,表明当前RTP 包中的视频数据处于当前存储片段的位置,是开始还是中
间,或者结尾。
参考表后【说明】中的详细描述
reserve(rev) 8 保留字段 各厂家可自行定义
length 16 该 RTP 包头扩展部分长度,以32bit 为单位,不包括前面16 个bits 和length 本身。  
segment_id 32 当前存储片段标识 当前存储片段标识号,32 位无符号整数,从0 开始,每个片段加一,到尾循环。其他内容请参考表后【说明】中的详细描述
segment_offset 32 当前 RTP 包负荷数据相对于本存储片段的偏移地址 参考表后【说明】中的详细描述
reserve field 32 保留字段 各厂家可自行定义

字段说明

为符合实际业务运营需要,针对现有的 IPTV 业务中对于RTP 包头扩展部分的部分字段进行详细说明如下:

  • version (V)
    在中国电信IPTV4.0规范中,单独为扩展格式部分设定了版本号,目的是为了和RTP 格式版本相分离。在这两个版本之间并没有必然的联系,有可能RTP 版本未变的情况,该扩展格式版本号升级到10,或者其他。也有可能RTP 版本号升级了,但是本扩展格式版本号,继续使用01。在具体实现时,各处理单元要对该版本号进行验证,以便判断是否支持,本扩展协议的后续版本,格式可能并不一致。
  • frame_type(FT):
    取值 定义
    0 I帧
    1 P帧
    2 B帧
    3 预留

    在 IPTV 中,RTP 负荷中包含的是TS 流数据,而且一个RTP 包含了多个TS 包,因此可能存在一个情况,就是一个RTP 包包含的多个TS 包中,有一部分是I 帧的,一部分可能是B 帧的。这种情况下,上述机制就不能正常工作。因此规定,在使用RTP 包进行传输时,一个RTP 包中包含的数据,只能属于一个帧,不能包含两个帧的数据。这样以来,一个帧可能会分成多个RTP 包,而一个RTP 中不可能含有多个帧的数据。如果一个RTP包含的数据到了帧尾,只剩下少数数据,那么该RTP 包大小可以小于正常的大小值。
  • frame_pos(FP)
    取值 定义
    0 开始
    1 中间
    2 结尾
    3 开始和结尾(完整)
    如上所述,一个RTP 包只能包含一个帧的数据,但是一个帧可能会分为多个RTP包,因此这里用FP 来表示当前的RTP 中的数据是当前帧的开始,还是结束,或者是中间,还是头尾都包含。
  • segment_pos(SP)

       该值取值范围和意义如下,关于存储片段的描述,请参见segment_id 相关介绍:

取值 定义
0 开始
1 中间
2 结尾
3 开始和结尾(完整)
  • segment_id

           在 IPTV 业务系统中,流媒体数据不仅要发送到终端,为终端提供音视频数据流服务,也需在后台要进行录制,保存和分发,或者重新组织。那么在进行存储和分发的时候,总是需要以一段数据为单位进行组织,在这里,定义了一个单位—存储片段,把它作为流媒体能力分发和存储的最小单位。这意味者,流媒体能力的分发和存储最小只能存储和分发这样的一个单位,不能再进行更小的划分。

         一个存储片段对应一个节目流中的某一时间段的全部数据,互相相邻的两个时间段,存储片段标识的差为1,也就是N,N+1。而且两段相邻的数据不能有重复,不能缺少部分流数据。

         在 IPTV 媒体分发网络中进行分发和录制时,建议整个网络中的流媒体数据采用一致的segment_id 标识,也就是说,在整个网络范围内,要保证所有节点,所有服务器,对于同一个节目的相同时间的存储片段,他们的标识都是相同的,数据也要相同。   

           要实现以上目的,最好在节目源头,或者节目进入IPTV 媒体分发网络的开始就对流媒体数据进行分片处理,打上segment_id 标识,保证全网存储片段 标识和数据的一致性。在进行分片处理时,可以设置一定的时间间隔,过了这个时间,就生成一个新的片段,标识的值加1。同时,为了方便处理,每个片段的都以I 帧数据开始,完整帧结尾。
           各个节点对存储片段进行处理时,要保证数据的完整性和一致性,不能随意更改存储片段标识,当数据不完整时,必须进行适当处理。数据的完整性可以依靠segment_pos 进行判断和处理。

  • segment_offset

       该字段主要是为了保证在进行节目录制时,如果出现了丢包,服务器仍然可以正常进行录制。如下所述:
      在 IP 网络中传输数据,经常出现丢包,或者顺序不一致,有可能先发的RTP 包后到,或者中间发送的一个RTP包出现了丢失,重传还没有完成,但是后续的RTP包已经达到了,在这种情况,后来的RTP 数据也需要进行保存。这个时候,就需要为中间丢失的那些数据保留一定的磁盘空间,而segment_offset 就指出了保留的位置。
      该 segment_offset 值包含了RTP 包头和TS 流数据中的媒体数据大小,如果在录制时,不保存RTP 包头,要进行换算才能得出实际的存储偏移量。

  • sreserve field

       该字段主要是为了适应当前 IPTV 发展的实际情况,预留给厂商自己使用,不同的厂商可以自己定义这些字段,但前提是要保证遵循上述的所有规定,同时不同厂商之间的设备和系统将忽略该字段。

  • 其他说明

      重传机制:采用RTP 协议作为基础,因此如果需要重传,就可以以RTP 的序列号作为标识进行重传。

      存储机制:采用存储片段作为分发和存储的最小片段,只是一个逻辑上的区分,并不限制存储机制本身,一个片段本身不和任何实际存储单位关联,比如文件,分区等。

文章来自个人专栏
IPTV CDN 产品与应用
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0