Kurento应用开发指南(以Kurento 5.0为模板) 之一:简介,安装与卸载

2024-08-21 17:58

本文主要是介绍Kurento应用开发指南(以Kurento 5.0为模板) 之一:简介,安装与卸载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录
1. Kurento是什么               3
2. Kurento简介                       3
2.1 WebRTC媒体服务器               3
2.2 Kurento 媒体服务器               4
2.3 Kurento API, 客户端和协议       5
2.4  使用Kurento创建应用程序       7
3. Kurento Media Server的安装与卸载    8
3.1  Kurento Media Server的安装       8
3.2 kurento Media Server的启动与停止   8
3.3. kurento Media Server的卸载 8
4.  STUN和TURN服务配置 9
4.1.  STUN服务器配置 9
4.2.  TURN服务器配置 10
5. Kurento教程 11
5.1  Node.js 教程1 - Hello world 11
5.1.1 运行示例程序 11
5.1.2 运行时的出错 12
5.1.3 示例程序的分析 14
5.1.4 应用程序服务端逻辑 16
5.1.5  客户端逻辑 19
5.1.6 依赖库 20
5.2  教程3一对多的视频呼叫 21
5.2.1 运行示例程序 21
5.2.2  理解这个示例程序 21
5.2.3 应用程序服务端逻辑 24
5.2.4  客户端 29
5.2.5 依赖库 30
5.3 教程四-一对一的视频呼叫 31
5.3.1 运行示例程序 31
5.3.2 Understanding this example 31
5.3.3 应用程序服务端逻辑 33
5.3.4 客户端 40
5.3.5 依赖库 43
11. Kurento 架构 43
11.1 Kurento API和接口 44
11.2 Kurento 模块 45
11.3 使用Kurento创建应用程序 46
11.4 客户端,服务端和Kurento的通信 47
11.5 使用kurento实现实时WebRTC应用 49
11.6 Kurento 设计原则 51

1. Kurento是什么

Kurento是一个WebRTC媒体服务器,并且包含一个客户端API集合,
用以简化WWW和移动平台上的高级视频应用程序的开发。
Kurento的功能包括组通信,转码,记录,混音,广播和routing of audiovisual flows。
Kurento同样提供高级的媒体处理能力,包括计算机视觉,视频检索,虚拟现实和语音分析。
Kurento模块化的架构使得其集成第三方媒体处理算法(如语音识别,场景分析,人脸识别等)很简单,
而且它可以被应用程序开发者视为透明。
Kurento的核心组成是Kurento媒体服务器,它用来负责媒体传输,处理,加载和记录。
它是基于GStreamer,优化了资源消耗来实现的。它提供的功能如下:
• 网络流协议,包括HTTP(作为客户端和服务端工作),RTP和WebRTC.
• 组通信(MCU和SFU功能),支持媒体混合和媒体路由/分发
• 原生支持计算机视觉和虚拟现实滤镜
• 媒体存储,支持WebM和MP4的写操作,能播放GStreamer支持的所有格式
• 自动的媒体转换,支持GStreamer提供的所有codec,包括VP8, H.264, H.263, , AMR, OPUS, Speex, G.711,等。
它还提供的许多基于Java和Javascript的Kurento客户端库,用来提供给应用程序控制Kurento媒体服务器。
如果你喜欢其它的编程语言,可以使用基于WebSocket和JSON-RPC的Kurento协议来实现。
Kurento是开源的,它基于 LGPL version 2.1许可协议,它的源码位于GitHub。.
如果你想快速上手,最好的方式是安装Kurento媒体服务器并学习官方提供的示例教程。
如果想利用好Kurento,可以看本指南的高级部分。

2. Kurento简介

2.1 WebRTC媒体服务器

WebRTC是一项开源技术,它能够通过JavaScript API实现网页浏览器间的实时通信。
它被认为是一种P2P技术,能实现浏览器间的实时通信,而不用通过任何类型的媒体中继。
这种方式能足以实现一些基本的应用,但是有些功能,如组通信,媒体流录制,
媒体广播或媒体转码是很难实现的。基于这个原因,很多应用还是需要有媒体服务器。
 
Figure 1.1: Peer-to-peer WebRTC approach vs. WebRTC through a media server
在概念上,WebRTC媒体服务器是一种多媒体中继(它位于两个通信端的中间)。
媒体服务器能处理媒体流,并有各种功能,包括组通信(分发一个端生成的媒体流到多个接收端,
如像Multi-Conference Unit, MCU的工作方式),混合(转换多个输入流合成一个组合流),
转码(在不兼容的客户端间选择codec和格式), 录制等
 
