前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >流媒体传输协议浅析(三)可靠UDP传输方案

流媒体传输协议浅析(三)可靠UDP传输方案

作者头像
用户4148957
发布2022-06-14 09:12:32
1.8K0
发布2022-06-14 09:12:32
举报
文章被收录于专栏:C/C++与音视频C/C++与音视频

一、引言

从流媒体的业务特征和TCP,UDP各种特点,UDP在媒体传输方面具有很大优越性,但UDP可靠性需要业务开发这投入大量的人力;相反 tcp 技术成熟,可以复用已稳定的http 服务器技术,不需要投入人力和技术解决可靠性问题,成熟,开发简单,拿来即用。故TCP在传统的流媒体协议还是广泛存在。但实际的网络拥塞,带宽不足,信号衰减会造成tcp 传输的音视频体验很糟糕。对稳定性,实时性,抗弱网抖动性的要求高的场景,UDP媒体传输技术正在崛起。

二、UDP传输常见使用场景:

1)视频监控

在视频监控场景,无论是RTSP,还是gb28181,媒体都是UDP承载(也存在通过TCP承载RTSP封装RTP媒体流,但这种用法不多,不符合国标用法和通用做法)

2)IPTV电视

在IPTV中,无法是点播还是直播,都是UDP承载电视节目码流。

3)会议电视

   在传统的会议电视,信令协议从h323过度到主流的sip,但媒体承载还是UDP封装的RTP流

4)音视频通话

无论是传统的VoIP还是目前互联网上流行的webrtc,也都是UDP承载的RTP码流

三、可靠性的UDP传输方案

既然udp是音视频传输的理想方案,但udp可靠性工作需要投入大量工作,技术门槛高,小团队几乎望而却步。那有没有一种可用的开源技术即具备tcp的可靠性,又具备udp的低延迟性?答案是肯定的。类似的sctp,quic,kcp的可靠UDP传输方法某些大厂开始引入媒体传输中,下面介绍几种目前比较流行的可靠UDP技术。

1)UDT(UDP-based Data Transfer Protocol)

 UDT的主要目的是支持高速广域网上的海量数据传输,所以除了在UDP之上实现类似TCP的协议和算法之外,UDT还对TCP的拥塞算法做了一些细节上的调整,包括Negative-ACK(NAK)、ACK to ACK(ACK2)、基于对数的动态AIMD等。不过UDT的重传效率较低,无效报文,实际效果并不理想。

参考实现:https://git.dorkbox.com/dorkbox/UDT/src/branch/master/src

2)KCP

KCP是一个很简单的ARQ的实现,包括选择重传和快重传等机制,对上层提供一个可靠的字节流。应用层可以使用多流复用的框架来实现对多个流的支持。另外,KCP增加了可配置启用的加密和FEC选项,FEC用的是Reed-Solomon纠删码,例如可以配置发送10%的冗余数据,来减少丢包时需要的重传,从而降低数据传输的延时。

参考实现:https://github.com/skywind3000/kcp

3)QUIC

QUIC是Google实现的一种可靠UDP传输协议,并且已经被选择作为HTTP/3的基础。它的特点有:

a)内建安全性,集成TLS

b)连接建立过程和TLS协商过程合并,减少往返请求次数,提高连接速度

c)集成多种拥塞算法,包括最新的BBR

d)多流支持,每个流有独立的拥塞控制,避免单个流中的丢包阻塞其它所有流(Head-of-line Blocking问题),更好的支持类似HTTP/2中的乱序请求

e)连接迁移:QUIC可以通过连接ID来唯一标识一个连接,当用户在有线、无线、移动网络之间切换时,可以保持上层连接的有效性,不需要再进行重连。

另外,早期的QUIC还使用了一种基于异或的FEC算法,不过在新版本中已经去掉。该协议已经在chromium中实现,参考获取方法:https://www.chromium.org/quic/playing-with-quic

4)uTP

uTP是BitTorrent中新增加的一种UDP传输协议,主要特点是使用了LEDBAT(Low Extra Delay Background Transport)拥塞算法。这种算法基于延时来检测网络拥塞,可以更早的探测到拥塞和更早的以及更大幅度的进行避让,从而避免影响用户上网操作的进行,保持后台下载跟前台操作的和平共处。

参考实现:https://github.com/bittorrent/libutp

5)SCTP(Stream Control Transmission Protocol,流控制传输协议)

准确的说,SCTP不是一种可靠UDP协议,而是一种跟TCP/UDP平级的传输层协议,是IETF在2000年指定的标准协议。目前Linux和部分UNIX已经集成,Windows和Mac需要使用第三方包来实现。SCTP最初主要用于电信系统,它的特点有:

a)跟TCP一样面向连接,提供可靠传输

b)跟UDP一样面向消息

c)多流支持

d)每个流可以配置成接受有序或无序的消息

e)Multi-Homing:可以配置多个地址,利用多条网络传输通道

f)更好的安全性:要求四次握手,避免TCP的SYN Flooding攻击

注意webrtc的sctp不是跟tcp和UDP平级的传输层协议,它是基于UDP的开发实现,详见webrtc代码或https://github.com/sctplab/usrsctp

参考:https://zhuanlan.zhihu.com/p/68466363

四、总结

以上基于UDP的可靠性传输技术在某些领域已经有成功的应用案例。在音视频传输领域可以根据业务需求,移植过来替换已有协议底层的TCP或UDP接口,改善传输性能。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
实时音视频
实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档