龙空技术网

WSL的WebRTC开发环境(四)

dxcnet 492

前言:

此刻兄弟们对“ubuntu下搭建sip服务器”大体比较着重,小伙伴们都想要学习一些“ubuntu下搭建sip服务器”的相关知识。那么小编同时在网络上汇集了一些对于“ubuntu下搭建sip服务器””的相关知识,希望各位老铁们能喜欢,看官们一起来学习一下吧!

WebRTC(Web Real-Time Communication,网页即时通信),是一个支持网页浏览器进行实时语音对话或视频对话的技术,目的是无插件实现web端的实时通信的能力。WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、展示等功能,并且还支持跨平台,包括linux、windows、mac、android等。

WebRTC

2010 年 Google 以 6820 万美元收购 VoIP 软件开发商 Global IP Solutions 的 GIPS 引擎,在经过收购之后没多久,Google 将该引擎改名为“WebRTC”,并宣布向开发者们开源了源代码。

2012 年,Google 将 WebRTC 集成到 Chrome 浏览器中。随后, Mozilla、Opera、Ericsson 等 PC 浏览器以及手机浏览器均开始支持 WebRTC 技术。

2017 年,苹果在 WWDC17 上正式宣布其浏览器内核 WebKit 也正式支持 WebRTC。

基于 Chromium 的新版 Edge 现在可在预览版中使用。新版本的 Edge 提供了 WebRTC 开发者常用的许多功能,如支持数据通道、RTCPeerConnection 中的 Strem、VP9 编解码器和 MediaStream Recording。

在 Discord、Google Hangouts 和 Facebook Messenger 等一些国内的多媒体网络应用中,也都需要 WebRTC 才能实现。

但是,WebRTC 的发展还面临着诸多的挑战:

浏览器面临的主要挑战是完成 WebRTC 1.0 API 的实现,以及消除实现差异。WebRTC API 在其历史中经历了三次主要迭代,需要实现互操作性、改进测试覆盖率等方面的标准。W3C 在实现这一目标方面一直在稳步前进,但还未成熟。

前实时音视频通信领域,也并不只有 WebRTC 一种可供选择的技术,专有的自研协议和 WebRTC 的互操作性通常使用网关实现。

WebRTC协议介绍:

基于Webrtc、Kurento的一种低延迟架构实现:

WebRTC的开源实现:

1、Jitsi Videobridge

Jitsi是一个SFU开源框架,由Atlassian维护,被集成到HipChat中。

Jitsi是一个处理XMPP信号流的SFU,适用于SIP/XMPP视频通话,会议,聊天,桌面共享,文件传输。如果你不需要SFU或者使用其他信号协议,最好还是使用其他项目。但由于Jitsi项目的简单明了,很多外包供应商很喜欢使用Jitsi,将它集成到自己的项目案例当中。

Github项目地址:

2、Kurento

Kurento 是一个 WebRTC 流媒体服务器以及一些客户端API,可以实现webrtc mcu、sfu等功能。2016年被Twilio收购,Kurento目前推进到6.13版本。nubomedia 开源框架是基于kurento开发的官方paas 平台,提高了稳定性,但是并不推荐学习使用。它可以实现的功能包括

网络流媒体协议,包括HTTP、RTP和WebRTC群组通信(group communications,包括MCU和SFU功能),支持媒体流的转码、录制、广播、路由、混流。高级媒体处理特性,包括:机器视觉、视频索引、增强现实、语音分析。Media storage that supports writing operations for WebM and MP4 and playing in all formats supported by GStreamer.Automatic media transcoding between any of the codecs supported by GStreamer, including VP8, H.264, H.263, AMR, OPUS, Speex, G.711, and more.

Kurento服务器实现的功能

官网地址:

2019年12月发布的最新的6.13版本的文档:

由于Kurento开源服务只有Ubuntu的版本,所以在WSL的UBUNTU上安装Kurento服务器是再适合不过了。建议安装Kurento的6.11版本,因为最新的版本并不支持kms-datachannelexample等组件,无法运行显示字幕等实例,如果只是学习WebRTC,可以无视。

6.11版本的文档

WSL上的安装:

1、 在Ubuntu子系统内确认安装GnuPG

sudo apt-get update && sudo apt-get install --no-install-recommends --yes \gnupg

在Ubuntu子系统内确认安装GnuPG

2、 在16.04的Ubuntu子系统,执行:

     DISTRO="xenial"  # KMS for Ubuntu 16.04 (Xenial)    DISTRO="bionic"  # KMS for Ubuntu 18.04 (Bionic) 

在18.04的Ubuntu子系统,执行

DISTRO="bionic"  # KMS for Ubuntu 18.04 (Bionic)

3、下面两条指令指令增加Kurento仓库到系统配置中:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83       sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF# Kurento Media Server - Release packagesdeb [arch=amd64]  $DISTRO kms6EOF

增加Kurento仓库到系统配置

4、 安装Kurento服务KMS

sudo apt-get update && sudo apt-get install --yes kurento-media-server

安装过程中下载较慢,特别是下载GStream组件的时候,如果下载速度降到很低,可以中断重新下载,具备断点重传。

5、安装完成后,可以用下面的指令启动服务,或者停止服务

sudo service kurento-media-server startsudo service kurento-media-server stop

启动KMS服务

KMS会在Ubuntu子系统本地生成一个端口在8888的服务,可以通过/etc/kurento/kurento.conf.json进行KMS的详细配置。

KMS服务的配置

6、可以在/var/log /kurento-media-server/下查看KMS的日志信息

KMS的日志信息

7、如果需要在远程服务器上部署KMS服务,则需要继续安装STUN或者TURN服务器,来穿透NAT墙。可以参照该网文来安装Docker设置,

8、之后可以继续下载Kurento的示例代码来安装运行,有SpringBoot、NodeJS等版本的程序供选择。我这里用SpringBoot就是Java的例程:Kurento Java Tutorial - Hello World

(1) 运行以下命令来下载Java实例代码、设置6.11分支,打包运行SpringBoot项目:

git clone  kurento-tutorial-java/kurento-hello-worldgit checkout 6.11.0mvn -U clean spring-boot:run -Dkms.url=ws://localhost:8888/kurento

启动Hello World的SpringBoot项目

这里的-Dkms.url=ws://localhost:8888/kurento是本地KMS服务提供的路径,如果端口没有什么变化,可以省略不写。

(2) 如果启动没有什么错误的话,就可以在WebRTC兼容的浏览器(Chrome、Edge、360浏览器等)输入以下地址(注意是https协议):,这个Helloworld实例是将本地摄像头采集到的音视频流发送到KMS服务器后,又回送到浏览器,左边的Video组件是显示本地的视频,右边的Video组件是显示回送的视频。

可以看到界面:

Helloworld示例

在界面的console里你可以看到整个浏览器客户端与应用服务器(SpringBoot创建的8433端口的Web服务)的消息协商过程。

如果在Chrome浏览器中,可以在浏览器的另一个标签里打开:chrome://webrtc-internals/,可以看到Google浏览器提供的对WebRTC数据的统计。

Chrome浏览器里的WebRTC统计信息

有兴趣的同学可以摘取其中的静态JS文件和库文件,组合到自己的应用里。

示例中的WebRTC Media Player可以修改为远程流媒体播放。示例中的WebRTC recording可以修改为流媒体录像示例中的WebRTC One-To-Many broadcast可以修改为一对多的直播示例中的WebRTC Many-To-Many video call (Group Call) 可以修改为多对多的视频会议系统

可以在我的网站rtc目录下访问这个helloworld示例,rtc/hello.html

标签: #ubuntu下搭建sip服务器