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

2024-08-21 17:58

本文主要是介绍Kurento模块开发指南之一:模块开发简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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)
如何被用于开发简单的应用(示例教程),以显示如何使用他们

这篇关于Kurento模块开发指南之一:模块开发简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同