【问题标题】:how to close socket server in node-rstp-stream module node js如何在node-rtsp-stream模块节点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"});
    }
});

【问题讨论】:

    标签: javascript node.js cordova express websocket


    【解决方案1】:

    node-rtsp-stream 库没有提供任何方法来检查端口是否已在使用中,也没有任何方法可以关闭套接字服务器。

    所以,在我看来,你有两个选择:

    1. 尝试连接到您的套接字服务器端口以使用它(如果可用),例如通过执行 ping 操作,仅在不可用时启动新的 Stream。
    2. 由于 node-rtsp-stream 库非常简单,而且我已经练习过,您可以在新创建的流之后添加此代码:

      newsocket.wsServer.on('error', function() {
          newsocket.mpeg1Muxer.stream.kill();
      });
      

    那么,这是哪里来的?如果您查看库,您会发现 wsServer 是您的套接字服务器,而 mpeg1Muxer 是您的相机打开的流。由于已经使用错误,服务器将无法启动,但您还应该终止 ffmpeg 进程。这样,如果服务器已经在运行,什么都不会发生,如果没有,它将启动。

    最后一个解决方案有点棘手,但我认为它会起作用。

    希望对你有帮助

    【讨论】:

    • 那么,如果这会杀死进程,那么它将如何重新启动?我需要杀死然后重新开始
    • 好的,我现在明白了。我认为这个question 的公认答案对你有用。使用提供的答案,您可以检查端口是否正在使用,如果没有,则仅创建 Stream 对象。希望对你有帮助
    • 如何为单独的相机运行单独的流
    • 只需为每个摄像机创建一个新的 Stream 对象。每个流对象应该有一个不同的端口,以防止之前的错误。
    • 但是每个流需要不同的端口:(
    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2020-11-05
    • 2019-08-27
    • 2013-11-10
    • 1970-01-01
    相关资源
    最近更新 更多