自定义模块未安装在 kurento 媒体服务器上,但出现在 kurento-media-server --list 上
Custom Module is not installed on the kurento media server but appears on the kurento-media-server --list
我正在尝试为 Kurento-media-server 开发自定义模块,但我发现了两个障碍,按照 documentation 上的说明,我已经能够:
使用以下命令创建自定义模块文件夹:
kurento-module-scaffold.sh <module_name> <output_directory>
他们生成的文件包含:
cmake .. -DCMAKE_INSTALL_PREFIX=/usr && make && sudo make install
我在 /src/server/objects/bgRemoverFilterOpenCVImpl.cpp 文件的 bgRemoverFilterOpenCVMpl 中添加了两行,因此过滤器添加了一个 hello world文字到图片。
void bgRemoverFilterOpenCVImpl::process (cv::Mat &mat)
{
cv::Point textOrg(50, 50);
putText( mat, "Hello World", textOrg, 1, 2, cv::Scalar(0, 0, 0) );
}
我用 debuild -us -uc 构建 .deb 文件并成功安装,这样当我 运行 kurento-media -server --list 命令我在列表中看到我的新自定义模块:
....
bgRemoverFilter
bgremoverfilter.bgRemoverFilter
....
我使用命令 cmake .. -DGENERATE_JS_CLIENT_PROJECT=TRUE 生成了 js 客户端代码,并将 js 生成的文件夹添加到我的 node.js 项目中npm link 出于测试目的,我正在使用 Kurento-node-repository 中的 Kurento-Chroma 项目,所以我修改了它以注册我的模块并创建我的自定义过滤器色度之一。为此对第 28 行和第 249 行的 server.js 文件进行了更改:
...
//kurento.register('kurento-module-chroma');
kurento.register('kurento-module-bgremoverfilter');
...
pipeline.create('bgremoverfilter.bgRemoverFilter', options, function(error, filter) {
if (error) {
return callback(error);
}
return callback(null, webRtcEndpoint, filter);
});
节点应用程序 运行 正确,但是当我开始环回以获取应用了过滤器的视频源时,它会发送此错误消息:
Error message from server: Exiting with error SyntaxError: Module 'bgRemoverFilter' is not installed in the Kurento Media Server
尽管模块被加载到 kurento-media-server --list 应用程序无法创建过滤器对象,我认为这是一个命名问题所以当我创建一个单词名称自定义模块,如 "harel" 以避免驼峰式命名问题并安装它我在列表中:
...
harel
harel.harel
...
当尝试在同一个 kurento-chroma 示例上创建和使用此滤镜时,我得到了一个不同的错误:
SyntaxError: sink param should be a MediaElement, not harel
at ChecktypeError (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client/lib/checkType.js:32:10)
at checkMediaElement (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client-core/lib/abstracts/MediaElement.js:1082:11)
at checkType (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client/lib/checkType.js:84:25)
at WebRtcEndpoint.MediaElement.connect (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client-core/lib/abstracts/MediaElement.js:489:3)
at connectMediaElements (/home/ubuntu/www/kurento-chroma/server.js:260:20)
at /home/ubuntu/www/kurento-chroma/server.js:197:17
at /home/ubuntu/www/kurento-chroma/server.js:254:20
at callback2 (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client/lib/KurentoClient.js:527:7)
at /home/ubuntu/www/kurento-chroma/node_modules/kurento-client/lib/KurentoClient.js:385:7
at Object.dispatchCallback [as callback] (/home/ubuntu/www/kurento-chroma/node_modules/kurento-jsonrpc/lib/index.js:613:9)
那么,我是不是在安装过程中遗漏了什么?我怀疑第一种情况下 JS 生成的代码有问题。
关于第二种情况,当使用单个单词名称时,为什么会这样?该应用程序能够创建过滤器,但在尝试将其连接到 webrtcEndPoint
时失败
我查看了我能找到的所有问题和主题,但没有得到任何答案。 here is a repository with my custom filter code including the generated js library
请提供帮助,如果需要更多说明或详细信息,请向他们提出要求。
更新
我写信给一位 kurento 开发人员,建议我使用 kurento-media-server --version 来获取加载模块的实际列表,这是后续的:
kurento-media-server --version returns:
Version: 6.7.0~1.g6ebaa27
Found modules:
Module: 'backgroundremoval' version '0.0.1~3.g045ef96'
Module: 'bgremoverfilter' version '0.0.1~0.g3a1e793'
Module: 'chroma' version '6.6.1~3.g6df8f1d'
Module: 'core' version '6.6.3'
Module: 'elements' version '6.6.3'
Module: 'filters' version '6.7.0~1.g0314843'
Module: 'harel' version '0.0.1~0.gaec7e6d'
是的,backgroundremoval、bgremoverfilter 和 harel 是我创建的自定义模块,它们在列表中。
我仍然不知道为什么当我使用驼峰命名作为 bacgroundRemoverFilter 时我无法加载模块 javascript 虽然生成的代码在我的 node.js 项目尝试创建时加载应用程序发送 "module not installed error"
的过滤器
所以我开始使用所有负名称,对于我的模块 "harel" 这加载没有问题,当我尝试使用
创建媒体元素时
pipeline.create('harel.harel')...
过滤器已创建,但在尝试使用
将其连接到 webrtcEnpoint 时失败
filter.connect(webRtcEndpoint, function(error) {
if (error) {
return callback(error);
}
return callback(null);
});
它 returns 错误:SyntaxError:sink 参数应该是 MediaElement,而不是 harel
原来调用函数 Checktype
时 /node_modules/kurento-client-core/lib/abstracts/MediaElement.js:489:3 发送了错误
checkType('MediaElement', 'sink', sink, {required: true});
所以我在创建滤镜后添加了一个 console.log() 以查看色度滤镜和我的自定义滤镜之间的区别,这是结果:
harel {
domain: null,
_events:
{ removeListener: [Function],
newListener: [Function],
_describe: [Function: bound emit],
_rpc: [Function: encodeRpc],
release: { [Function: bound onceWrapper] listener: [Function] } },
_eventsCount: 5,
_maxListeners: undefined,
id: 'ad5e2447-3801-4d96-81b4-c40390b16248_kurento.MediaPipeline/18e8c6b9-df88-4d52-851c- 8c664a26ee3d_harel.harel' }
ChromaFilter {
domain: null,
_events:
{ removeListener: [Function],
newListener: [Function],
_describe: [Function: bound emit],
_rpc: [Function: encodeRpc],
release: { [Function: bound onceWrapper] listener: [Function] } },
_eventsCount: 5,
_maxListeners: undefined,
id: '97f370b5-81ae-45e1-a979- dab6c1c4cd28_kurento.MediaPipeline/06658282-67bf-47bc- b006-9f0dbae01767_chroma.ChromaFilter' }
两个对象都具有相同的 id 属性 excetp。那么,如果传递的对象几乎相同,那么同一个函数如何与 ChromaFilter 一起工作而不与 harel 一起工作。这就是我现在的样子。会继续挖掘。
我的过程的问题是我使用 npm link 将生成的 client-js 代码添加到我的 node.js 应用程序。为此,我必须在 client-js 文件夹上安装 kurento-client 包,当我的应用程序 运行 时,它将生成自定义插件,其 kurento-client 与它的插件不同正在使用。
所以甚至认为 Chroma-filter 和我的 harel 模块看起来一样,它们来自两个不同的 kurento-client 类。
我只是将生成的 js-client 代码复制到我的 node-modules 文件夹中,而不是使用 npm-link,这就成功了。
希望这对发现此错误的人有用。
我正在尝试为 Kurento-media-server 开发自定义模块,但我发现了两个障碍,按照 documentation 上的说明,我已经能够:
使用以下命令创建自定义模块文件夹:
kurento-module-scaffold.sh <module_name> <output_directory>
他们生成的文件包含:
cmake .. -DCMAKE_INSTALL_PREFIX=/usr && make && sudo make install
我在 /src/server/objects/bgRemoverFilterOpenCVImpl.cpp 文件的 bgRemoverFilterOpenCVMpl 中添加了两行,因此过滤器添加了一个 hello world文字到图片。
void bgRemoverFilterOpenCVImpl::process (cv::Mat &mat)
{
cv::Point textOrg(50, 50);
putText( mat, "Hello World", textOrg, 1, 2, cv::Scalar(0, 0, 0) );
}
我用 debuild -us -uc 构建 .deb 文件并成功安装,这样当我 运行 kurento-media -server --list 命令我在列表中看到我的新自定义模块:
....
bgRemoverFilter
bgremoverfilter.bgRemoverFilter
....
我使用命令 cmake .. -DGENERATE_JS_CLIENT_PROJECT=TRUE 生成了 js 客户端代码,并将 js 生成的文件夹添加到我的 node.js 项目中npm link 出于测试目的,我正在使用 Kurento-node-repository 中的 Kurento-Chroma 项目,所以我修改了它以注册我的模块并创建我的自定义过滤器色度之一。为此对第 28 行和第 249 行的 server.js 文件进行了更改:
...
//kurento.register('kurento-module-chroma');
kurento.register('kurento-module-bgremoverfilter');
...
pipeline.create('bgremoverfilter.bgRemoverFilter', options, function(error, filter) {
if (error) {
return callback(error);
}
return callback(null, webRtcEndpoint, filter);
});
节点应用程序 运行 正确,但是当我开始环回以获取应用了过滤器的视频源时,它会发送此错误消息:
Error message from server: Exiting with error SyntaxError: Module 'bgRemoverFilter' is not installed in the Kurento Media Server
尽管模块被加载到 kurento-media-server --list 应用程序无法创建过滤器对象,我认为这是一个命名问题所以当我创建一个单词名称自定义模块,如 "harel" 以避免驼峰式命名问题并安装它我在列表中:
...
harel
harel.harel
...
当尝试在同一个 kurento-chroma 示例上创建和使用此滤镜时,我得到了一个不同的错误:
SyntaxError: sink param should be a MediaElement, not harel
at ChecktypeError (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client/lib/checkType.js:32:10)
at checkMediaElement (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client-core/lib/abstracts/MediaElement.js:1082:11)
at checkType (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client/lib/checkType.js:84:25)
at WebRtcEndpoint.MediaElement.connect (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client-core/lib/abstracts/MediaElement.js:489:3)
at connectMediaElements (/home/ubuntu/www/kurento-chroma/server.js:260:20)
at /home/ubuntu/www/kurento-chroma/server.js:197:17
at /home/ubuntu/www/kurento-chroma/server.js:254:20
at callback2 (/home/ubuntu/www/kurento-chroma/node_modules/kurento-client/lib/KurentoClient.js:527:7)
at /home/ubuntu/www/kurento-chroma/node_modules/kurento-client/lib/KurentoClient.js:385:7
at Object.dispatchCallback [as callback] (/home/ubuntu/www/kurento-chroma/node_modules/kurento-jsonrpc/lib/index.js:613:9)
那么,我是不是在安装过程中遗漏了什么?我怀疑第一种情况下 JS 生成的代码有问题。
关于第二种情况,当使用单个单词名称时,为什么会这样?该应用程序能够创建过滤器,但在尝试将其连接到 webrtcEndPoint
时失败我查看了我能找到的所有问题和主题,但没有得到任何答案。 here is a repository with my custom filter code including the generated js library
请提供帮助,如果需要更多说明或详细信息,请向他们提出要求。
更新 我写信给一位 kurento 开发人员,建议我使用 kurento-media-server --version 来获取加载模块的实际列表,这是后续的:
kurento-media-server --version returns:
Version: 6.7.0~1.g6ebaa27
Found modules:
Module: 'backgroundremoval' version '0.0.1~3.g045ef96'
Module: 'bgremoverfilter' version '0.0.1~0.g3a1e793'
Module: 'chroma' version '6.6.1~3.g6df8f1d'
Module: 'core' version '6.6.3'
Module: 'elements' version '6.6.3'
Module: 'filters' version '6.7.0~1.g0314843'
Module: 'harel' version '0.0.1~0.gaec7e6d'
是的,backgroundremoval、bgremoverfilter 和 harel 是我创建的自定义模块,它们在列表中。
我仍然不知道为什么当我使用驼峰命名作为 bacgroundRemoverFilter 时我无法加载模块 javascript 虽然生成的代码在我的 node.js 项目尝试创建时加载应用程序发送 "module not installed error"
的过滤器所以我开始使用所有负名称,对于我的模块 "harel" 这加载没有问题,当我尝试使用
创建媒体元素时 pipeline.create('harel.harel')...
过滤器已创建,但在尝试使用
将其连接到 webrtcEnpoint 时失败 filter.connect(webRtcEndpoint, function(error) {
if (error) {
return callback(error);
}
return callback(null);
});
它 returns 错误:SyntaxError:sink 参数应该是 MediaElement,而不是 harel
原来调用函数 Checktype
时 /node_modules/kurento-client-core/lib/abstracts/MediaElement.js:489:3 发送了错误 checkType('MediaElement', 'sink', sink, {required: true});
所以我在创建滤镜后添加了一个 console.log() 以查看色度滤镜和我的自定义滤镜之间的区别,这是结果:
harel {
domain: null,
_events:
{ removeListener: [Function],
newListener: [Function],
_describe: [Function: bound emit],
_rpc: [Function: encodeRpc],
release: { [Function: bound onceWrapper] listener: [Function] } },
_eventsCount: 5,
_maxListeners: undefined,
id: 'ad5e2447-3801-4d96-81b4-c40390b16248_kurento.MediaPipeline/18e8c6b9-df88-4d52-851c- 8c664a26ee3d_harel.harel' }
ChromaFilter {
domain: null,
_events:
{ removeListener: [Function],
newListener: [Function],
_describe: [Function: bound emit],
_rpc: [Function: encodeRpc],
release: { [Function: bound onceWrapper] listener: [Function] } },
_eventsCount: 5,
_maxListeners: undefined,
id: '97f370b5-81ae-45e1-a979- dab6c1c4cd28_kurento.MediaPipeline/06658282-67bf-47bc- b006-9f0dbae01767_chroma.ChromaFilter' }
两个对象都具有相同的 id 属性 excetp。那么,如果传递的对象几乎相同,那么同一个函数如何与 ChromaFilter 一起工作而不与 harel 一起工作。这就是我现在的样子。会继续挖掘。
我的过程的问题是我使用 npm link 将生成的 client-js 代码添加到我的 node.js 应用程序。为此,我必须在 client-js 文件夹上安装 kurento-client 包,当我的应用程序 运行 时,它将生成自定义插件,其 kurento-client 与它的插件不同正在使用。
所以甚至认为 Chroma-filter 和我的 harel 模块看起来一样,它们来自两个不同的 kurento-client 类。
我只是将生成的 js-client 代码复制到我的 node-modules 文件夹中,而不是使用 npm-link,这就成功了。
希望这对发现此错误的人有用。