Kurento

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服务器中定制,这时候作为一个前端就很尴尬了,后端语言匮乏,不知从何入手。
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kurento的connect方法用于连接两个WebRTC端点(WebRtcEndpoint)。在Kurento中,WebRtcEndpoint是用于处理WebRTC信令和媒体流的核心组件。通过connect方法,可以将一个WebRtcEndpoint的输出连接到另一个WebRtcEndpoint的输入,从而实现媒体流的传输。 在Kurento的官方hello-world示例中,连接的代码位于WebSocket相关的部分。具体来说,通过WebSocket建立连接后,会触发signalIceCandidateFound信号,该信号包含了ICE候选项(IceCandidateFound event)。在这个信号的回调函数中,会将候选项通过socket发送出去。 这个连接的过程是通过调用connect方法实现的。在示例中,通过signalIceCandidateFound.connect方法将回调函数与信号连接起来,当ICE候选项被找到时,回调函数会被触发。在回调函数中,会将候选项通过WebSocket发送出去。 总结起来,Kurento的connect方法用于连接两个WebRtcEndpoint,实现媒体流的传输。在官方hello-world示例中,连接的过程是通过信号和回调函数实现的,当ICE候选项被找到时,会将候选项通过WebSocket发送出去。 #### 引用[.reference_title] - *1* *2* [Kurento实战之四:应用开发指南](https://blog.csdn.net/boling_cavalry/article/details/112504048)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [webrtc入门:10.Kurento流程分析](https://blog.csdn.net/weixin_40425640/article/details/124881576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值