WCS 5.2概述-用于在线广播和视频聊天的Web开发人员的WebRTC服务器



Alice是一位经验丰富的全栈开发人员,并且能够在一周内使用php在她最喜欢的框架上编写SAAS项目框架。 在前端,他更喜欢Vue.js。


一位客户敲了一个电报,客户一定要开发一个网站,这将是雇主和雇员进行面谈的聚会地点。 全职-意味着眼与眼,通过视频和语音实时直接进行视频联系。
“为什么不使用Skype?”您问。 碰巧的是,认真的项目以及每个初创企业都毫无疑问地将自己视为一个企业,出于各种原因,它们试图提供内部通信服务,包括:


1)不要将您的用户带给第三方交流者(Skype,
环聊等)。 将它们留在服务中。


2)监控通讯:通话记录,采访结果。


3)录音(当然,要通知双方录音)。


4)不要依赖于第三方服务的策略和更新。 每个人都知道这个故事:Skype更新了,它开始了...


任务看起来很简单。 WebRTC是有关该主题的google,看来您可以在两个浏览器之间组织对等连接,但是问题仍然存在:


1)在哪里获得STUN / TURN服务器


2)有没有他们可以做


3)如何记录对等WebRTC呼叫


4)如果您需要在呼叫中添加第三方,例如人力资源经理或雇主的另一位专家,将会发生什么。


事实证明,仅WebRTC和对等网络还不够,并且不清楚如何处理所有这些以启动服务所需的视频功能。


文章内容




服务器和API


为了消除所有这些白点,使用了服务器解决方案和对等服务器对等体系结构。 Web Call Server 5.2进一步的WCS是服务器解决方案之一-开发平台,使您可以向项目添加此类视频功能,而不必担心STUN / TURN和对等连接的稳定性。


在最高级别,WCS是JavaScript API +服务器部分。 该API用于在浏览器端的常规JavaScript上进行开发,并且服务器处理视频流量,充当媒体流量的状态代理。



除了JavaScript API,还有Android SDK和iOS SDK,分别需要为iOS和Android开发本机移动应用程序。


例如,将流发布到服务器(从网络摄像头流向服务器的流)如下所示:


Web SDK


session.createStream({name:”stream123”}).publish(); 

Android SDK


 publishStream = session.createStream(streamOptions) publishStream.publish(); 

