Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >TRTC v2混流接口setMixTranscodingConfig使用指引

TRTC v2混流接口setMixTranscodingConfig使用指引

原创
作者头像
腾讯云-chaoli
修改于 2019-03-26 02:10:29
修改于 2019-03-26 02:10:29
3.6K00
代码可运行
举报
运行总次数:0
代码可运行

场景

当一个音视频房间中同时有多路音视频流时,可能就需要用到混流转码,把多条音视频流转成一路,这样既便于录制存储,也便于旁路推流到直播 CDN 上。目前TXLiteAVSDK_TRTC的方案是: 1、在控制台实时音视频服务下功能配置启用自动旁路直播,如果混流画面需要录制存储还需要启用旁路直播自动录制,参考:CDN旁路推流 2、当需要混流的时候客户端直接调用setMixTranscodingConfig,并传入对应参数,这个时候SDK内部会组装请求并请求腾讯云后台; 3、混流成功后可以通过获取旁路地址播放

代码示例

  • Objective-C
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//云端混流转码的示例代码
- (void)enableTranscoding
{
    TRTCTranscodingConfig *config = [[TRTCTranscodingConfig alloc] init];
    config.appId = xxxxxxxxxx;      //appid和bizid可以在腾讯云控制台账号信息里面查到
    config.bizId = xxxx;
    config.videoWidth      = 540;
    config.videoHeight     = 960;
    config.videoBitrate    = 1200;
    config.videoFramerate  = 20;
    config.videoGOP        = 2;
    config.audioSampleRate = 48000;
    config.audioBitrate    = 64;
    config.audioChannels   = 2;

    TRTCMixUser *user1 = [[TRTCMixUser alloc] init];
    user1.userId = @"Web_trtc_03";
    user1.zOrder = 0;
    user1.rect = CGRectMake(0, 0, 540, 960);
//    user1.streamType = TRTCVideoStreamTypeBig;

    TRTCMixUser *user2 = [[TRTCMixUser alloc] init];
    user2.userId = @"Web_trtc_04";
    user2.zOrder = 1;
    user2.rect = CGRectMake(380, 630, 160, 240);
//    user2.streamType = TRTCVideoStreamTypeBig;
    config.mixUsers = @[user1,user2];

    [_trtc setMixTranscodingConfig:config];      //启动混流
}
  • Android
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//开启云端混流转码
public void enableTranscoding() {
    TRTCCloudDef.TRTCTranscodingConfig config = new TRTCCloudDef.TRTCTranscodingConfig();
        // 设置分辨率为 1280x720, 码率为 1500kbps
        config.appId = xxxxxxxxxx;
        config.bizId = xxxx;
        config.videoWidth = 368;
        config.videoHeight = 640;
        config.videoBitrate = 1500;
        config.videoGOP = 2;
        config.videoFramerate = 30;
        config.audioSampleRate = 48000;
        config.audioBitrate = 64;
        config.audioChannels = 2;

        // 设置混流后主播的画面位置
        TRTCCloudDef.TRTCMixUser broadCaster = new TRTCCloudDef.TRTCMixUser();
        broadCaster.userId = "Web_trtc_01"; // 以主播uid为broadcaster为例
        // 铺满屏幕并放到最下面
        broadCaster.zOrder = 0;
        broadCaster.x = 0;
        broadCaster.y = 0;
        broadCaster.width = 368;
        broadCaster.height = 640;

        TRTCCloudDef.TRTCMixUser audience = new TRTCCloudDef.TRTCMixUser();
        audience.userId = "Web_trtc_02"; // 以观众uid为audience为例
        // 放到左下角,置于主播画面之上
        audience.zOrder = 1;
        audience.x = 178;
        audience.y = 310;
        audience.width = 180;
        audience.height = 320;

        config.mixUsers = new ArrayList<>();
        config.mixUsers.add(broadCaster);
        config.mixUsers.add(audience);

        trtcCloud.setMixTranscodingConfig(config);
}

  • C++
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 开启云端混流转码
void enableTranscoding()
{
    TRTCTranscodingConfig config;
    config.appId = xxxxxxxxxx;      //appid和bizid可以在腾讯云控制台账号信息里面查到
    config.bizId = xxxx;
    // 设置分辨率为 1280x720, 码率为 1500kbps
    config.videoWidth = 1080;   
    config.videoHeight = 720;
    config.videoBitrate = 1500; 
    config.audioSampleRate = 48000;
    config.audioBitrate = 64;
    config.audioChannels = 2;

    std::vector<TRTCMixUser> mixUsers;

    // 设置混流后主播的画面位置
    TRTCMixUser broadCaster;
    broadCaster.userId = "broadcaster"; // 以主播uid为broadcaster为例
    broadCaster.zOrder = 0; // 铺满屏幕并放到最下面
    broadCaster.rect.left = 0;
    broadCaster.rect.top = 0;
    broadCaster.rect.right = 1280;
    broadCaster.rect.bottom = 720;

    // 设置观众位置, 以一个观众放到左下角为例, 左下角边距10个象素
    TRTCMixUser audience;
    audience.userId = "audience"; // 以观众uid为audience为例
    audience.zOrder = 1;    // 放到左下角,置于主播画面之上
    audience.rect.left = 920;
    audience.rect.top = 480;
    audience.rect.right = 1080;
    audience.rect.bottom = 720;

    mixUsers.push_back(std::move(broadCaster));
    mixUsers.push_back(std::move(audience));

    config.mixUsersArray = &mixUsers[0]; // 要求 mixUsers 非空
    config.mixUsersArraySize = mixUsers.size();

    trtcCloud->setMixTranscodingConfig(config);
}


 

