Introduction
.jpeg)
.jpeg)
Prerequisites
先决条件,须要具有的习题,或倚赖的辅助工具:
• 有很大的软件结构设计此基础,尽管结构设计了十分单纯的进阶情景,却是有部份情景须要终端端合作开发潜能,和Linux服务器的操作形式潜能。
• [可选] 注册登记的搜索引擎,提出申请不合法的HTTPS合格证书要得搜索引擎,用作WebRTC推流;无搜索引擎根本无法采用自亲笔签名合格证书,操作形式麻烦事些,也是可取的。
上面是同时实现现场直播连麦情景的关键步骤,从单纯的情景侧发力,逐渐同时实现现场直播连麦。
Step 1: Build a Live Room using RTMP and HLS挂机宝
.jpeg)
现场北京人民广播电台连麦,他们具体来说须要构筑一般现场北京人民广播电台,尽管没连麦的潜能,但现场直播推流和观赏是基本上的潜能。
虽然一般现场直播十分健全,是最难同时实现的两个情景,即使不须要具有编程科学知识,采用原有的辅助工具链就能顺利完成。
接着,他们看现场直播网络平台。依照同时实现的缓急某种程度,从难到繁杂,有四个形式可选配:
• 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—> VLCNote: 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
.jpeg)
连麦本质上就是通话,两个主播之间互相交流,接着把交流的画面变成现场直播流推送到现场直播网络平台。既然要交流,明显是须要推流和拉流,这和之前的主播不同,之前只推流并不拉流。
无论选择什么技术、网络平台或架构,从流的图上看,连麦就是两个通话的过程:
主播 <—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
.jpeg)
.jpeg)
将连麦转成现场直播流,从技术上看有几种计划:挂机宝
• 客户端混流:采用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挂机宝
.jpeg)
他们选择腾讯云小现场直播[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.xcworkspaceNote: 详细命令,和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云网络平台,同时实现现场直播连麦,快速应用领域到线上业务中。挂机宝
引用链接永恒云出品