传统的 HTTP-FLV 直播方案(即 FLV 协议拉流)延迟通常在 5 秒左右,这会影响观众的实时互动体验,让观众慢一步看到精彩瞬间。为了解决这一问题,视频直播 Web 拉流 SDK 提供了低延时 FLV 直播方案。该方案能将直播延迟降至 2-3 秒,并支持 3-5 档码率动态切换,在保障低延迟的同时,有效降低弱网环境下的卡顿率。本文将引导您快速接入该方案,为您的观众带来更低延迟和流畅的实时观看体验。
如果您正在构建以下对实时性要求较高的直播场景,本方案将是您的理想选择:
接入本方案后,您的直播应用将获得以下核心优势:
要了解本方案是如何将延迟降至 2 秒的,首先需要了解直播延迟是如何产生的。其中,主播端推流和内容分发链路的耗时相对固定,而 CDN 节点缓存和播放端缓冲是造成延迟、且可被优化的两个关键瓶颈。
传统的 HTTP-FLV 直播方案延迟通常在 5 秒左右,低延时 FLV 直播方案通过优化 GOP 缓存策略和播放器缓冲技术,成功解决了延迟的两大瓶颈,将直播延迟降至 2-3 秒,让观众几乎与现场实时同步,无论是体育赛事的进球瞬间,还是带货直播的限时秒杀,都能第一时间参与互动。
在低延迟场景下,观众的网络波动容易引发视频卡顿。为解决这一问题,视频直播提供 ABR 技术。该技术可以在保障低延迟的同时,根据观众的网络状况自动平衡播放的流畅度与画质。
您可以配置 3-5 个不同清晰度的档位(如超清、高清、标清)。播放器会实时监测观众的网络状况,并自动在这些档位间无缝切换。
整个切换过程不仅能将弱网环境下的卡顿率降低 30% 以上,还能始终保持 2-3 秒的低延迟,为您的观众同时提供流畅、高清的观看体验。
除了预设的标准配置,如果您希望根据线上实际的播放效果进一步优化观看体验,可以随时联系视频直播技术支持为您调整播放策略。整个过程无需您修改代码或更新版本,让您可以快速、灵活地响应业务变化。
您可以动态调整的关键维度包括:
动态配置让您的播放策略能够快速响应线上变化,在延迟控制、流畅度等关键指标上实现动态优化,从而为观众提供更稳定、更优质的直播观看体验。
使用本方案会涉及以下费用:

为实现 ABR 功能,需要在控制台为源流配置多档位转码。
AppName。例如推流地址为 rtmp://push.example.com/live/test?authinfo,则 AppName 为 live。uhd、hd、sd、ld。
说明
新增转码配置后,约有 3-5 分钟的生效延迟。请在延迟结束后重新推流,以确保新的配置生效。
完成转码配置后,您需要为每个档位生成一个专属的 FLV 拉流地址。
AppName 和 StreamName。例如推流地址为 rtmp://push.example.com/live/test?authinfo,则 AppName 为 live,StreamName 为 test。uhd、hd、sd 和 ld,每次选择后复制生成的 FLV 拉流地址。重复此操作,直到获取所有档位的地址。
示例
下表列出了不同档位的 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 |
在您的项目中使用高级版 License 集成 2.11.2 及以上版本的 Web 拉流 SDK。详见集成 SDK。
其中,如果您使用 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:档位切换失败。示例代码如下所示。
注意
为确保 ABR 功能正常生效,请务必保证您在代码中为各档位设置的码率与控制台转码配置中的一致。
请特别注意单位换算:
kbpsbps因此,代码中设置的码率值必须是控制台数值的 1000 倍。
例如,控制台设置为 3200 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); }); })