Figure 1.2: Typical WebRTC Media Server capabilities


2.2 Kurento 媒体服务器

Kurento架构的核心是媒体服务器,它被命名为Kurento媒体服务器(KMS)。
Kurento媒体服务器的媒体处理能力是插件式的,意思是它的功能都是插件模块,
可以被激活和关闭。而且,开发者可以无缝地创建额外的模块来扩展Kurento媒体服务器并动态插入。
Kurento媒体服务器提供即时可用的组通信,混合,转码,录制和播放。
另外,它还提供一些高级的媒体处理模块,包括有计算机视觉,虚拟现实,透镜等;
 
Figure 2.1: Kurento Media Server capabilities


2.3 Kurento API, 客户端和协议

Kurento媒体服务器的能力是通过Kurento API呈现给应用开发者的。
这些API是通过叫做Kurento Client库实现的。
Kurento提供了两种类型的客户端库: Java和JavaScript。
如果你希望使用其它的语言,可以通过Kurento 协议来直接操作Kurento。
这个协议可以控制Kurento媒体服务器,它是基于标准的网络协议如WebSocket和JSON-RPC。
下图显示了Kurento客户端的三种应用场景:
• 在兼容WebRTC的浏览器上直接使用Kurento JavaScript Client
• 在Java EE Application Server上使用Kurento Java Client 
• 在Node.js 服务器上使用Kurento JavaScript Client
这三种场景在教程中都有完整的示例程序。
 
Figure 3.1: Connection of Kurento Clients (Java and JavaScript) to Kuento Media Server


Kurento Client的API是基于Media Element的概念,每个Media Element都有特定的媒体能力。
例如,WebRtcEndpoint有发送和接收WebRTC媒体流的能力;
RecorderEndpoint 有将接收到的媒体流存储到文件的能力;
FaceOverlayFilter 能检测视频流中的人脸并添加一个特定的图片在人脸之上。
Kurento拥有丰富的媒体元素工具箱来做为它的API的一部分。
 
Figure 3.2: Some Media Elements provided out of the box by Kurento


更好的理解这些概念需要参见本文档中关于Kurento API和Kurento Protocol的章节.
你同样还需要看看Java文档和JS文档:
• kurento-client-java : JavaDoc of Kurento Java Client.
• kurento-client-js : JsDoc of Kurento JavaScript Client.
• kurento-utils-js : JsDoc of an utility JavaScript library aimed to simplify the development of WebRTC applications.


2.4  使用Kurento创建应用程序

从应用程序开发人员的角度来看,媒体元素就像是乐高积木:
你只需选择应用程序想要的元素,然后再它连接到想要的拓扑结构中。
在Kurento的术语中,媒体元素的连接图被称作媒体管道。
因此,当你想创建一个管道时,开发人员需要确定想要使用的媒体元素的能力,
并确定媒体元素间如何连接的拓扑图。这些连接是通过连接原语控制(以Kurento Client APIs方式显现)。
这些原语以拓扑上后续的元素作为参数,激活本元素作为源:
sourceMediaElement.connect(sinkMediaElement)


例如,如果你想创建一个录制WebRTC流到文件的应用程序,
你需要两个媒体元素:WebRtcEndpoint 和 RecorderEndpoint。当一个客户端连接到这个应用程序时,
你需要实例化这两个媒体元素,并使用 WebRtcEndpoint 
(它用来接收WebRTC流)来接收流后输送给RecorderEndpoint (它用来将媒体流录制到文件)。
最后,你需要连接它们,这样就能实现将前一个媒体元素接收到的流输送给后一年媒体元素,
像下面这样:
WebRtcEndpoint.connect(RecorderEndpoint)


为了简化在客户端的WebRTC流的处理,Kurento提供了一个叫WebRtcPeer的实体,
而且,标准的WebRTC API (getUserMedia, RTCPeerConnection,and so on) 
同样能连接到WebRtcEndpoints。更多的信息可以参见示例程序的章节
 
Figure 4.1: Simple Example of a Media Pipeline




3. Kurento Media Server的安装与卸载

3.1  Kurento Media Server的安装

Kurento Media Server必须安装在Ubuntu 14.04 LTS (32 or 64 bits)下。
考虑到在Ubuntu Server 14.04下安装Kurento Media Server时,
工具add-apt-repository默认是没有安装的,可以用下面的命令安装。
# sudo apt-get install software-properties-common


使用下面的命令可以安装 Kurento Media Server的最新版本,依据下面的顺序,一次一个命令。
安装过程中有问答时,回复肯定即可:
# sudo add-apt-repository ppa:kurento/kurento
# sudo apt-get update
# sudo apt-get install kurento-media-server


