鹅厂优文|主播pk,如何实现无缝切换?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
本文作者,rexchang(常青),腾讯视频云终端技术总监,2008 年毕业加入腾讯,一直从事客户端研发相关工作,先后参与过 PC QQ、手机QQ、QQ物联等产品项目,目前在腾讯视频云团队负责音视频终端解决方案的优化和落地工作,帮助客户在可控的研发成本投入之下,获得业内一流的音视频解决方案,目前我们的产品线包括:互动直播、点播、短视频、实时视频通话,图像处理,AI等等。
最近腾讯云移动直播团队一直在“不务正业”的打造小程序音视频解决方案,我们一直以来的主营业务之一——秀场直播,在过去几个月的时间里则有点“不思进取”。不过随着近期人力的补充,以及微信版本的逐步稳定,我们在直播方案里的步伐也会进一步加快,盼大家能够继续保持对我们的认可。
今天要介绍的就是主播连麦PK方案,通过这篇文章,我们将一起来了解什么是主播连麦PK?以及怎么快速实现主播间的连麦PK?
什么是连麦PK?
连麦PK就是正在直播中的两个主播,通过相互协商或者后台匹配的方式进入PK状态。一旦进入PK状态,原本独自直播的两个主播,就可以相互视频通话。与此同时,观众端能看到的画面也一分为二,从原来的一个主播变成左右两个主播。这种直播模式可以增加直播间的活跃气氛,为平台带来更多的互动性。
- 进入 PK 前:两个主播各自独立推流,每个主播都有自己的观众,每个观众看到的画面中都只有自己当前直播间的一个主播。
- 进入 PK 后:两个主播之间可以视频通话,原本观众只能看到一个主播,现在可以看到两个主播在相互PK(视频通话)。
如何实现连麦PK
我们先从最初的需求入手,看看最简单的实现方案是什么。从前面一张图我们就可以看出,要想实现连麦PK,最简答的办法就是两个主播各自把两路画面混在一起,如下图所示:
主播 A 把自己手机摄像头的画面 local(A) 和来自网络上的主播 B 的画面 remote(B) 混合在一起,再次进行编码和压缩并推送到云端。这样一来,原本主播 A 的观众就可以看到画面中多出了主播 B 的画面。与此同时,如果主播 B 也进行类似的操作,就可以把自己摄像头的画面 local(B) 和 来自于网路的主播 A 的画面 remote(A) 混合在一起。这样,主播 B 的观众也就能同时看到 A 和 B 的画面了。
但是这种方法有个小问题 —— 主播的手机要做的事情太多:
- 工作一:主播的手机要编码和压缩一路本地摄像头的画面,这一路画面是传给另一个主播的;
- 工作二:主播的手机要解码和渲染一路来自网络的对端画面,这一路画面是来自另一个主播的;
- 工作三:上述的两路画面要叠加在一起,进行画面的拼接。
- 工作四:拼接好的画面还要再编码一次,推给观众,这样观众才能看到两路画面。
如何解决性能问题?
为了解决性能问题,我们需要做的是给主播减负。
那要怎么减负呢?是不是可以把工作一和工作二,这两项工作去掉?
不行不行,这两项工作是用来做视频通话的,如果减掉了,那主播的 PK 就无从谈起。
工作三和工作四是不是可以减掉?
其实也是减不掉的,不过我们可以把它搬到云端,在服务器上完成画面的拼接和计算,而不是在终端完成这些工作。
如上图:当主播 A 和主播 B 开始 PK 后,两边的观众就不再继续从原来的线路上拉流观看了,而是从新的实时音视频云端拉流观看(上图中橙色箭头所示的部分)。这样一来,我们就可以把画面的混合和再次编码的任务放在云端进行。
但是这种方案也不是最完美的,因为从普通直播进入到 PK 状态的过程中,观众端的画面会由于线路切换的原因,出现一段时间的卡顿。
腾讯云连麦PK方案
腾讯云的连麦PK方案则很好的解决了线路切换问题:
由于腾讯云本身既有支撑斗鱼、虎牙的常规直播解决方案,又有多年的QQ视频通话技术积累,所以腾讯的视频云本身就是一个混合云,本身既可以实现常规的直播CDN分发,又能支持高质量低延时的实时音视频线路。因此,我们的方案非常清晰简单:直接在原来的直播线路上叠加一路PK画面:
这样一来,原本在观看主播 A 和 主播 B 的观众,不会遭遇任何的画面二次加载和卡顿等待,只是会看到原本一个画面一分为二,自然而然的进入到 PK 状态。
方案背后的支撑技术
腾讯云采用了两套音视频通道实现主播连麦PK功能,一套是标准直播采用的 CDN 线路,带宽成本低廉且没有并发限制。主播间 PK 所依赖的视频通话,则采用私有的 UDP 传输协议,走专门为降低通讯时延而准备的专线线路。
快速接入直播PK功能
如果您希望使用腾讯云的直播PK功能,可以参考我们的接入文档 LiveRoom(PK)。需要特别说明的是,这套方案还支持观众与主播的连麦,并且终端和后台代码均是开源的,支持自行部署,能够让您拥有非常充分的定制空间。
问答
小程序可以实现哪些音视频解决方案?
相关阅读
杨春文:小程序在直播产品中的技术应用
如何实现直播中手绘礼物?
除了直播,VR+体育还有哪些打开方式?
此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1139584?fromSource=waitui
欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~
鹅厂优文|主播pk,如何实现无缝切换?的更多相关文章
- 鹅厂优文|打通小程序音视频和webRTC
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯视频云终端技术总监常青, 2008 年毕业加入腾讯,一直从事客户端研发相关工作,先后参与过 PC QQ.手机QQ.QQ物联 等产品 ...
- 鹅厂优文 | ReactJS一点通
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂新鲜事儿发表于云+社区专栏 作者:卢文喆 腾讯云 UI工程师 导语 | 当React 刚开始红的时候,一直觉得 JSX 的设计思想 ...
- 鹅厂优文 | 决策树及ID3算法学习
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:袁明凯|腾讯IEG测试开发工程师 决策树的基础概念 决策树是一种用树形结构来辅助行为研究.决策分析以及机器学习的方式,是机器学习中的 ...
- 鹅厂优文 | 怎样用AI运维
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由 织云平台团队 团队发布在腾讯云+社区 诞生背景 最近这些年,运维行业提出了不少概念,各种各样的"XX运维"可以说 ...
- 16天5面,我终于拿到了鹅厂Offer
目录 1 - 为什么要在年底离职 1.1 惊觉:没有什么成长 1.2 投简历,敲打自己 1.3 面试它来了 1.4 提前触到目标? 2 - 我的鹅厂面试 2.1 技术一面 Java 语言相关 通用学科 ...
- 记录一下自己爬虎牙LOL主播的爬虫思路
1.明确爬虫目的 爬虫目的需要我们明确的,没有目的的爬虫都是耍流氓!像我这次爬虫目的能不能从网页上爬下来. 2.怎么来爬? a. 先要找到具有唯一性的标签 <li class="gam ...
- 虎牙数万主播同时在线直播的秘密,CDN推流日志上行实时监控
6 月 10 日,又拍云 Open Talk | 2018 音视频技术沙龙·深圳站 顺利落幕,来自虎牙的直播运维研发架构师张波在沙龙上做了<基于CDN推流日志的主播上行实时监控及其自动化解密&g ...
- [转]【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解
小编:对于互联网,域名是访问的第一跳,而这一跳很多时候会“失足”,导致访问错误内容,失败连接等,让我们在互联网上畅游的爽快瞬间消失,而对于这关键的第一跳,鹅厂也在持续深入研究和思考对策,今天小编就邀请 ...
- 三年半Java后端面试鹅厂,三面竟被虐的体无完肤
经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征. 鹅厂 面试职位: go后端开发工程师,接受从Java转语言 都知道鹅厂是cpp的主战场,而以cpp为背 ...
随机推荐
- C#利用ntsd.exe关闭进程
有时我们会发现在任务管理器中无法关闭某个进程,可以使用下面的方法强行关闭,注意不要杀掉进程表中的系统核心进程: 1.使用Windows XP/2000自带的工具 从Windows 2000开始,Win ...
- IIS虚拟目录加载NFS配置注意事项
1,IIS下挂载的路径不要填写挂载的盘符,填 \\NFSIP地址\NFSID\ ,正确挂载的前提是在windows下开启了NFS客户端的功能. 2,IIS 网站中读写NFS 也不要用盘符,也用 步骤1 ...
- 为微软ContosoUniversity例子加上学生自选课程计划
把ContosoUniversity例子过了一遍,好象还是有很多东西未能理解,决定自己随便加个功能看可以自己完成不.... 从github的例子中clone下来ContosoUniversity项目, ...
- droup
Oracle Drop表并未直接删除 drop table xx purge drop表 执行drop table xx 语句 drop后的表被放在回收站(user_recyclebin) ...
- asp.net(mvc) 框架
1.NFine mvc+ef 2.Grove orm架构 3.NHibernate orm 4.NBear 5.petshop 6.Membership 7.Brnshop 网上商城 8.cms快速开 ...
- PXE-cobbler 无人值守装机------续
上篇学习了cobbler pxe 安装的大致流程以及采用默认分区方式安装centos7系统. 这里深入学习ks文件的具体参数 . ks.cfg文件又叫kickstart.cfg文件,主要被用于linu ...
- 「HNOI 2015」亚瑟王
\(Description\) 有\(n\)张卡牌,每一张卡牌有\(p_i\)的概率发动,并造成\(d_i\)点伤害.一共有\(r\)轮,每一轮按照编号从小到大依次考虑,如果这张牌已经发动过则跳过该牌 ...
- 2018版OCP考试052最新题库及答案-35题
35.Your database is using Automatic Memory Management. Which two SGA components must be managed manu ...
- Jquery中each
1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function ...
- Vagrant更改默认的SSH端口
Vagrant默认转发宿主的2222端口到虚拟机的22端口(默认设置,无须配置).在有多个虚拟机并存的情况下,2222端口将不好使.具体表现在: 启动第二个虚拟机的时候,会报端口占用错误: $ vag ...