关于TRTC云端混流的踩坑分享

2020-08-19 11:11:21 浏览数 (1)

前言

今年可以说是直播火爆的元年的,虽然早在之前早已有直播、视频通话等应用不断涌出,但是在2020年疫情的影响下,线下的许多场景都慢慢转变成线上直播等形式来展示。许多开发者借助腾讯云的TRTC产品能力就能开发出一套双人通话、多人会议、线上课等应用场景。

本文主要是梳理如何使用TRTC进行云端混流进行画面混流(画面拼接)后通过直播形式展示

混流效果之一混流效果之一

原理解析

腾讯云会使用一批旁路转码集群,将 TRTC 中的音视频数据旁路到直播 CDN 系统中,该集群负责将 TRTC 所使用的 UDP 协议转换为标准的直播 RTMP 协议。

混合画面的旁路直播

TRTC 最擅长的领域就是音视频互动连麦,如果一个房间里同时有多个主播,而 CDN 观看端只希望拉取一路音视频画面,就需要使用云端混流服务将多路画面合并成一路,其原理如下图所示:

操作步骤

步骤1:TRTC侧开通旁路直播

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

  1. 登录 云直播控制台。
  2. 在左侧导航栏选择【域名管理】,您会看到在您的域名列表新增了一个推流域名,格式为 xxxxx.livepush.myzijiebao.com,其中 xxxxx 是一个数字,叫做 bizid,您可以在实时音视频控制台 >【应用管理】>【应用信息】中查找到 bizid 信息。
  3. 单击【添加域名】,输入您已经备案过的播放域名,选择域名类型为【播放域名】,选择加速区域(默认为【中国大陆】),单击【确定】即可。
  4. 域名添加成功后,系统会为您自动分配一个 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

0 人点赞