RTP/RTCP协议详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RTP/RTCP协议详解相关的知识,希望对你有一定的参考价值。

参考技术A RTP payload:RTP数据包的有效载荷。

RTP packet:RTP数据包,包括RTP数据包头部与payload。

Transport address:IP地址+端口号。

RTP session:区分RTP session的标志是是否有SSRC标识符的独立空间。

SSRC:RTP Stream的数据源。SSRC的标识符必须在RTP Session中唯一。

其中,前12个字节为fixed header。

 2 bits。RTP的版本号,当前版本为2.

1 bit。如果设置为1,payload后面可能会有1个或者多个padding字节,它们不是payload的一部分。方便一些针对固定长度算法的封装。

1 bit。如果设置为1,则在RTP固定报头后跟有一个扩展报头。

4 bits。记录了CSRC包含的字节数。

1 bit。不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。

有效载荷类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,音频流的PT值与视频的PT值是不同的,这样便于客户端进行解析。

占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。这个字段当下层的承载协议用UDP的时候,网络状况不好的时候可以用来检查丢包。同时出现网络抖动的情况可以用来对数据进行重新排序。

32 bits。用于记录RTP数据包第一个字节的采样时间。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。

在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时钟频率依赖于负载数据格式,并在描述文件(profile)中进行描述。 同一个帧的不同分片的时间戳是相同的。这样就省去了起始标志和结束标志。一定要记住,不同帧的时间戳肯定是不一样的 。

同步信源(SSRC)标识符,占32位,用于标识同步信源。 标识RTP会话中的参与者 ,同步源就是指RTP包 流的来源。 该标识符是随机选择的,RFC1889推荐了MD5随机算法。它是全局唯一的,不同的SSRC表示不同的共享源。参加同一视频会议的两个同步信源不能有相同的SSRC。

特约信源(CSRC)标识符,每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。

用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。一般用在混音或混屏上。例如,在1路音流中混了好几个人的声音,那么这每一个人的声音就是一个CSRC。

有5种RTCP包类型:

WebRTC[54] - WebRTC之RTCP详解

《WebRTC工作原理精讲》系列-总览(了解专栏更多内容,请点我!)

前言

在WebRTC中,流媒体协议使用的RTP/RTCP协议,其中,RTP负责流媒体数据传输,RTCP负责传输的质量控制。RTCP的作用还是非常重要,它可以实现发送数据/接收数据的反馈、丢包重传、关键帧请求、⽹络指标RTT、丢包率、抖动的计算及反馈,拥塞控制相关的带宽反馈,以及⽤户体验相关的⾳视频同步等。文本将重点介绍RTCP相关的内容和基础知识。

正文

  1. RTCP类型

在WebRTC内部,RTCP包的类型一般可以分为七种,具体划分如下:

enum RtcpTypes 
  kRtcpTypeSR = 200,     // Sender report payload type.
  kRtcpTypeRR = 201,     // Receiver report payload type.
  kRtcpTypeSDES = 202,   // SDES payload type.
  kRtcpTypeB

以上是关于RTP/RTCP协议详解的主要内容,如果未能解决你的问题,请参考以下文章

流媒体专家rtp和rtcp协议详解I

RTP 协议详解

实时传输控制协议---RTCP详解

WebRTC[54] - WebRTC之RTCP详解

WebRTC[54] - WebRTC之RTCP详解

超越RFC3550 - RTP/RTCP协议族分析