揭秘阿里云 RTS SDK 是如何实现直播降低延迟和卡顿
作者:予涛 途坦
这个夏天,没什么能够比一场酣畅淋漓的奥运比赛来的过瘾。但是,在视频平台直播观看比赛也有痛点:“卡顿” 和 “延时”。受限于不同地域、复杂的网络情况、传输速度等原因,当您还在为赛点焦灼的时候,隔壁已经传来欢呼声,观赛兴致瞬间全无。为了打造更加流畅稳定低延时的直播体验,越来越多企业关注低延时直播技术应用。
阿里云低延时直播RTS(Real-time Streaming)是在视频直播的基础上,进行全链路延时监控、CDN传输协议改造、UDP等底层技术优化,通过集成直播播放端SDK,支持千万级并发场景下的节点间毫秒级延时直播能力,弥补了传统直播3~6秒延时的问题,保障低延时、低卡顿、秒开流畅的极致直播观看体验。
为了能够降低直播的端到端延时,2020 年阿里云正式推出全球实时传输网络 GRTN (Global Real Time Network) ,是部署在边缘云节点之上的超低延时、全分布式下沉的通信级流媒体传输网络,用于支持视频会议、视频直播、实时音视频等服务。要使用 GRTN 提供的短延迟 / 实时传输服务,客户端可以通过浏览器的 webrtc 能力接入,也可以自行开发客户端协议栈来接入。
RTS NetSDK是什么?
低延时直播SDK是由RTS NetSDK、推流 SDK和播放器SDK组成。其中,推流SDK将编码器输出的音视频帧发送给RTS NetSDK,播放器SDK从RTS NetSDK以帧的形式读取音频PCM数据和视频H264/H265数据。
Example: ffmpeg集成RTS NetSDK后拉ARTC流
RTS NetSDK是基于GRTN开发运行在客户端的协议栈。RTS NetSDK通过UDP传输层协议和GRTN上的SFU通讯,收发音视频数据。考虑网络条件未知性,RTS NetSDK集成了WebRTC的QoS算法来适应网络变化,从而提供优质的音视频传输服务。RTS NetSDK的轻量化设计使其非常容易被诸如ffmpeg,obs一类的开源框架所集成。
RTS客户端构成
RTS NetSDK承担推流拉流对接阿里云RTS服务桥梁,以包体积小、集成简单、对现有业务没有入侵为主要特点,帮助直播客户简单快速的升级传统直播到阿里云RTS直播。
RTS NetSDK 支持多平台,Android/iOS/MacOS/linux/Windows/RTOS, 支持多个开源项目集成的接入代码,ijkPlayer、obs、FFmpeg,而且阿里云推流SDK和播放器SDK已经内置了RTS直播推拉流能力。
RTMP是基于TCP传输的,RTS是基于UDP传输的。在网络稳定带宽足够条件下,RTS对比rtmp没有多少优势,但这种理想情况是比较难以保证的。传输协议上的差异,使得RTMP对于变化的网络没有太多的QoS手段,完全依赖TCP的拥塞控制。这种拥塞控制不以低延迟为目标。阿里云的RTS引入WebRTC的QoS技术,对于网络丢包有更好的容忍度。出色的带宽估计和拥塞控制,提供了细腻的网络使用策略。
另外,在Adobe Flash Player停止更新,RTMP在网页上已经无法再使用。客户要么选择延迟非常大的HLS技术,或选择WebRTC技术。RTS H5版本本质上是WebRTC,可以在网页上运行。
产品优势
低延迟
分发方案 | 特点 | 延迟 |
---|---|---|
HLS | 支持广泛,类文件加速,分发技术比较成熟 | 一般10s以上 |
RTMP | 多用于推流,国内遍地开花。用于客户端分发并不是主流 | 一般5s以上 |
FLV | 多用于客户端分发,为目前国内主流方案 | 一般5s以上 |
阿里云RTS直播 | 使用udp传输技术 | 500ms左右(基于实验室数据) |
HLS 直播因为其TS文件切片--整片读取的机制,其延迟至少都在一个gop以上。
RTMP、FLV直播,为了保证客户端的播放顺畅,往往会让客户端保持5秒以上的缓存。
阿里云RTS直播,基于udp传输技术,全链路针对延迟优化,最新v1.8.0版本已经可以将延迟降低到500毫秒左右。
抗弱网
阿里云RTS直播是基于UDP传输的,通过应用WebRTC的先进技术(比如BWE、jitter buffer、NetEQ、FEC、NACK等QoS机制)以及自研的抗弱网技术,在复杂易变的用户网络环境中,比基于TCP传输的直播有着更好的流畅度和延迟。
包体积小
RTS NetSDK拥有轻巧的包体积,以最新版本Android 和iOS为例:
平台 | 增量大小 |
---|---|
iOS | 755 KB(arm64) |
Android | 0.9MB(arm64) |
易集成
直播客户大多都已经有了成型的直播推流和直播拉流能力。RTS NetSDK以库的形式被集成进客户现有的SDK,实现低成本升级,且兼容之前的业务逻辑。阿里云RTS直播已经支持到传统直播的基本所有特性。
能力类型 | RTS直播支持情况 |
---|---|
视频编码 | h264、h265 |
音频编码 | aac、opus、g722 |
音频采样率 | 44100、48k、16000 (g722) |
视频SEI | 支持 |
私有NAL 拓展 | 即便和rtp定义类型冲突,也做到了支持 |
rtmp推流artc拉流 | 支持 |
artc推流rtmp/hls拉流 | 支持 |
artc推流artc拉流 | 支持 |
加密 | 阿里云KMS加密体系 |
产品应用架构
RTS 直播将支持传统直播的基本全部能力,如直播录制、防盗链、导播台等。
RTS NetSDK 可以被集成进拉流侧的各种产品中去。另外提供了集成到 ffplay、ijkPlayer 的源码,客户可以直接使用或者参照着修改。阿里云播放器 SDK 已经内置了 RTS NetSDK 的拉流能力。
RTS NetSDK 也可以被集成进端侧的产品中去,RTS NetSDK 赋予推流产品 RTS 直播的能力,同时也提供了集成到 ffmpeg、obs 的源码。阿里云推流 SDK 已经内置了 RTS NetSDK 推流能力。
RTS NetSDK 是未来直播和通信一体化 SDK 的基石。在 RTS NetSDK 之上,加一个 Multimedia Framework,以及 QoS 消息处理,就可以构成一个一体化 SDK。这对于已经有自己的 Framework 的客户来说是个好消息,不需要为直播和通信分别开发软件了,同时也简化了直播连麦场景的实现。
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。公众号后台回复【技术】可加入阿里云视频云产品技术交流群,和业内大咖一起探讨音视频技术,获取更多行业最新信息。
揭秘阿里云 RTS SDK 是如何实现直播降低延迟和卡顿的更多相关文章
- 阿里云 OCS SDK for NodeJS介绍
阿里云 OCS SDK for NodeJS介绍 阿里云技术团队:熊亮 阿里云 SDK for NodeJS 是为 NodeJS 开发者提供使用阿里云各项服务的统一入口,由阿里云UED团队负责开发维护 ...
- 使用阿里云Python SDK管理ECS安全组
准备工作 本机操作系统:CentOS7 python版本:python2.7.5 还需要准备如下信息: 一个云账号.Access Key ID.Access Key Secret.安全组ID.Regi ...
- 阿里云 .NET SDK Roa 和 Rpc 风格签名
阿里云 .NET SDK Roa 和 Rpc 风格的签名 Demo,适用于自己不想用其提供的SDK,想用自己组装 Roa 和 Rpc 的签名方式. Roa 和 Rpc 的签名方式主要有以下几个不同点: ...
- 快速上手阿里云oss SDK
使用阿里云oss SDK 依赖安装: pip install oss2 pip install aliyun-python-sdk-sts 版本最好是 2.7.5 或以上 如果要开启 crc64 循环 ...
- thinkPHP中怎么使用阿里云的sdk
使用阿里云官方给的方法总会报错 Class 'Home\Controller\DefaultProfile' not found 这样是因为namespace的原因,将aliyun sdk 放在con ...
- 揭秘阿里云WAF背后神秘的AI智能防御体系
背景 应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入.跨站等攻击仍然占据着较前的位置.WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在,也正是这些针对W ...
- 使用阿里云Java SDK 实现 DDNS
本代码的实现前提: 1.拥有阿里云域名,且获取了Access Key 及 Access Secret 2.能获取外网IP的页面地址(注意:ip138.com的实际包含ip地址为http://2018. ...
- 揭秘阿里云EB级大数据计算引擎MaxCompute
日前,全球权威咨询与服务机构Forrester发布了<The Forrester WaveTM: Cloud Data Warehouse, Q4 2018>报告.这是Forrester ...
- EasyNVR完美搭配腾讯云CDN/阿里云CDN进行RTMP、HLS直播加速的使用说明
1.相关资料入口 腾讯云LVB EasyNVR.com 2.加速说明 2.1. 腾讯LVB加速 2.1.1. 开通服务 腾讯云视频LVB开通入口 2.1.2. 登录进入控制台 腾讯云直播控制台 2.1 ...
随机推荐
- 12、elk的使用(2)
12.8.收集日志: 因为logstash安装在从节点上,所以这里收集的主要是从节点上的服务日志: 1.收集系统日志: (1)配置文件: vim /etc/logstash/conf.d/system ...
- 9.11、mysql增量备份和增量恢复介绍
1.增量备份: 增量数据是从上次全量备份之后,更新的新数据,对于mysql来说,binlog日志就是mysql的增量数据: (1)按天进行备份: 周一00点全量备份 周二00点全量备份 ...... ...
- 16、linux下卸载oracle11gR2
提示:如果要再次安装, 最好先做一些备份工作,包括用户的登录脚本,数据库自动启动关闭的 脚本,和Listener自动启动的脚本,要是有可能连创建数据库的脚本也保存下来: 16.1.通过oracle自带 ...
- 12.10File类
要点提示:File类包含了获得一个文件/目录的属性,以及对文件/目录进行改名和删除的方法. 在文件系统中,每个文件都存放在一个目录下.绝对文件名,是由文件名和它的完整路径以及驱动器字母组成.例如,c: ...
- 『无为则无心』Python函数 — 26、Python函数参数的传递方式
目录 1.位置参数 2.关键字参数 3.缺省参数(默认参数) 4.不定长参数(可变参数) (1)包裹位置传递 (2)包裹关键字传递 5.位置参数.默认参数.可变参数的混合使用 6.拓展:参数解包 提示 ...
- 暑假自学java第十一天
1,使用java.util.Arrays类处理数组 (1 ) public static void sort(数值类型 [ ] a):对指定的数值型数组按数字升序进行排序.在数组排序中设计一个简单的冒 ...
- 为什么socket是三次握手挥手却是四次
为知笔记地址: https://794e611d.wiz03.com/wapp/pages/view/share/s/1VjC4t215AfJ2knVCX1yXcay1HkR1O0_L4CF2w2CR ...
- spring boot.2x 集成swagger 加入拦截器后 swagger不能访问
忽略掉 swagger-resources下面的请求 以及忽略掉 v2下面的请求即可 转自:https://blog.csdn.net/hanwenyi520/article/details/7989 ...
- 如何使用powershell操作json对象
读取Json文件 $dataTransformerDirPath为读取Json文件的目录 点击查看代码 # 读取文件 UTF8-NOBOM function ReadFile($path) { ret ...
- 夏壹队——nabcd
我们团队项目名称是TD校园通,无课表查询你作为主要功能,是一个亮眼的功能. 我们的无课表查询功能主要解决大家平时上自习还要到教学楼拍照,教室课程情况也有断更的时候,而这个功能就解决大家的这个功能,能够 ...