您的位置:首页 > 其它

Kurento模块开发指南之一:模块开发简介

2017-02-06 15:05 501 查看
17.1 Kurento 模块

Kurento是一个可插拔的框架,这些插件,在Kurento中被称之为模块。

Kurento定义了三种类型的模块:

• 主模块, Kurento Media Server即插即用的组成部分

– kms-core: Kurento Media Server的主要组成;

– kms-elements: Kurento Media组件(包括WebRtcEndpoint,PlayerEndpoint等)的实现;

– kms-filters: Kurento 滤镜(FaceOverlayFilter, ZBarFilter,GStreamerFilter)的实现;

• 内建模块, 由Kurento团队为了提升KMS基本能力的额外模块。

到目前为止,开发了有四个内建模块:

– kms-pointerdetector: 它是一个基于颜色跟踪的检查视频流中线索的滤镜。

这个模块的安装命令为:

$ sudo apt-get install kms-pointerdetector

– kms-chroma: 使顶层的特定的色度范围透明,从而显示出后面另一个图像的滤镜;

这个模块的安装命令为:

$ sudo apt-get install kms-chroma

– kms-crowdetector: 检测视频流中人群的聚集的滤镜;

$ sudo apt-get install kms-crowddetector

– kms-platedetector: 检测视频流中机动车车牌的滤镜;

$ sudo apt-get install kms-platedetector

• 定制模块, 为KMS提供新的媒体功能的扩展模块。

如果你想开发自己的定制模块,就需要仔细看下面的章节。


17.1.1 如何开发Kurento模块

可以通过自己开发模块来扩展KMS。 KMS支持两种方式的定制化开发模块:

• 基于OpenCV的模块,如果你想开发计算机视频滤镜类的模块,这种方式是比较合适的。

• 基于GStreamer的模块,这种方式开发的模块功能更强,但开发成本也更高。

它要求要有GStreamer的开发能力。

开发一个滤镜首先要做的就是创建这个滤镜的框架。

因此,你需要使用kurento-module-scaffold 工具。这个工具是和kurento-media-server-6.0-dev包一起发布的。使用下面的命令可以安装这个工具:

$ sudo apt-get install kurento-media-server-6.0-dev

这个工具的使用方式是依据选择开发方式的不同而不同:

1. OpenCV 模块:

$ kurento-module-scaffold.sh <module_name> <output_directory> opencv_filter

2. Gstreamer 模块:

$ kurento-module-scaffold.sh <module_name> <output_directory>

这个工具会生成文件夹树,所有需要的CmakeLists.txt文件,Kurento模块描述文件(.kmd)的示例文件。

这些文件描述了我们的模块,而构造函数,方法,属性,事件和复杂的类型定义是由开发者实现的。

当kmd文件完成后,就可以生成代码了。

工具 kurento-module-creator 将生成服务端的胶水代码。

在模块的根目录下:

$ cd build

$ cmake ..

下面的章节详细地讲解了依赖于你选择的是OpenCV还是GStreamer来创建自己的模块:

OpenCV 模块:

在目录src/server/implementation/objects/ 下有四个文件:

ModuleNameImpl.cpp

ModuleNameImpl.hpp

ModuleNameOpenCVImpl.cpp

ModuleNameOpenCVImpl.hpp.

前面两个文件不需要修改。

后面两个文件包含了你模块的逻辑。

文件ModuleNameOpenCVImpl.cpp包含你需要实现的模块处理逻辑的方法和参数。

同时,这个文件还包含一个叫process的函数。这个函数会被每个新的数据帧调用,因此,你需要在这个函数中实现你的滤镜的处理逻辑。

GStreamer 模块

在这种开发模式下,在src文件夹下有两个目录。

gst-plugins 文件夹包含了你的GStreamer组件 (the kurento-module-scaffold generates a dummy filter)的实现。

src/server/implementation/objects/ 文件夹下有两个文件:

ModuleNameImpl.cpp

ModuleNameImpl.hpp

在ModuleNameImpl.cpp文件中,你需要激活你的GStreamer组件的方法。而模块的处理逻辑则在GStreamer组件中实现。

两种模块共同的:

如果你需要额外的编译依赖项,你可以在 src/server目录下的CmakeLists.txt文件中的generate_code函数下,给kurento-module-creator添加额外的编译规则,下面的编码参数是可用的:

• MODELS (required):

这个参数接收模块(.kmd文件)所在的文件目录。

• INTERFACE_LIB_EXTRA_SOURCES,

INTERFACE_LIB_EXTRA_HEADERS,

INTERFACE_LIB_EXTRA_INCLUDE_DIRS,

INTERFACE_LIB_EXTRA_LIBRARIES:

