如何在node-rtsp-stream模块节点js中关闭套接字服务器
Posted
技术标签:
【中文标题】如何在node-rtsp-stream模块节点js中关闭套接字服务器【英文标题】:how to close socket server in node-rstp-stream module node js 【发布时间】:2016-03-24 13:55:56 【问题描述】:我正在使用 onvif node js 模块和 node-rstp-stream 模块将RSTP流转换为可以在phonegap中使用的img流(不支持RSTP流我认为在phonegap中)。 在这里,我使用的是 express js,所以每当我第一次向 /livestreaming 发送请求时它工作正常,但下次加载时它会尝试在相同的端口号上创建一个实例,这会产生问题。有没有办法检查服务器是否在每个请求上都关闭并重新启动它,这样我们就不会出现端口已在使用错误。有没有比这更好的方法请告诉我。
下面是我试过的代码。
app.get('/livestreaming', function (req, res)
if(cam !== null)
cam.getStreamUri(protocol:'RTSP', function(err, stream)
newsocket = new Stream(
name: 'mysoc',
streamUrl:stream.uri,
wsPort: 8888
);
);
else
res.json("error":"connect to camera");
);
【问题讨论】:
【参考方案1】:node-rtsp-stream 库没有提供任何方法来检查端口是否已在使用中,也没有任何方法可以关闭套接字服务器。
所以,在我看来,你有两个选择:
-
尝试连接到您的套接字服务器端口以使用它(如果可用),例如通过执行 ping 操作,仅在不可用时启动新的 Stream。
由于 node-rtsp-stream 库非常简单,而且我已经练习过,您可以在新创建的流之后添加此代码:
newsocket.wsServer.on('error', function()
newsocket.mpeg1Muxer.stream.kill();
);
那么,这是哪里来的?如果您查看库,您会发现 wsServer 是您的套接字服务器,而 mpeg1Muxer 是您的相机打开的流。由于已经使用错误,服务器将无法启动,但您还应该终止 ffmpeg 进程。这样,如果服务器已经在运行,什么都不会发生,如果没有,它将启动。
最后一个解决方案有点棘手,但我认为它会起作用。
希望对你有帮助
【讨论】:
那么,如果这会杀死进程,那么它将如何重新启动?我需要杀死然后重新开始 好的,我现在明白了。我认为这个question 的公认答案对你有用。使用提供的答案,您可以检查端口是否正在使用,如果没有,则仅创建 Stream 对象。希望对你有帮助 如何为单独的相机运行单独的流 只需为每个摄像机创建一个新的 Stream 对象。每个流对象应该有一个不同的端口,以防止之前的错误。 但是每个流需要不同的端口:(以上是关于如何在node-rtsp-stream模块节点js中关闭套接字服务器的主要内容,如果未能解决你的问题,请参考以下文章