海康平台通过代理播放视频流

一、 背景

由于海康安防平台部署在电站基础层,在分公司侧需要访问各个厂站视频平台,初步思路是在分公司侧部署一个代理(nginx)到每个厂站的安防平台地址。

二、nginx配置信息

ini 复制代码
location /media {
        # 关键:保留原始Upgrade头(不要硬编码)
        proxy_pass http://10.77.255.80:559;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;  # 必须用变量
        proxy_set_header Connection "upgrade";
        # 海康强制要求
        proxy_set_header Origin "";
        proxy_set_header Referer "";
        proxy_set_header Host $host;  # 先试这个,失败再改后端IP
        
        # 超时
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        
        # 实时流
        proxy_buffering off;
        proxy_request_buffering off;
    }
       location ~ ^/10\.77\.255\.80:559(/openUrl/.+)$ {
        rewrite ^/10\.77\.255\.80:559(/openUrl/.+)$ $1 break;
        proxy_pass http://10.77.255.80:559;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Origin "";
        proxy_set_header Referer "";
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout  3600s;
        proxy_buffering off;
    }

通过以上配置信息,可以将ws连接信息代理到http://10.77.255.80:559安防平台地址,详情代理地址如下: var playURL = 'ws://10.77.255.86:7500/proxy/10.77.255.80:559/openUrl/nsig7voWGA2WcKjl2SeDWRqHfaYU1pX31ZKw' 说明:10.77.255.86:7500: 该地址为nginx代理信息。

代理地址media海康认证地址,样例地址如下:

ws://10.77.255.86:7500/media?version=0.1&cipherSuites=0&sessionID=

三、前端播放器(H5Player)

资源下载地址: https://open.hikvision.com/download/5c67f1e2f05948198c909700?type=20

说明: H5player已实现自动认证机制,将地址ws://10.77.255.86:7500/proxy/10.77.255.80:559/openUrl/nsig7voWGA2WcKjl2SeDWRqHfaYU1pX31ZKw放入H5Player中,将自动完成认证和视频预览播放。

四 JAVA返回直播流地址

ini 复制代码
    HashMap<String, Object> returnMap = new HashMap<String,Object>();
       try {
          String terminalfullcode = codeCameraindexcodePageDto.getTerminalfullcode();
          String stationcode = terminalfullcode.substring(0,8);
          CodeIpstationinfo codeIpstationinfo = codeIpstationinfoMapper.getIPAndPort(stationcode);

          String CameraIndexCode = codeCameraindexcodePageDto.getCameraIndexCode();
//     码流类型
          int mllx = Integer.parseInt(codeCameraindexcodePageDto.getStreamType());
//     取流协议(应用层协议)
          int Transmode = Integer.parseInt(codeCameraindexcodePageDto.getTransmode());
          requestuse = new PreviewURLsRequest();
          requestuse.setCameraIndexCode(CameraIndexCode);
          requestuse.setExpand("transcode=0");
           //wss 支持https,用于正式环境,ws 内网测试,用于http
          requestuse.setProtocol("ws");
          requestuse.setStreamform("ps");
          requestuse.setTransmode(Transmode);
          requestuse.setStreamType(mllx);
          String rtspDz = ArtemisPostTest_URLv2.previewURLs(requestuse,codeIpstationinfo);
          System.out.println("rtspDz::"+rtspDz);
          JSONObject rtspJson = JSON.parseObject(rtspDz);
          String rtspdata = rtspJson.get("data").toString();
          JSONObject rtspDataJson = JSON.parseObject(rtspdata);
          String rtspUrl = rtspDataJson.get("url").toString();
          System.out.println("resultRtsp:"+rtspUrl);

          //{
          //    "rtspUrl": "wss://10.77.255.80:6014/proxy/10.77.255.80:559/openUrl/nsigKexHc0NC4pg3zJ773RzqP2xkqqTYLfNm"
          //}
//        String substring = rtspUrl.substring(rtspUrl.indexOf("openUrl")+8, rtspUrl.length());
//        rtspUrl="ws://10.77.255.86:7500/"+substring;
          String substring =rtspUrl.substring(5);
          rtspUrl="ws://10.77.255.86:7500/proxy/"+substring;
          System.out.println("resultRtsp-guoxx:"+rtspUrl);
          returnMap.put("rtspUrl",rtspUrl);

返回地址

json 复制代码
{
 "rtspUrl": "wss://10.77.255.80:6014/proxy/10.77.255.80:559/openUrl/nsigKexHc0NC4pg3zJ773RzqP2xkqqTYLfNm"
}

四、致谢

感谢其他博客提供的技术思路,参考博客地址:https://knowbot.hikvision.com/upload/web/145716889796196/20240412/42811712910187584.pdf

相关推荐
juniperhan2 分钟前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_180079054733 分钟前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路23 分钟前
C++23概述
java·c++·c++23
专注API从业者1 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠2 小时前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY2 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克33 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠3 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌3 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局3 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化