前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
给网站套上Cloudflare(以腾讯云为例)
当然,Cloudflare 还有其他好多功能,防火墙啊、统计分析啊,啥啥的,这里也就不赘述了,感兴趣的朋友可以去官网了解一下。
知识浅谈
2022/10/04
13.4K2
给网站套上Cloudflare(以腾讯云为例)
Cloudflare 是谁?
Cloudflare 是一家总部位于旧金山的美国跨国 IT 企业,以向客户提供基于反向代理的内容分发网络(Content Delivery Network, CDN)及分布式域名解析服务(Distributed Domain Name Server)为主要业务。利用 Cloudflare 全球 Anycast 网络,Cloudflare 可以帮助受保护站点抵御包拒绝服务攻击等网络攻击,确保该网站长期在线,同时提升网站的性能、加载速度以改善访客体验。
全栈程序员站长
2022/07/18
1.2K0
Cloudflare 是谁?
GitHub pages配置自定义域名利用Cloudflare全球CDN
GitHub pages是github提供免费静态站点托管服务,并提供域名xxx.github.io,xxx是你GitHub账户的名称。一个账户只能托管一个GitHub pages项目。
六月河
2022/10/05
4.5K0
GitHub pages配置自定义域名利用Cloudflare全球CDN
白嫖Cloudflare域名服务!
使用 Github Pages 可以很方便地搭建个人博客静态网站,但在国内访问速度不佳,而且网站访问地址都是xxx.github.io/xxx,也没有体现个性化,可以考虑通过自定义域名+Cloudflare来提升静态资源的访问速度。cloudflare是一家主要提供网络基础设施服务的美国科技公司,包括内容分发网络(CDN)、分布式域名服务(DNS)、DDos防护、互联网安全优化等。全球互联网有20%的流量都经过了Cloudflare的网络代理。作为一个大公司,自然也有很多可以白嫖的服务。
程序员小义
2024/06/19
1.5K0
白嫖Cloudflare域名服务!
亿级Web系统负载均衡几种实现方式
负载均衡(Load Balance)是集群技术(Cluster)的一种应用技术。负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力。目前最常见的负载均衡应用是Web负载均衡。根据实现的原理不同,常见的web负载均衡技术包括:DNS轮询、IP负载均衡和CDN。其中IP负载均衡可以使用硬件设备或软件方式来实现。
Bug开发工程师
2020/03/06
4.2K1
亿级Web系统负载均衡几种实现方式
堪称跨境独立站神器的CloudFlare是什么?
4.域名访问 http://domain.com 跳转到 http://www.domain.com ,301跳转设置
用户10333987
2023/04/28
3.3K0
堪称跨境独立站神器的CloudFlare是什么?
GitHub pages配置自定义域名利用Cloudflare全球CDN
GitHub pages是github提供免费静态站点托管服务,并提供域名xxx.github.io,xxx是你GitHub账户的名称。一个账户只能托管一个GitHub pages项目。
六月河
2023/06/26
2.8K0
GitHub pages配置自定义域名利用Cloudflare全球CDN
CloudFlare:免费CDN加速-自定义节点IP教程
为什么要使用CDN? 内容分发网络(英语:Content Delivery Network或Content Distribution Network,缩写:CDN)是指一种透过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、影片、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。简单总结有以下几点优势。
骤雨重山
2022/01/17
15.5K0
CloudFlare:免费CDN加速-自定义节点IP教程
Cloudflare域名解析
域名解析是一种服务,通过将域名映射到特定的网站服务器IP地址,使得用户能够通过注册的域名轻松访问网站。这项工作由DNS服务器来执行。Cloudflare是一个知名的云服务提供商,提供DNS解析服务以及其他网络性能优化和安全服务。如果你不知道如何注册一个域名,可以参考《域名注册》这篇文章。
无代码Dev
2024/03/01
3K0
Cloudflare域名解析
将网站接入cloudflare的教程
自此以后,要进行DNS解析,来访问cf即可,要进行代理,打开小云朵即可。还是比较方便的。
huolong
2023/09/17
3K1
将网站接入cloudflare的教程
免费 CDN 加速服务:CloudFlare
CloudFlare 是一家功能非常强大的免费 CDN 免费加速服务,它是通过反向代理(reverse proxy)提供网站加速服务,为站长解决了 jpg/JS/CSS 这些静态文件到 CDN 上的问题,并且通过它部署在全球各大洲的缓存结点服务器(详细列表),提供高效的加速服务。
Denis
2023/04/14
17.2K0
免费 CDN 加速服务:CloudFlare
利用 cloudflare workers来畅游github
要实现在国内利用workers访问github。那么前提条件就是你有一个cloudflare账号以及一个域名。关于什么是cloudflare,这里简单说一下 : Cloudflare 是一家广受认可的公司,在互联网行业中享有良好声誉。他们的服务被许多大型企业和网站使用,以提供网络安全防护、DDoS 攻击防御和性能优化等功能,也是目前还提供免费cdn的良心厂商之一。简称 赛博大活佛。那么话不多说,我们直接开始今天的教程。
huolong
2024/12/25
3870
利用 cloudflare workers来畅游github
Cloudflare 推出全球最快的Dns:1.1.1.1
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。
Alone88
2019/10/22
12.1K0
Cloudflare 推出全球最快的Dns:1.1.1.1
简述负载均衡&CDN技术
曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文件的实现,甚至于某个循环内的运算如果出现不严谨都可能导致全盘崩溃。
马士兵的朋友圈
2020/09/08
1.2K0
简述负载均衡&CDN技术
给网站套上CDN吧--使用CloudFlare
个人理解:相当于你在全球各地都有一台服务器,不同地区的用户访问网站会根据地区,交由不同的服务器处理,从而速度更快,效率更高。 以及,可以隐藏自己网站的真实ip,一定程度上防止DDoS
wo.
2021/06/15
6.2K0
lucky实现动态DDNS域名解析 + https安全访问教程
要实现动态DDNS域名解析和https安全访问,首先得有个域名。域名可以直接在阿里云或者腾讯云购买。我的域名是在腾讯云买的,然后托管到了cloudflare这个平台,为什么要托管到它那儿?因为托管过去后,就算没有ipv4的情况下,也能利用STUN穿透,获取到可以访问的ipv4公网IP和端口,只是这个IP和端口不是固定的,但可以用脚本去监控,要是有变更的话,能直接同步到cloudflare,还能收到邮件通知
季春二九
2025/01/10
3.9K1
lucky实现动态DDNS域名解析 + https安全访问教程
DNS解析与CDN原理
  在互联网冲浪中,我们已经习惯了输入域名连接网站。也许你有了解过网络世界大家的「坐标」都是 IP 地址,但是 DNS 解析怎么找到 IP 地址?更有时,同一个域名申请还会返回不同的地址,这所谓 CDN 是如何实现的?
