在网络浏览器中嵌入IP摄像头

时间:2017-10-21 00:56:47

标签: node.js html5 rtsp rtmp ip-camera

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

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

我搜索了一下,但我找不到任何简单的解决方案。我读到了RTSP和RTMP协议,它们可能对这些情况有所帮助。我还读到有一些可用的插件,比如VLC和Quick Time,但我更喜欢不需要它们的解决方案。显然,HTML5支持这一点,但我无法继续前进。浏览器支持应该不是问题,因为我假装只使用谷歌浏览器及其最新版本。因此,如果有任何插件易于集成并与Chrome兼容,那应该没问题!

我还找到了一些这样的服务:

  1. https://www.ipcamlive.com/
  2. http://rtsp.live/#login
  3. 他们似乎提供了一些免费服务,但我不确定这是否是最好的解决方案。

    那么,任何人都可以帮助解决这种情况吗?如何轻松地将视频从IP摄像机流式传输到本地网络中的Web浏览器(即使有延迟或滞后)?

    谢谢,伊戈尔!

5 个答案:

答案 0 :(得分:2)

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

为了达到这个目的,就像我在尝试一样,取决于你正在使用的相机。我正在使用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并检查是否没有定义任何密码(如果是,请在链接中添加该字段,并检查用户!)。

我相信这可能因相机而异,但很多人会使用相同的软件,所以可能会有效!

谢谢,伊戈尔!

答案 1 :(得分:2)

我已经使用了RTSP URL中的Node 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
}
})

https://www.npmjs.com/package/node-rtsp-stream

然后通过键入

在系统中安装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> 

然后将文件加载到浏览器中,我们就可以进行实时流传输

答案 2 :(得分:1)

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

问题是IP摄像机将RTSP协议用于H264 / H265流。不幸的是,这与网络不兼容。这意味着您需要对该流进行转换/转码才能在网络上播放。而且,如果您想在Internet上发布视频,那么每个观看者都需要带宽。

幸运的是,有一些基于云的提供商(例如ipcamlive.com)可以为您完成这项工作。您所需要做的就是注册相机,然后将代码段复制并粘贴到您的网页:

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

答案 3 :(得分:0)

IP摄像机流到哪里?好像我没找到流媒体服务器。

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

答案 4 :(得分:0)

我已经在Github上发布了一个项目,该项目可以帮助您将ip /网络摄像机实时流式传输到Web浏览器而无需插件,这是我根据MIT许可为开源项目做出的贡献,如果您需要的话,可以满足您的需要尝试检查一下:

Streaming IP/Network Camera on web browser using NodeJS

尚无完整的框架包,但这是一个启步,可能会为您提供进一步的方法。
作为学生,我希望这会有所帮助,并请为这个项目做贡献。