webrtc音频系列——4、RTP与RTCP协议

如果让你从0开发一套实时互动直播系统,你首先要选择网络传输协议。

UDP 还是 TCP?

答案是:UDP。

为什么实时传输不能用 TCP ?

TCP 的目的就是实现数据的可靠传输,因此他有一套 握手,发送 -> 确认,超时 -> 重发 的机制。

举个例子,A 与 B 通讯,A 首先向 B 发送数据,并启动一个定时器。当 B 收到 A 的数据后,B 需要给 A 回一个ACK(确认)消息,反复这样操作,数据就源源不断地从 A 流向了 B。如果因为某些原因,A 一直收不到 B 的确认消息会怎么办呢?当 A 的定时器超时后,A 将重发之前没有被确认的消息,并重新设置定时器。

在 TCP 协议中,为了避免重传次数过多,定时器的超时时间会按 2 的指数增长。也就是说,假设第一次设置的超时时间是 1 秒,那么第二次就是 2 秒,第三次是 4 秒……第七次是 64 秒。如果第七次之后仍然超时,则断开 TCP 连接。你可以计算一下,从第一次超时,到最后断开连接,这之间一共经历了 2 分 07 秒,是不是很恐怖?

如果遇到前面的情况,A 与 B 之间的连接断了,那还算是个不错的情况,因为还可以再重新建立连接。但如果在第七次重传后,A 收到了 B 的 ACK 消息,那么 A 与 B 之间的数据传输的延迟就达到 1 分钟以上。对于这样的延迟,实时互动的直播系统是根本无法接受的。

基于以上的原因,在实现实时互动直播系统的时候你必须使用 UDP 协议。

RTP 协议

我们现在已经决定好用UDP做实时语音。

我们以视频为例,在视频中,一个 I 帧的数据量是非常大的(假设要几十 K)。而以太网的最大传输单元是多少呢? 1.5K,所以要传输一个 I 帧需要几十个UDP包。这几十个包传到对端后,还要重新组装成 I 帧,这样才能进行解码还原出一幅幅的图像。那么我必须要在包中,添加额外的标记才能够完成组装。这至少包括:

  • 序号:用于标识传输包的序号,这样就可以知道这个包是第几个分片了。

  • 起始

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值