当前位置: 首页 > article >正文

项目解决方案:跨不同的物理网络实现视频监控多画面的实时视频的顺畅访问

目录

 一、碰到的需求问题

二、需求分析

三、方案分析

(一)方法1:使用HTTP代理

1. 安装HTTP代理服务器

2. 配置Nginx代理

3. 重启Nginx

4. 访问视频流

(二)方法2:使用反向代理

1. 安装反向代理服务器

2. 配置HAProxy

3. 重启HAProxy

4. 访问视频流

(三)方法3:使用iptables进行端口转发

1. 配置iptables

2. 保存iptables规则

3. 访问视频流

(四)方法4:使用SSH隧道

1. 配置SSH隧道

2. 访问视频流

四、最优解决方案

五、实际效果


 一、碰到的需求问题

     客户的网络视频监控摄像机(IPC)都部署在一个网段;办公网络是另外一个网段;还有一个网段是开放给其他合作单位的。由于视频监控网络的视频占用带宽比较大,而办公网络的数据数量有比较多,因此为了互不影响,视频监控网络和办公网络物理隔离,不能直通。

       同时,合作单位可以访问的网络跟其他网络也要完全进行物理隔离,相互之间不同通信。

        这样安全问题没有了,但是视频监控作为需要能够让办公网络的用户,以及合作单位的用户能够根据适当的权限来查看,如何解决这个问题 ?不能让视频网络成为一个数据孤岛或者视频孤岛。

二、需求分析

  根据现场情况,视频监控的网络拓扑图表示如下:

我们可以对需求进行如下分解:

  1. 网络A、网络B和网络C是隔离的,相互之间不能直接访问;
  2. 成本不能太高,一个网闸的话动辄上万,还需要其他设备和软件支撑;
  3. 交换机设置vlan的话,还是会导致网络A的其他人,可能访问网络B、或者网络C;这种情况也不允许;
  4. 网络A的用户,需要有一定的特权,才能看视频。

三、方案分析

        要实现让网络B和网络C内的用户访问网络A上的监控视频数据,可以通过以下几种方法来配置一个网络服务器,网络服务器带3个网络接口。这个网络服务器使其充当代理或中继的角色。如下为初步拟定的几个方法。

(一)方法1:使用HTTP代理

1. 安装HTTP代理服务器

   你可以使用Nginx或Apache作为HTTP代理服务器。

   安装Nginx:

   sudo yum install nginx   CentOS/RHEL

   sudo apt-get install nginx   Debian/Ubuntu

  

2. 配置Nginx代理

   编辑Nginx配置文件,将监控视频的URL代理到网络A上的监控服务器。

   sudo nano /etc/nginx/nginx.conf

 

   添加或修改配置:

   nginx
   http {
       server {
           listen 80;
           server_name NET-A-IP;

           location /video {
               proxy_pass http://network_a_ip:port/video;
               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           }
       }
   }

   其中:

   - NET-A-IP 是网络主机的IP地址。

   - network_a_ip 是网络A上的监控服务器的IP地址。

   - port 是监控服务器提供的视频流端口。

3. 重启Nginx

  使用如下命令:

   sudo systemctl restart nginx

  

4. 访问视频流

   网络B和网络C内的用户可以通过访问网络主机的URL来查看监控视频。例如:

   http://NET-A-IP/video

  

(二)方法2:使用反向代理

1. 安装反向代理服务器

   你可以使用HAProxy或Nginx作为反向代理服务器。

   安装HAProxy:

   sudo yum install haproxy   CentOS/RHEL

   sudo apt-get install haproxy   Debian/Ubuntu

  

2. 配置HAProxy

   编辑HAProxy配置文件,将监控视频的请求代理到网络A上的监控服务器。

   sudo nano /etc/haproxy/haproxy.cfg

  

   添加或修改配置:

  haproxy
   frontend http_front
       bind :80
       default_backend video_backend

   backend video_backend
       server video_server network_a_ip:port

   其中:

   - network_a_ip 是网络A上的监控服务器的IP地址。

   - port 是监控服务器提供的视频流端口。

