RTS 在阿里云视频直播的根底上进行底层技术优化,通过集成阿里云播放器 SDK,反对在千万级并发场景下节点间毫秒级延时直播的能力,补救了传统直播存在 3~6 秒延时的问题,确保了超低延时、低卡顿、秒开晦涩的直播观看体验。本文介绍了基于 RTS 超低提早直播优化强互动场景体验的最佳实际计划,并以阿里云播放器 Aliplayer 为例,具体介绍 RTS 超低提早拉流接入、主动降级、排障信息获取等逻辑的实现,助力企业打造互动直播行业的产品竞争力。
实用场景
该计划实用于对超低提早直播有诉求的客户,尤其是业务中存在强互动场景直播的场景。强互动场景直播次要是指对主播和观众存在互动,或观众存在更高实时性观看、画面互动需要的状况,常见场景例如:
- 教育直播:利用于大班课,能够反对超大数量规模的同学同时在线超低延时与老师互动教学。
- 电商直播:卖家与买家实时互动答疑,交换商品信息,互动效率晋升转化促成交易成单。
- 体育直播:直播精彩体育、电竞等赛事,让观众实时理解现场状况,积极参与平台弹幕、评论等互动。
- 互动娱乐:主播能够在观众送礼物时及时反馈,加强与观众之间的互动体验。
- 会议直播:大型会议内容实时分享,让散布各地参会者放弃同步的会议体验,会上沟通更麻利。
业务介绍
背景
某在线常识分享产品为外围的技术服务商,客户冀望能基于产品的原有一般直播 Paas 能力进行降级,升高终端用户的直播提早,提供更优质的用户观看体验。举荐客户底层接入 RTS 服务实现超低提早的平台直播解决方案,最终封装后作为 Saas 产品能力提供给内部用户付费接入应用,通过超低提早的直播体验打造其 SAAS 产品在市场上的外围竞争力。
本文围绕着降级过程中客户外围诉求进行开展。特地地,会对如何应用 RTS 解决传统 Web 端应用 HLS 播放存在高提早的场景进行重点介绍。
业务场景
传统直播降级 RTS 超低提早直播过程中,仅波及底层对接变更,无需革新终端用户的性能应用习惯,直播外围性能诉求次要思考推拉流侧用户场景:
- 主播推流:无连麦场景下间接推流 / 连麦场景平台合流后转推流。
- 观众拉流:在 HTML5 页面中间接播放内容 / 在 HTML5 页面中参加连麦并播放内容。
以后解决方案及痛点
次要场景
推流局部通过 rtmp 直推规范直播或者 webrtc 采集后合流转推规范直播实现;而拉流时,为了满足用户无需装置 app 即可便捷观看的需要,须要重点思考挪动端的浏览器页面对媒体流的兼容性问题,相较 FLV 和 RTMP 协定在 HTML 5 页面中不甚现实的体现,客户优先思考应用 HLS 格局进行拉流。
未接入 RTS 时的外围痛点
因为 HLS 协定个性,默认 Web 端观看直播画面提早在 10s 以上,只管传统直播中,客户能够在直播提早中配置 HLS 为低提早,但此时拉流端的提早也仍在 3-6s 左右,对存在强互动需要场景的体验并不敌对。
除 HLS 协定本身导致的高提早痛点外,Saas 直播厂商在未接入阿里云规范直播前,还会额定面临以下几个痛点:
- 自建媒体流解决服务须要研发和保护老本,须要丰盛的云上媒体解决能力,满足在音视频解决上的需要。
- 直播观众扩散,用户观看体验受到网络最初一公里链路的品质影响较大,须要海量节点满足散发需要。
- 抉择 Paas 服务时,须要其具备弱小的产品 API 治理能力,以便其产品能定制业务逻辑,实现疾速迭代。
以后规范直播计划架构图
以后业务整体架构图
RTS 接入流程详解
规范直播降级到 RTS 过程中,次要须要革新的局部为
- 播放器:客户在网页端播放时,须要应用阿里云播放器,或者通过客户自有播放器对接 Web RTS SDK。
- 直播服务端转码:原始推流内容进行 RTS 转码模板解决,满足播放端兼容性需要。
- 播放地址生成:在业务服务器接口生成地址时,须要结构 RTS 地址格局、举荐一并返回播放器降级地址。
接入 RTS 后直播计划架构图
施行步骤
筹备工作
在正式开始接入前,默认您曾经在控制台实现开明直播服务、增加推流域名和播流域名、配置 CNAME、关联推流域名和播流域名,并开明了超低延时直播性能等根底筹备工作。
在本案例的业务降级流程中,笼罩了常见场景下的举荐步骤及性能阐明,其中非必要的革新会在步骤中进行标注,可依据理论业务诉求选择性利用。
步骤一:RTS 推流地址及播放地址结构
结构推拉流地址前,须要筹备好直播流的推流域名、播流域名、AppName(利用)、StreamName(直播流)、鉴权串(如有)。以罕用的 RTMP 推流,RTS 拉流为例,根底拼接规定如下:
推流地址:rtmp://demo.aliyundoc.com/app/stream?auth_key={鉴权串}
结构规定:推流协定:// 推流域名 /AppName(利用)/StreamName(直播流)? 鉴权串
拉流地址:artc://example.aliyundoc.com/app/stream?auth_key={鉴权串}
结构规定:artc:// 播流域名 /AppName(利用)/StreamName(直播流)? 鉴权串
步骤二:RTS 服务端转码配置
因为原生浏览器对 WebRTC 的限度,在 Web 端播放 RTS 流时存在以下限度:
- 视频编码:不反对蕴含 B 帧(会呈现画面跳跃)。
- 音频编码:不反对 AAC 编码(会呈现乐音)。
绝对的,在推流时举荐应用
- 视频编码:H.264 编码的 baseline 级别(默认不含 B 帧)。
- 音频编码:OPUS 编码。
如果无法控制推流内容的编码,或者仅无奈反对 OPUS 的音频编码直推,能够配置转码模板来兼容。不同转码配置对提早影响略有不同,可参考如下配置阐明进行抉择:
- 登录视频直播控制台,在控制台左侧导航栏,进入域名治理页面,抉择须要配置的播流域名,单击域名配置。
- 单击模版配置 > 转码模板配置,单击 RTS 转码页签,单击增加。
- 抉择模板类型
模板类型 | 应用场景 | 模板劣势 |
---|---|---|
原画模板 | 仅须要去 B 帧或 OPUS 转码,推流编码不含 B 帧时仅开启 OPUS 转码即可 | 原画仅 OPUS 转码时提早最优 |
窄带高清™模板 | 等同视频品质下,最高节俭 20-40% 带宽 | 节俭带宽,带宽老本最优 |
规范转码模板 | 传统转码能力,对压缩比例和提早无极致需要。 | |
纯音频转码模板 | 删除视频只输入 OPUS 音频流 | 主动去视频画面 |
在以后客户案例中,客户优先思考提早因素,因而转码模板抉择原画模板,仅开启 OPUS 转码,缩小视频处理过程中的转码耗时,配置示例如下。
模板配置实现后,转码流的播放地址须要在原播放地址的根底上进行批改。如下图所示,创立模板 ID 中填写 example 时,结尾会主动补全后缀 -RTS,即此时模板 ID 全名为 example-RTS。
留神:配置转码后,转码流的播放地址对应为
转码流地址:artc://example.aliyundoc.com/app/stream_example-RTS?auth_key={鉴权串}
结构规定:artc:// 播流域名 /AppName(利用)/StreamName(直播流)_转码模板 ID? 鉴权串
特地揭示:如播放域名配置鉴权,鉴权串须要针对已拼接转码模板 ID 的地址进行签算生成。
步骤三:RTS Web 播放器对接
RTS 超低延时直播以 WebRTC 信令交互方式为根底,须要 HTML5 播放器播放时实现信令交互及媒体信息的编解码,RTS 拉流播放时有三种抉择:
- 集成阿里云播放器 SDK(举荐),倡议应用 V2.9.23 及以上版本,接入周期最短。
- 其余播放器集成 Web RTS SDK 作为插件,实用于强依赖其余播放器的场景。
- 客户自研播放器对接凋谢信令规范,须要具备 WebRTC 根底的开发人员接入。
以后案例中,客户应用阿里云播放器 Aliplayer 实现 RTS 拉流接入、拉流主动降级、排障信息获取等逻辑的实现。阿里云播放器曾经集成了 Web RTS SDK,能够间接用于播放 RTS 流,并且内置了 RTS 主动降级逻辑,只须要提供一个降级地址即可应用,可能实现疾速业务上线。
当用户播放时应用的浏览器不反对 WebRTC,或者用户端通过 RTS 拉流失败时,为了保障业务的可用性,播放页面能够抉择降级至 HLS、FLV 播放,目前次要反对的降级场景包含:
- 浏览器不反对 WebRTC 或 H.264。
- 信令申请失败(拉流地址有效、HTTPS 配置有效、RTS 配置有效等起因)。
- 起播超时或中途断流。
以下为阿里云播放器 Aliplayer 示例代码,实现了根底播放的逻辑(含降级),示例代码中的关键字段阐明:
- source:指定 RTS 播放地址(填写步骤二生成的即可)。
- rtsFallbackSource:指定降级地址,如 HLS 拉流地址。
- skipRtsSupportCheck:是否跳过客户端浏览器版本兼容查看,举荐放弃 false 即可。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="IE=edge" >
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
<title>Aliplayer Rts Demo</title>
<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.9.23/skins/default/aliplayer-min.css" />
<script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/de/prismplayer/2.9.23/aliplayer-min.js"></script>
</head>
<body>
<div class="prism-player" id="player-con"></div>
<script>
/**
* 播放器默认播放 source 提供的 rts 拉流地址,如果失败,则会主动降级至 rtsFallbackSource 提供的拉流地址(如 HLS 地址)。* 可能的降级场景包含:* 1. 浏览器不反对 RTS,间接降级
* 2. RTS 信令申请失败(拉流地址有效、https 配置有效、RTS 配置有效等),间接降级
* 3. RTS 起播超时或中途断流,按自定义策略重试失败后降级
**/
// 更多播放器配置请参考 https://player.alicdn.com/aliplayer/index.html
var options = {
"id": "player-con",
"source": "RTS 播放地址",
"rtsFallbackSource": "降级地址,如 HLS",
"width": "100%",
"height": "500px",
"autoplay": true,
"isLive": true,
"playsinline": true,
"skipRtsSupportCheck": false, // 对于不在 https://help.aliyun.com/document_detail/397569.html 中的浏览器,能够传 true 跳过查看,强制应用 RTS(有危险,须要自测保障)/**
* RTS 拉流超时会默认重试
* 以下两个参数用来管制降级之前的重试策略,比方 3000 毫秒超时,重试一次,如果再拉不到流就降级,那么总共期待 6000 毫秒降级
**/
// RTS 多久拉不到流会重试,默认 3000 ms
// rtsLoadDataTimeout: 2000,
// RTS 拉不到流重试的次数,默认 5,此参数倡议设为 1,即重试 1 次后降级,能够缩小降级等待时间
liveRetry: 1,
};
var player = new Aliplayer(options, function () {/* player ready */});
// 降级时会触发此事件
player.on('rtsFallback', function(event) {console.log('[EVENT]rtsFallback', event.paramData);
// event.paramData.reason 降级的起因
// event.paramData.fallbackUrl 降级到的地址
})
player.on('error', function(event) {console.log('[EVENT]error', event.paramData);
})
</script>
</body>
步骤四:低提早推流配置
通过 RTMP 协定推流时,须要管制推流数据的关键帧距离(GOP),GOP 值越大,拉流提早越高,举荐 GOP 设置为 1s。
以 OBS 软件推流为例,须要在推流软件的输入设置中,设置以下视频编码参数值。
- 输入模式:高级
- 关键帧距离(秒,0= 主动):1
- CPU 应用预设(高 = 较少的 CPU 占用):veryfast
- 配置(Profile):baseline(去除 B 帧)
- 微调(Tune):zerolatency
输入参数配置实现后,推流地址正确填写即可开始推流。
- 服务:抉择自定义。
- 服务器:输出曾经生成的鉴权推流地址,例如:rtmp://demo.aliyundoc.com/app/stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0。
- 串流密钥:串流密钥为空。
步骤五:页面播放测试及提早观测
实现推流和播放器对接后,能够在页面播放器中手动输出播放地址,或从业务后端接口获取 RTS 播放地址进行播放。
提早成果演示
https://v.youku.com/v_show/id…
步骤六:H5 页面播放时获取 TraceID
在传统直播中遇到提早高、卡顿或其余问题须要提交售后排障工单时,往往须要用户帮助采集多种客户端信息,排障效率较低,而在 RTS 接入直播时,咱们只需捕捉信令交互阶段中的 traceid 信息,即可提供给工程师联合问题景象进行问题剖析。
该步骤为可选步骤,为了线上业务在排障场景中的便捷性和信息精准度,举荐作为接入革新步骤之一。以阿里云播放器 Aliplayer / 其余播放器集成 RTS SDK 接入两种场景为例,提供了排障信息 TraceID 的获取 Demo。
1. 通过阿里云播放器 Aliplayer 播放
须要通过 player._rts.traceid 被动获取,用户能够在呈现卡登时抉择上报信息。
示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="IE=edge" >
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
<title>Aliplayer Online Settings</title>
<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.9.23/skins/default/aliplayer-min.css" />
<script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/de/prismplayer/2.9.23/aliplayer-min.js"></script>
</head>
<body>
<div class="prism-player" id="player-con"></div>
<button id="trace"> 获取 TraceId</button>
<script>
var btn = document.getElementById('trace');
var player = new Aliplayer({
"id": "player-con",
"source": "RTS 拉流地址",
"width": "100%",
"height": "500px",
"autoplay": true,
}, function (player) {console.log("The player is created");
}
);
btn.addEventListener('click', function() {
// 获取 traceId,请应用 aliplayer 2.9.22 及以上版本
var traceId = player._rts.traceid;
console.log('traceId', traceId)
})
</script>
</body>
2. 通过其余播放器集成 RTS SDK 接入
RTS SDK 能够通过注册 customReporter 函数获取所有音讯,当 msgid 为 126 即订阅胜利时,能够获取 TraceID。
示例代码:
AliRTS.createClient({customReporter: (params) => {const msgIds = [126/* 订阅胜利 */, 220/* 推流胜利 */];
if (msgIds.includes(Number(params.msgid))) {const args = JSON.parse(params.args);
const traceId = args.tcid;
console.log('traceId', traceId);
}
}
})
RTS 超低提早直播计划劣势
劣势一:自助接入便捷
无论间接接入阿里云 RTS,或是基于阿里云规范直播降级为 RTS,技术对接流程均反对自助化的极简操作,1 周可实现业务的接入到上线。
劣势二:超低提早的多平台反对
端到端延时从 10 秒以上升高至百毫秒,且反对大部分支流平台播放。
Native 端:兼容 iOS、Andriod、Mac、Windows 平台。
Web 端:终端兼容率大于 94%,凋谢 WebRTC 信令自研接入标准。
劣势三:抗弱网能力
从 TCP 协定降级至 UDP 协定,叠加媒体个性,打消窗口阻塞和延时应答,并取得更强的抗卡顿能力,在丢包 30% 的状况下能够晦涩播放。
劣势四:提供高可用、灵便降级计划
服务端具备欠缺的推拉流全链路监控及告警能力,客户端反对 RTS 拉流失败或个别浏览器无奈兼容时主动降级,从客户端和服务端双重对业务高可用性进行保障。
劣势五:海量节点提供高并发反对
超低延时直播复用 CDN 节点架构,通过寰球 2800+ 节点提供服务。通过实际测验的千万级高并发视频云直播技术,无效晋升私域流量的商业转化。
劣势六:弱小转码能力
直播服务端转码配置极简,触发便捷,满足对多码率、不同分辨率、不同编码的用户需要。阿里云独有的窄带高清™ 个性,保障画质的同时降低码率,整体上帮忙用户降低成本,等同视频品质下最高可节俭 20%~40% 带宽。
劣势七:丰盛 API 可对接治理
提供 137 个丰盛灵便的 API 接口反对,满足业务全面诉求。客户反对 StreamID 流维度用量统计,联合 RTS 及一般直播的域名用量统计,能够准确统计各流的用量数据,便于用户统计上行业务具体用量。
常见问题
如何解决局部安卓手机 QQ 浏览器无奈推拉流?
局部安卓手机(如 vivo iQOO)装置 QQ 浏览器后首次关上可能无奈拉起 X5 内核,导致 WebRTC 兼容问题推拉流失败(报错:Failed to execute ‘setRemoteDescription’ on ‘RTCPeerConnection’)。如果遇到该场景请依照以下操作确保 X5 内核初始化:
- 连贯 WIFI 网络。
- 刷新以后页面并期待大概 30 秒。
- 重启浏览器,再次拜访页面即可恢复正常。
为什么局部浏览器不反对 Web RTS SDK?
对于 Web RTS SDK 暂不反对的浏览器,次要有以下起因:
- 浏览器未实现 WebRTC 相干 API,或实现有缺点(如 IE 浏览器、UC 浏览器)。
- 浏览器反对 WebRTC API,但不反对 H.264 编码,仅反对 VP8(如局部安卓手机零碎自带浏览器)。