前言
今年可以说是直播火爆的元年的,虽然早在之前早已有直播、视频通话等应用不断涌出,但是在2020年疫情的影响下,线下的许多场景都慢慢转变成线上直播等形式来展示。许多开发者借助腾讯云的TRTC产品能力就能开发出一套双人通话、多人会议、线上课等应用场景。
本文主要是梳理如何使用TRTC进行云端混流进行画面混流(画面拼接)后通过直播形式展示
原理解析
腾讯云会使用一批旁路转码集群,将 TRTC 中的音视频数据旁路到直播 CDN 系统中,该集群负责将 TRTC 所使用的 UDP 协议转换为标准的直播 RTMP 协议。
混合画面的旁路直播
TRTC 最擅长的领域就是音视频互动连麦,如果一个房间里同时有多个主播,而 CDN 观看端只希望拉取一路音视频画面,就需要使用云端混流服务将多路画面合并成一路,其原理如下图所示:
操作步骤
步骤1:TRTC侧开通旁路直播
步骤2:配置播放域名并完成 CNAME
- 登录 云直播控制台。
- 在左侧导航栏选择【域名管理】,您会看到在您的域名列表新增了一个推流域名,格式为
xxxxx.livepush.myzijiebao.com
,其中 xxxxx 是一个数字,叫做 bizid,您可以在实时音视频控制台 >【应用管理】>【应用信息】中查找到 bizid 信息。 - 单击【添加域名】,输入您已经备案过的播放域名,选择域名类型为【播放域名】,选择加速区域(默认为【中国大陆】),单击【确定】即可。
- 域名添加成功后,系统会为您自动分配一个 CNAME 域名(以
.liveplay.myzijiebao.com
为后缀)。CNAME 域名不能直接访问,您需要在域名服务提供商处完成 CNAME 配置,配置生效后,即可享受云直播服务。具体操作请参见 CNAME 配置。
本段直接摘取于原文
步骤3:关联 TRTC 的音视频流到直播 streamId
开启旁路推流功能后, TRTC 房间里的每一路画面都配备一路对应的播放地址,该地址的格式如下:
代码语言:javascript复制http://播放域名/live/[streamId].flv
到这一步骤有些用户可能就会疑惑了,接下来细说:
疑问1:StreamID是如何生成的?
解答:如果TRTC.createClient
时没有指定streamId
,则生成的streamId
则为该格式:sdkappid_roomid_userid_main
TRTC.createClient代码片段:
不指定streamId则使用默认规则
旁路直播侧效果:
若需要指定StreamId则需要在TRTC.createClient中指定
旁路直播侧效果:
步骤4:控制多路画面的混合方案
完成上面步骤后,需要开启混流将画面凭借,调用 TRTCCloud 的 setMixTranscodingConfig
接口启动云端混流转码,该接口的参数 TRTCTranscodingConfig
可用于配置:
- 各个子画面的摆放位置和大小。
- 混合画面的画面质量和编码参数。
画面布局的详细配置方法请参考 云端混流转码 ,启动混流转码
首次使用的,推荐用API 3.0 Explorer进行调试,里面的参数都可以在侧边栏中看到
这里着重的讲下OutputParams.StreamId,这里的StreamId不能与旁路直播的streamId冲突,否则将导致拉流时拉到的是还未混流前的画面。
如何确认充不冲突?请参考步骤3的疑问1
代码语言:javascript复制{
"EncodeParams": {
"AudioBitrate": 64,
"AudioChannels": 2,
"AudioSampleRate": 24000,
"BackgroundColor": 0,
"BackgroundImageId": 113,
"VideoBitrate": 1560,
"VideoFramerate": 15,
"VideoGop": 2,
"VideoHeight": 720,
"VideoWidth": 1280
},
"LayoutParams": {
"MainVideoStreamType": 0,
"MainVideoUserId": "243205_screen",
"Template": 2
},
"OutputParams": {
"PureAudioStream": 0,
"RecordAudioOnly": 0,
"StreamId": "这里需要填写混流后的streamID,不能与旁路直播的id冲突"
},
"RoomId": "8067",
"SdkAppId": "1400360798"
}
步骤5:获取播放地址并对接播放
通过上述的操作后,生成云端混流的流。再根据规则可以拼接出以下直播地址:
例如,您的播放域名为live.myhost.com
,您将房间(1001)中的用户 userA 的直播流 ID 通过进房参数指定为 streamId = "streamd1001"。
则您可以得到三路播放地址:
代码语言:javascript复制 rtmp 协议的播放地址:rtmp://live.myhost.com/live/streamd1001
flv 协议的播放地址:http://live.myhost.com/live/streamd1001.flv
hls 协议的播放地址:http://live.myhost.com/live/streamd1001.m3u8
本文主要是补充部分使用者在混流时可能犯的错。详细的请观看官方文档,这里只梳理大概脉络以及需要注意的点,细节在文档中更清晰。
https://cloud.tencent.com/document/product/647/16826