iOS SDK


 FPWCSApi2Stream *stream = [session createStream:options error:&error]; if(![stream publish:&error]) { //published without errors } 

因此,您不仅可以实现Web应用程序,还可以为支持Google Play和App Store的完整版实现视频流。 将移动SDK添加到顶层图片中。 结果会是这样的:




传入流


流服务器(即WCS)从传入流开始。 要分发东西,您需要拥有它。 要将视频流分发给查看者,这些流必须进入服务器,通过其RAM并通过网卡退出。 因此,熟悉媒体服务器时首先要问的一个问题是:媒体服务器接受流的协议和格式。 对于WCS,这些是以下技术:WebRTC,RTMP,RTSP,VOD,SIP / RTP。



每个协议都可以由不同的客户端使用。 例如,通过WebRTC,不仅浏览器的流可以进入,而且其他服务器也可以。 我们在表格中显示传入流量的可能来源。


WebRTCRTMPRtsp伏特SIP / RTP
  • Web SDK
    • 相机+麦克风
    • 帆布
    • 屏幕共享

  • Android SDK
  • iOS SDK
  • WCS

  • 光盘

  • RTMP编码器
    • ffmpeg
    • Obs
    • 有线广播

  • Adobe编码器
  • WCS

  • Flash播放器

  • 网络摄像机
  • RTSP服务器

  • 文件系统
  • AWS S3

  • SIP端点
  • SIP会议


如果您查看传入流量的来源,则可以添加以下内容:



传入的WebRTC


Web SDK使您不仅可以捕获相机和麦克风,还可以使用浏览器API的功能来访问屏幕-屏幕共享。 此外,您可以捕获任意的Canvas元素,并在其上进行后续广播的所有内容都是canvas流。


由于移动设备的特殊性,Android SDK和iOS SDK可以即时在设备的前后摄像头之间切换。 这样,您就可以在流式传输期间切换源而不停止流。


传入的WebRTC流也可以通过以下方法从另一台WCS服务器获得:推,拉和CDN,这将在后面讨论。



入站rtmp


RTMP协议已广泛用于喜欢的OBS流媒体以及其他编码器中:Wirecast,Adobe Media Ensourcer,ffmpeg等。 使用这些编码器之一,您可以捕获流并将其发送到服务器。


您也可以从另一台媒体服务器或WCS服务器中拾取RTMP流。
使用推拉方法。 在推送的情况下,发起者是远程服务器。 在拉的情况下,我们转向本地的拉流,从远端的拉流。




传入RTSP


RTSP通信的来源通常是IP摄像机或支持RTSP协议的第三方媒体服务器。 尽管启动RTSP连接时启动器是WCS,但从IP摄像机到该方向的音频和视频流量都向WCS服务器移动。 因此,我们将来自摄像机的流视为传入流。




收视点播


乍一看,似乎VOD(视频点播)功能专门与传出的流以及浏览器对文件的播放有关。 在我们的情况下,这有点不对。 WCS诚实地将mp4文件从文件系统转换为localhost,因此,将创建传入流,就好像它是来自第三方源一样。 此外,如果我们将一个查看器限制为一个mp4文件,我们将获得经典的VOD,其中查看器从一开始就开始播放流。 如果没有限制,我们将获得VOD LIVE-VOD的一种变体,观众可以在其中播放与流相同的文件,并连接到当前所有其他文件所在的播放点(预先录制的广播电视模式)。




传入的SIP / RTP


要在SIP会话中接收传入的RTP通信,您需要使用第三方SIP网关建立呼叫。 如果成功建立连接,则音频和/或视频流量将来自SIP网关,该网关将包装在WCS侧的传入流中。




外流


在服务器上接收到流之后,可以根据请求将接收到的流复制到一个或多个查看器。 观众向播放器或其他设备请求流。 这样的流被称为传出流或“观看者流”,因为此类流的会话总是在观看者/播放器方面发起。 回放技术集包括以下协议/格式:WebRTC,RTMP,RTSP,MSE,HLS


WebRTCRTMPRtsp微软ls
  • Web SDK
  • Android SDK
  • iOS SDK
  • WCS
    • 光盘


  • Flash播放器
  • RTMP播放器

  • RTSP播放器
    • VLC
    • WCS


  • Web SDK

  • HLS播放器
    • hls.js
    • 野生动物园





即将发布的WebRTC


在这种情况下,Web SDK,Android SDK和iOS SDK充当播放器的API。 播放WebRTC流的示例如下所示:


Web SDK


 session.createStream({name:”stream123”}).play(); 

Android SDK


 playStream = session.createStream(streamOptions); playStream.play(); 

iOS SDK


 FPWCSApi2Stream *stream = [session createStream:options error:nil]; if(![stream play:&error]) { //published without errors } 

这与发布API非常相似,唯一的区别在于
stream.publish(),stream.play()被调用进行播放。


播放器也可以是第三方WCS服务器,它将被指示通过WebRTC使用pull方法从另一台服务器通过WebRTC接收流或在CDN内接收流。



即将离任的rtmp



这里主要是RTMP播放器-著名的Flash Player,以及使用RTMP协议的台式机和移动应用程序,都可以接收和播放RTMP流。 事实是,尽管Flash离开了浏览器,但它却离开了RTMP协议(该协议广泛用于视频广播),并且浏览器缺乏本机支持并不妨碍在其他客户端应用程序中使用这种相当成功的协议。 众所周知,RTMP在VR播放器中广泛用于Android和iOS的移动应用程序。



传出RTSP



WCS服务器可以充当RTSP服务器,并通过RTSP作为常规IP摄像机分发接收到的流。 在这种情况下,播放器必须与服务器建立RTSP连接,并选择要播放的流,就好像它是IP摄像机一样。



即将离任的MSE



在这种情况下,播放器使用Websocket协议从服务器请求流。 服务器在Web套接字上提供音频和视频数据。 由于开箱即用的本地MSE扩展,数据到达浏览器并转换为浏览器可以播放的块。 播放器最终将基于HTML5视频元素进行工作。



传出的HLS



在此,WCS充当支持HLS(HTTP实时流)的HLS服务器或Web服务器。 传入流出现在服务器上之后,将生成.m3u8格式的HLS播放列表,该列表将响应HTTP请求而提供给播放器。 播放列表描述了播放器应下载和显示的视频片段。 播放器下载视频片段,然后在浏览器页面,移动设备,台式机,Apple TV机顶盒以及要求HLS支持的任何位置播放视频片段。



收件箱和发件箱


总共我们有5个传入流和相同数量的传出流类型。 我们列出
它们在表中:


收件箱外向
WebRTCWebRTC
RTMPRTMP
RtspRtsp
伏特微软
SIP / RTPls


即 我们可以将流驱动到服务器,并可以连接到它们并播放适合此问题的播放器。 要播放WebRTC流,请使用Web SDK。 要将WebRTC流作为HLS播放,请使用HLS播放器等。 许多观众可以播放一个流。 一对多广播工作。


现在,我们将说明可以对流执行哪些操作。



传入流操作


观众坐在那里的流出的溪流并没有受到特别的操纵。 实际上,如果查看者已经与服务器建立了会话,并且已经在进行某种形式的流,则无法在不中断会话的情况下对其进行任何更改。 因此,所有操作和更改都在传入流上进行,此时复制尚未发生。 然后,将经过更改的流循环到所有连接的查看器。


流上的操作包括:


  • 记录
  • 快照删除
  • 将流添加到混合器
  • 流转码
  • 加水印
  • 添加FPS过滤器
  • 图像旋转90、180、270度


传入流录制



也许是功能中最易理解和最常遇到的功能。 实际上,在许多情况下,流都需要记录:网络研讨会,英语课程,咨询等。



可以使用Web SDK或REST API发起记录,但有特殊要求:


 /stream/startRecording {} 

结果保存为mp4文件在文件系统中。



快照删除



同样常见的任务是对当前流进行拍照以在站点上显示图标。 例如,一个视频监视系统中有50个流,每个流都有一个IP摄像机。 在一页上显示所有50个线程不仅对浏览器资源有问题,而且毫无意义。 在30 FPS的情况下,变化图像的总FPS将为每秒1500帧,而人眼根本不会接受该频率。 作为解决方案,您可以按需配置自动切片或进食快照,在这种情况下,您可以以任意频率(例如,每10秒1帧)在站点上显示图像。 快照可以通过REST API从SDK中删除,也可以自动切片。



WCS服务器支持以下REST方法来删除快照:


 /stream/snapshot 



将流添加到混音器



可以将来自两个或多个源的图像合并为一个图像,以显示给最终查看者。 此过程称为混合。 基本示例:1)从一张屏幕上的多个摄像机进行视频监视。 2)电视会议,每个用户接收一个流以节省资源,其余的则混合在一起。 混音器通过REST API进行控制,并具有用于创建视频会议的MCU操作模式。


