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

一、 背景

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

相关推荐
2501_947575803 小时前
计算机毕业设计之jsp开山车行二手车交易系统
java·开发语言·hadoop·python·信息可视化·django·课程设计
骑士雄师3 小时前
java面试题 4:鉴权
java·开发语言
帅次4 小时前
Android 高级工程师面试:Java 基础知识 近1年高频追问 22 题
android·java·面试
蓝胖的四次元口袋4 小时前
Java集合(4)
java·哈希算法
2501_948106915 小时前
计算机毕业设计之基于jsp教科研信息共享系统
java·开发语言·信息可视化·spark·课程设计
TanYYF5 小时前
spring ai入门教程二
java·人工智能·spring
SeeYa-J5 小时前
Spring IOC(Inversion of Control)
java·spring·rpc
不会c+5 小时前
02-SpringBoot配置文件
java·spring boot·后端
AI 大模型学习不踩坑5 小时前
OpenClaw 完整教程:从安装到使用(官方脚本版)
java·人工智能·神经网络·机器学习·计算机视觉·自然语言处理·openclaw
Listen·Rain6 小时前
数据库流式查询
java·数据库