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设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF