java相关代码:https://codeload.github.com/Kurento/kurento-tutorial-java/zip/refs/heads/master
node相关代码:https://github.com/Kurento/kurento-tutorial-node
WebRTC之Kurento:直播、视频通话、视频会议我都行!
前言
前段时间做rtsp无插件网页端播放的时候无意中接触到一款叫Kurento的媒体服务器,简单来讲,Kurento就是一个WebRTC媒体服务器,同时提供了一系列的客户端API,可以简化供浏览器、移动平台使用的视频类应用程序的开发。今天就跟大家分享一下,通过接触Kurentu了解什么是WebRTC,以及WebRTC是干什么的。
关于WebRTC
WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。
WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox...)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现,W3C等组织正在制定Javascript 标准API,目前是WebRTC 1.0版本,Draft状态;另外WebRTC还希望能够建立一个多互联网浏览器间健壮的实时通信的平台,形成开发者与浏览器厂商良好的生态环境。同时,Google也希望和致力于让WebRTC的技术成为HTML5标准之一,可见Google布局之深远。
WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。
关于Kurento
Kurento是 WebRTC媒体服务器和一组客户端API,可简化针对Web和智能手机平台的高级视频应用程序的开发。其功能包括视听流的组通信,代码转换,记录,混合,广播和路由。
Kurento提供了一个多媒体框架,该框架具有以下功能,可简化构建多媒体应用程序的任务:
- 动态WebRTC媒体管道:Kurento允许自定义媒体管道连接到WebRTC对等设备,例如Web浏览器和移动应用程序。这些媒体管道基于诸如播放器,记录器,混音器等可组合元素,即使在媒体已经流通的情况下,也可以在任何时间点进行混合匹配,激活或取消激活它们。
- 客户/服务器架构:使用Kurento开发的应用遵循客户/服务器架构。Kurento媒体服务器(KMS)是服务器,并提供实现Kurento协议的WebSocket接口,该接口允许客户端应用程序定义管道拓扑。
- Java和JavaScript客户端应用程序:KMS部署的典型用例包括三层体系结构,其中用户的浏览器通过中间客户端应用程序与KMS服务器进行交互。有几个官方的Kurento客户端库,支持在客户端应用程序中使用Java和JavaScript。遵循WebSocket协议,可以轻松实现其他语言的客户端。
- 第三方模块:Kurento媒体服务器具有基于插件的可扩展体系结构,该体系结构允许第三方实现可添加到其媒体管道的模块。这允许将媒体处理算法集成到任何WebRTC应用程序中,例如集成计算机视觉,增强现实,视频索引和语音分析。需要做的就是创建一个新的Kurento元素,并将其用于任何现有的媒体管道中
Kurento的本地安装
了解了基本概念,我们话不多说直接安装
1.确保已安装GnuPG
`sudo apt-get update && sudo apt-get install --no-install-recommends --yes \
gnupg`
复制代码
2.定义系统中安装了哪个版本的Ubuntu,仅运行以下行之一
# Run ONLY ONE of these lines:
DISTRO="xenial" # KMS for Ubuntu 16.04 (Xenial)
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.安装KMS:
sudo apt-get update && sudo apt-get install --yes kurento-media-server
5.KMS命令
启动 sudo service kurento-media-server start
停止 sudo service kurento-media-server stop
docker部署
KMS本地安装只限于Ubuntu 系统,而且在我安装的时候 只有16.04版本成功了,可能跟我的虚拟机有关系,还好官网提供了docker版本,真香啊!docker具体用法自行百度
1.Docker Pull命令
docker pull kurento/kurento-media-server
复制代码
docker run --name kms -d -p 8888:8888 \
kurento/kurento-media-server
复制代码
3.KMS检测是否成功
要检查KMS是否已准备就绪并且正在侦听,请发出以下命令(您需要curl在系统上安装):
curl -i -N \
-H "Connection: Upgrade" \
-H "Upgrade: websocket" \
-H "Host: 127.0.0.1:8888" \
-H "Origin: 127.0.0.1" \
http://127.0.0.1:8888/kurento
复制代码
得到如下响应就说明你的KMS媒体服务器安装成功并正常运行了:
HTTP/1.1 500 Internal Server Error Server: WebSocket++/0.7.0
4.KMS 日志追踪
docker logs --follow kms
复制代码
国际惯例:Hello World
如何部署
媒体服务器搭建好后,我们就可以运行官网提供的例子啦,kurento服务端语言提供了node和java 作为一个前端我们肯定是优先选择node了,但是java的功能要比node的多很多,大家可以根据自己的技能栈做出选择。首先给你的电脑或虚拟机安装了node和git。
接下来就是日常操作:
git clone https://github.com/Kurento/kurento-tutorial-node.git
cd kurento-tutorial-node/kurento-hello-world
npm install
npm start
复制代码
vscode cmd+单击 直接打开
ok,不出意外的话你已经成功的跑起来了第一个例子
效果展示
一对一视屏通话
基操
cd kurento-tutorial-node/kurento-one2one-call
npm install
npm start
复制代码
效果展示
我的两台终端mac 和手机
这里要说明一下划重点 手机端运行的浏览器需要给到相关权限 不然无法使用
mac
手机完成注册后 用户mac呼叫用户phone
按下确定就能愉快的视频通话啦!
一对多广播:主播模式
基操
cd kurento-one2many-call
npm install
npm start
复制代码
效果展示
手机直播 电脑查看,如果你感兴趣kurento还有滤镜和视频流处理模块 可以加上你喜欢的特效
RTSP视频流的彩蛋
如果你认为这就是Kurento的全部功能那就大错特错了,Kurento 提供了很多webRTC的拓展功能,犹豫篇幅有线和node语言的限制我就不一一介绍了,无插件播放RTSP视频流就是彩蛋之一 项目地址:github.com/lulop-k/kur…
这里还使用了两个插件大家记得安装一下
npm install -g bower
npm install -g live-server
复制代码
基操
git clone https://github.com/Kurento/kurento-tutorial-node.git
cd kurento-rtsp2webrtc
bower install
live-server
复制代码
vscode 会自动跳转到页面 输入rtsp地址后就能播放了(这里用的海康NVR,有相关设备的同学可以试一下)
效果展示
效果实测
- 只需要搭建一个kurento媒体服务器 比我们上两个教程对服务器的资源消耗会小很多。
- 延迟:基本没有什么延迟,而且是音画同步(取决网络环境)比rtmp和jsmpeg方案效果有直观的提升
- 取流速度本地实测很慢,从开始播放到画面展示会有2-3秒的时间
- 多通道播放视频,我有常识多通道播放视频,第一次没什么问题,但是结束再运行会有花屏出现,这里可能需要java端或者ksm服务器中定制,这时候作为一个前端就很尴尬了,后端语言匮乏,不知从何入手。