这些参数允许添加额外的源代码到静态库。

INTERFACE_LIB_EXTRA_HEADERS下所包含的头文件会被安装到系统作为这个库的头文件。

所有的这些参数以一个输入列表的方式接受;

• SERVER_IMPL_LIB_EXTRA_SOURCES,

SERVER_IMPL_LIB_EXTRA_HEADERS,

SERVER_IMPL_LIB_EXTRA_INCLUDE_DIRS,

SERVER_IMPL_LIB_EXTRA_LIBRARIES:

这些参数允许添加额外的源代码到接口库。

SERVER_IMPL_LIB_EXTRA_HEADERS下所包含的头文件将被安装到系统作库库的头文件。

所有的这些参数以一个输入列表的方式接受;

• MODULE_EXTRA_INCLUDE_DIRS,

MODULE_EXTRA_LIBRARIES:

这些参数允许给模块添加额外的头文件路径和库;

• SERVER_IMPL_LIB_FIND_CMAKE_EXTRA_LIBRARIES:

这个参数接收一系列字符串,每个字符串都依据格式:

libname[libversion range]

range可使用符号 AND OR < <= >>= ^ and ~ :

^ indicates a version compatible using Semantic Versioning

~ Indicates a version similar, that can change just last indicated version character

• SERVER_STUB_DESTINATION (required):

你需要修改生成的代码将这个参数指定生成的文件夹。

当新模块的逻辑开发并编译完成后,你需要将这个模块安装到你的系统,

可以使用下面的两种方式:

/etc/default/kurento: 你可以生成Debian包(debuild –us -uc)并安装它(dpkg -i),

或者在文件 /etc/default/kurento 中添加下列环境变量:

KURENTO_MODULES_PATH=<module_path>/build/src

GST_PLUGIN_PATH=<module_path>/build/src.

Now, you need to generate code for Java or JavaScript to use your module from the client-side.

现在,你需要为使用你模块的客户端生成Java 或 JavaScript代码。

• 对于Java, 需要在创建路径下执行命令:

cmake .. -DGENERATE_JAVA_CLIENT_PROJECT=TRUE

来生成Java文件夹及客户端代码。你可以使用命令:

java_install

将你的模块安装到你的Maven的本地仓库中。

如果要在Maven工程中使用这个模块,则在pom.xml文件中添加如下的依赖:

<dependency>

<groupId>org.kurento.module</groupId>

<artifactId>modulename</artifactId>

<version>moduleversion</version>

</dependency>

• 对于JavaScript, 需要执行命令:

cmake .. -DGENERATE_JS_CLIENT_PROJECT=TRUE

这个命令会生成一个js文件夹及客户端代码。

这样,你就可以手动添加JavaScript库在你应用程序中使用新开发模块。

同样的,你也可以使用Bower(for JavaScript for browser) or NPM (for JavaScript for Node.js).

这之后,你应当添加你的JavaScript模块作为bower.json或package.json的依赖项,

如下所示:

"dependencies": {

"modulename": "moduleversion"

}

示例

这两种开发模式的简单示例在GitHub中有:

• OpenCV module : https://github.com/Kurento/kms-opencv-plugin-sample
• GStreamer module :https://github.com/Kurento/kms-plugin-sample

如何定义方法,参数或事件,在我们的内建模块中有更多示例:

• kms-pointerdetector :https://github.com/Kurento/kms-pointerdetector/tree/master/src/server/interface

• kms-crowddetector : https://github.com/Kurento/kms-crowddetector/tree/master/src/server/interface
• kms-chroma : https://github.com/Kurento/kms-chroma/tree/master/src/server/interface
• kms-platedetector : https://github.com/Kurento/kms-platedetector/tree/master/src/server/interface
而且,所有我们开发模块会要使用到的开发方法,可以参考主模块:

• kms-core : https://github.com/Kurento/kms-core
• kms-elements : https://github.com/Kurento/kms-elements
• kms-filters : https://github.com/Kurento/kms-filters
下图显示了KMS所有的模块的架构:




Figure 17.1: Kurento modules architecture.

Kurento Media Server can be extended with built-it modules

(crowddetector,pointerdetector, chroma, platedetector) and also with other custom modules.

将内建模块考虑进来,Kurento工具扩展后如下:



Figure 17.2: Extended Kurento Toolbox.

The basic Kurento toolbox (left side of the picture) is extended with more computer vision and augmented reality filters

​(right side of the picture) provided by the built-in
modules.

下面的章节将介绍四个内建模块(kms-pointerdetector,kms-chroma, kms-crowddetector, kms-platedetector)

​如何被用于开发简单的应用(示例教程),以显示如何使用他们
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: