kurento-media-server opencv 模块的创建
上一节基于kurento-media-server的流媒体服务器已经搭建完成,可以实现流媒体数据的转发功能。接下来我们开始探究基于流媒体数据流,集成一些机器视觉的内容,参考教程https://meetrix.io/blog/webrtc/kurento/creating-an-opencv-filter-for-kurento-media-server.html,http://blog.sina.com.cn/s/blog_48c95a190102vy5z.html。
首先需要安装插件开发工具,命令如下
sudo apt-get install kurento-media-server-dev
最初使用 sudo apt-get install kurento-media-server-6.0-dev,提示报错
可能是命令升级了。
接下来创建opencv_filter模块。
kurento-module-scaffold.sh <module_name> <output_directory> opencv_filter
在当前目录新建helloworld模块kurento-module-scaffold.sh helloworld ./ opencv_filter。
然后创建一个build 文件夹,并开始生成项目文件
mkdir build
cmake ..
如果执行没有错误,结果如下,顺便看一下我们的目录结构
我们开发的opencv模块,缺少gstreamer的提示先忽略。
接下来的部分,可以参考http://www.voidcn.com/article/p-totjgbzu-bow.html。上面的连接部分内容掠过了,对于初学者不是很详细。歪果仁的一篇文章,有一个错误。新建build并进入以后,开始构建项目应该是cmake .. 而不是cmake ./。应为当前目录没有整个模块的cmakelist文件。
第一次构建后,生成的文件如上。
ModuleNameImpl.cpp // 模块管理相关 ModuleNameImpl.hpp ModuleNameOpenCVImpl.cpp // ModuleNameOpenCVImpl.hpp
前两个文件不应该修改。 最后两个文件将包含模块的逻辑。 ModuleNameOpenCVImpl.cpp文件包含处理方法和参数的函数(必须实现逻辑)。 此外,此文件包含一个称为 process 的函数。 此函数将在每个新帧中调用,因此必须在此函数内实现过滤器的逻辑。
根据歪果仁的思路,往视频内容添加一段文字,方法如下在helloworldOpenCVImpl.cpp 的process中添加
void MeetrixKurentoHelloWorldOpenCVImpl::process (cv::Mat &mat)
{
cv::Point textOrg(100, 100);
putText( mat, "Hello from Meetrix.IO", textOrg, 1, 2, cv::Scalar(0, 0, 0) );
}
然后开始编译,切换到build目录
cmake .. -DCMAKE_INSTALL_PREFIX=/usr && make && sudo make install
可能会出错,错误提示如下
解决办法,修改一下module目录下的CMakelist.txt文件,定位到下面行
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -DHAVE_CONFIG_H -Wall -Werror -std=c++11")
添加参数 -fPIC
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fPIC -DHAVE_CONFIG_H -Wall -Werror -std=c++11")
编译成功,并把module安装到kurento-media-server模块中。
验证一下是否安装成功,可以通过命令行查看
kurento-media-server -v
证明编译安装成功了,重启服务应该可以看到效果了。
service kurento-media-server restart
以上完成服务端逻辑开发,接下来,需要在客户端中完成调用。kurento提供两种客户端接入,java和js。js 客户端编译。再次切换到build目录,查看一下目录结构
运行指令
cmake .. -DGENERATE_JS_CLIENT_PROJECT=TRUE
js 客户端编译成功,运行结果如下
到这里我们就完成了opencv 模块的开发。后续继续探索如何在js端进行调用。
推荐阅读
-
Python创建模块及模块导入的方法
-
Java--IDEA创建多服务模块的SpringCloud微服务项目
-
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
-
python XlsxWriter模块创建aexcel表格的实例讲解
-
在eclipse中使用Maven分模块搭建SSM框架,创建jar、war、pom工程模块教学,项目的热部署,需要的可以留下邮箱,给大家发整理过的Maven笔记
-
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
-
模块分离,创建启动服务的方法,并判断用户发出的请求
-
【解决】IDEA创建Maven多模块项目时子模块引用不到父模块的pom
-
PHP swoole的process模块创建和使用子进程操作示例
-
IDEA 中创建SpringBoot 父子模块的实现