RTP、RTCP、FEC包数据结构简介
2018-02-22 11:46
357 查看
1. 数据包格式 1.1. Interlaced结构 STAE模块采用RTP/RTCP进行指令交互和数据发送,同时对RTP/RTCP进行了2种方式的扩展,一种是添加额外的扩展头Interlaced,一种是在RTP/RTCP协议头中进行了扩展,因此STAE的指令是以下的方式存在(均采用网络序) channel=0x00 channel=0x01 channel=0x02 channel=0x03 1.1.1. Interlaced字段含义 字段说明: 1、magic_num:是Interlaced的头标识,固定不变。 2、channel:0x00标识携带的是 RTP包;0x01标识携带的是RTCP包;0x02标识携带的是音频包;0x03标识携带的是FEC包; 3、tag:是否需要SAK回应,0x00不需要,0x01需要。(携带FEC包时tag=0x01标识fec包结构是给整个rtp包编码)。 4、data_length:表示所携带负载的数据长度。 1.2. RTP标准头 1.2.1. RTP标准头结构 1.2.2. 字段说明 1.2.2.1. 简要介绍 RTP可以看成三个部分: 1)、RTP head:RTP协议头; 2)、extend:RTP协议头扩展; 3)、payload:ts视频流负载。 1.2.2.2. RTP head相关字段说明 1)、V:2bit,2固定值,RTP版本; 2)、P:表示填充比特,1bit,为0; 3)、X:1bit,1表示RTP包头有扩展部分;0表示不带扩展。 4)、CC:4bit,CSRC 计数,此处为0,表示没有CSRC字段; 5)、M:1bit,此协议定义的标志 M=0表示非帧结束;M=1表示帧结束; 6)、PT:7bit,此协议定义的负载类型遵循rfc(见附录A)标准,PT=33 表示MP2T;pt=0 表示PCMU; 7)、sequence number :2字节,序列号,每发送一个RTP包序列号加1; 8)、timestamp: 4字节,时间戳,反映了RTP数据包中第一个字节的采样时间。同一帧数据的不同rtp包的时间戳要求保持一致; 9)、同步信源(SSRC)标识符:4字节,同步源,在同一个RTP会话期间没有任何两个同步源具有相同的ssrc。此协议定义SSRC 固定为 SSRC[3]= 'S' SSRC[2]= 'K' SSRC[1]= 'L' SSRC[0]= 'T'; 10)、特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约 信源。只有当插入混合器时才会有该项。 1.3. RTP扩展头 1.3.1. RTP扩展头结构 1.3.2. RTP扩展头字段含义 1.3.2.1. 简要介绍 如果字段X=1,则头部有扩展部分,否则X=0; 1.3.2.2. RTP扩展头相关字段说明 1)、profile:固定为0x0000; 2)、extend hender length:单位为4字节(不包含本身长度)扩展头长度,网络序表示,取值为扩展所占几个32bit行; 3)、long sequence number:RTP序列号,64bit; 4)、Frame type :帧类型,此协议定义FT=0 表示IDR帧;FT=1 标识I帧;FT=2表示P帧;FT=3表示A帧;FT>=4其他; 5)、Frame state:帧状态,此协议定义FS=0 表示帧开始;FS=1表示帧中继;FS=2表示帧结束; 6)、Frame tag :帧标记,P、A帧和前面的I帧此标记相同; 7)、iframe packets:数据包的个数; 8)、iframe sequence number:I/IDR帧序列号; 9)、gop marker:I/IDR个数(以I帧/IDR帧开始到下一个I帧/IDR帧结束)。 1.4. RTCP头结构 1.4.1. RTCP头字段含义 1)、V=2固定值,版本号; 2)、subtype:RTCP类型,一个PT对应不同的subtype; 3)、PT:RTCP包类型; 4)、length 负载长度4字节为单位,是以整个RTCP包长度(32bit为单位)减1来赋值,即RTCP的固定头为4字节,如果实际发送 的长度不是4的整数倍,自动补齐至4的整数倍; 1.5. RTCP扩展头 1.5.1. RTCP头扩展 1.5.2. RTCP包类型 1.5.2.1. 简要介绍 RTCP包类型根据字段PT的值不同主要分为五种; 1. PT=200表示Sender Report发送者报告; 2. PT=201表示Receiver Report接收者报告; 3. PT=202表示SDES(能力交互使用)源描述; 4. PT=203表示BYE退出报告; 5. PT=204表示APP自定义报告(application-defined); 1.5.2.2. 包类型介绍 1.5.2.2.1. Sender Report类型 当PT=200时,此时为RTCP包类型 Sender Report发送者报告类型。IRTCPExHead格式为: a) SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。 b) SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。 c) 从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。 d) 从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。 1.5.2.2.2. Receiver Report类型 当PT=201时,此时为RTCP包类型 Receiver Report接收者报告类型。IRTCPExHead格式为: a) 接收抖动(Interarrival jitter):RTP数据包接受时间的统计方差估计 b) 上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。 c) 上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。 1.5.2.2.3. SDES类型 当PT=202(能力交互)时,此时为RTCP包类型 SDES类型。IRTCPExHead格式为: SSRC/CSRC_1:SSRC=0x12.0x34,0x56,0x78。 1.5.2.2.4. BYE类型 当PT=203(能力交互)时,此时为RTCP包类型为BYE。IRTCPExHead格式为: 1.5.2.2.5. APP用户自定义类型 当PT=204时,此时为RTCP包类型 APP类型,用户自定义类型,无固定格式。IRTCPExHead格式为: a) SSRC/CSRC:未定义,字段为0,没有用到自动填充; b) name(ASCII):未定义,字段为0,没有用到自动填充; c) subtype类型: COMMAND((byte)0x03) (pt=204),命令,对方需要应答; RESPONSE((byte)0x04) (pt=204),应答; NOTIFICATION((byte)0x05)(pt=204),通知,对方不需要应答; SAK (pt=204) 1.5.3. RTCP负载类型 1.5.3.1. 简要介绍 RTCP负载,RTCP字段application dependent data的数据格式分为两种,一种为SDES能力交互使用的加头的TLV格式(见1.5.2.2.3 SDES类型),另一种为APP用户自定义类型的TLV格式(TLV---type length value)。 1.5.3.2. SDES类型加头的TLV格式 SDES能力交互时使用的加头的TLV RPIV:标识自定义SDES。 SDES length:SDES全部负载的TLV list的数据长度(字节)。 Prefix length:值为1,后填充位。 TLV list:TLV数据列表。 SDES TLV说明: T_CAPACITY采用一个字节的不能bit来表示不同的信息: T_VIDEO_MODE:一个字节用来表示视频模式 1.5.3.3. 用户自定义TLV格式 用户自定义的TLV包括以下几种(丢包重传、统计信息、信息配置) i. 丢包重传(TLV类型 T:RESEND 1字节 L:负载V的长度 2字节 V:序列号 8字节) ii. StatisticInfoTLV统计信息(TLV类型 T:STAT 1字节 L:负载V的长度2字节 V:网络信息8字节) iii. NetAdaptInfo信息配置(TLV类型 T:NET_ADAPT 1字节L:负载V的长度 2字节 V:适配信息) 注: 1.在新的ctt代码中StatisticInfoTLV统计信息已被替换为: recv_br_info_t { uint_32 gop_num; uint_32 bit_rate; uint_32 iframe_time; //单位ms } 2.NetAdaptInfo在ctt代码中有数据结构却无该项的响应处理。 1.6. FEC头结构 1.6.1. FEC包结构 FEC数据包的结构由一个Interlaced、fec header、冗余数据组合而成如下图。 1.6.2. FEC头结构 1.6.3. FEC头结构字段含义 E:1bit,保留位,必须为0; L:1bit,用来标示FEC Level Header里的MASK 是否为 Long Mask, 普通的MASK 长度为16 bits,一个FEC 数据包 Group 的包个 数最多为16个, Long MASK 长度为 48 bits,一个FEC 数据包Group的包个数最多为48个. P:1bits、X:1bits、CC:4bits,M:1bit,用来产生RTP Header里相应字段的保护位。 PT recovery:7bits数据包 payload type 的保护位 TS recovery:32 bits, 数据报Timestamp的保护位 SN base :数据包里的最小sequence. Length recovery:16 bits, 数据长度的保护位, 数据包的长度是 CSRC List, payload, padding 的总长度 1.6.4. FEC packet结构 1.7. 语音包结构 这里的语音包设计为APP向IPC发送的语音包格式。 1.7.1. 语音包字段含义 1)、上面的部分为Interlaced,下面为语音包的格式;Interlaced中的payload length在这里被使用sequence num,表示语音的包序号; 2)、data length为语音数据的长度; 3)、data是语音数据。
相关文章推荐
- RTP/RTCP协议简介
- RTP/RTCP协议简介
- RTP与RTCP协议简介(合集)
- 差错掩盖算法:(1)基于RTP的FEC前向纠错算法简介
- 基于RTP的FEC前向丢错算法简介
- RTP/RTCP协议简介
- 基于RTP的FEC前向丢错算法简介
- 实时传输协议(RTP)和实时控制协议(RTCP)
- 视频流传输协议RTP/RTCP/RTSP/HTTP的区别
- RTP与RTCP协议介绍
- 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
- RTP与RTCP协议介绍
- 1_数据结构简介
- WebRTC中RTP/RTCP协议实现分析
- RTP、RTCP协议学习-2015.04.15
- 视频流传输协议RTP/RTCP/RTSP/HTTP的区别
- rtp协议详解/rtcp协议详解
- Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程
- RTP/RTSP/RTCP的区别
- RTP/RTCP协议解析