3.2 kurento Media Server的启动与停止

现在,Kurento Media Server安装并已启动了。可以使用下面的命令启动和停止。
# sudo service kurento-media-server start
# sudo service kurento-media-server stop
Kurento Media Server 的日志文件位于 /var/log/kurento-media-server/media-server.log。


3.3. kurento Media Server的卸载

卸载使用如下命令:
# sudo apt-get remove kurento-media-server
# sudo apt-get purge kurento-media-server
或者彻底卸载:
# sudo apt-get remove kurento*
# sudo apt-get autoremove
# sudo apt-get update
# sudo apt-get dist-upgrade


3.4 Kurento Media Server的手动编译安装

Kurento Media Server
To build Kurento Media Server you need an Ubuntu 14.04 LTS operating system.
First you have to install all needed development tools and dependencies executing the following commands:
# sudo add-apt-repository ppa:kurento/kurento
# sudo apt-get update
# sudo apt-get install git
# sudo apt-get install libthrift-dev thrift-compiler libjsoncpp-dev
# sudo apt-get install gstreamer1.0* libgstreamer1.0-dev
# sudo apt-get install libgstreamer-plugins-base1.0-dev libnice-dev gtk-doc-tools
# sudo apt-get install cmake libglibmm-2.4-dev uuid-dev libevent-dev libboost-dev
# sudo apt-get install libboost-system-dev libboost-filesystem-dev
# sudo apt-get install libboost-test-dev libsctp-dev
# sudo apt-get install libopencv-dev autoconf git libjsoncpp-dev
# sudo apt-get install libtool libsoup2.4-dev tesseract-ocr-dev tesseract-ocr-eng
# sudo apt-get install libgnutls28-dev gnutls-bin libvpx-dev

Plase take care that the list of dependencies changes as dependencies change and new features are added, 
you can check the actual packages that the Ubuntu PPA needs for building from sources in the Build-Depends of the latest release debian/control file.
Second you have to get the source code clonning git repository:
# git clone https://github.com/Kurento/kurento-media-server.git
Then you can compile Kurento Media Server:
# mkdir build
# cd build
# cmake ..
# make
Finally, install it into the system as a service:
# git submodule update --recursive --init
# dpkg-buildpackage -us -uc
# sudo dpkg -i ../kurento_<version>_<arch>.deb
And start and stop it:
# sudo service kurento-media-server start
# sudo service kurento-media-server stop


4.  STUN和TURN服务配置

如果Kurento Media Server位于NAT之后,这时就需要使用 STUN or TURN来实现NAT穿透。
在大多数情况下,STUN服务器可以满足需要,只有在NAT是对称的时,才需要TURN服务器。


4.1.  STUN服务器配置

为了安装STUN服务器,需要取消Kurento Media Server配置文件中的下面两行的注释,
配置文件位于 /etc/kurento/kurento.conf.json  :
"stunServerAddress" : "stun ip address",
"stunServerPort" : 3478


参数 stunServerAddress  应当是一个IP地址,不能是域名。
而且需要注意它的JSON格式,如果 stunServerPort 行是WebRtcEndpoint  区域的最后一行,
那么它不能以逗号(,)结束。
下面是一些可用的公共的STUN服务器,例如:
173.194.66.127:19302
173.194.71.127:19302
74.125.200.127:19302
74.125.204.127:19302
173.194.72.127:19302
74.125.23.127:3478
77.72.174.163:3478
77.72.174.165:3478
77.72.174.167:3478
77.72.174.161:3478
208.97.25.20:3478
62.71.2.168:3478
212.227.67.194:3478
212.227.67.195:3478
107.23.150.92:3478
77.72.169.155:3478
77.72.169.156:3478
77.72.169.164:3478
77.72.169.166:3478
77.72.174.162:3478
77.72.174.164:3478
77.72.174.166:3478
77.72.174.160:3478
54.172.47.69:3478


4.2.  TURN服务器配置

为了安装TURN服务器,需要取消Kurento Media Server配置文件(/etc/kurento/kurento.conf.json)
下面这行的注释:
"turnURL" : "user:password@address:port"
和前面的一样,TURN地址也必须是IP地址(不能是域名)。同样也要注意JSON格式的最后一行的逗号。TURN配置的示例如下:
"turnURL" : "kurento:kurento@193.147.51.36:3478"
或使用免费的numb STUN/TURN服务器如下:
"turnURL" : "user:password@66.228.45.110:3478"
有一个TURN服务器的开源实现:coturn.(https://code.google.com/p/coturn/). 

这篇关于Kurento应用开发指南(以Kurento 5.0为模板) 之一:简介,安装与卸载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093871

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,