音视频传输协议众多, 5G时代不同业务应该如何选择?
摘要:音视频传输协议众多, 不同业务应该如何选择? RTSP、RTMP、RTP/RTC、HLS、MSS、DASH、WEBRTC、RIST、SRT;在此我们就从业务发展的视角来理解各种流媒体协议,帮助大家有更加清晰的理解,选择时做出更理性的判断。
IPTV
IPTV 是由运营商主导建设的一套系统,他的主要对标对象是传统广电的数字电视。所以这套系统首要解决的是大规模直播的问题,在此基础上还需要支持点播、时移、回看等新业务。运营商的优势就是可以自建一套可管理的网络,所以直播就基于组播技术进行大规模分发。主要技术栈是RTP+TS over multicast,这个技术大大降低了直播峰值对流媒体服务器的压力。而点播、时移、回看业务由于必须使用单播传输,所以当时选择的技术栈是使用RTSP 进行流媒体控制,使用RTP+TS over UDP(少量基于TCP)进行数据传输。
现在这套系统服务了全国接近1.7 亿多用户。这套技术栈面临的挑战和对应的解决方案主要包括几点:
解决单播基于UDP 传输丢包的问题,丢包会导致用户观看花屏或爆音,我们基于RTSP 协议扩展制定了一套规范,基于RTSP 的GET_PARAMETER扩展了重传数据报文的信令,主要是基于NACK 原理进行设计,通知流媒体服务器哪个报文没有接收到,流媒体服务器根据请求中携带的RTP 序号进行重发。
解决组播传输丢包问题,组播报文丢包会导致直播花屏或爆音,我们采用了2 个手段解决这个问题:
· FEC
· ARQ
通过FEC 技术增加等步长的冗余报文,可以解决随机丢包问题,但是无法解决突发连续丢包问题,这个时候就需要ARQ 技术,我们在系统中增加一个RETServer,RET Server 也会加入组播组接收和机顶盒收到的相同的组播报文,机顶盒在检测到丢包后,会向这台服务器发起NACK 报文,RET Server 收到请求后根据请求的RTP 需要将对应的报文发送给机顶盒。
解决组播传输下频道快速启动问题,终端加入组播组的时间是随机的,无法保证每次加入组播组后接收到的报文就可以理解用于解码并显示,所以我们通过在系统中增加一个FCC Server,解决该问题,终端在起播观看一个频道的时候,优先向FCC Server 请求一条单播流,FCC Server 会以1.X 倍的速率将I 帧和解码所需的报文发给终端,配合终端快显技术可以实现300ms 以内的频道切换速度。
IPTV多屏
随着移动终端的发展,运营商希望在IPTV 业务基础上,发展手机等多屏业务,开始支持HLS(主流)、MPEG DASH(部分海外运营商,支持MultiDRM)流媒体协议。这套系统在流媒体协议层面临的问题是不同屏幕,不同DRM 格式,多种格式带来了存储空间成倍的上升,特别是NPVR 个人录制业务,对存储的需求非常大。主要解决思路就是JITP(Just In Time Package),即只要存储一份内容,根据用户观看的内容格式进行实时格式转换。
OTT点播
伴随着以Youtube,Netflix,爱奇艺,优酷,腾讯视频为代表的OTT 视频点播平台的崛起,以及苹果手机的普及和HLS 协议的出现,流媒体协议从HTTP渐进式下载发展到ABR Streaming,HLS 是其中最为主流的一种ABR 协议,HLS 也成为了各个OTT视频平台的首选视频传输协议。这套系统在流媒体协议层面临的问题和解决方案如下:
- 解决基于互联网的大规模分发问题。CDN 技术可以很好的解决这个问题,这也是OTT 流媒体协议基本上在设计之初就考虑对CDN 友好的原因。
- Netflix 由于业务量的规模发展到一定规模,从最开始选择第三方CDN,走向了自建CDN(Open Connect)的道路,但是他的技术栈依旧是HLS 和DASH 这类对CDN 友好的流媒体协议。
OTT 直播
细分为事件类(新闻/ 赛事/ 演唱会)直播、个人(游戏/ 网红/ 秀场)直播。满足这类直播业务的流媒体协议层面临的问题和解决方案如下:
1、首先他们和OTT 点播一样,需要解决基于互联网的视频大规模分发问题。
2、其次直播相较于点播需要额外考虑的一点就是直播时延,第一类:电视台/ 事件(新闻/ 赛事/ 演唱会)直播基本没有和观众互动的要求。所以它们依然选择对CDN 友好的HLS 和DASH 协议,但是时延会高达10-30s,随着CMAF 格式的出现,根据我们在实验室的测试数据表示时延可以小于5s。第二类:个人(游戏/ 网红/ 秀场)直播,以国内直播平台为例,商业模式主要靠打赏分层,所以要求直播的E2E 时延必须低于5s,否则观众与主播的互动效果非常差,直接影响直播平台的收入。这类厂家选择的技术栈为延迟更低的RTMP 和HTTP FLV。
3、随着手机和4G 网络的普及,部分主播也开始尝试在户外进行开播,由于户外直播的网络条件不可控,而RTMP 是基于TCP 传输的,导致在户外4G网络条件不稳定的环境下,直播效果很差,所以针对弱网环境下的直播上行效果差成为直播平台需要解决问题。为了解决这个问题,大家把眼光转向UDP,基于UDP 的直播传输技术逐步进入人们的视野。常见的有ZIXI、SRT 和RIST。ZIXI 属于纯商业化公司,显然不合适大量个人直播上传这类商业模式的直播平台。SRT 有相对成熟的开源社区支持,所以在国内应用较为普遍。RIST 是由Video Services Forum (VSF)于2017 年初开始制定的可靠的互联网流传输协议(Reliable Internet Stream Transport,RIST),相较于SRT,基于UDT 非实时流媒体的技术栈构建,RIST 一开始便使用较为成熟的RTP+RTCP 技术,而且他只定义了标准化的语法,允许实厂家在此基础上进行创新,而又不影响互相操作。经过近几年的发展RIST 支持的场景越来越多,也越来越成熟。
4、直播业务发展越来越繁荣后,又出现了多主播PK,主播与观众连麦等场景,这些对时延的要求直接从5s 变成1s 以内, 甚至小于400ms, 为了满足业务的发展,直播平台选择了实时通信的技术栈RTP+RTCP over UDP。一旦引入UDP,就需要解决丢包带来的视频体验问题,这里常见的技术有FEC、ARQ 等。
实时音视频 RTC
随着5G 网络的普及,以及疫情带来的影响,人们对实时音视频技术的应用场景会越来越多,主要包括:会议、连麦、音视通话、视频通话、在线教育、远程医疗等。由于这些应用场景对时延的要求<400ms,所以从技术栈选择来看,基本上都是选择RTP/RTCP over UDP 的方式进行音视频数据的输出。
如果把流媒体协议做三个维度划分:质量(画质/帧率)、平滑、延迟。实时音视频通信和OTT 直播上传场景相比,对低质量的容忍度更高,即允许降低一定的质量,下降(降帧率等)来换取更加平滑的体验和更低的延迟。这个选择上的差异,导致在技术设计上需要打通网络传输系统和音视频编解码系统,实现根据网络传输质量实时动态调整音视频编码参数,在质量、时延、平滑三个维度上进行权衡得出最优解。
流媒体新的发展方向
1、 新的媒体表现形式包括VR、自由视角、点云;他们与传统视频的最大区别在于,传统视频主要支持时间维度的定位,而新的媒体,除了支持时间维度的定位,还支持空间维度的定位。当前主要在MPEG 标准组织中进行讨论,基于MPEG DASH 规范进行演进。以VR 为例,一般人类的FOV 视场角<140°,新的流媒体协议利用这个特性,可以实现根据观众观看的视频范围,进行部分传输,从而降低的对带宽的诉求,这也很好的解决了传输的数据量越来越大对带宽要求苛刻的问题。华为云视频的Cloud VR 产品已经支持8K VR、自由视角的直播和点播服务。
2、 全互联实时音视频直播,随着在线教育和在线办公的普及,越来越多客户对具备大规模分发能力的低时延互动视频服务有着强烈的诉求,当前的架构要么支持大规模分发,要么支持低时延、互动,无法同时具备三者的能力。我们认为未来的主流架构需要同时满足这三样能力,华为的实时音视频服务已经完成这套架构的实现,致力于在流媒体领域持续深耕,让我们共建流媒体的未来。
音视频传输协议众多, 5G时代不同业务应该如何选择?的更多相关文章
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(六)RTP音视频传输解析层之音视频数据传输格式
一.差异 本地音视频数据格式和用来传输的音视频数据格式存在些许差异,由于音视频数据流到达客户端时,需要考虑数据流的数据边界.分包.组包顺序等问题,所以传输中的音视频数据往往会多一些字节. 举个例子,有 ...
- RTP RTCP在音视频传输与同步方面的使用
转自:http://blog.csdn.net/kof98765/article/details/17733701 1 音视频实时传输 1.1 Jrtplib库介绍 本系统采用开源库Jrtplib进行 ...
- 树莓派+android things+实时音视频传输demo之遥控小车
做了个测试小车,上面安装了摄像头,通过外网进行视频传输: https://www.bilibili.com/video/av23817880/
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(八)RTP音视频传输解析层之MPA传输格式
一.MPEG RTP音频传输 相较H264的RTP传输格式,MPEGE音频传输格式则简单许多. 每一包MPEG音频RTP包都前缀一个4字节的Header,如下图(RFC2550) “MBZ”必须为0( ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(七)RTP音视频传输解析层之H264传输格式
一.H264传输封包格式的2个概念 (1)组包模式(Packetization Modes) RFC3984中定义了3种组包模式:单NALU模式(Single Nal Unit Mode).非交错模式 ...
- 音视频通讯QoS技术及其演进
利用多种算法和策略进行网络传输控制,最大限度满足弱网场景下的音视频用户体验. 良逸|技术作者 01 什么是QoS?音视频通讯QoS是哪一类? QoS(Quality of Service)是服务质量的 ...
- 腾讯技术分享:微信小程序音视频技术背后的故事
1.引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视,小程序上的各种技术体验也越来越丰富.而音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也当然不能错过. ...
- 开发者实践丨Agora Home AI 音视频的未来
本文作者是本届 RTE 2021 创新编程挑战赛获奖者,来自上海交通大学的李新春.他分享了本次参赛作品的构思.系统设计和开发的心得. 01 不得忽略的背景 从国家层面上讲,十四五期间我国人工智能发展的 ...
- android音视频点/直播模块开发
音视频 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白, ...
- 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
1.概述 本文来自腾讯视频云终端技术总监rexchang(常青)技术分享,内容分别介绍了微信小程序视音视频和WebRTC的技术特征.差异等,并针对两者的技术差异分享和总结了微信小程序视音视频和WebR ...
随机推荐
- 老派Sql之必要,逆天,我在ef core中使用ado.net!
Wlkr.Core.EFCore 逆天,我在ef core中使用ado.net! 老派Sql之必要 当你开发生涯中基本只用一两种数据库 当你觉得用EF的类写报表时很别扭 当你觉自己的Sql( Serv ...
- 使用fontforge进行字体拆分
fontforge官方网站 游戏开发为了节省内存和资源下载量,需要把字体不用的字删掉,或者拆成多个字体逐级加载,批量操作用UI就比较难搞了,用fontforge搞起来比较顺手 安装fontforge后 ...
- .net core 到底行不行!超高稳定性和性能的客服系统:性能实测
业余时间用 .net core 写了一个升讯威在线客服系统.并在博客园写了一个系列的文章,介绍了这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷 ...
- Java -- Stream流用法
1. 前言 流是Java 8 API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式. Stream流是从支持数据处理 ...
- 【ASP.NET Core】MVC过滤器:运行流程
MVC 的过滤器(Filters)也翻译为"筛选器".但是老周更喜欢翻译为"过滤器",意思上更好理解. 既然都叫过滤器了,就是在MVC的操作方法调用前后进行特殊 ...
- 阿里云轻量服务器上编译安装docker trojan时报错 fatal error: Killed signal terminated program cc1plus compilation
轻量服务器编译安装docker trojan时报错 72%时 通过以下操作解决,和编译其他软件类似,是内存不足引起的 编译安装swoole的时候报错 fatal error: Killed sig ...
- 【驱动】串口驱动分析(二)-tty core
前言 tty这个名称源于电传打字节的简称,在linux表示各种终端,终端通常都跟硬件相对应.比如对应于输入设备键盘鼠标,输出设备显示器的控制终端和串口终端.也有对应于不存在设备的pty驱动.在如此众多 ...
- Redis缓存使用技巧和设计方案?薪火数据知识库
Redis是一种开源的内存数据库,被广泛应用于缓存系统设计和实现中.它提供了高性能.低延迟的数据访问,并支持多种数据结构和丰富的功能.下面将详细介绍Redis缓存的使用技巧和设计方案. 一.Redis ...
- TPC-DS工具介绍及性能测试
一. Hive-testbench工具介绍 TPC-DS:https://www.cnblogs.com/webDepOfQWS/p/10544528.html 由于原生态工具生产测试数据表存在bug ...
- SpringBoot项目启动过程动态修改接口请求路径
背景 最近遇到一个技术需求,需要对其他多个已有的服务进行整合打包为一个整体的服务,项目启动过程发现一个问题,在controller层多个服务之间存在相同的RequestMapping接口请求路径,导致 ...