REST命令将流添加到混合器:


 /mixer/startup 


流转码



有时需要压缩流,以便通过分辨率和比特率适应某些客户端设备组。 为此,使用转码。 可以通过REST API在Web SDK端启用代码转换,也可以通过CDN中的特殊代码转换节点自动启用代码转换。 例如,当输入1280x720的视频时,可以将其转码为640x360,以从传统上带宽较低的地理区域分发给客户。 您的同伴在哪里,埃隆·马斯克(Elon Musk)?



使用的REST方法:


 /transcoder/startup 



添加水印



众所周知,无论播放器获得什么保护,任何内容都可以被盗并转换为WebRip。 如果您的内容确实如此有价值,则可以在其中嵌入水印或徽标,这将大大增加其进一步使用和公开展示的难度。 要添加水印,只需上传PNG图像,它将通过转码将其插入视频流。 因此,如果您仍然决定在服务器端准备几个CPU核心,
在流中添加水印。 为了不通过转码扭曲服务器上的水印,最好将其直接添加到编码器/流媒体中,
通常会提供这样的机会。



添加FPS过滤器



在某些情况下,要求流具有均匀的FPS(每秒帧数)。 如果我们将流中继到第三方资源(如Youtube或Facebook),或者使用敏感的HLS播放器进行播放,则可以派上用场。 再次过滤需要转码,因此,如果计划进行此操作,请计算服务器的强度并为配置做准备,并为每个流增加2个核心。



将图片旋转90、180、270度



移动设备具有根据旋转角度更改已发布流的分辨率的能力。 例如,他们开始流媒体播放,水平握住iPhone,然后转身。 根据WebRTC规范,移动设备的流媒体浏览器,在这种情况下,iOS Safari应该向服务器发出转向信号。 反过来,服务器必须将此事件发送给所有订阅者。 否则,结果可能是
这样,彩带就可以将手机放到一边,但是看到的相机仍然是直立的,而观看者则是堆放在一边。 要在SDK端使用转弯功能,必须包含相应的cvoExtension扩展名。



输入流的控制在哪里


自动-配置通常是在服务器端
设置。


流动作网络,iOS,Android SDKREST API自动的光盘
记录++

快照删除+++
添加到混音器++

流转码++
+
加水
标志


+
添加FPS过滤器

+
将图片旋转90度,
180、270度
+




流中继


中继也是用于操纵进入服务器的流的一种选择,其中包括将流强制到第三方服务器。 中继的同义词是:复制,推送,注入。


可以使用以下协议之一实现中继:WebRTC,RTMP,SIP / RTP。 该表显示了可以中继流的方向。



WebRTCRTMPSIP / RTP
WCSRTMP服务器WCSSIP服务器



WebRTC中继



如果出于某种原因需要将流传递到另一台服务器上,则可以将流中继到另一台WCS服务器。 通过使用/ push方法的REST API进行中继。 收到这样的REST请求后,WCS将连接到指定的服务器,并向该服务器发布服务器-服务器流。 之后,该流可用于在另一台机器上回放。


 /pull/push 

-使用的REST方法。



RTMP中继