原理解释

这里以iOS端为例,参考上述代码调用setMixTranscodingConfig接口后,SDK内部会转化成如下请求,实际上开发者也可以使用下面这种方式自己请求,这样更加灵活,SDK出于降低复杂度做了这一层处理。混流接口文档参考:云直播api 2017 -云端混流

  • 请求url:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

http://fcgi.video.qcloud.com/common_access?appid=1252500000&interface=Mix_StreamV2&t=t&sign=sign
代码语言:json
AI代码解释
复制
请求体
{
  "domain":"2157.live.push.com",
  "interface":"set_live_mix_transcoding",
  "session_id":"2157_bf49b24917d4f42543ef886f601134da",
  "event_id":1551428085,
  "output_param":{
      "output_audio_channels":2,
      "output_stream_gop":2,
      "output_sei":"{}",
      "output_stream_type":0,
      "output_stream_id":"2157_bf49b24917d4f42543ef886f601134da",
      "output_audio_sample_rate":48000,
      "output_audio_bitrate":64,
      "output_stream_frame_rate":20,
      "output_stream_bitrate":1200
  },
  "path":"live",
  "timestamp":1551428085,
  "appid":1251783440,
  "input_stream_list":[
      {
          "input_stream_id":"canvas1",
          "layout_params":{
              "image_layer":1,
              "color":"0x000000",
              "input_type":3,
              "image_width":540,
              "location_x":0,
              "image_height":960,
              "location_y":0
          }
      },
      {
          "input_stream_id":"2157_bf49b24917d4f42543ef886f601134da",
          "layout_params":{
              "location_y":0,
              "image_layer":2,
              "image_width":540,
              "image_height":960,
              "location_x":0
          }
      },
      {
          "input_stream_id":"2157_1ec16ae5326160affe9f6e3117e5b918",
          "layout_params":{
              "location_y":630,
              "image_layer":3,
              "image_width":160,
              "image_height":240,
              "location_x":380
          }
      }
  ]
}
  • 响应结果,code返回0代表成功,返回其它状态码说明混流失败,可以参考文档里面常见错误码说明

混流成功响应示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"code":0,"event_id":"1551428085","message":"","timestamp":1551428085}

混流失败响应示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"code":256,"event_id":"1551430294","message":"upload report get usr info failed, dal_config.GetLiveUserInfoByAppid ret: config no exist, appid: 1251783441","timestamp":1551430295}
  • 旁路播放效果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TRTC终端混流示例
