前言:
在直播和连麦的场景中通常会用到混流功能,而所谓的混流就是根据您设定好的混流布局同步的将各路输入源混流成一个新的流,可实现直播互动效果,之前有过其他客户的方案是通过观众端拉取两路主播流的场景来实现连麦的效果,这种方案很不推荐,他的体验很不好,首先会增加cpu多数据的处理,增加手机性能的消耗,其次也就是最重要的没有办法保证两路流的实时性。
场景实践:
首先我们要先了解混流的场景是什么样的,应该在哪里混,借用《无间道》中的名言作为开场白:出来混,迟早是要还的,在连麦互动直播中,在哪混(流),同样很重要,做对了选择,用户体验就会大不相同。整个的连麦混流都是基于一个房间管理服务进行的,整个房间服务管理的后台,你可以自己做,也可以直接用我们移动直播的房间服务管理后台。“整个连麦混流的主播端和观众端过程大致如下”
主播端:
1、主播A 正常推流,流名称为test1,主播B正常推流,流名称为test2
2、主播A 向主播B发起连麦请求,并附带主播A的流名称
3、主播B 如果同意连麦,并回应主播A ,然后开始拉取主播A的低延迟流
4、主播A 收到回应,然后开始拉取主播B 的低延迟流,让两主播端都走低延迟的协议,避免连麦延迟的情况
主播之间的连麦是使用的低延迟的核心机房,基于私有协议互动,一般底层为UDP协议,更是为了保证流的实时性和同步性。确保两端之间的延迟只有500ms,达到更顺畅的连麦效果
观众端:
而观众端这边的话,走正常的云直播拉流就可以,使用正常普通的CDN的混流地址拉取观看,会在云端把两路或多路流进行解码重新编码封装输出的处理,通过云直播的接口调用,实现主播间之间的混流,到达想要的混流画面。
注意事项:
1、A主播间的观众拉流混流输出的流名称为A主播的原流名称
2、B主播间的观众拉流混流输出的流名称为B主播的原流名称
3、这样主播间的观众在拉流切换的时候 就不用有一个重新刷新页面拉流的情况发生了,还是保持之前的流地址拉取。
观众端混流接口调用如下:
云直播提供了很多常用混流模板,根据情况选择适合的模板,以下使用的是390模板的调用示例:
自定义混流示例:
混流效果:
混流中遇到的问题:
1、在混流的过程中会遇到这样的问题,混流的视频会有黑边的情况,比如下方:
这种情况一般是参与混流的输入源分辨率发生了变化引起的,可以在输入混流参数的时候根据原始流分辨率的比例去修改,比如 流1 原始分辨率为1920 * 1080,流2 原始分辨率为1280 *720,而你在输入混流参数的时候修改了原始流的分辨率,如果修改成 720 *540的话 ,为了保持画质的原始比例情况,就会出现黑边的情况。
解决方法:
你原始流的分辨率是1280 × 720,那么您的视频源比例为16:9,视频需要在设置缩放的时候按照这个比例去计算,此时设置的 ImageWidth 为720,则 ImageHeighe 的值为720/16*9 = 405 ,这种情况下缩放的时候视频就不会有黑边的情况。
2、混流过程中,输入流断开后何时自动取消混流:
以两条流混流为例,如果其中一条流断开,混流不会自动取消,如果开了录制,录制也将继续进行。如果两条流均断开,15分钟后混流自动取消
解决方法:
检测流的状态信息,发现有断流的情况发生了,自动调用混流接口取消混流。
3、我们在调用混流接口的时候会返回-505的报错:
混流接口报-505,代表该流 ID 在直播后台中无数据
解决方法:
可以通过拉流的方式查看是否推流成功。如果可以拉流,但接口报依然报-505,请检查混流参数中,AppID 填写是否正确。
总结:
连麦混流现是直播场景中最重要的环节,根据自己的业务场景,搭建自己的连麦混流逻辑,做出直播中想要的效果。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。