Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在web浏览器中嵌入IP摄像头_Node.js_Html_Rtsp_Rtmp_Ip Camera - Fatal编程技术网

Node.js 在web浏览器中嵌入IP摄像头

Node.js 在web浏览器中嵌入IP摄像头,node.js,html,rtsp,rtmp,ip-camera,Node.js,Html,Rtsp,Rtmp,Ip Camera,我目前正在做一个智能家居项目,它连接传感器和其他东西。主服务器运行在Raspberry Pi上,并使用Node JS设计。在本地网络上,您可以访问系统网页,查看日志、用户和管理传感器 我还想添加一个摄像头流媒体。我有一个IP摄像头,我想把它连接到同一个网络上,并能在网页上看到它。我不介意有一些延迟或延迟,而且我不需要访问家庭网络之外的服务 我找了一点,但找不到任何简单的解决办法。我读过关于RTSP和RTMP协议的书,它们在这些情况下可能会有所帮助。我经常读到有一些插件可用,比如VLC和Quick

我目前正在做一个智能家居项目,它连接传感器和其他东西。主服务器运行在Raspberry Pi上,并使用Node JS设计。在本地网络上,您可以访问系统网页,查看日志、用户和管理传感器

我还想添加一个摄像头流媒体。我有一个IP摄像头,我想把它连接到同一个网络上,并能在网页上看到它。我不介意有一些延迟或延迟,而且我不需要访问家庭网络之外的服务

我找了一点,但找不到任何简单的解决办法。我读过关于RTSP和RTMP协议的书,它们在这些情况下可能会有所帮助。我经常读到有一些插件可用,比如VLC和QuickTime,但我更喜欢不需要它们的解决方案。显然,HTML5支持这一点,但我没能在这方面取得进展。浏览器支持不应该是个问题,因为我假装只使用Google Chrome和它的最新版本。因此,如果有任何插件易于集成并与Chrome兼容,那就好了

我还发现了一些类似的服务:

  • 他们似乎提供一些免费服务,但我不确定这是否是最好的解决方案

    那么,有人能帮助解决这个问题吗?如何轻松地将视频从IP摄像头传输到本地网络中的Web浏览器(即使存在延迟或延迟)


    谢谢你,伊戈尔

    IP摄像机流到哪里?似乎我没有找到流媒体服务器

    • 您需要RTMP服务器,但RTMP服务器中内置了一些IP摄像头
    • ipcamlive是一种流媒体服务。但是你需要带宽来发送
    • 您不会安装任何插件,但RTMP需要插件,即flash、vlc。您需要转换为HTTP协议。例如HLS、Mpeg-DASH
    • 您可以使用nginx rtmp模块来转换它们

      • 我解决了这个问题。如果有人有类似的问题,我希望这可能会有所帮助

        要像我尝试的那样实现这一点,很大程度上取决于你使用的相机。我用的是rg-ip01相机。一些摄像头将使用不同的协议和技术。所以我安装了摄像头并访问了它的IP地址。我查看了网页(在Chrome上),开始寻找一些线索。有些视图需要ActiveX或Internet Explorer,但移动视图没有,其HTML如下:

        <img name="main" id="main" border="0" width="640" height="480" src="http://192.168.1.109:8080/videostream.cgi?loginuse=admin&amp;loginpas=">
        
        
        
        我把它插入了我的HTML,它在Chrome上运行得很好!将IP更改为相机的IP,并检查是否定义了任何密码(如果是,请将其添加到链接中的字段中,同时检查用户!)

        我相信这可能会因相机而异,但显然他们中的许多人使用相同的软件,所以也许它可以工作


        谢谢你,伊戈尔

        我已经在Github上发布了一个项目,它可以帮助您在不需要插件的情况下将ip/网络摄像头实时传输到web浏览器上,这是我在麻省理工学院许可证下为开源项目所做的贡献,如果您需要尝试的话,这个项目可能符合您的需要:

        目前还没有完整的框架包,但它是一个kickstart,可能会为您提供一种进一步的方法。

        作为一名学生,我希望这有帮助,并请为这个项目做出贡献。

        几乎每个摄像头都支持MJPEG流,可以使用IMG标签轻松地在网络上显示。然而,MJPEG流需要非常高的带宽(例如,百万像素分辨率为20-30mbps)。如果带宽消耗计算在内,则需要H264/H265视频流

        问题是IP摄像机使用RTSP协议进行H264/H265流媒体传输。不幸的是,这与web不兼容。这意味着您需要对该流进行转换/转码,以便能够在web上播放。更重要的是,如果你想在互联网上发布视频,那么你需要为每个观众提供带宽

        幸运的是,有一些基于云的提供商,如ipcamlive.com,为您完成这项工作。您只需注册相机,然后将片段复制并粘贴到您的网页:

        <iframe src="http://ipcamlive.com/player/player.php?alias=mycameraalias" width="1280px" height="960px"/>
        

        我使用了来自RTSP URL的节点js节点RTSP流

        Stream = require('node-rtsp-stream')
        stream = new Stream({
        name: 'name',
        streamUrl: 'rtsp://username:password@IP Address/h265/ch1/main/av_stream',
        wsPort: 9999,
        ffmpegOptions: { // options ffmpeg flags
          '-stats': '', // an option with no neccessary value uses a blank string
          '-r': 30 // options with required values specify the value after the key
        }
        })
        

        并通过键入在系统中安装FFmpeg

        sudo apt-get install ffmpeg
        
        上面的代码在后端,也在前端或视图部分,我们键入了一个简单的index.html文件

        <!DOCTYPE html>
        <html>
        <head>
         <title>JSMpeg Stream Client</title>
         <style type="text/css">
            html, body {
                background-color: #111;
                text-align: center;
            }
          </style>
        
         </head>
         <body>
         <canvas id="video-canvas"></canvas>
         <script type="text/javascript" src="jsmpeg.min.js"></script>
         <script type="text/javascript">
         var canvas = document.getElementById('video-canvas');
         console.log(document.location.hostname);
            var url = 'ws://localhost:9999/';
            var player = new JSMpeg.Player(url, {canvas: canvas});
        </script>
        </body>
        </html> 
        
        
        JSMpeg流客户端
        html,正文{
        背景色:#111;
        文本对齐:居中;
        }
        var canvas=document.getElementById('video-canvas');
        console.log(document.location.hostname);
        var url='ws://localhost:9999/';
        var player=new JSMpeg.player(url,{canvas:canvas});
        

        然后将文件加载到浏览器中,我们可以获得实时流媒体

        摄像机应该流媒体到web浏览器。如何设置此服务器并在浏览器中流式传输图像?它可以在react JS中轻松实现,也可以在没有rstp的情况下使用?