本文为您提供了 Web 拉流 SDK(VePlayer)RTM 拉流的接入方式,该功能适用于需超低延时的场景,如连麦互动、实时竞答等业务,强调端到端响应速度,对网络质量稳定性要求较高。
本文档适用于最新版本的 Web 拉流 SDK,版本信息请参考发布历史,历史版本请参考历史文档。
RTM 协议对终端设备和网络环境的要求较高,为了确保在各种情况下都能提供流畅的播放体验,强烈建议在使用 RTM 拉流时配置播放降级机制。在本文的所有示例场景均配置了降级策略。
当遇到以下任一情况,播放器将自动触发降级机制,切换到备用的拉流地址:
了解播放器如何判断浏览器是否支持 RTM / FLV 播放,请参考如何检测协议兼容性。
RTM 协议播放对终端环境要求较高,部分设备或网络状况下可能无法正常播放。为保障播放体验,VePlayer 支持在 RTM 播放失败后,自动降级到其他协议(如 FLV 或 HLS)。根据终端设备和浏览器环境,降级兼容性要求如下:
客户端环境 | 降级支持协议 | 降级流音频编码要求 |
---|---|---|
PC / Android | FLV 或 HLS | AAC |
iOS ≥ 17.1 | FLV 或 HLS | |
iOS ≤ 17.0 | HLS |
以下是 RTM 拉流的配置示例,包括单地址拉流和多清晰度或多线路拉流两种场景。
在单地址拉流场景中,支持 RTM 播放失败后自动降级、根据错误类型区分是否降级和自定义降级优先级顺序,下文分别示例各类配置方法。
VePlayer.createLivePlayer({ height: 360, playlist: [ { // RTM 流为去 B 帧且音频为 Opus 的转码流,降级流为未转码或音频非 Opus 的 HLS 或 FLV 流 definitions: [ 'https://pull-demo.volcfcdnrd.com1/live/st-4536521_webrtm.sdp', 'https://pull-demo.volcfcdnrd.com/live/st-4536521.flv', 'https://pull-demo.volcfcdnrd.com/live/st-4536521.m3u8', ], }, ], fallback: { // 1. RTM 不支持或播放失败时降级到 FLV 地址 fallbackOrder: ['rtm', 'flv'], // 2. RTM 不支持或播放失败时降级到 HLS 地址 // fallbackOrder: ['rtm', 'hls'], // 3. RTM 不支持或播放失败时降级到 FLV 地址,FLV 不支持时降级到 HLS 地址 // fallbackOrder: ['rtm', 'flv', 'hls'], }, }).then(function(veplayer) { veplayer.on(VePlayer.live.Events.FALLBACK_ERROR, function(){ // 所有协议降级完后失败 }); })
在多清晰度或多线路拉流场景中,支持配置多条线路与多种清晰度,播放器会自动展示切流菜单,用户可自由选择播放线路与画质。此外,也支持根据错误码设置有条件的降级策略,实现更灵活的播放体验。
VePlayer.createLivePlayer({ height: 360, playlist: [ { name: 'lineOne', text: 'lineOne', definitions: [ { url: 'https://pull-demo.volcfcdnrd.com/live/st-4536521.sdp', definition: 'uhd', text: 'uhd', }, { url: 'https://pull-demo.volcfcdnrd.com1/live/st-4536521_hd.sdp', definition: 'hd', text: 'hd', }, { url: 'https://pull-demo.volcfcdnrd.com/live/st-4536521.m3u8', definition: 'uhd', text: 'uhd', }, { url: 'https://pull-demo.volcfcdnrd.com/live/st-4536521_hd.m3u8', definition: 'hd', text: 'hd', }, { url: 'https://pull-demo.volcfcdnrd.com1/live/st-4536521.flv', definition: 'uhd', text: 'uhd', }, { url: 'https://pull-demo.volcfcdnrd.com1/live/st-4536521_hd.flv', definition: 'hd', text: 'hd', }, ], }, { name: 'lineTwo', text: 'lineTwo', definitions: [ { url: 'https://pull-demo.volcfcdnrd.com/live/st-4536523.sdp', definition: 'uhd', text: 'uhd', }, { url: 'https://pull-demo.volcfcdnrd.com/live/st-4536523.sdp', definition: 'hd', text: 'hd', }, { url: 'https://pull-demo.volcfcdnrd.com/live/st-4536523.m3u8', definition: 'uhd', text: 'uhd', }, { url: 'https://pull-demo.volcfcdnrd.com/live/st-4536523_hd.m3u8', definition: 'hd', text: 'hd', }, { url: 'https://pull-demo.volcfcdnrd.com/live/st-4536523.flv', definition: 'uhd', text: 'uhd', }, { url: 'https://pull-demo.volcfcdnrd.com/live/st-4536523_hd.flv', definition: 'hd', text: 'hd', }, ], }, ], fallback: { // 设置降级顺序:RTM 不支持或播放失败时降级到 FLV 地址,FLV 不支持时降级到 HLS 地址 fallbackOrder: ['rtm', 'flv', 'hls'], // 自定义降级策略:以下以“流不在线(错误码 2104)”时不降级为例 fallbackStrategy: { rtm: { Error: { excludeList: [2104], }, }, }, }, }).then(function(veplayer) { veplayer.on(VePlayer.live.Events.FALLBACK_ERROR, function(){ // 所有协议降级完后失败 }); })
VePlayer 在初始化播放源时,会自动根据当前浏览器环境判断是否支持 RTM 或 FLV 协议,从而决定是否触发降级。
isRTMSupported()
返回 true
:表示浏览器整体支持 RTM 播放。isRTMSupportCodec()
返回 true
:表示浏览器支持 RTM 所需的音视频编解码格式。true
,才会尝试拉取 RTM 流,否则将触发降级。isFLVSupported()
返回 true
:表示浏览器支持通过 MSE 播放 FLV 协议流。