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

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali