怎么开发一个 Kurento Modules

原创
2017/02/20 13:55
阅读数 528

您可以扩展Kurento Media Server开发自己的模块。 有两种风格的Kurento模块:

  • 基于OpenCV的模块。 如果您想开发一个计算机视觉滤波器,建议使用这种模块。

  • 基于GStreamer的模块。 这种模块更强大,但也更难开发。 GStreamer开发中的技能是必要的。

开发过滤器的起点是创建过滤器结构。 对于这个任务,可以使用 kurento-module-scaffold 工具。 此工具随kurento-media-server-6.0-dev软件包一起发布。 要安装此工具,请在shell中运行此命令:

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 module

src/server/implementation文件夹下有四个文件:

ModuleNameImpl.cpp
ModuleNameImpl.hpp
ModuleNameOpenCVImpl.cpp
ModuleNameOpenCVImpl.hpp

前两个文件不应该修改。 最后两个文件将包含模块的逻辑。 ModuleNameOpenCVImpl.cpp文件包含处理方法和参数的函数(必须实现逻辑)。 此外,此文件包含一个称为 process 的函数。 此函数将在每个新帧中调用,因此必须在此函数内实现过滤器的逻辑。

GStreamer module

在这种情况下,src文件夹中有两个目录。 gst-plugins文件夹包含您的GStreamer元素的实现(kurento-module-scaffold生成一个虚拟过滤器)。 在server/objects文件夹中有两个文件:

ModuleNameImpl.cpp
ModuleNameImpl.hpp

在ModuleNameImpl.cpp文件中,必须调用GStreamer元素的方法。 模块逻辑将在GStreamer元素中实现。

对于这两个模块

如果需要额外的编译依赖项,可以使用src/server中的CmakeLists.txt文件中的generate_code函数将编译规则添加到kurento-module-creator。 以下参数可用:

  • MODELS(必需):此参数接收模型(.kmd文件)所在的文件夹。

  • INTERFACE_LIB_EXTRA_SOURCES,INTERFACE_LIB_EXTRA_HEADERS,INTERFACE_LIB_EXTRA_INCLUDE_DIRS,INTERFACE_LIB_EXTRA_LIBRARIES:这些参数允许向静态库添加其他源代码。包含在INTERFACE_LIB_EXTRA_HEADERS中的文件将作为此库的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中包含的文件将作为此库的headers安装在系统中。所有参数接受列表作为输入。

  • MODULE_EXTRA_INCLUDE_DIRS,MODULE_EXTRA_LIBRARIES:这些参数允许向模块添加额外的包含目录和库。

  • SERVER_IMPL_LIB_FIND_CMAKE_EXTRA_LIBRARIES:此参数接收字符串列表。每个字符串都具有以下格式:libname [libversion range](可能的范围可以使用符号 AND OR <=>> = ^ 和 〜):

    ^表示使用语义版本控制的版本兼容

    〜表示类似的版本,可以更改最后指示的版本字符

  • SERVER_STUB_DESTINATION(必需):您可能需要修改的代码 将在此参数指示的文件夹上生成。

一旦模块逻辑实现并且编译过程完成,您需要在系统中安装模块。 你可以采用两种不同的方式:

您可以生成Debian软件包(debuild -us -uc)并安装它(dpkg -i),也可以在/etc/default/kurento文件中定义以下环境变量:

KURENTO_MODULES_PATH = <module_path>/build/src GST_PLUGIN_PATH =<module_path>/build/src

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

  • 对于Java,从构建目录中,您必须执行cmake .. -DGENERATE_JAVA_CLIENT_PROJECT = TRUE命令生成带有客户端代码的Java文件夹。 您可以运行make 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(针对浏览器的JavaScript)或NPM(针对Node.js的JavaScript)。 为此,您应该将JavaScript模块作为依赖关系分别添加到bower.json或package.json文件中,如下所示:
"dependencies": {
   "modulename": "moduleversion"
}

Examples

两种类型的模块的简单示例在GitHub中提供:

有很多关于如何在所有公共内置模块中定义方法,参数或事件的示例:

此外,我们所有的模块都是使用这种方法开发的,因此,你可以看看我们的主要模块:

展开阅读全文
打赏
1
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
1
分享
返回顶部
顶部