与WebRTC中继一样,也可以将RTMP中继到另一台服务器。 区别仅在于中继协议。 RTMP中继也可以通过/ push执行,使您可以将流传输到第三方RTMP服务器和支持RTMP Ingest的服务:Youtube,Facebook流等。 因此,WebRTC流可以中继到RTMP。 在RTMP中获得相同的成功后,您可以中继进入服务器的任何其他流,例如RTSP或VOD。


使用REST调用将视频流中继到另一个RTMP服务器


 /push/startup 

-使用了REST调用。



SIP / RTP中继




很少使用的功能。 最常在企业中使用。 例如,当您需要与外部SIP会议服务器建立SIP呼叫并将音频或视频流重定向到此呼叫,以便会议的观众看到一些视频内容时:“请观看此视频”或“同事,现在让我们看看使用IP-施工现场的摄像机。” 您需要了解会议本身存在,并且在这种情况下是在具有SIP支持的外部VKS服务器上进行管理的(最近我们测试了Polycom DMA的解决方案),我们只是将现有流连接并中继到该服务器。 REST API函数称为/注入,仅用于这种情况。


REST API命令:


 /call/inject_stream/startup 


将服务器连接到CDN内容处理网络


一台服务器通常只有有限的资源。 因此,对于大型在线广播(观众的帐户达到数千个),必须进行扩展。 可以将多个WCS服务器组合到一个CDN内容传递网络中。 在内部,CDN将通过WebRTC来保持流式传输期间的低延迟。



可以用以下角色之一配置服务器:Origin,Edge,Transcoder。 源类型服务器-接收流量并将其分发到负责将流传递给查看器的边缘服务器的边缘节点。 如果有必要以几种分辨率准备一个流,则该方案中将包含代码转换器节点,该代码转换器承担代码转换流的资源消耗任务。



总结一下


WCS 5.2是用于开发具有对浏览器和移动设备的实时音频和视频支持的应用程序的服务器。 提供了四个用于开发的API:Web SDK,iOS SDK,Android SDK,REST API。 您可以使用五种协议将视频流发布(馈送)到服务器:WebRTC,RTMP,RTSP,VOD,SIP / RTP。 在服务器上,您可以使用五种协议与播放器一起播放流:WebRTC,RTMP,RTSP,MSE,HLS。 可以对流进行控制和执行,这些操作包括:记录,切片快照,混合,代码转换,添加水印,过滤FPS,在移动设备上播放视频。 流可以通过WebRTC和RTMP协议中继到其他服务器,也可以重定向到SIP会议。 服务器可以集成到内容交付网络中,并可以扩展以处理任意数量的视频流。



爱丽丝必须了解与服务器一起使用的知识


开发人员需要能够使用Linux。 这类团队
命令行不应引起混淆:


 tar -xvzf wcs5.2.tar.gz 

 cd wcs5.2 

 ./install.sh 

 tail -f flashphoner.log 

 ps aux | grep WebCallServer 

 top 

Vanilla JavaScript还需要具备以下能力:
网页


 //  session.createStream({name:'mystream'}).publish(); //  session.createStream({name:'mystream'}).play(); 

使用后端的功能也很有用。



WCS不仅可以通过REST API接收控制命令,还可以发送钩子-有关发生在其上的事件的通知。
例如,当尝试从浏览器或移动应用程序建立连接时,WCS将调用/ connect挂钩,而在尝试播放流时,它将调用playStream挂钩。 因此,开发人员将不得不花些时间在后端,它能够编写一个简单的REST客户端和一个小的REST服务器来处理钩子。


REST API示例


 /rest-api/stream/find_all 

-用于在服务器上输出流列表的REST API的示例


REST挂钩示例


 https://myback-end.com/hook/connect 

-后端的REST挂钩/连接处理。


Linux,JavaScript,REST Client / Server是这三个要素
足以在WCS平台上开发有效的生产服务
视频流。


移动应用程序开发需要Java和Objective-C的知识
分别适用于Android和iOS。



安装和启动


现在可以通过三种方式快速启动WCS:


1)在您的Centos7或Ubuntu 16.x LTS或Ubuntu 18.x LTS上安装
等 以文档中文章为指导。



2) 在Amazon EC2上拍摄完成的图像


否则


3) 在DigitalOcean上拍摄完成的服务器映像


并开始使用流视频功能进行激动人心的项目开发。


这篇评论文章非常充实。 谢谢你
阅读耐心。


拥有良好的流媒体!




参考文献


WCS 5.2 -WebRTC服务器


安装和启动


安装并运行WCS


在Amazon AWS上启动预构建映像


DigitalOcean


SDK


Web SDK


Android SDK


iOS SDK







WebRTC CDN



Web Call Server 5.2



Source: https://habr.com/ru/post/zh-CN482960/


All Articles