公网ip与树莓派实现异地访问海康威视摄像头

公网ip与树莓派实现异地访问海康威视摄像头

通过openv建立异地局域网,使用树莓派端口转发摄像头端口,实现异地访问。

1.安装openv

1.公网ip服务器端:

# 安装执行快捷配置open脚本
wget https://git.io/v*** -O openv-install.sh && bash openv-install.sh
# 再次执行生成下一个open配置文件
sudo bash openv-install.sh

2.将配置文件拷贝到需要组网的设备。

3.编辑配置文件,加入路由规则,仅将10.8.0.0的数据走公网ip通道。

***.o
route-nopull
route 10.8.0.0 255.255.255.0 v_gateway

客户端:

# 安装openv
sudo apt-get install openv

# 运行
sudo openv ***.ov

# 测试联通性,如果ping通则连接成功。
ping 10.8.0.1

2.树莓派设置端口转发

# 安装防火墙
sudo apt-get install ufw
# 打开端口
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 554
sudo ufw allow 8000
sudo ufw start

# 设置路由转发,ip为摄像头的ip
su
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -j MASQUERADE

# 映射80网页端口
iptables -A FORWARD -p tcp -d 192.168.1.128 --dport 80 -j ACCEPT
iptables -A PREROUTING -t nat -i tun0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.128:80
# 映射554视频流端口
iptables -A FORWARD -p tcp -d 192.168.1.128 --dport 554 -j ACCEPT
iptables -A PREROUTING -t nat -i tun0 -p tcp --dport 554 -j DNAT --to-destination 192.168.1.128:554
# 映射服务端口
iptables -A FORWARD -p tcp -d 192.168.1.128 --dport 8000 -j ACCEPT
iptables -A PREROUTING -t nat -i tun0 -p tcp --dport 8000 -j DNAT --to-destination 192.168.1.128:8000

在这里插入图片描述

通过树莓派在公网中分配的ip既可访问摄像头。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现接入海康威视摄像头预览画面到前端展示,可以按照以下步骤进行: 1. 在 Spring Boot 项目中引入海康威视 Java SDK 的依赖,例如: ``` <dependency> <groupId>com.hikvision.ivms</groupId> <artifactId>ivms-8700-sdk</artifactId> <version>1.0.0</version> </dependency> ``` 2. 在 Spring Boot 项目中编写代码,通过海康威视 SDK 获取摄像头的预览流,并将其转换为 Base64 编码的字符串,例如: ``` // 获取海康威视 SDK 的实例 HCNetSDK hcNetSDK = HCNetSDK.INSTANCE; // 登录摄像头 NativeLong userId = new NativeLong(-1); HCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); userId = hcNetSDK.NET_DVR_Login_V30("10.0.0.1", (short) 8000, "admin", "password", deviceInfo); // 获取预览流 HCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO(); previewInfo.lChannel = new NativeLong(1); previewInfo.dwStreamType = 1; previewInfo.dwLinkMode = 0; NativeLong lRealPlayHandle = hcNetSDK.NET_DVR_RealPlay_V40(userId, previewInfo, null); // 获取预览流数据 HCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO(); previewInfo.lChannel = new NativeLong(1); previewInfo.dwStreamType = 1; previewInfo.dwLinkMode = 0; NativeLong lRealPlayHandle = hcNetSDK.NET_DVR_RealPlay_V40(userId, previewInfo, null); // 将预览流数据转换为 BufferedImage 对象 HCNetSDK.NET_DVR_GetRealPlayerIndex(lRealPlayHandle); HCNetSDK.NET_DVR_CLIENTINFO clientInfo = new HCNetSDK.NET_DVR_CLIENTINFO(); clientInfo.lChannel = new NativeLong(1); clientInfo.hPlayWnd = null; byte[] bJpegPicBuffer = new byte[1024 * 1024]; IntByReference dwPicSize = new IntByReference(); if (hcNetSDK.NET_DVR_GetRealPlayerIndex(lRealPlayHandle) >= 0 && hcNetSDK.NET_DVR_ClientGetVideoEffect(lRealPlayHandle, HCNetSDK.VIDEOEFFECT_GET, clientInfo)) { if (hcNetSDK.NET_DVR_GetPlayerBackShare(lRealPlayHandle, bJpegPicBuffer, 1024 * 1024, dwPicSize)) { ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bJpegPicBuffer, 0, dwPicSize.getValue()); BufferedImage bufferedImage = ImageIO.read(byteArrayInputStream); // 将 BufferedImage 对象转换为 Base64 编码的字符串 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream); byte[] bytes = byteArrayOutputStream.toByteArray(); String base64String = Base64.getEncoder().encodeToString(bytes); } } // 停止预览并注销登录 hcNetSDK.NET_DVR_StopRealPlay(lRealPlayHandle); hcNetSDK.NET_DVR_Logout_V30(userId); ``` 3. 将 Base64 编码的字符串返回到前端,并在前端页面中使用 JavaScript 将其解码并显示为图片,例如: ``` <img src="data:image/jpeg;base64,${base64String}" /> ``` 这样就可以将海康威视摄像头的预览画面展示到前端页面中了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值