Kurento应用开发指南(以Kurento 5.0为模板) 之中的一个:简单介绍,安装与卸载
文件夹
1. Kurento是什么 3
2. Kurento简单介绍 3
2.1 WebRTC媒体server 3
2.2 Kurento 媒体server 4
2.3 Kurento API, client和协议 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. STUNserver配置 9
4.2. TURNserver配置 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 client逻辑 19
5.1.6 依赖库 20
5.2 教程3一对多的视频呼叫 21
5.2.1 执行演示样例程序 21
5.2.2 理解这个演示样例程序 21
5.2.3 应用程序服务端逻辑 24
5.2.4 client 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 client 40
5.3.5 依赖库 43
11. Kurento 架构 43
11.1 Kurento API和接口 44
11.2 Kurento 模块 45
11.3 使用Kurento创建应用程序 46
11.4 client,服务端和Kurento的通信 47
11.5 使用kurento实现实时WebRTC应用 49
11.6 Kurento 设计原则 51
1. Kurento是什么
Kurento是一个WebRTC媒体server,而且包括一个clientAPI集合,
用以简化WWW和移动平台上的高级视频应用程序的开发。
Kurento的功能包含组通信,转码,记录。混音。广播和routing of audiovisual flows。
Kurento相同提供高级的媒体处理能力,包含计算机视觉。视频检索。虚拟现实和语音分析。
Kurento模块化的架构使得其集成第三方媒体处理算法(如语音识别,场景分析,人脸识别等)非常easy。
并且它能够被应用程序开发人员视为透明。
Kurento的核心组成是Kurento媒体server,它用来负责媒体传输,处理,载入和记录。
它是基于GStreamer。优化了资源消耗来实现的。它提供的功能例如以下:
• 网络流协议,包含HTTP(作为client和服务端工作),RTP和WebRTC.
• 组通信(MCU和SFU功能),支持媒体混合和媒体路由/分发
• 原生支持计算机视觉和虚拟现实滤镜
• 媒体存储,支持WebM和MP4的写操作。能播放GStreamer支持的全部格式
• 自己主动的媒体转换。支持GStreamer提供的全部codec,包含VP8, H.264, H.263, , AMR, OPUS, Speex, G.711,等。
它还提供的很多基于Java和Javascript的Kurentoclient库,用来提供给应用程序控制Kurento媒体server。
假设你喜欢其他的编程语言。能够使用基于WebSocket和JSON-RPC的Kurento协议来实现。
Kurento是开源的,它基于 LGPL version 2.1许可协议,它的源代码位于GitHub。.
假设你想高速上手。最好的方式是安装Kurento媒体server并学习官方提供的演示样例教程。
假设想利用好Kurento,能够看本指南的高级部分。
2. Kurento简单介绍
2.1 WebRTC媒体server
WebRTC是一项开源技术,它可以通过JavaScript API实现网页浏览器间的实时通信。
它被觉得是一种P2P技术,能实现浏览器间的实时通信,而不用通过不论什么类型的媒体中继。
这样的方式能足以实现一些主要的应用。可是有些功能。如组通信,媒体流录制,
媒体广播或媒体转码是非常难实现的。
基于这个原因,非常多应用还是须要有媒体server。
Figure 1.1: Peer-to-peer WebRTC approach vs. WebRTC through a media server
在概念上。WebRTC媒体server是一种多媒体中继(它位于两个通信端的中间)。
媒体server能处理媒体流。并有各种功能,包含组通信(分发一个端生成的媒体流到多个接收端,
如像Multi-Conference Unit, MCU的工作方式)。混合(转换多个输入流合成一个组合流)。
转码(在不兼容的client间选择codec和格式), 录制等
Figure 1.2: Typical WebRTC Media Server capabilities
2.2 Kurento 媒体server
Kurento架构的核心是媒体server,它被命名为Kurento媒体server(KMS)。
Kurento媒体server的媒体处理能力是插件式的,意思是它的功能都是插件模块,
能够被激活和关闭。并且,开发人员能够无缝地创建额外的模块来扩展Kurento媒体server并动态插入。
Kurento媒体server提供即时可用的组通信。混合,转码,录制和播放。
另外,它还提供一些高级的媒体处理模块。包含有计算机视觉,虚拟现实,透镜等;
Figure 2.1: Kurento Media Server capabilities
2.3 Kurento API, client和协议
Kurento媒体server的能力是通过Kurento API呈现给应用开发人员的。
这些API是通过叫做Kurento Client库实现的。
Kurento提供了两种类型的client库: Java和JavaScript。
假设你希望使用其他的语言,能够通过Kurento 协议来直接操作Kurento。
这个协议能够控制Kurento媒体server。它是基于标准的网络协议如WebSocket和JSON-RPC。
下图显示了Kurentoclient的三种应用场景:
• 在兼容WebRTC的浏览器上直接使用Kurento JavaScript Client
• 在Java EE Application Server上使用Kurento Java Client
• 在Node.js server上使用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。当一个client连接到这个应用程序时,
你须要实例化这两个媒体元素。并使用 WebRtcEndpoint
(它用来接收WebRTC流)来接收流后输送给RecorderEndpoint (它用来将媒体流录制到文件)。
最后。你须要连接它们,这样就能实现将前一个媒体元素接收到的流输送给后一年媒体元素。
像以下这样:
WebRtcEndpoint.connect(RecorderEndpoint)
为了简化在client的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穿透。
在大多数情况下,STUNserver能够满足须要。仅仅有在NAT是对称的时,才须要TURNserver。
4.1. STUNserver配置
为了安装STUNserver,须要取消Kurento Media Server配置文件里的以下两行的凝视。
配置文件位于 /etc/kurento/kurento.conf.json :
"stunServerAddress" : "stun ip address",
"stunServerPort" : 3478
參数 stunServerAddress 应当是一个IP地址。不能是域名。
并且须要注意它的JSON格式,假设 stunServerPort 行是WebRtcEndpoint 区域的最后一行,
那么它不能以逗号(,)结束。
以下是一些可用的公共的STUNserver,比如:
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. TURNserver配置
为了安装TURNserver,须要取消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/TURNserver例如以下:
"turnURL" : "user:password@66.228.45.110:3478"
有一个TURNserver的开源实现:coturn.(https://code.google.com/p/coturn/).
Kurento应用开发指南(以Kurento 5.0为模板) 之中的一个:简单介绍,安装与卸载的更多相关文章
- 现代前端库开发指南系列(二):使用 webpack 构建一个库
前言 在前文中,我说过本系列文章的受众是在现代前端体系下能够熟练编写业务代码的同学,因此本文在介绍 webpack 配置时,仅提及构建一个库所特有的配置,其余配置请参考 webpack 官方文档. 输 ...
- 下一代Asp.net开发规范OWIN(1)—— OWIN产生的背景以及简单介绍
随着VS2013的发布,微软在Asp.Net中引入了很多新的特性,比如使用新的权限验证模块Identity, 使用Async来提高Web服务器的吞吐量和效率等.其中一个不得不提的是OWIN和Katan ...
- <转>下一代Asp.net开发规范OWIN(1)—— OWIN产生的背景以及简单介绍
2014-09-04 07:22 by JustRun http://www.cnblogs.com/JustRun1983/p/3955238.html 随着VS2013的发布,微软在Asp.Net ...
- Cocos2d-x3.0模版容器之中的一个:cocos2d::Vector<T>
版本号:v3.0 beta以后 语言:C++ 定义在 "COCOS2DX_ROOT/cocos/base" 路径下的 "CCVector.h" 的头文件里. t ...
- Android开发自学笔记(Android Studio)—4.界面编程与View组件简单介绍
一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组 ...
- petshop4.0 具体解释之中的一个(系统架构设计)
前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的 ...
- python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)
''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_ ...
- 《Kubernetes权威指南第2版》学习(二)一个简单的例子
1: 安装VirtualBox, 并下载CentOS-7-x86_64-DVD-1708.iso, 安装centOS7,具体过程可以百度. 2:开启centOS的SSH, 步骤如下: (1) yum ...
- 使用VS Code从零开始开发调试.NET Core 1.0
使用VS Code 从零开始开发调试.NET Core 1.0. .NET Core 是一个开源的.跨平台的 .NET 实现. VS Code 全称是 Visual Studio Code,Visua ...
随机推荐
- RedHat Linux 下安装、测试摄像头
RedHat Linux 下安装.测试摄像头(全文见附件) 随着视频电话的迅速发展我相信大家一定有过在Windows 下安装摄像头的经历,然而大多数 都不支持Linux .我现以罗技摄像头为例 ...
- DEDE 修改后台图集上传单个图片的大小限制
默认情况下,DEDE图集中单个图片大小限制在2M以内,而有时我们需要上传一个2M以上的文件,这是只要修改几个文件就可以实现了. 一.需要修改php.ini这个文件,我们必须保证PHP的配置中允许上传一 ...
- 今日SGU 5.23
SGU 223 题意:给你n*n的矩形,放k个国王,每个国王不能放在别的国王的8连边上,问你有多少种方法 收获:状态DP,因为每行的放置只会影响下一行,然我们就枚举每行的状态和对应的下一行的状态,当两 ...
- HRBUST 1376 能量项链
能量项链 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HRBUST. Original ID: 13 ...
- CCF模拟题 字符串匹配
字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写 ...
- 洛谷 P2690 接苹果
P2690 接苹果 题目背景 USACO 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵树上都长满了苹果.奶牛贝茜无法摘下树上的苹果,所以她只能等待苹果 从 ...
- jquery18 css() : 样式的操作
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- POJ 2111 DP+记录路径
题意: 思路: 类似滑雪 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm& ...
- cap理论理解
一个分布式系统里面,节点组成的网络本来应该是连通的.然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域.数据就散布在了这些不连通的区域中.这就叫分区. 当你一个数据项只在一个节点 ...
- 一台服务器安装运行多个Tomcat及注册服务
项目需要,自己配置了一下,顺便分享出来. 1.下载对应版本Tomcat,这里下载Tomcat7.0.65.zip; 下载地址:http://archive.apache.org/dist/tomcat ...