使用TRTCSDK直播时,如果角色都是大主播、小主播,类似会议场景,每个角色都是参与者,且人数较少(30以内),彼此通过渲染对方的view,来实现一屏多画面;
ppchao
2020/12/11
1.2K0
TRTC终端混流示例
腾讯云实时音视频客户端实现A+B->A和A+B->C混流方式
上一篇文章介绍了腾讯云实时音视频的两种混流方式分别是A+B->A和A+B->C,本文重点介绍,客户端如何实现这两种混流的方式,代码附上
singleli
2022/11/28
1.5K0
关于TRTC云端混流的踩坑分享
今年可以说是直播火爆的元年的,虽然早在之前早已有直播、视频通话等应用不断涌出,但是在2020年疫情的影响下,线下的许多场景都慢慢转变成线上直播等形式来展示。许多开发者借助腾讯云的TRTC产品能力就能开发出一套双人通话、多人会议、线上课等应用场景。
马凌鑫
2020/08/10
2.6K0
关于TRTC云端混流的踩坑分享
如何在实时音视频(TRTC) Demo上体验混流以及旁路直播功能?
TRTC Demo 实现云端混流转码和CDN旁路直播功能,如果开发者想体验,需要简单做下修改参数才能体验。
腾讯云-yyuanchen
2019/09/27
2.2K0
实时音视频开发学习8 - 云端混流转码
云端混流主要用于CND直播观看和云端录制回放等场景中,需要将TRTC房间里的多路音视频流混合成一路。混流方式为MCU混流转码集群,其能将多路音视频流进行混合,并将最终生成的视频流分发给直播CDN和云端录制系统。
金林学音视频
2020/08/25
2K0
实时音视频开发学习8 - 云端混流转码
移动直播连麦解决方案
最开始观看直播是主播在那边又唱又跳,而你想与女神互动,只能简单的刷刷弹幕送送礼物。直到有了连麦,你才能用音视频的方式和主播互动,让女神看到你的画面,一起诉说风花雪月。
腾讯视频云-Zachary
2019/09/07
6.3K0
移动直播连麦解决方案
web端使用PHP实现【云端混流】,暂实现了2人,写篇文章记录下
三、PHP代码,使用laravel的框架,前端为音视频小程序,目前用postman请求的后台,为了测试混流。没有和音视频小程序去做API,思路是先实现云端混流,参考官方提供python代码【demo_template_310.py】,php代码:
用户2295383
2019/11/14
9890
web端使用PHP实现【云端混流】,暂实现了2人,写篇文章记录下
音视频混流基本原理
在直播场景里,我们经常需要将多个视频画面混合成一个视频画面(或是多路音频合成一路声音),常见的场景如:
jansonjiang
2019/08/28
9.3K0
音视频混流基本原理
iOS端 TRTC v2 自定义采集音频数据实现
实时音视频 TXLiteAVSDK_TRTC 默认通过调用 startLocalAudio: 接口实现音频的采集。如果开发者工程项目有自己的音频采集或者处理逻辑,SDK 也支持自定义音频采集方案:通过 TRTCCloud 的 enableCustomAudioCapture 接口关闭 TRTC SDK 默认的声音采集流程。然后您可以使用 sendCustomAudioData 接口向 TRTC SDK 填充您自己的声音数据。
腾讯云-chaoli
2019/07/07
2.2K1
iOS端 TRTC v2 自定义采集音频数据实现
MLVBLiveRoom 方案 - 管理后台RoomService接口文档
本文用于介绍移动直播 MLVBLiveRoom 方案的管理后台部分,MLVBLiveRoom 方案包含了两部分内容:客户端 MLVBLiveRoom 组件 + 房间管理服务 RoomService。MLVBLiveRoom 组件说明见 https://cloud.tencent.com/developer/article/1488540
腾讯云-chaoli
2019/08/16
21.5K31
MLVBLiveRoom 方案 - 管理后台RoomService接口文档
TRTC Android端开发接入学习之常见问题(十一)
V1和V2主要区别在于IM的SDK是否内嵌于TRTC中,V1线路是内嵌,而V2则可选,默认不打包IM的SDK包。V2在通话质量、线路规格、接入难度以及功能扩展上均比V1更有优势。
腾讯云-hongyang
2020/09/27
3.1K0
Q&A丨实时音视频 TRTC 技术问答强势来袭
我们针对实时音视频用户在后台提交的问题,归纳了近期咨询比较多的问答,供各位用户参考。 QUESTION1  Q :画面出现呼吸效应(一下清晰一下模糊),是什么原因?  A :呼吸效应产生主要有2种情况:  1.定焦镜头,I帧太小导致遇到I帧解码时模糊,想办法提高I帧的大小,可以尝试从vbr改为cbr,setVideoEncoderParam中设置videoBitrate=minVideoBitrate即为cbr。  2.变焦镜头,硬件不断聚焦。想办法改善拍摄环境,例如优化光源。 QUESTION2  
腾讯即时通信IM
2021/01/15
2.3K0
TRTC Android端开发接入学习之互动直播(七)
近年来,直播兴起,各家直播平台的火爆,支持演唱会的直播、主播、明星直播和带货直播等等等,TRTC提供了简便快捷完整的直播互动解决方案,这次我们来一起学习如何在android端使用TRTC完成互动直播的基本流程
腾讯云-hongyang
2020/09/11
1.8K0
腾讯云实时音视频服务端混流参数详解和4种排版方式
一、服务端四种混流模板 1、悬浮模板(LayoutParams.Template = 0):
singleli
2022/11/28
1.4K0
互动白板混流录制
互动白板提供了云端实时录制功能,可以录下白板画面。同时也支持混流录制,将实时音视频与白板画面混流录制,也支持白板与音频或视频混流录制。
快乐的搬砖工LT
2020/05/12
4.1K0
实时音视频 TRTC 常见问题汇总---集成接入篇
TRTC 的日志默认压缩加密,后缀为 .xlog。日志是否加密是可以通过 setLogCompressEnabled 来控制,生成的文件名里面含 C(compressed) 的就是加密压缩的,含 R(raw) 的就是明文的。
腾讯视频云-Zachary
2019/11/01
14.3K1
实时音视频 TRTC 常见问题汇总---集成接入篇
实时音视频 TRTC 常见问题汇总---咨询问题篇
TRTC 是腾讯云基于 QQ 十多年来在音视频通话技术上积累,结合腾讯浏览服务 TBS WebRTC 能力与腾讯实时音视频 SDK ,为客户提供多平台互通高品质可定制化的 实时音视频互通服务 解决方案。 (1)您可以通过“crtl+F”(win)、“command+F”(mac)搜索关键字。 (2)若没有您想要的问答,欢迎在评论区提问、留言和交流,笔者会定期解答疑惑。 (3)最新产品动态与变更以官网文档为准。
TRTC小百科
2021/09/16
8.8K2
摆脱客户端?网页发起直播势在必行!
近几年直播行业飞速发展,但是由于Web端这方面功能的长时间缺失,使得直播端以客户端为主;WebRTC 的出现使得网页也可以成为直播端。那么究竟WebRTC是什么呢?
保利威视频云
2020/05/07
3K0
摆脱客户端?网页发起直播势在必行!
Unity Metaverse(八)、RTC Engine 基于Agora声网SDK实现音视频通话
本文介绍如何在Unity中接入声网SDK,它可以应用的场景有许多,例如直播、电商、游戏、社交等,音视频通话是其实时互动的基础能力。
CoderZ
2023/08/23
5930
Unity Metaverse(八)、RTC Engine 基于Agora声网SDK实现音视频通话
移动直播MLVB常见问题(FAQ)
快速入门:https://cloud.tencent.com/document/product/454/7876
腾讯视频云-Zachary
2020/04/04
8.6K0
移动直播MLVB常见问题(FAQ)
推荐阅读
相关推荐
TRTC终端混流示例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档