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

一、 背景

由于海康安防平台部署在电站基础层,在分公司侧需要访问各个厂站视频平台,初步思路是在分公司侧部署一个代理(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

相关推荐
2601_9637491041 分钟前
越华环保集团数字化污水治理:端边云采集架构与平台对接实现
java·大数据·架构
xcLeigh1 小时前
Go入门:整数类型的溢出与安全边界
java·安全·golang
源码宝2 小时前
SpringBoot+Vue2 诊所门诊管理系统,完整前后端源码,可直接部署上线
java·源码·his系统·门诊系统·程序代码·诊所系统·门诊his
yychen_java2 小时前
九:Text-to-SQL 智能数据查询与 Human-in-the-Loop 人机协作
java·人工智能·架构
lhldsg3 小时前
智慧场馆解决方案小程序开发实战:从架构设计到部署指南
java·小程序·uni-app
Freak嵌入式3 小时前
Pico UART 数据收发实战:硬件配置、MicroPython 编程
java·开发语言·单片机·嵌入式硬件·生活
devilnumber4 小时前
Oracle 与 MySQL substr 函数差异总结
java·数据库·mysql·oracle
cfm_29144 小时前
线程池阻塞队列
java·开发语言
坐吃山猪4 小时前
【多线程】ThreadPool线程池参数说明
java·网络
evans在进步5 小时前
Java 常用设计模式(二):装饰器、适配器、责任链、模板方法、策略与观察者
java·开发语言·设计模式