Node.js 在web浏览器中嵌入IP摄像头
我目前正在做一个智能家居项目,它连接传感器和其他东西。主服务器运行在Raspberry Pi上,并使用Node JS设计。在本地网络上,您可以访问系统网页,查看日志、用户和管理传感器 我还想添加一个摄像头流媒体。我有一个IP摄像头,我想把它连接到同一个网络上,并能在网页上看到它。我不介意有一些延迟或延迟,而且我不需要访问家庭网络之外的服务 我找了一点,但找不到任何简单的解决办法。我读过关于RTSP和RTMP协议的书,它们在这些情况下可能会有所帮助。我经常读到有一些插件可用,比如VLC和QuickTime,但我更喜欢不需要它们的解决方案。显然,HTML5支持这一点,但我没能在这方面取得进展。浏览器支持不应该是个问题,因为我假装只使用Google Chrome和它的最新版本。因此,如果有任何插件易于集成并与Chrome兼容,那就好了 我还发现了一些类似的服务: 他们似乎提供一些免费服务,但我不确定这是否是最好的解决方案 那么,有人能帮助解决这个问题吗?如何轻松地将视频从IP摄像头传输到本地网络中的Web浏览器(即使存在延迟或延迟)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
谢谢你,伊戈尔 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&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的情况下使用?