首先需要安装插件开发工具,命令如下

sudo apt-get install kurento-media-server-dev

最初使用 sudo apt-get install kurento-media-server-6.0-dev,提示报错

python将opencv处理后的画面推送到流媒体服务器 opencv 流媒体_html

 

可能是命令升级了。

接下来创建opencv_filter模块。

kurento-module-scaffold.sh <module_name> <output_directory> opencv_filter

 在当前目录新建helloworld模块kurento-module-scaffold.sh helloworld ./ opencv_filter。

然后创建一个build 文件夹,并开始生成项目文件

mkdir build

cmake ..

如果执行没有错误,结果如下,顺便看一下我们的目录结构

python将opencv处理后的画面推送到流媒体服务器 opencv 流媒体_kurento_02

我们开发的opencv模块,缺少gstreamer的提示先忽略。

接下来的部分,可以参考http://www.voidcn.com/article/p-totjgbzu-bow.html。上面的连接部分内容掠过了,对于初学者不是很详细。歪果仁的一篇文章,有一个错误。新建build并进入以后,开始构建项目应该是cmake .. 而不是cmake ./。应为当前目录没有整个模块的cmakelist文件。

python将opencv处理后的画面推送到流媒体服务器 opencv 流媒体_html_03

第一次构建后,生成的文件如上。

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

可能会出错,错误提示如下

python将opencv处理后的画面推送到流媒体服务器 opencv 流媒体_kurento_04

解决办法,修改一下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模块中。

python将opencv处理后的画面推送到流媒体服务器 opencv 流媒体_Org_05

 验证一下是否安装成功,可以通过命令行查看

kurento-media-server	-v

 

python将opencv处理后的画面推送到流媒体服务器 opencv 流媒体_客户端_06

证明编译安装成功了,重启服务应该可以看到效果了。

service kurento-media-server restart

以上完成服务端逻辑开发,接下来,需要在客户端中完成调用。kurento提供两种客户端接入,java和js。js 客户端编译。再次切换到build目录,查看一下目录结构

python将opencv处理后的画面推送到流媒体服务器 opencv 流媒体_html_07

运行指令

cmake .. -DGENERATE_JS_CLIENT_PROJECT=TRUE

python将opencv处理后的画面推送到流媒体服务器 opencv 流媒体_opencv_08

 

js 客户端编译成功,运行结果如下

python将opencv处理后的画面推送到流媒体服务器 opencv 流媒体_客户端_09

 到这里我们就完成了opencv 模块的开发。后续继续探索如何在js端进行调用。