直播连麦
连麦(也叫上麦)是比较热门的直播功能。所谓连麦,是指一个直播间中可以不仅只有一个主播,观众(或其它房间的主播)也可以参与进来与主播进行视频互动,从而增加视频直播的趣味性。
单向”到“多向
既然要做连麦,那么反向的一条线路就必不可少,我们这里做个假设,观众 A 从原来的普通观众变成了小主播,那么下图中就多出了一条直播流(图中红色虚线所示):
注意:
腾讯云 RTMP 直播支持跨房间连麦互动,所以小主播(们)可以是原房间里的普通观众,也可以是另一直播间里的其他主播。
从“单向”到“多向”,这看似很简单,而且直接用 RTMP SDK 按这个思路也是可以实现的。但效果却很难达到商用的要求,因为有三个难题需要我们去解决:
延迟问题
常规直播解决方案中从推流端到播放端的延迟一般在2秒 - 3秒,但是连麦场景中大主播和小主播们之间的延迟如果超过1s,和谐的语音沟通就基本不可能了。
回音问题
常规直播解决方案中,由于语音是单向的(主播说 => 观众听),所以没有必要去做 AEC(回音消除)。但是连麦场景中有双向(或多向)的语音沟通,主播的声音流向小主播那一端的扬声器,如果不做回音消除,这些声音会再经由麦克风采集后返还给主播本人。
混流问题
解决完延迟问题和回音问题,大主播和小主播(们)之间就可以进行互动,但是要让普通的直播观众看到才算真正成功,所以多路画面必须要完成混流才能在观众端正常展示。
降低延迟
我们先看看怎么解决延迟问题,要解决延迟,先要弄明白延迟是怎么来的?
上图中红色标记的三处是整条链路的主要延迟来源,一场延迟大约3秒的直播中,以上三个模块“贡献”了80%的力量。