我们此前曾分享了上线首日就为熊猫直播获取几十万流水的新玩法“直播间PK”。其实,直播间还能加入更多新玩法,能互动连麦的赛事直播。
现在很多比赛与活动都会出现在网络直播间中,比如最近刚刚开赛的KPL电竞赛事,抑或是今年即将开赛的世界杯。赛事直播的数量会逐渐变多。
目前,如果主播想在直播间直播世界杯、KPL等赛事,有两种方法:
- 一种是单纯的转播赛事画面(包括电视台解说);
- 另一种是通过OBS类软件,将赛事直播画面与主播画面合图后推流。
但是,这两种方式都存在缺点。第一种方式的缺点是无法播放主播自己的音视频流,与转播电视台节目无异。第二种虽然实现了转播画面与直播画面合图推流,但是无法让主播与观众直接进行连麦互动,等于舍弃了本已被用户普遍接受的直播连麦功能。
如果想同时实现赛事直播与主播连麦,也不无可能。在主播直播过程中,主播可以通过拉流的方式,将外部视频流加入到自己直播画面中。当然,通过这种方式,我们能引入的视频源不仅仅局限于电竞比赛、体育赛事,还可以是热门电视剧、活动直播,甚至是无人机的实时航拍画面。
这种方式不仅可以解决赛事直播缺少连麦互动,还可以让普通直播间可以从单纯的唱见、手游直播、户外直播,瞬间变成围绕共同兴趣或实时热点的互动直播间,主播与观众一边看“节目”,一边音视频连麦互动。
在这个场景中具体需要实现以下几个功能:
- 引入外部视频流
- 主播音视频直播
- 两个视频流合图
- 两个视频流时间同步
- 其它业务功能(礼物、弹幕、评论等)
实现难点解析
难点一:外部视频源转码
外部视频源多种多样,视频格式、分辨率、帧率、码率千差万别。所以,为了适应不同的终端设备和网络,会在接到视频源后进行转码。
普通视频网站在做赛事转播的时候,一般会提取到的格式是 mp4,但也会出现其它格式。而分辨率则可能是 360p、720p 或 1080p。所以获取到赛事视频流时,需要先对该流转码,生成一路流,再通过 CDN 推到观众端。为了兼容不同的终端和网络,在转码时可生成多个分辨率的资源,服务端配套相应的策略来分发。
而“外部视频源”不但是为了适配终端和网络,还为了便于与主播画面合图。直播平台的主播视频流是已经定义好的,外部视频源的帧率、码率、分辨率不统一的情况时,无法合图,进一步导致无法推流至观众端。
因此,需要有转码,这部分工作如果没有做好,会导致只能支持有限的外部视频源格式,比如固定的 AVx 或 H.264。 无法降低或修改分辨率、码率、帧率。外部音视频流与主播音视频流的结合也较为复杂,两路流合成一路流时,合图的逻辑、音效处理逻辑都需要考虑。
难点二:主播流与外部流时间同步
在使用场景中,主播在获取到外部音视频流后,会同步解说。两路流是分别传输至服务端合图,并不是在主播端合图。因此,合图时要做好主播与外部流的时间同步,让主播的解说与外部流的画面能够对应。
如果以 Agora SD-RTN™ 作为服务端,我们可以通过下图来解释时间同步的过程。音视频流传输主要有三个环节:
- 蓝色部分:第三方视频流处理(蓝色);
- 黄色部分:主播音视频流传输至 Agora SD-RTN™(黄色);
- 红色部分:合图后的流经过 CDN 发送至观众端;
需要做同步的是蓝色和黄色部分。这两个环节要延时、并且有时间戳标记。
难点三:信令可靠性
从架构图可以看出,请求外部视频流、外部视频流转码、合图三个环节都需要信令的参与。信令的可靠性,直接影响相应环节的成功率。
提升信令可靠性要通过覆盖骨干网络的大网和让用户就近接入的边缘节点,二者缺一不可。
如何通过 Agora SDK 实现?
现在,开发者通过声网Agora SDK 2.1版新增的“外部输入直播视频源”功能,可以直接跨过上述三大难点,实现逻辑如下:
1.第三方视频流处理:
- 主播端通过信令,请求转码服务器从拉取外部音视频源;
- 外部视频流进入转码服务器,转码后传入 Agora SD-RTN™;
2.主播音视频流传输至 Agora SD-RTN™;
3.主播音视频流与外部音视频流在 Agora SD-RTN™ 内合图;
信令控制合图后的流再次转码,成为 rtmp 流,经过 CDN 发送至观众端 。
支持赛事直播场景的同时,“外部输入视频源”还可支持多种场景,比如:
- 在直播中拉入一路或多路 RTMP 或 HLS 流,可以是比赛、演出,同时多人看视频,并互动;
- 除了网络视频源,还能将无人机或其它网络摄像头捕获的画面引入主播画面。
基于此功能,还可以实现更多玩法,大家可以自由发挥想象。若想了解详细接口与实现流程,欢迎访问声网 Agora 开发者中心。