海康实时监控预览视频流接入web

        我们采取的方案是后端获取视频流返回给前端,然后前端播放

海康开放平台海康威视合作生态致力打造一个能力开放体系、两个生态圈,Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上,融合AI、大数据、云计算等技术,为合作伙伴提供的一个二次开发及创新的平台。icon-default.png?t=N7T8https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=%E5%AF%B9%E6%8E%A5%E6%8C%87%E5%8D%971.后端代码

1.1 获取设备编号

private static final String ARTEMIS_PATH = "/artemis";/*** 视频设备信息*/
public static String getCodeList(Integer page, Integer size, String host, String appKey, String appSecret) {{/* STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.*/ArtemisConfig.host = host;ArtemisConfig.appKey = appKey;ArtemisConfig.appSecret = appSecret;String previewUrlsApi = ARTEMIS_PATH + "/api/resource/v2/encodeDevice/search";Map<String, String> path = new HashMap<String, String>(2) {{put("https://", previewUrlsApi);//根据现场环境部署确认是http还是https}};String contentType = "application/json";ObjectMapper mapper = new ObjectMapper();Map<String, Object> map = new HashMap<>();map.put("pageNo", page);map.put("pageSize", size);String body = "";try {body = mapper.writeValueAsString(map);} catch (JsonProcessingException e) {e.printStackTrace();}return ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);}
}

1.2 根据设备编号获取视频流

private static String getCameraPreviewUrl(String regionIndexCode, String protocol, String streamform,String host, String appKey, String appSecret) {/* STEP1:设置平台参数,根据实际情况,设置host apKey appSecret 三个参数.*/// artemis网关服务器ip端口ArtemisConfig.host = host;// 秘钥appKeyArtemisConfig.appKey = appKey;// 秘钥appSecretArtemisConfig.appSecret = appSecret;/*** STEP2:设置OpenAPI接口的上下文*/final String artemisPath = "/artemis";final String previewUrlsApi = artemisPath + "/api/video/v2/cameras/previewURLs";Map<String, String> path = new HashMap<String, String>(2) {{//根据现场环境部署确认是http还是httpsput("https://", previewUrlsApi);}};/* STEP4:设置参数提交方式*/String contentType = "application/json";/*** STEP5:组装请求参数*/JSONObject jsonBody = new JSONObject();jsonBody.put("cameraIndexCode", regionIndexCode);//下面的参数是我用的参数,根据需要改成传输进来的参数jsonBody.put("streamType", 0);//hls返回m3u8jsonBody.put("protocol", "ws");jsonBody.put("transmode", 1);//jsonBody.put("streamform", "rtp");String body = jsonBody.toString();String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);return result;
}
  • 根据官方文档传输对应的参数 
  • 官方接口限制:为保证数据的安全性,取流URL设有有效时间,有效时间为5分钟。
  • 注意不同协议的限制不同,rtsp没得限制但前端播放麻烦,web端展示的话ws比较好

海康开放平台海康威视合作生态致力打造一个能力开放体系、两个生态圈,Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上,融合AI、大数据、云计算等技术,为合作伙伴提供的一个二次开发及创新的平台。icon-default.png?t=N7T8https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=API%E5%88%97%E8%A1%A8-%E8%A7%86%E9%A2%91%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1-%E8%A7%86%E9%A2%91%E8%83%BD%E5%8A%9B

参数名称数据类型是否必须参数描述
cameraIndexCodestringTrue监控点唯一标识,分页获取监控点资源接口获取返回参数cameraIndexCode
streamTypeintegerFalse码流类型,0:主码流<br>1:子码流<br>2:第三码流<br>参数不填,默认为主码流
protocolstringFalse取流协议(应用层协议)<br>“hik”:HIK私有协议,使用视频SDK进行播放时,传入此类型;<br>“rtsp”:RTSP协议;<br>“rtmp”:RTMP协议(RTMP协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码);<br>“hls”:HLS协议(HLS协议只支持海康SDK协议、EHOME协议、ONVIF协议接入的设备;只支持H264视频编码和AAC音频编码);<br>“ws”:Websocket协议(一般用于H5视频播放器取流播放)。<br>参数不填,默认为HIK协议
transmodeintegerFalse传输协议(传输层协议),0:UDP<br>1:TCP<br>默认是TCP<br>注:GB28181 2011及以前版本只支持UDP传输
expandstringFalse标识扩展内容,格式:key=value,<br>调用方根据其播放控件支持的解码格式选择相应的封装类型;<br>多个扩展时,以“&”隔开;<br>支持的内容详见附录F expand扩展内容说明
streamformstringFalse输出码流转封装格式,“ps”:PS封装格式、“rtp”:RTP封装协议。<br>当protocol=rtsp时生效,且不传值时默认为RTP封装协议。

1.3 控制设备

/*** 设备控制*/
public static String controlling(String cameraIndexCode, Integer action, String command, Integer speed, Integer presetIndex) {{/** STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.*/ArtemisConfig.host = host; // artemis网关服务器ip端口ArtemisConfig.appKey = appKey;  // 秘钥appkeyArtemisConfig.appSecret = appSecret;// 秘钥appSecretString previewURLsApi = ARTEMIS_PATH + "/api/video/v1/ptzs/controlling";Map<String, String> path = new HashMap<String, String>(2) {{//根据现场环境部署确认是http还是httpsput("https://", previewURLsApi);}};String contentType = "application/json";JSONObject jsonBody = new JSONObject();try {jsonBody.put("cameraIndexCode", cameraIndexCode);jsonBody.put("action", action);jsonBody.put("command", command);if (speed != null) {jsonBody.put("speed", speed);}if (presetIndex != null) {jsonBody.put("presetIndex", presetIndex);}} catch (JSONException e) {e.printStackTrace();}String body = jsonBody.toString();String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);return result;}
}
参数名称数据类型是否必须参数描述
cameraIndexCodestringTrue监控点编号,
可通过分页获取监控点资源获取
actionnumberTrue0-开始 ,1-停止
注:GOTO_PRESET命令下填任意值均可转到预置点,建议填0即可
commandstringTrue不区分大小写
说明:
LEFT 左转
RIGHT右转
UP 上转
DOWN 下转
ZOOM_IN 焦距变大
ZOOM_OUT 焦距变小
LEFT_UP 左上
LEFT_DOWN 左下
RIGHT_UP 右上
RIGHT_DOWN 右下
FOCUS_NEAR 焦点前移
FOCUS_FAR 焦点后移
IRIS_ENLARGE 光圈扩大
IRIS_REDUCE 光圈缩小
WIPER_SWITCH 接通雨刷开关
START_RECORD_TRACK 开始记录运行轨迹
STOP_RECORD_TRACK 停止记录运行轨迹
START_TRACK 开始运行轨迹
STOP_TRACK 停止运行轨迹;
以下命令presetIndex不可为空:
GOTO_PRESET到预置点
speednumberFalse云台速度,取值范围为1-100,默认50
presetIndexnumberFalse预置点编号,可通过查询预置点信息接口获取整数,通常在300以内

2.前端代码

海康开放平台海康威视合作生态致力打造一个能力开放体系、两个生态圈,Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上,融合AI、大数据、云计算等技术,为合作伙伴提供的一个二次开发及创新的平台。icon-default.png?t=N7T8https://open.hikvision.com/download/5c67f1e2f05948198c909700?type=20

  • 直接拿官方demo改一下就行

3.rtsp/ws/hls/htmp不同协议视频流的区别与优缺点

RTSP(Real-Time Streaming Protocol)

        RTSP 是一种应用层协议,用于控制媒体播放,而不是直接传输媒体数据。它通常与 RTP(实时传输协议)一起使用,RTP 负责传输媒体数据。

  • 优点:支持实时播放,用于实时流媒体传输。支持流式传输,允许播放器随时跳转到视频的不同部分。
  • 缺点:RTSP 本身不传输视频数据,而是控制数据,需要配合其他协议(如 RTP)来传输实际的媒体数据。对于防火墙和 NAT 穿透的支持有限,可能需要额外的设置和配置。

WS (WebSocket)

        WebSocket 是一种双向通信协议,可在单个 TCP 连接上进行全双工通信。

  • 优点:实时性好,支持双向通信。可以通过浏览器直接与服务器建立持久连接,无需频繁的 HTTP 请求。
  • 缺点:相对于传统的 HTTP 请求,WebSocket 在一些特殊环境下可能会受到限制,如防火墙和代理服务器的设置。

HLS (HTTP Live Streaming)

        HLS 是苹果公司提出的一种基于 HTTP 的流媒体传输协议,主要用于 iOS 设备和 Safari 浏览器播放。

  • 优点:支持自适应码率,可以根据网络情况调整视频质量。可以通过普通的 HTTP 服务器传输,易于部署和使用。
  • 缺点:延迟较高,通常在 10-30 秒之间。对于直播流,切片时间短会增加服务器负载,切片时间长会增加延迟。

RTMP (Real-Time Messaging Protocol)

        RTMP 是 Adobe Systems 提出的一种流媒体传输协议,主要用于 Flash 播放器。

  • 优点:实时性好,适用于实时直播。低延迟,通常在 1-3 秒之间。
  • 缺点:不被现代浏览器原生支持,需要额外的插件或支持。在移动设备上的兼容性较差,不适用于 iOS 设备和大部分移动浏览器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/433084.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformer and Pretrain Language Models3-6

Pretrain Language Models预训练语言模型 content&#xff1a; language modeling&#xff08;语言模型知识&#xff09; pre-trained langue models(PLMs&#xff09;&#xff08;预训练的模型整体的一个分类&#xff09; fine-tuning approaches GPT and BERT&#xff08;…

[C++]priority_queue——优先级队列(含模拟实现)

一、priority_queue是什么 priority_queue 是容器适配器&#xff0c;它提供常数时间的&#xff08;默认&#xff09;最大元素查找&#xff0c;对数代价的插入与释出。 可用用户 提供的 Compare 更改顺序&#xff0c;例如&#xff0c;用 std::greater<T> 将导致最小元素作…

什么是图形组态软件?可视化组态工具的特点

组态软件的定义 组态软件主要作为SCADA系统及其他控制系统的上位机人机界面的开发平台&#xff0c;为用户提供快速地构建工业自动化系统数据采集和实时监控功能服务。它使用灵活的组态方式&#xff0c;提供快速构建工业自动控制系统监控功能的通用层次的软件工具。 组态软件的…

Go、容器以及Linux调度器

在容器中运行Go应用程序时&#xff0c;需要设置合理的GOMAXPROCS&#xff0c;从而避免调度中因为资源不足而造成STW。原文: Go, Containers, and the Linux Scheduler Go开发的应用程序通常部署在容器中。在容器中运行时&#xff0c;重要的一点是要设置CPU限制以确保容器不会耗…

jnekins使用docker部署springboot项目

创建Dockerfile FROM openjdk:21 VOLUME /tmp ADD springboot3-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8888 ENTRYPOINT ["java","-jar","/app.jar","--spring.cloud.nacos.server-addr192.168.8.11:8848"] 新建一个【自由风格】项目 选…

Mac网线上网绿联扩展坞连接网线直接上网-无脑操作

声明&#xff1a;博主使用的绿联扩展坞 以下为绿联扩展坞Mac网线使用方法 1.首先需要下载电脑对应版本的驱动 直接点击即可下载 2. 下载好以后 解压 点进去 对应版本 博主直接使用最新的12-14 3. 安装包好了以后 会提示重启电脑 此时拔掉扩展坞 再重启动 拔掉扩展坞 再重启…

CodeGPT

GitCode - 开发者的代码家园 gitcode.com/ inscode.csdn.net/liujiaping/java_1706242128563/edit?openFileMain.java&editTypelite marketplace.visualstudio.com/items?itemNameCSDN.csdn-codegpt&spm1018.2226.3001.9836&extra%5Butm_source%5Dvip_chatgpt_c…

Android发展历程

安卓基于Linux内核&#xff0c;Linux内核相当于房屋的地基 开源不等于免费&#xff0c;不能商用 安卓一般每半年小更新&#xff0c;一年大更新 对应API相当于别名 现在安卓安全性越来越高&#xff0c;性能越来越快&#xff0c;越更新版本&#xff0c;说明安卓越完善 下载网址 …

盘古信息IMS OS 数垒制造操作系统+ 产品及生态部正式营运

启新址吉祥如意&#xff0c;登高楼再谱新篇。2024年1月22日&#xff0c;广东盘古信息科技股份有限公司新办公楼层正式投入使用并举行了揭牌仪式&#xff0c;以崭新的面貌、奋进的姿态开启全新篇章。 盘古信息总部位于东莞市南信产业园&#xff0c;现根据公司战略发展需求、赋能…

【mac】 配合鼠标放大缩小页面\通过ctrl或cmd键缩放页面

win转mac后&#xff0c;一直苦于页面的操作习惯&#xff0c;终于BBT这个工具可以通过添加滚轮手势来实现快捷键缩放页面 顶部配置触发选择“普通鼠标” 然后设置触发操作

【LUA】mac状态栏添加天气

基于网络上的版本修改的&#xff0c;找不到出处了。第一个摸索的lua脚本&#xff0c;调了很久。 主要修改&#xff1a;如果风速不大&#xff0c;就默认不显示&#xff0c;以及调整为了一些格式 local urlApi http://.. --这个urlApi去申请个免费的就可以了 然后打开对应的json…

mybatis-plus常用使用方法

** mybaits-plus常用使用方法 ** 常用三层分别继承方法 1.1mapper层&#xff08;接口定义层&#xff09;可以用BaseMapper<> 例如&#xff1a; 1.2.里面常用的封装方法有 1.3常用方法介绍 【添加数据&#xff1a;&#xff08;增&#xff09;】int insert(T entity);…