快直播自适应码率播放

最近更新时间:2026-04-20 17:34:05

我的收藏

示例代码

针对开发者的接入反馈的高频问题,腾讯云提供更加简洁的 API-Example 工程,方便开发者可以快速了解相关 API 的使用,欢迎使用。
所属平台
GitHub 地址
iOS
GitHub
Android
GitHub

功能介绍

在了解自适应码率播放之前,首先要了解什么是无缝切流。
无缝切流:在切换不同码率的转码流时,能够做到无缝衔接,不会出现声音画面中断或者跳变的情况,实现观感和听感的平滑过渡。
自适应码率播放:在无缝切流的基础上更进一步,无需用户干预,完全由当前网络带宽决定实现自动无缝切流,确保播放的流畅度不受网络波动的影响。

开启自适应播放

自适应播放功能依托于腾讯云的直播自适应码率支持,如果您想要对接这个功能,需要在腾讯云的管理控制台 开通直播自适应码率服务。服务开通之后,需要创建至少一个自适应模板并包含两个子流,才可使用自适应播放功能。
说明:
自适应播放会在创建的自适应模板中,通过当前网络带宽来选择一个子流进行播放。
在使用自适应播放功能时,会产生模板中所有子流的转码费用

创建自适应码率模板

1. 登录 云直播控制台,选择功能配置 > 直播自适应码率,单击创建模板。如下图所示:

2. 配置子流:至少需要配置两个子流。

3. 绑定域名:创建转码模板之后,需要绑定域名。



说明:
配置自适应码率模板的详细参数,请参见 直播自适应码率

获取快直播自适应播放地址

1. 通过地址生成器,选择创建的自适应码率模板,单击生成地址按钮。

2. 通过自适应码率模板子流的名称来拼接地址。
快直播自适应播放的格式为:
webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate={startStream}&tabr_control=auto
在上述的 URL 中,存在一些关键字段,关于其中关键字段的含义信息,详见下表:
字段名称
字段含义
webrtc://
快直播 URL 的前缀字段。
Domain
快直播播放域名。
AppName
应用名称,指的是直播流媒体文件存放路径,默认云直播会分配一个路径:live。
StreamName
流名称,指每路直播流唯一的标识符。
tabr_bitrates
转码模板列表,多个子流之间使用逗号隔开。转码模板必须已经在控制台中创建,并且按照码率从高到低排列。
subStreams
子流名称,多个子流用逗号分隔。
tabr_start_bitrate
当前要播放的子流,取值必须是子流名称列表中的一个。
startStream
当前要播放的子流名称。
tabr_control
打开自适应码率播放。取值固定为 “auto”, 如果是手动无缝切流则不需要。
URL 地址样例(1080p,720p, 480p 均为子流名称):
类型
URL 地址
原始
webrtc://xxx.liveplay.myqcloud.com/stream_name
无缝切流
webrtc://xxx.liveplay.myqcloud.com/stream_name?tabr_bitrates=720p,480p&tabr_start_bitrate=720p
自适应播放
webrtc://xxx.liveplay.myqcloud.com/stream_name?tabr_bitrates=720p,480p&tabr_start_bitrate=720p&tabr_control=auto

实现快直播自适应码率播放

使用 V2TXLivePlayer 对象可以使用快直播自适应播放,具体做法如下(传入正确的 URL 是关键):
示例代码:
Android
iOS
HarmonyOS
// 创建⼀个 V2TXLivePlayer 对象;
V2TXLivePlayer player = new V2TXLivePlayerImpl(mContext);
player.setObserver(new MyPlayerObserver(playerView));
player.setRenderView(mSurfaceView);
// 传⼊快直播自适应播放地址,即可开始播放;
player.startLivePlay("webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate={startStream}&tabr_control=auto");
// 创建⼀个 V2TXLivePlayer 对象;
V2TXLivePlayer *player = [[V2TXLivePlayer alloc] init];
[player setObserver:self];
[player setRenderView:videoView];
// 传⼊快直播自适应播放地址,即可开始播放;
[player startLivePlay:@"webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate={startStream}&tabr_control=auto"];
import { createV2TXLivePlayer, V2TXLivePlayer, V2TXLivePlayerObserver } from 'liteavsdk';

// 创建一个 V2TXLivePlayer 对象
let context: Context = getContext();
let player: V2TXLivePlayer = createV2TXLivePlayer(context);

this.player.setObserver(observer);
this.player.setRenderView(viewId); // 传入 XComponent 的 id
// 传入快直播自适应播放地址,即可开始播放
this.player.startPlay("webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate={startStream}&tabr_control=auto");
注意:
在设置的 tabr_bitrates 参数中,子流必须按照码率由高到低进行排列
进入自适应码率播放后,将无法进行无缝切流。除非去掉 tabr_control=auto 重新 startPlay。

实现快直播无缝切流

使用 V2TXLivePlayer 对象可以使用快直播自适应播放,具体做法如下(传入正确的 URL 是关键):
示例代码:
Android
iOS
HarmonyOS
// 创建⼀个 V2TXLivePlayer 对象
V2TXLivePlayer player = new V2TXLivePlayerImpl(mContext);
player.setObserver(new MyPlayerObserver(playerView));
player.setRenderView(mSurfaceView);
// 传⼊无缝切流地址,使用720p开始播放,假设对应子流名称为Auto720p
player.startLivePlay("webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate=Auto720p");
// ...
// 切流到480p,假设对应子流名称为Auto480p
player.switchStream("webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate=Auto480p");
// 创建⼀个 V2TXLivePlayer 对象;
V2TXLivePlayer *player = [[V2TXLivePlayer alloc] init];
[player setObserver:self];
[player setRenderView:videoView];
// 传⼊无缝切流地址,使用720p开始播放,假设对应子流名称为Auto720p
[player startLivePlay:@"webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate=Auto720p"];
// ...
// 切流到480p,假设对应子流名称为Auto480p
[player switchStream:@"webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate=Auto480p"];
import { createV2TXLivePlayer, V2TXLivePlayer, V2TXLivePlayerObserver } from 'liteavsdk';

// 创建一个 V2TXLivePlayer 对象
let context: Context = getContext();
let player: V2TXLivePlayer = createV2TXLivePlayer(context);

this.player.setObserver(observer);
this.player.setRenderView(viewId); // 传入 XComponent 的 id
// 传入无缝切流地址,使用720p开始播放
player.startPlay("webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate=Auto720p");
// ...
// 切流到480p
player.switchStream("webrtc://{Domain}/{AppName}/{StreamName}?tabr_bitrates={subStreams}&tabr_start_bitrate=Auto480p");