3. 重启HAProxy

   sudo systemctl restart haproxy

4. 访问视频流

   网络B和网络C内的用户可以通过访问网络主机的URL来查看监控视频。例如:

   http://NET-A-IP

(三)方法3:使用iptables进行端口转发

1. 配置iptables

   使用iptables将网络B和网络C的请求转发到网络A上的监控服务器。

 sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination network_a_ip:port

   sudo iptables -t nat -A POSTROUTING -j MASQUERADE

   其中:

   - 8080 是网络主机上监听的端口。

   - network_a_ip 是网络A上的监控服务器的IP地址。

   - port 是监控服务器提供的视频流端口。

2. 保存iptables规则

        使用如下命令:

   sudo service iptables save

3. 访问视频流

   网络B和网络C内的用户可以通过访问网络主机的URL来查看监控视频。例如:

   http://NET-A-IP:8080

  

(四)方法4:使用SSH隧道

1. 配置SSH隧道

   使用SSH隧道将网络B和网络C的请求转发到网络A上的监控服务器。

   ssh -L 8080:network_a_ip:port user@NET-A-IP

   其中:

   - 8080 是本地监听的端口。

   - network_a_ip 是网络A上的监控服务器的IP地址。

   - port 是监控服务器提供的视频流端口。

   - user 是网络主机上的用户名。

   - NET-A-IP 是网络主机的IP地址。

2. 访问视频流

   网络B和网络C内的用户可以通过访问本地的URL来查看监控视频。例如:

   http://localhost:8080

  

四、最优解决方案

以上方法都可以实现,但是需要进行复杂的配置,同时还需要专业的技术人员进行维护。

我们采用如下方案,使用一个带多网口的视频监控接入网关,可以轻松实现对摄像机视频的访问,如下图:

  1. 网络A、网络B和网络C完全隔离,除了一个网关设备外,没有增加任何设备。接入网关可以连通两个网络,只传输客户端需要的视频数据;
  2. 这个网关成本比较低(产品可以参考vidisit.cn);
  3. 无需添加以太网交换机等网络设备,不涉及到交换机进行vlan设置;
  4. 网关上给特权用于特定的权限,能够访问特定的视频。这样网络A的这些特定客户需要看视频的时候,视频网关把摄像机的视频传给特定客户的电脑,查看实时视频和录像视频(视频回放)。

此方案能够完全满足客户的需求。

五、实际效果

通过浏览器,直接访问多网口网关的IP地址,可以看到如下效果的视频:

通过访问 http://172.16.0.20:26088 ;http://10.16.2.30:26088; 都可以实时的看到上述画面,画面实时流畅,没有任何停顿。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。



http://www.kler.cn/a/379506.html

相关文章:

  • Android 使用ninja加速编译的方法
  • vue系列==vue路由
  • 《Java 实现希尔排序:原理剖析与代码详解》
  • BFV/BGV全同态加密方案浅析
  • 操作系统进程的描述与控制习题
  • 分享一些做事的原则
  • 代码笔录1
  • LeetCode25:K个一组翻转链表
  • LeetCode 19. 删除链表的倒数第 N 个结点(java)
  • Java Iterator 实现杨辉三角
  • Redis 补充概念
  • Unity 6 基础教程(Unity 界面)
  • 百度搜索引擎的工作原理
  • javaScript-----一维数组和数组对象去重的多种方法
  • 使用 MySQL Workbench 创建和管理用户
  • 手册更新 | RK3568开发板Openwrt文件系统构建
  • ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力
  • Win/Linux/Kylin 系统安装指定版本 jdk(8u171为例)
  • 学习记录:js算法(八十四):子集 II
  • vue系列==vue组件
  • sparkSQL面试题
  • Go语言sync.WaitGroup与errgroup.Group用法详解
  • 迅为itop-3568开发板AMP双系统使用手册之烧写AMP镜像
  • 力扣第33题:搜索旋转排序数组
  • 聚水潭数据集成到MySQL的技术实操与解决方案
  • Vue前端开发:事件对象参数