网站首页 > 技术文章 正文
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
- 上一篇: 音视频开发1. 基本概念及媒体协议
- 下一篇: 学习如何构建视频会议应用程序 如何开发视频会议app
猜你喜欢
- 2024-10-25 舒伯特艺术歌曲中德文对照 舒伯特艺术歌曲套曲
- 2024-10-25 无害又身怀强项的七种日本妖怪 日本最嚣张的423种妖怪
- 2024-10-25 WebRTC 框架下的实时视频关键路径
- 2024-10-25 学习如何构建视频会议应用程序 如何开发视频会议app
- 2024-10-25 音视频开发1. 基本概念及媒体协议
- 2024-10-25 Kurento实战之二:快速部署和体验 kurento rtmp
- 2024-10-25 Kurento实战之三:知识点小导游 小导游卡通图片可爱
- 2024-10-25 Kurento实战之一:KMS部署和体验 kurento教程
- 2024-10-25 互动直播之WebRTC服务器Kurento实战
- 2024-10-25 主流Webrtc流媒体服务器之Kurento Media Server
你 发表评论:
欢迎- 最近发表
-
- 吴谨言专访大反转!痛批耍大牌后竟翻红,六公主七连发力显真诚
- 港股2月28日物业股涨幅榜:CHINAOVSPPT涨1.72%位居首位
- 港股2月28日物业股午盘:CHINAOVSPPT涨1.72%位居首位
- 港股3月2日物业股涨幅榜:CHINAOVSPPT涨1.03%位居首位
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%
- 天赋与心痛的背后:邓鸣贺成长悲剧引发的深刻反思
- 冯小刚女儿徐朵追星范丞丞 同框合照曝光惹人羡,回应网友尽显亲民
- “资本大佬”王冉:51岁娶小17岁童瑶,并承诺余生为娇妻保驾护航
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%位居首位
- 「IT之家开箱」vivo S15 图赏:双镜云窗,盛夏风光
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)