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

相关文章

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis