Kurento自定义OpenCV模块开发方法总结(二
标签:kurentoopencvwebrtc |
分类:IT那点事儿说起来却也又臭又长 |
在前一篇博文中我们大致了解了如何开发一个简单的OpenCV模块并加载到KMS中,走到这一步只能说Kurento服务器端具备了新增模块的能力,但是客户端无法使用该模块的能力,因为没有为该模块提供操作接口,所以我们还要为新增模块生成相应的客户端接口。Kurento目前支持两种语言的客户端接口:Java和JavaScript,以下我们以JavaScript为例来说如何生成客户端接口并验证新增模块的处理效果。
首先,生成JavaScript客户端接口。在opencv-plugin-sample目录执行如下命令,在命令执行完成后我们会发现在当前目录下会新生成两个目录和一个文件,其中js目录就是针对新增模块生成的接口,它也是根据模块接口文件生成的,而kurento-client-js目录是实现Kurento协议的接口。对于JavaScript比较熟悉的看客们可以简单浏览一下js/lib/OpencvPluginSample.js文件中的内容,其中定义了新增模块的构造方法、setEdgeThreshold方法和setFilterType方法等。
# cmake -DGENERATE_JS_CLIENT_PROJECT=TRUE(针对我的工程时在build_debug下面执行这个命令,在当前目录生成js)
# ls -l| grep js
drwxrwxr-x4 ubuntu ubuntu 4096 Feb 517:03 js
-rw-rw-r--1 ubuntu ubuntu 33 Feb 5 17:03 js_project_name
drwxrwxr-x9 ubuntu ubuntu 4096 Feb 517:03 kurento-client-js
其次,基于生成好的JavaScript客户端接口开发Node应用并在应用中使用新增模块。为了方便起见,我们不妨使用KurentoTutorial中的一个名为webrtc magicmirror的示例来改造我们自己的应用。在改造之前需要根据这个示例的官方Nodejs版本教程把功能跑通,这个示例的功能就是在视频流中添加了一个FaceOverlayFilter用来实时检测人脸并在人头上添加一顶超级马里奥的帽子,而我们要做的就是用自己的OpencvPluginSample这个Filter把FaceOverlayFilter替换掉,这样就可以快速看到我们自己模块的处理效果了。
假定webrtc magicmirror的代码存储路径为:/home/ubuntu/repository/kurento-tutorial-node/kurento-magic-mirror,则替换过程如下所示(PS:本博主对Nodejs不甚了解,以下过程并非标准方法,仅供那些对于Nodejs开发同样不甚了解但又想快速看到自己模块处理效果的同仁们!)。
# cp -r js/home/ubuntu/repository/kurento-tutorial-node/kurento-magic-mirror/node_modules/ (把opencv-plugin-sample目录下生成的js目录拷贝到该目录下)
#cd /home/ubuntu/repository/kurento-tutorial-node/kurento-magic-mirror/node_modules/
# mv js kurento-module-opencvpluginsample (对js目录进行重命名)
#cd kurento-module-opencvpluginsample
# sudo npminstall (安装相关依赖)
对/home/ubuntu/repository/kurento-tutorial-node/kurento-magic-mirror/server.js文件做如下修改(标蓝的地方为添加或改动的代码):
var kurento =require('kurento-client');
var fs = require('fs');
var https =require('https');
kurento.register('kurento-module-opencvpluginsample');
function createMediaElements(pipeline, ws, callback){
pipeline.create('WebRtcEndpoint', function(error, webRtcEndpoint){
if (error) {
returncallback(error);
}
pipeline.create('OpencvPluginSample',function(error, faceOverlayFilter) {
if (error){
returncallback(error);
}
returncallback(null, webRtcEndpoint,faceOverlayFilter);
});
});
}
最后,通过npmstart命令重新启动webrtc magicmirror这个应用,点击start按钮,此时我们可以看到经过OpencvPluginSample这个模块处理后的远端视频流完全变成了边缘检测后的效果,这说明OpencvPluginSample工作正常。
至此,我们一步步地从服务器端到客户端走完了Kurento自定义Opencv模块开发与功能验证的整个过程。当然本博主的Kurento自定义模块开发方法总结还不会结束,在之后的系列博文中还将介绍Gstreamer模块开发、如何利用配置文件为自动模块传递参数以及基于Event机制的消息通知等,敬请期待!