咨讯息 · 2022年7月2日 0

音应用领域:怎样同时实现北京人民广播电台连麦

Introduction

Prerequisites

先决条件,须要具有的习题,或倚赖的辅助工具:

• 有很大的软件结构设计此基础,尽管结构设计了十分单纯的进阶情景,却是有部份情景须要终端端合作开发潜能,和Linux服务器的操作形式潜能。

• [可选] 注册登记的搜索引擎,提出申请不合法的HTTPS合格证书要得搜索引擎,用作WebRTC推流;无搜索引擎根本无法采用自亲笔签名合格证书,操作形式麻烦事些,也是可取的。

上面是同时实现现场直播连麦情景的关键步骤,从单纯的情景侧发力,逐渐同时实现现场直播连麦。

Step 1: Build a Live Room using RTMP and HLS挂机宝

现场北京人民广播电台连麦,他们具体来说须要构筑一般现场北京人民广播电台,尽管没连麦的潜能,但现场直播推流和观赏是基本上的潜能。

虽然一般现场直播十分健全,是最难同时实现的两个情景,即使不须要具有编程科学知识,采用原有的辅助工具链就能顺利完成。

接着,他们看现场直播网络平台。依照同时实现的缓急某种程度,从难到繁杂,有四个形式可选配:

• SaaS:间接采用原有的现场直播网络平台。益处:无技术难度,可间接小规模民用;严重不足:不容订制,难以介绍现场直播基本上原理。

• 开放源码计划:采用开放源码服务器构筑现场直播网络平台。益处:难采用,可编程订制,能认知现场直播的基本上原理;严重不足:须要构筑服务器,难以小规模采用。

• PaaS:采用现场直播云服务。益处:难采用,有很大订制性,可间接小规模民用;严重不足:须要云帐号,可能将须要订阅。挂机宝

Note: 这章他们只介绍SaaS和开放源码计划,虽然PaaS云服务包含了现场直播和连麦,他们放在后面统一介绍。

OBS(主播) —RTMP—> 视频号/B站网络平台 —–> 微信/B站App(观众)

如果须要介绍现场直播的基本上原理,或者须要自己构筑现场直播网络平台,就能选择采用开放源码计划。

现场直播开放源码计划,推流辅助工具却是用OBS[5]挂机宝,采用方法也是一样的。但他们须要自己部署服务器,也须要选择现场直播观赏的客户端:

• 推流辅助工具:OBS,vMix,芯象,腾讯会议等。

• 现场直播网络平台:云SRS,SRS,NginxRTMP等。

• 观赏辅助工具:Chrome浏览器,VLC等。

• Server:rtmp://your-server-ip/live/

• Stream Key:livestream

Note:若采用云SRS,则Stream Key中可能将有鉴权字符,例如livestream?secret=******,能从云SRS的后台私人现场北京人民广播电台拷贝就能。

• RTMP流:rtmp://your-server-ip/live/livestream

• FLV流:http://your-server-ip/live/livestream.flv

• HLS流:http://your-server-ip/live/livestream.m3u8

用开放源码计划构筑现场直播,比较难能看到整个现场直播的链路,如下图所示:

OBS(主播) —RTMP—> SRS —-RTMP/FLV/HLS—> VLC

Note: RTMP和FLV协议,客户端和SRS之间都是两个TCP连接。而HLS协议则是多个TCP连接。

安装完SrsPlayer[13]插件后,新建两个Post或Page,嵌入现场直播流到WordPress页面:

