腾讯云直播SDKHLS 自适应码率播放_音视频解决方案_同尘科技

直播SDK 2年前 (2023-05-30) 浏览 143

示例代码

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

所属平台 GitHub 地址
iOS Github
Android Github

功能介绍

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

开启自适应播放

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

创建自适应码率模板

1. 登录 云直播控制台,选择功能配置 > 直播自适应码率,创建自适应码率模板。如下图所示:
2. 配置子流:至少应该配置两个子流。3. 绑定域名:创建转码模板之后,需要绑定域名。
说明:配置自适应码率模板的详细参数,请参见 直播自适应码率。

获取 HLS 自适应播放地址

1. 通过 地址生成器,选择创建的自适应码率模板,单击生成。2. 通过自适应模板的名称,来拼接地址。HLS 自适应播放的格式为:

http://{Domain}/{AppName}/{StreamName}_{AdaptiveTemplate}.m3u8

在上述的 URL 中,存在一些关键字段,关于其中关键字段的含义信息,详见下表:

字段名称 字段含义
http:// HLS URL 的前缀字段
Domain HLS 直播播放域名
AppName 应用名称,指的是直播流媒体文件存放路径,默认云直播会分配一个路径:live
StreamName 流名称,指每路直播流唯一的标识符
AdaptiveTemplate 自适应码率模板名称,表明使用哪一个配置模板

URL 地址样例(hlsAutoTest 为自适应码率模板名称):

类型 URL地址
原始 http://xxx.liveplay.myqcloud.com/stream_name.m3u8
自适应播放 http://xxx.liveplay.myqcloud.com/stream_name_hlsAutoTest.m3u8

实现 HLS 自适应播放

使用 V2TXLivePlayer 对象可以使用 HLS 自适应播放,具体做法如下(传入正确的 URL 是关键):示例代码:AndroidiOS

// 创建⼀个 V2TXLivePlayer 对象;V2TXLivePlayer player = new V2TXLivePlayerImpl(mContext);player.setObserver(new MyPlayerObserver(playerView));player.setRenderView(mSurfaceView);// 传⼊HLS自适应播放地址,即可开始播放;player.startLivePlay("http://{Domain}/{AppName}/{StreamName}_{AdaptiveTemplate}.m3u8");
// 创建⼀个 V2TXLivePlayer 对象;V2TXLivePlayer *player = [[V2TXLivePlayer alloc] init];[player setObserver:self];[player setRenderView:videoView];// 传⼊HLS自适应播放地址,即可开始播放;[player startLivePlay:@"http://{Domain}/{AppName}/{StreamName}_{AdaptiveTemplate}.m3u8"];

实现 HLS 无缝切流

使用 V2TXLivePlayer 对象可以使用 HLS 无缝切流,具体做法如下:1. 播放自适应地址,并且设置 Observer 回调AndroidiOS

// 创建⼀个 V2TXLivePlayer 对象;V2TXLivePlayer player = new V2TXLivePlayerImpl(mContext);player.setObserver(new MyPlayerObserver(playerView));player.setRenderView(mSurfaceView);// 传⼊HLS自适应播放地址,即可开始播放;player.startLivePlay("http://{Domain}/{AppName}/{StreamName}_{AdaptiveTemplate}.m3u8");
// 创建⼀个 V2TXLivePlayer 对象;V2TXLivePlayer *player = [[V2TXLivePlayer alloc] init];[player setObserver:self];[player setRenderView:videoView];// 传⼊HLS自适应播放地址,即可开始播放;[player startLivePlay:@"http://{Domain}/{AppName}/{StreamName}_{AdaptiveTemplate}.m3u8"];

2. 在 onConnected 回调中,获取全部的子流地址AndroidiOS

/** * 已经成功连接到服务器 * @param player    回调该通知的播放器对象 * @param extraInfo 扩展信息 */public void onConnected(V2TXLivePlayer player, Bundle extraInfo){    ArrayList streams = player.getStreamList();}
/** * 已经成功连接到服务器 * @param player    回调该通知的播放器对象 * @param extraInfo 扩展信息 */- (void)onConnected:(id)player extraInfo:(NSDictionary *)extraInfo {    self.streams = [player getStreamList]}

3. 切换到一个子流AndroidiOS

// 选择期望质量的码流 V2TXLiveStreamInfo stream = streams.get(index);// 切换到期望质量的码流player.switchStream(stream.url);
// 选择期望质量的码流 V2TXLiveStreamInfo *streamInfo = self.streams[index];// 切换到期望质量的码流[self.player switchStream:streamInfo.url];

4. 切换回自适应播放AndroidiOS

player.switchStream("http://{Domain}/{AppName}/{StreamName}_{AdaptiveTemplate}.m3u8");
[self.player switchStream:@"http://{Domain}/{AppName}/{StreamName}_{AdaptiveTemplate}.m3u8"];



对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?