WebRTC源码分析之RTP/RTCP(一)

首先学习一下RTP/RTCP的基础知识。

RTP/RTCP协议


RTP报头

当没有CSRC时RTP报头一共12个字节。
报头格式如下:
版本号(V)2比特,用来标志使用的RTP版本,当前协议版本号为2。
填充位(P)1比特,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
扩展位(X)1比特,如果X=1,RTP固定头部后面就跟有一个扩展头部。
CSRC计数器(CC)4比特,表示含有固定头部后面跟着几个CSRC。
标记位(M)1比特,该位的解释由配置文档(Profile)来承担。不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。(对于分组中的重要事件可用该位标识)。
有效载荷类型(PT):7比特,标识了RTP载荷的类型。比如H264视频、AAC音频等。
序列号(SN)16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。这个字段当下层的承载协议用UDP的时候,网络状况不好的时候可以用来检查丢包。同时出现网络抖动的情况可以用来对数据进行重新排序,序列号的初始值是随机的,同时音频包和视频包的sequence是分别记数的。
时间戳32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加。时间戳是去除抖动和实现同步不可缺少的。
同步源标识符(SSRC)32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的,RFC1889推荐了MD5随机算法。

当上面CSRC计数器(CC)等于0时上面一共12字节,当大于0时有以下CSRC列表:
贡献源列表(CSRC List)0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。

SSRC代表会话中的一路数据流id,比如一个会话中的一个用户有一路音频和一路视频,这时就有两个不同的SSRC。
CSRC是在用到mixer混合(混音)时才会出现,也就是说几个源rtp包经过mixer后,mixer会将他们各自的payload整合,并生成一个新的ssrc代替原来的各个ssrc,并且把他们各自的ssrc作为csrc插入新的rtp包中。
也就是说csrc的值为混合前每一路的ssrc。
CC是CSRC计数,只有4位,表示一共有几个CSRC。所以CSRC如果多于15个那最多只能有15个CSRC被标识。
CSRC是为了在混音后指出当前发言者。

有效载荷根据不同的音视频类型有不同的打包方式。比如H264使用PS流封装,MPEG2使用PES封装。

RTCP

由于每个对话成员定期发送RTCP信息包,随着参加者不断增加,RTCP信息包频繁发送将占用过多的网络资源,为了防止拥塞,必须限制RTCP信息包的流量,控制信息所占带宽一般不超过可用带宽的 5%,因此就需要调整 RTCP包的发送速率。由于任意两个RTP终端之间都互发 RTCP包,因此终端的总数很容易估计出来,应用程序根据参加者总数就可以调整RTCP包的发送速率。

RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。
根据所携带的控制信息不同RTCP信息包可分为5类:
类型:200,SR 发送端报告
类型:201,RR 接收端报告
类型:202,SEDS 源描述包
类型:203,BYE 结束传输
类型:204,APP 应用描述功能

SR和RR为报告包,比较重要,每个复合包的第一个包必须为SR或者RR,就算没有SR/RR信息也应该发一个空的报告包。

RTCP的详细协议参考RFC3550,本文底部附有英文原版和中文版(不全)地址。


RFC3550英文版 - RTP: A Transport Protocol for Real-Time Applications
RFC3550 RTP 中文版
RTP协议全解析(H264码流和PS流)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容

  • 原文地址:RFC3550 RTP 中文版 英文版原文:RFC3550英文版 - RTP: A Transport ...
    云上听风阅读 13,150评论 0 13
  • 一 前言 RTP/RTCP协议是流媒体通信的基石。RTP协议定义流媒体数据在互联网上传输的数据包格式,而RTCP协...
    weizhenwei阅读 33,322评论 4 48
  • 一生著尽豪放词, 宛然笑于赤壁间。 七年未见手足情, 怅然抬头望明月。 何人知,何人懂? 离人泪,难以忘流年。 花...
    醉昔年阅读 165评论 0 1
  • 星期天 晴 张荣轩妈妈 今天我们需要去参加姨妈家小弟弟的百岁喜宴,你早早把作业写完了只剩下听写。上午我们先陪...
    爱意暖人心阅读 177评论 0 0
  • 一、为自己和先生构建养老计划 目的:退休后可以从定投计划中定期取用资金,用于改善生活。 资金特征: l 前期只进不...
    好吃的芒果饭阅读 617评论 0 5