自适应码率(ABR,adaptive bitrate)是一种面向观众的直播分发技术,可在网络波动时提供流畅且高质量的播放体验。您可以预先配置多个采用不同编码方式、分辨率和码率的子流,播放器会根据观众的实时网络状况自动选择最合适的子流,在播放流畅度和画质之间取得平衡。本文介绍如何使用 Web 拉流 SDK(VePlayer)播放 HLS-ABR、RTM-ABR 和 FLV 流。
建议使用最新版本的 Web 拉流 SDK。版本信息请参考发布历史,历史版本请参考历史文档。
已完成 SDK 集成。如集成 2.11.2 及以上版本的 Web 拉流 SDK,确保使用高级版或试用版 License。
AppName,并在协议类型中选择 HLS-ABR。通过以下任一方式获取 HLS-ABR 地址:
如果您使用 NPM 方式引入依赖,必须引入并注册 hlsjs 和 abr 插件,以确保 HLS 播放和 ABR 功能可用。
示例代码如下所示:
import { hlsjs, abr } from '@volcengine/veplayer-plugin'; register([hlsjs, abr]);
创建播放器时,您可以配置 ABR 功能并监听清晰度档位切换事件。
url。播放器会请求该地址并获取主 M3U8 文件。主 M3U8 文件会列出所有可用子流,例如 1080P 和 720P 子流。播放过程中,播放器会持续监测观众网络状况,并在不同子流间自动切换。网络较差时,播放器会选择低码率子流以减少卡顿。网络恢复后,播放器会无缝切回高码率子流,从而保障流畅、稳定的观看体验。ABR_SWITCH_START:开始切换档位。ABR_SWITCH_SUCCESS:档位切换成功。ABR_SWITCH_FAILED:档位切换失败。示例代码如下所示。
VePlayer.createLivePlayer({ width: 640, height: 360, url: 'https://pull.example.com/live/test/abr.m3u8', }).then(function (veplayer) { // 监听档位切换事件。 veplayer.on(VePlayer.live.Events.ABR_SWITCH_START, function (data) { console.log('ABR_SWITCH_START', data.bitrate); }); veplayer.on(VePlayer.live.Events.ABR_SWITCH_SUCCESS, function (data) { console.log('ABR_SWITCH_SUCCESS', data.bitrate); }); veplayer.on(VePlayer.live.Events.ABR_SWITCH_FAILED, function (data) { console.log('ABR_SWITCH_FAILED', data.bitrate); }); })
说明
如需播放 RTM-ABR 流,请确保已集成 2.12.0 及以上版本的 Web 拉流 SDK。
AppName,并在协议类型中选择 RTM-ABR。通过以下任一方式获取 RTM-ABR 地址:
StreamType 设置为 abr,动态生成 RTM-ABR 地址。不同后缀对应不同的起播清晰度档位,请从返回结果中选择一个 Protocol 取值为 rtm-abr、Tag 取值为 RTM-ABR-WebSDK 的地址起播。注意
如果您使用 NPM 方式引入依赖,必须引入并注册 rtm 和 abr 插件,以确保 RTM 播放和 ABR 功能可用。
示例代码如下所示:
import { rtm, abr } from '@volcengine/veplayer-plugin'; register([rtm, abr]);
创建播放器时,您可以配置 ABR 功能并监听清晰度档位切换事件。
url。地址中的后缀决定起播清晰度档位。播放过程中,视频直播服务端会根据观众网络状况自动切换清晰度档位。网络较差时,视频直播服务端会切换到低码率流以减少卡顿。网络恢复后,视频直播服务端会无缝切回高码率流,从而保障流畅、稳定的观看体验。ABR_SWITCH_START:开始切换档位。ABR_SWITCH_SUCCESS:档位切换成功。ABR_SWITCH_FAILED:档位切换失败。示例代码如下所示。
VePlayer.createLivePlayer({ width: 640, height: 360, url: 'https://pull.example.com/live/test_sd_autortm.sdp?rtmabr=true', }).then(function (veplayer) { // 监听档位切换事件。 veplayer.on(VePlayer.live.Events.ABR_SWITCH_START, function (data) { console.log('ABR_SWITCH_START', data.bitrate); }); veplayer.on(VePlayer.live.Events.ABR_SWITCH_SUCCESS, function (data) { console.log('ABR_SWITCH_SUCCESS', data.bitrate); }); veplayer.on(VePlayer.live.Events.ABR_SWITCH_FAILED, function (data) { console.log('ABR_SWITCH_FAILED', data.bitrate); }); })
AppName。使用地址生成器生成不同清晰度档位的 FLV 拉流地址。生成地址时,按以下规则填写:
rtmp://push.example.com/live/test?authinfo,则 AppName 为 live。填写 StreamName 时,先确定基础流名称 test,再根据清晰度档位拼接对应的子流后缀。例如,超清档位填写 test_uhd,高清档位填写 test_hd。按上述方式分别生成并记录每个清晰度档位的 FLV 拉流地址。
示例
下表展示了不同清晰度档位的 FLV 地址及其对应的码率:
| 档位 | 拉流地址 | 码率(kbps) |
|---|---|---|
| 超清(UHD) | https://pull.example.com/live/123456_uhd.flv | 3200 |
| 高清(HD) | https://pull.example.com/live/123456_hd.flv | 2048 |
| 标清(SD) | https://pull.example.com/live/123456_sd.flv | 1638 |
| 低清(LD) | https://pull.example.com/live/123456_ld.flv | 1024 |
如果您使用 NPM 方式引入依赖,必须引入并注册 flv 和 abr 插件,以确保 FLV 低延时和 ABR 功能可用。
示例代码如下所示:
import { flv, abr } from '@volcengine/veplayer-plugin' register([flv, abr]);
由于部分移动端浏览器(如 iOS 16 之前的 Safari)无法播放 FLV 流,为确保直播在这些设备上仍能正常播放,SDK 提供了 HLS 降级方案。启用此方案后,当播放器检测到当前浏览器不支持播放 FLV 流时,会自动切换到备用的 HLS 流进行播放。为确保降级功能正常生效,如果您通过 NPM 方式引入依赖,请务必同时引入并注册 hlsjs 插件。示例代码如下所示。
import { flv, hlsjs, abr } from '@volcengine/veplayer-plugin'; register([flv, hlsjs, abr]);
在创建播放器时,您可以通过以下配置,为观众打造低延迟、高流畅且全平台兼容的直播体验:
ABR_SWITCH_START:开始切换档位。ABR_SWITCH_SUCCESS:档位切换成功。ABR_SWITCH_FAILED:档位切换失败。示例代码如下所示。
注意
kbpsbps3200 kbps,则代码中应传入 3200000。VePlayer.createLivePlayer({ width: 640, height: 360, playlist: [ { definitions: [ // 初始播放档位的 FLV 拉流地址。 'https://pull.example.com/live/123456_uhd.flv', // 用于降级播放的 HLS 拉流地址,可通过控制台的地址生成器生成。 'https://pull.example.com/live/123456_uhd.m3u8', ], }, ], flv: { abr: { // 初始播放档位的码率。单位为 bps。 bitrate: 3200000, // 各档位的码率和 FLV 拉流地址。码率单位为 bps。 urls: { 3200000: 'https://pull.example.com/live/123456_uhd.flv', 2048000: 'https://pull.example.com/live/123456_hd.flv', 1638000: 'https://pull.example.com/live/123456_sd.flv', 1024000: 'https://pull.example.com/live/123456_ld.flv', } } }, fallback: { // 先尝试播放低延迟 FLV 流。当播放器检测到当前浏览器无法播放低延迟 FLV 流时,会自动降级播放 HLS 流。 fallbackOrder: ['ll-flv', 'hls'], } }).then(function (veplayer) { // 监听档位切换事件。 veplayer.on(VePlayer.live.Events.ABR_SWITCH_START, function (data) { console.log('ABR_SWITCH_START', data.bitrate); }); veplayer.on(VePlayer.live.Events.ABR_SWITCH_SUCCESS, function (data) { console.log('ABR_SWITCH_SUCCESS', data.bitrate); }); veplayer.on(VePlayer.live.Events.ABR_SWITCH_FAILED, function (data) { console.log('ABR_SWITCH_FAILED', data.bitrate); }); })