揭秘阿里云 RTS SDK 是如何实现直播降低延迟和卡顿
简介: RTS NetSDK是未来直播和通信一体化SDK的基石。在RTS NetSDK之上,加一个Multimedia Framework,以及QoS消息处理,就可以构成一个一体化SDK。这对于已经有自己的Framework的客户来说是个好消息,不需要为直播和通信分别开发软件了,同时也简化了直播连麦场景的实现。
这个夏天,没什么能够比一场酣畅淋漓的奥运比赛来的过瘾。但是,在视频平台直播观看比赛也有痛点:“卡顿”和“延时”。受限于不同地域、复杂的网络情况、传输速度等原因,当您还在为赛点焦灼的时候,隔壁已经传来欢呼声,观赛兴致瞬间全无。为了打造更加流畅稳定低延时的直播体验,越来越多企业关注低延时直播技术应用。
阿里云低延时直播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 是如何实现直播降低延迟和卡顿相关推荐
- 揭秘阿里云 RTS SDK 如何实现直播降低延迟和卡顿
简介:这个夏天,没什么能够比一场酣畅淋漓的奥运比赛来的过瘾.但是,在视频平台直播观看比赛也有痛点:"卡顿" 和 "延时".受限于不同地域.复杂的网络情况.传输速 ...
- 切换阿里云maven源解决maven中央仓库下载太慢卡顿的问题
maven默认官方的中央仓库有时候很慢下载jar甚至会卡住,那么你可以切换到阿里云的maven源 在本地的maven文件夹新建settings.xml <?xml version="1 ...
- 使用阿里云Python SDK管理ECS安全组
准备工作 本机操作系统:CentOS7 python版本:python2.7.5 还需要准备如下信息: 一个云账号.Access Key ID.Access Key Secret.安全组ID.Regi ...
- 提升普适性,阿里云官方SDK发布支持Go语言SDK
摘要: 日前,阿里云官方SDK发布支持新语言--Go 语言SDK,意味着90%以上产品可以随时生成并发布Go SDK,给Go语言的开发者使用. 此次阿里云发布支持Go SDK的新功能,可以让Go语言开 ...
- 深度揭秘阿里云 Serverless Kubernetes
作者 | 陈晓宇(阿里云技术专家) 策划 | 褚杏娟 伴随着云原生的发展,从早先的单机版 Docker 到 Kubernetes 的编排领域的一统江湖,再到云上托管 Kubernetes,技术风雨变化 ...
- 阿里云 OSS SDK :上传的图片直接访问变成下载问题解决
文章目录 阿里云 OSS SDK :上传的图片直接访问变成下载问题解决 1.产生原因 2.解决方案 阿里云 OSS SDK :上传的图片直接访问变成下载问题解决 1.产生原因 上传的文件,未指定文件访 ...
- java使用阿里云oss sdk
导入依赖 <dependencies><!--阿里云oss sdk依赖--><dependency><groupId>com.aliyun.oss< ...
- Android开发-在Android里接入阿里云推流SDK实现直播推流的功能
前 言 如今,在国内移动互联网发展了几年的时间,移动开发技术也相对的成熟,在咱们日常使用的手机App中也少不了直播的功能,不管是娱乐类.游戏类.体育类还是教育类等的App都会有直播的功能,可以说直播的 ...
- uni-app接入阿里云认证SDK(号码认证服务),App客户端一键登方式
uni-app接入阿里云认证SDK(号码认证服务)App客户端一键登方式 首先,你需要了解和开通阿里云的号码认证服务,地址:https://help.aliyun.com/product/75010. ...
最新文章
- 李德毅院士:希望智能驾驶成为我国继高铁之后又一张新名片
- 解决Linux 无法使用userdel 删除用户和组的问题
- Android Studio出现Unable to start the daemon process问题
- del rd命令行下删除文件不需要确认
- 基于VSM的命名实体识别、歧义消解和指代消解
- 经典笔试编程题--Java实现
- Android 基本测试工具的使用
- 建一个 5G 基站,到底要花多少钱?
- [转载]一个本科生在世界五大顶尖咨询公司实习心得
- 学习廖雪峰的Python教程之Python基础
- 配置nginx作为下载站点
- ubuntu18 安装 mysql5.7
- 弹性计算 Region 化部署和跨可用区容灾介绍
- HTML5 第004篇 <abbr>标签【定义缩写】
- 如何把Ai绘画工具放到我们的App中
- linux中nginx安装前置条件以及安装流程,非常简单
- Windows安装NetCat
- 应用程序无法启动,错误代码0xc0000142
- css -- position : absolute 在不同的浏览器位置不同
- 利用百度网盘引流方法,如何利用百度网盘进行精准引流?
热门文章
- linux ofstream open,浅谈linux性能调优之十一:内存分配管理
- c语言简单的24点游戏,C语言解24点游戏程序
- 多帧点云数据拼接合并_PCL点云处理实践(二):点云的处理和拼接
- datapumpdir oracle_oracle_datapump创建外部表案例
- Java开发环境搭建详细步骤
- python 局域网主机扫描_python扫描局域网主机名
- pandas 更改单元格的值_懂Excel轻松入门Python数据分析包pandas(二十四):连续区域...
- java ee文件下载_JavaEE实现文件下载
- python在工作中怎么用_如何用python在工作中“偷懒”
- php注册树模式,php设计模式-注册树模式