计算机系统应用教程网站

网站首页 > 技术文章 正文

WSL的WebRTC开发环境(四) webrtc webgl

btikc 2024-10-25 10:56:00 技术文章 6 ℃ 0 评论

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


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协议介绍:https://www.cnblogs.com/SingleCat/p/11315349.html

基于Webrtc、Kurento的一种低延迟架构实现:https://www.jianshu.com/p/ac307371def4

WebRTC的开源实现:

1、Jitsi Videobridge

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

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

Github项目地址:https://github.com/jitsi/jitsi

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.


官网地址:http://www.kurento.org

2019年12月发布的最新的6.13版本的文档:https://doc-kurento.readthedocs.io/en/6.13.0/project/relnotes/v6_13_0.html

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

6.11版本的文档https://doc-kurento.readthedocs.io/en/6.11.0/user/about.html

WSL上的安装:

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

sudo apt-get update && sudo apt-get install --no-install-recommends --yes \
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 packages
deb [arch=amd64] http://ubuntu.openvidu.io/6.13.0 $DISTRO kms6
EOF


4、 安装Kurento服务KMS

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

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

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

sudo service kurento-media-server start
sudo service kurento-media-server stop


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


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


7、如果需要在远程服务器上部署KMS服务,则需要继续安装STUN或者TURN服务器,来穿透NAT墙。可以参照该网文来安装Docker设置,https://blog.csdn.net/XRRRICK/article/details/85010829

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

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

git clone https://github.com/Kurento/kurento-tutorial-java.git
cd kurento-tutorial-java/kurento-hello-world
git checkout 6.11.0
mvn -U clean spring-boot:run -Dkms.url=ws://localhost:8888/kurento


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

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

可以看到界面:

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

如果在Chrome浏览器中,可以在浏览器的另一个标签里打开:chrome://webrtc-internals/,可以看到Google浏览器提供的对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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表