Kurento

article/2025/9/25 9:46:21

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服务器中定制,这时候作为一个前端就很尴尬了,后端语言匮乏,不知从何入手。

http://chatgpt.dhexx.cn/article/bSeqhsSc.shtml

相关文章

kudu介绍

kudu介绍 Kudu是运行在hadoop平台上的列式存储系统,拥有Hadoop生态系统应用的常见技术特性&#xff0c;运行在一般的商用硬件上&#xff0c;支持水平扩展,高可用。 kudu的优势 1&#xff09;一个table由多个tablet组成&#xff0c;对分区查看、扩容和数据高可用支持非常好 2…

KUDU 介绍

前言 近两年&#xff0c;KUDU 在大数据平台的应用越来越广泛。在阿里、小米、网易等公司的大数据架构中&#xff0c;KUDU 都有着不可替代的地位。本文通过分析 KUDU 的设计&#xff0c; 试图解释为什么 KUDU 会被广泛应用于大数据领域&#xff0c;因为还没有研究过 KUDU 的代码…

KUDU(一)kudu概述

文章目录 概述使用场景对比其他存储Kudu基本架构Kudu中的相关概念和机制 概述 Kudu是一个分布式列式存储引擎/系统&#xff0c;由Cloudera开源后捐献给Apache基金会很快成为顶级项目。用于对大规模数据快速读写的同时进行快速分析 官网 https://kudu.apache.org/ Kudu运行在…

Kudu概述

Kudu是一个分布式的,具有可扩展性的列式存储管理器,可以对快速变化的数据进行快速分析。 使用场景 近实时计算场景时间序列数据的场景预测建模与存量数据共存既有随机读写/访问,又有批量扫描分析的场景(OLAP)HTAP混合事务分析处理场景Kudu作为持久层与Impala紧密集成的…

Kudo介绍 + Spark\Python\Scala开发Kudu应用程序

前半部分文章摘自&#xff1a;http://blog.csdn.net/a1043498776/article/details/72681890 Kudu的背景 Hadoop中有很多组件&#xff0c;为了实现复杂的功能通常都是使用混合架构&#xff0c; Hbase&#xff1a;实现快速插入和修改&#xff0c;对大量的小规模查询也很迅速HDF…

adb remount 挂载失败

打开cmd ,输入adb remount 挂载设备的时候失败&#xff0c;提示如下&#xff1a; 按照提示&#xff0c;输入adb root 再输入adb remount &#xff0c;成功。

adb remount overlayfs的说明

在android R项目中执行adb remount的时候&#xff0c;能看到"Using overlayfs for xxx"的打印&#xff0c;类似如下&#xff1a; #adb root restarting adbd as root#adb remount Disabling verity for /system Using overlayfs for /system Disabling verity for /…

[高通SDM450][Android9.0]adb无法进行remount的解决方案

文章目录 开发平台基本信息问题描述解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 在调试开发的时候&#xff0c;执行remount可以获得更高的权限&#xff0c;对系统的一些应用或者文件进行删除或替换&#xff0c;达到快速调试的目的&…

adb remount

使用adb remount失败了&#xff0c;提示 如下图。 解决方法 先执行 adb root 然后 ctrlc, 然后再adb remount就成功了

Android 11 无法remount问题

问题描述&#xff1a; 在Android 11开发的时候&#xff0c;想快速调试把单独编译好的模块push 到 /system 目录下&#xff0c;结果发现remount failed C:>adb root restarting adbd as rootC:>adb remount Skipping /system for remount Skipping /vendor for remount S…

Android P(9.0) userdebug 版本执行adb remount失败

当你执行 adb remount 时会发现提示 remount of the / superblock failed: Permission denied remount failed 原因是android P 版本后 google 启用 avb(Android Verified Boot)2.0&#xff0c;verified boot and DM-verity默认启用策略发生了变化。详情如下&#xff1a; DM-V…

remount

1. 需要获取手机的root权限&#xff0c;方法很多了&#xff0c;我用的是360一键Root&#xff0c;有时也用百度一键Root 2. 从其他手机拷贝sqlite3文件到PC&#xff0c;我是从模拟器copy出来的&#xff0c;为方便大家&#xff0c;附件就有&#xff0c;可以直接下载哈 3. 进入手机…

Typescript之接口(Interface)

我们可以通过Interface关键字来定义限制数据的类型。 1.给对象定义类型 /*** 定义一种类型&#xff0c;名称叫做PersonInfo&#xff0c;里面有三个属性* name 人物的名字,类型为string* age 人物的年龄&#xff0c;类型为number* say 人物的方法&#xff0c;类型为函数类型&a…

astype

anp.array([1.1,1.2]) print(a数据类型&#xff1a;,a.dtype) print(astype修改数据类型&#xff1a;,a.astype(float).dtype) print(原数据类型未改变,a.dtype)#正确操作 aa.astype(float32) print(修改类型后再次操作&#xff0c;类型改变&#xff1a;,a.dtype) ba.astype(in…

TypeScript中的interface和type区别

&#x1f482; 个人网站: 【紫陌】【笔记分享网】 &#x1f485; 想寻找共同学习交流、共同成长的伙伴&#xff0c; 请点击【前端学习交流群】 在 TypeScript中&#xff0c;type 和 interface有些相似&#xff0c;都可以给类型命名并通过该名字来引用表示的类型。不过它们之间使…

TypeScript接口——interface

目录 一、接口概述&#xff1a; 二、接口类型介绍&#xff1a; 1、属性接口&#xff1a; 2、 函数接口&#xff1a; 3、可索引接口&#xff1a; &#xff08;1&#xff09;可索引接口约束数组示例&#xff1a; &#xff08;2&#xff09; 可索引接口约束对象示例&#xf…

【TypeScript】接口类型 Interfaces 的使用理解

导语&#xff1a; 什么是 类型接口&#xff1f; 在面向对象语言中&#xff0c;接口&#xff08;Interfaces&#xff09;是一个很重要的概念&#xff0c;它是对行为的抽象&#xff0c;而具体如何行动需要由类&#xff08;classes&#xff09;去实现&#xff08;implement&#x…

type 与 interface 的区别,你真的懂了吗?

大厂技术 高级前端 Node进阶 点击上方 程序员成长指北&#xff0c;关注公众号 回复1&#xff0c;加入高级Node交流群 在写 ts 相关代码的过程中&#xff0c;总能看到 interface 和 type 的身影。它们的作用好像都一样的&#xff0c;相同的功能用哪一个都可以实现&#xff0c;…

自定义字体 Typeface ttf

一、简介 有时候界面在设计app时会使用一些比较美观的字体&#xff0c;在安卓中使用起来也并不困难&#xff0c;随着安卓SDK的更新&#xff0c;它的实现方式也有所不同&#xff0c;该文章来看看怎么实现自定义字体。 二、普通方法 设置字体TextView.setTypeface(Typeface) pub…

TypeScript - Interfaces(接口)

目录 1、接口介绍 1.1 接口示例 2、可选属性 3、只读属性 4、额外的属性检查 5、函数类型 6、可索引的类型 &#xff17;、类类型 &#xff17;.1 类静态部分和实例部分 &#xff18;、继承接口 &#xff19;、混合类型 1&#xff10;、接口继承类 1、接口介绍 Ty…