Tutorial: 实现推流到 CDN

实现推流到 CDN

本文主要介绍推流到 CDN 的具体步骤。

前提条件

已开通腾讯 云直播 服务。应国家相关部门的要求,直播播放必须配置播放域名,具体操作请参考 添加自有域名

使用前提

开启旁路推流功能

  1. 登录 实时音视频控制台
  2. 在左侧导航栏选择【应用管理】,单击目标应用所在行的【功能配置】。
  3. 在【旁路推流配置】中,单击【启用旁路推流】右侧的开关,在弹出的【开启旁路推流功能】对话框中,单击【开启旁路推流功能】即可开通。

使用场景

场景1: 推流到腾讯云 CDN

步骤一:配置播放域名并完成 CNAME

  1. 登录 云直播控制台
  2. 在左侧导航栏选择【域名管理】,您会看到在您的域名列表新增了一个推流域名,格式为 xxxxx.livepush.myqcloud.com,其中 xxxxx 是一个数字,叫做 bizid,您可以在 实时音视频控制台 >【应用管理】>【应用信息】中查找到 bizid 信息。
  3. 单击【添加域名】,输入您已经备案过的播放域名,选择域名类型为【播放域名】,选择加速区域(默认为【中国大陆】),单击【确定】即可。
  4. 域名添加成功后,系统会为您自动分配一个 CNAME 域名(以.liveplay.myqcloud.com为后缀)。CNAME 域名不能直接访问,您需要在域名服务提供商处完成 CNAME 配置,配置生效后,即可享受云直播服务。具体操作请参见 CNAME 配置

步骤二:关联用户的音视频流到直播 streamId

开启旁路推流功能后, TRTC 房间里的每一路画面都配备一路对应的播放地址,该地址的格式如下:

http://播放域名/live/[streamId].flv
  1. 若您选择“全局自动旁路”模式,进房并发布流的每一个用户都存在默认的 streamId 为 ${sdkAppId}_${roomId}_${userId}_main, 您可以使用 client.startPublishCDNStream 接口更改默认的 streamId
let options = { streamId: 'user_stream_001' }
try {
  await client.startPublishCDNStream(options);
} catch (error) {
  console.log('startPublishCDNStream failed', error);
}
  1. 若您选择“手动旁路模式”模式,您可以使用 client.startPublishCDNStream 接口指定 streamId 并开始向腾讯云 CDN 发布当前用户的音视频流。
let options = { streamId: 'user_stream_001' }
try {
  await client.startPublishCDNStream(options);
} catch (error) {
  console.log('startPublishCDNStream failed', error);
}
  1. 若您选择“手动旁路模式”模式,您可以使用 client.stopPublishCDNStream 接口停止向腾讯云 CDN 发布当前用户的音视频流。
try {
  await client.stopPublishCDNStream();
} catch (error) {
  console.log('stopPublishCDNStream failed', error);
}

场景2: 推流到指定 CDN

  1. 在任意云服务商获取 CDN 推拉流地址。

  2. 实时音视频控制台 >【应用管理】>【应用信息】中查找到 appid 和 bizid 信息。

  3. 使用 client.startPublishCDNStream 接口开始向指定 CDN 地址发布当前用户的音视频流。

let options = {
  appId: 0,
  bizId: 0,
  url: ''
}
try {
  await client.startPublishCDNStream(options);
} catch (error) {
  console.log('startPublishCDNStream failed', error);
}
  1. 使用 client.stopPublishCDNStream 接口停止向指定 CDN 发布当前用户的音视频流。
try {
  await client.stopPublishCDNStream();
} catch (error) {
  console.log('stopPublishCDNStream failed', error);
}