[srs_player url=”http://your-server-ip/live/livestream.flv”]

Note: 在线DEMO,请看FLV现场直播现场直播流展示[14]挂机宝

Note: 针对不同的业务要求,他们能选择不同的现场直播流,一般FLV的延迟比较低兼容性不如HLS,HLS延迟比较大但网络平台的兼容性很好。还能采用WebRTC观赏现场直播流,这个就不在这里介绍,有兴趣能自己摸索。

采用SRS构筑现场直播,尽管能看到现场直播的全链路过程,但有个明显的问题,就是这里只有一台SRS服务器,能支持的观赏人数是有限的,除了少数情景的流很少,一般都须要支持成百上千即使上万人观赏。能用多台SRS组成集群,能支持更多人观赏,他们不展开讲这个同时实现,能参考SRS集群[15]挂机宝

Note: SRS集群和现场直播云服务却是有区别的,SRS集群只是扩展了SRS的并发潜能,一般在企业或学校内网能用,但在互联网上的现场直播云服务除了并发,还须要支持就近调度、计量计费、运维监控、安全防护等,详细能参考CDN的基本上原理。

现在他们介绍了现场直播怎样同时实现,接下来他们考虑怎样同时实现连麦,接着将连麦转成现场直播流,就同时实现了有连麦潜能的现场北京人民广播电台。挂机宝

Step 2: Start Video Chat using WebRTC

连麦本质上就是通话,两个主播之间互相交流,接着把交流的画面变成现场直播流推送到现场直播网络平台。既然要交流,明显是须要推流和拉流,这和之前的主播不同,之前只推流并不拉流。

无论选择什么技术、网络平台或架构,从流的图上看,连麦就是两个通话的过程:

主播 <—RTC—> 服务器或网络平台 <—RTC—> 主播

Note: 和现场直播一般用TCP协议不同,这里RTC一般是UDP协议,是不会有TCP连接,但从逻辑的流来看,主播之间是须要互相推拉流,才能顺利完成连麦或通话过程。挂机宝

通话和现场直播十分不一样的是,通话并没统一的标准协议,因此客户端都是和网络平台绑定的,不同的供应商和计划之间的客户端是不能互通的。因此他们在同时实现通话潜能时,根本无法根据他们不同计划选择不同的客户端。

Note: WebRTC是通话中的两个标准,但实际上WebRTC也不是两个RFC,而是几十个核心RFC构成。另外,在业务信令、QoS拥塞控制算法、语音算法、编解码算法上,各个网络平台针对自己的业务特点和优化,都结构设计了私有协议,因此就算各网络平台支持的WebRTC也是不能互通的。挂机宝

同样,最单纯的通话计划是SaaS,能选择腾讯会议或Zoom两个通话的SaaS,它们都有自己的客户端和帐号体系,只须要下载就能采用了。

虽然WebRTC推流,要采用HTTPS,而HTTPS要要搜索引擎和合格证书,能参考怎样设置HTTPS[19]。当然如果采用自亲笔签名合格证书也能,须要手动允许自亲笔签名合格证书。

• 主播A:webrtc://lh.ossrs.net:443/live/acagdd?secret=xxx

• 主播B:webrtc://lh.ossrs.net:443/live/ccdkkc?secret=xxx

每个主播只须要打开自己的推流,和对方的播放页面,就能同时实现连麦通话了。流传输图如下:

主播A —-WebRTC—–> SRS —-WebRTC—> 主播B主播B —-WebRTC—–> SRS —-WebRTC—> 主播A

同样,能将WebRTC推流和播放嵌入到WordPress博客页面,参考链接[20],这样能有比较丰富的内容展示。

[srs_publisher url=”webrtc://your-server-ip/live/stream-a”][srs_player url=”webrtc://your-server-ip/live/stream-b”]

Note: 在线DEMO,请看WebRTC:主播A页面[22]

[srs_publisher url=”webrtc://your-server-ip/live/stream-b”][srs_player url=”webrtc://your-server-ip/live/stream-a”]

Note: 在线DEMO,请看WebRTC:主播B页面[23]

两个主播分别打开页面,就能同时实现连麦了。

接下来,他们只须要将连麦或通话的情景,转成现场直播流就同时实现了现场直播连麦。

Step 3: Covert WebRTC to RTMP

将连麦转成现场直播流,从技术上看有几种计划:挂机宝

• 客户端混流:采用OBS抓取连麦的画面和声音,OBS天然就具有混流和布局的潜能,接着推现场直播就能。

• 服务器混流:连麦的网络平台将连麦的流混流后转现场直播流,或者将WebRTC流转RTMP流后混流。

先看单纯的客户端混流挂机宝计划,客户端OBS中,新建Sources > Window Capture,抓取连麦的腾讯会议或者WebRTC网页。接着选择Settings > Audio > Global Audio Device > Desktop Audio > Default,就能添加两个桌面音频(Desktop Audio),也就是连麦的混音。

Note: OBS也能多次抓取后,裁剪窗口,同时实现更加繁杂的布局。

对于WebRTC,能新建两个单独页面,将主播的流拉出来,但不推流,如下所示:

[srs_player url=”webrtc://your-server-ip/live/stream-a”][srs_player url=”webrtc://your-server-ip/live/stream-b”]

Note: 在线DEMO,请看WebRTC:主播B页面[24]

还有一种办法,服务器混流计划,就是将每个RTC流转成RTMP流,接着采用FFmpeg命令行合并两个流:

ffmpeg -f flv -i rtmp://your-server-ip/live/stream-a -f flv -i rtmp://your-server-ip/live/stream-b \-filter_complex“[1:v]scale=w=96:h=72[ckout];[0:v][ckout]overlay=x=W-w-10:y=H-h-10[out]”-map“[out]”\-c:v libx264 -profile:v high -preset medium \-filter_complex amix -c:a aac \-f flv -y rtmp://your-server-ip/live/merge

这种形式比OBS繁杂一些,但它能在服务器上间接取本机的RTMP流转换,而且能采用程序启动这个命令,有利于在产品中同时实现这个潜能。挂机宝

从流的处理上看,这个计划是:

StreamA —-WebRTC—–> SRS —-RTMP—++–> FFmpeg —RTMP–> 现场直播StreamB —-WebRTC—–> SRS —-RTMP—+

从技术计划上看,完全能间接混合RTC的流,这就是一般说的MCU模式(SRS是SFU模式):

StreamA —-WebRTC—–> SRS —-RTC—++–> MCU —RTMP–> 现场直播StreamB —-WebRTC—–> SRS —-RTC—+

这种计划去掉了RTMP的中间过程,效率更高,而且也能利用RTC的拥塞算法等优势,同时实现SFU和MCU的跨机房部署。

Note: 目前会议网络平台都是采用这种MCU的模式同时实现混流,开放源码项目能参考OWT[25]

Step 4: Scale Out by Cloud Service挂机宝

他们选择腾讯云小现场直播[26],小现场直播 App 是一套开放源码的、完整的在线现场直播解决计划,它基于云现场直播服务、即时通信(IM)构建,并采用云函数(Serverless)提供标准的后台服务,能同时实现登录、注册登记、开播、房间列表、连麦互动、文字互动和弹幕消息等功能。

• License URL:https://license.vod2.myqcloud.com/license/v2/xxx/v_cube.license

• License Key:xxxxxxxxxxxxxxx

• SDKAppID:1400xxxxxxx

• SecretKey(密钥或秘钥):xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx挂机宝

接着,在连麦应用领域[29],选择CDN观赏配置页 > 旁路推流 > 全局自动旁路,这样能将RTC流转换成RTMP现场直播流。

下载客户端代码:

gitclonehttps://github.com/tencentyun/XiaoZhiBo

以iOS为例,安装倚赖,打开iOS工程:

cdXiaoZhiBo/iOS/APPpod installopen XiaoZhiBoApp.xcworkspace

Note: 详细命令,和Android系统,请参考运行小现场直播App[30]

打开文件XiaoZhiBo/iOS/APP/Debug/GenerateGlobalConfig.swift挂机宝,设置好参数:

• LICENSEURL 默认为 PLACEHOLDER ,请设置为实际的 License URL 信息

• LICENSEURLKEY 默认为 PLACEHOLDER ,请设置为实际的 License Key 信息

云主机、VPS、挂机宝、游戏服务器上永恒云

• SDKAPPID 默认为 PLACEHOLDER , 请设置为实际的 SDKAppID

• SECRETKEY 默认为 PLACEHOLDER ,请设置为实际的密钥信息挂机宝

• PLAY_DOMAIN 默认为 PLACEHOLDER ,请设置为实际的拉流搜索引擎

Note: 其中PLAY_DOMAIN就是现场直播的播放搜索引擎,能在云现场直播 > 搜索引擎管理[31]中配置播放搜索引擎。

修改工程的Bundle identifier字段为 License 信息所对应的包名。连上 iOS 设备,编译并运行即可。

Conclusion

通过现场直播连麦,他们介绍了现场直播的全链路基本上原理,现场直播网络平台的构筑,WebRTC通话基本上原理,WebRTC通话同时实现连麦的构筑,和将连麦转成现场直播的多种技术计划。此外,他们也介绍了怎样采用SaaS辅助工具,和PaaS云网络平台,同时实现现场直播连麦,快速应用领域到线上业务中。挂机宝

引用链接

永恒云出品