幻影龙王
2021/09/08
2.2K0
使用 Cloudflare CDN 加速和保护自己的网站
之前发布过 Cloudflare 简介及接入体验,其中并没有写 Cloudflare CDN 的接入使用,本文主要面向不会使用 Cloudflare CDN 新手学会使用 Cloudflare CDN 加速和保护自己的网站。
Skykguj
2022/09/09
15.3K0
使用 Cloudflare CDN 加速和保护自己的网站
装逼必备:大型分布式网站术语分析
来自: 朱小厮的博客 程序猿自媒体已获转载授权 1、I/O优化 1、增加缓存,减少磁盘的访问次数。 2、优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。 3、设计合理的磁盘存储数据块,以及访问这些数据库的策略,这是在应用层面考虑的。例如,我们可以给存放的数据设计索引,通过寻址索引来加快和减少磁盘的访问量,还可以采用异步和非阻塞的方式加快磁盘的访问速度。 4、应用合理的RAID策略提升磁盘I/O。 2、Web前端调优 1、减少网络交互的次数(多次请求合并) 2、减
企鹅号小编
2018/01/24
7310
DNS、DNS劫持与HTTPDNS:原理、应用与安全分析
DNS(Domain Name System,域名系统)是互联网的一项核心服务,负责将人类可读的域名(如www.example.com)解析为计算机可识别的IP地址(如192.0.2.1)。DNS通过层级式的分布式数据库系统实现域名与IP地址的映射,使得用户可以通过输入易于记忆的域名访问网站,而无需记住复杂的IP地址。
陆业聪
2024/07/23
3530
DNS、DNS劫持与HTTPDNS:原理、应用与安全分析
相关推荐
给网站套上Cloudflare(以腾讯云为例)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验