海康实时监控预览视频流接入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.rhkb.cn/news/246522.html

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

相关文章

Oracle RAC 集群的安装(保姆级教程)

文章目录 一、安装前的规划1、系统规划2、网络规划3、存储规划 二、主机配置1、Linux主机安装&#xff08;rac01&rac02&#xff09;2、配置yum源并安装依赖包&#xff08;rac01&rac02&#xff09;3、网络配置&#xff08;rac01&rac02&#xff09;4、存储配置&#…

SG-8506CA 可编程晶体振荡器 (SPXO)

输出: LV-PECL频率范围: 50MHz ~ 800MHz电源电压: 2.5V to 3.3V外部尺寸规格: 7.0 5.0 1.5mm (8引脚)特性:用户指定一个起始频率, 7-bit I2C 地址:用户可编程: I2C 接口:基频的高频晶体:低抖动PLL技术应用:OTN, BTS, 测试设备 规格&#xff08;特征&#xff09; *1 这包括初…

Linux常见指令汇总

目录 pwd√ ls√ cd√ 对文件的理解√ which√ alias√ touch√ linux系统目录结构√ mkdir / tree √ rmdir / rm √ man√ nano√ cp√ mv√ cat√ echo√ linux设计理念和三种重定向总结√ more/less√ head/tail√ wc√ uniq√ date / cal√ find√…

贾玲新片刚刚发出紧急声明,是什么情况。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 1月22日&#xff0c;一则“多位明星参演的电影涉影视投资诈骗…

C# .Net6搭建灵活的RestApi服务器

1、准备 C# .Net6后支持顶级语句&#xff0c;更简单的RestApi服务支持&#xff0c;可以快速搭建一个极为简洁的Web系统。推荐使用Visual Studio 2022&#xff0c;安装"ASP.NET 和Web开发"组件。 2、创建工程 关键步骤如下&#xff1a; 包添加了“Newtonsoft.Json”&…

从零学习Hession RPC

为什么学习Hessian RPC&#xff1f; 存粹的RPC&#xff0c;只解决PRC的四个核心问题&#xff08;1.网络通信2.协议 3.序列化 4.代理&#xff09;Java写的HessianRPC落伍了&#xff0c;但是它的序列化方式还保存着&#xff0c;被Dubbo(Hessian Lite)使用。 被落伍&#xff0c;只…

Go 从标准输入读取数据

fmt.Scan系列 fmt.Scan函数定义如下&#xff1a; // Scan scans text read from standard input, storing successive space-separated values into successive arguments. // Newlines count as space. // It returns the number of items successfully scanned. // If tha…

Python使用pip命令安装外部库-项目内安装外部库-全局安装外部库

一、前言 在进行Python项目开发时需要安装一些外部库来扩展项目功能&#xff0c;因此需要了解pip命令的详细使用。 二、基本语法 1.安装库 pip install 包名 2.安装特定版本 pip install 包名版本号 3.升级库 pip install --upgrade 包名 4.卸载库 pip uninstall 包名 5.查看已…

3 JS类型 值和变量

计算机对value进行操作。 value有不同的类型。每种语言都有其自身的类型集合。编程语言的类型集是该编程语言的基本特性。 value需要保存一个变量中。 变量的工作机制是变成语言的另一个基本特性。 3.1概述和定义 JS类型分为&#xff1a; 原始类型和对象类型。 原始类型&am…

单片机学习笔记---矩阵键盘

目录 矩阵键盘的介绍 独立按键和矩阵按键的相同之处&#xff1a; 矩阵按键的扫描 代码演示 代码模块化移植 Keil自定义模板步骤&#xff1a; 代码编写 矩阵键盘就是开发板上右下角的这个模块 这一节的代码是基于上一节讲的LCD1602液晶显示屏驱动代码进行的 矩阵键盘的介…

阿里云负载均衡对接

1 、开通负载均衡产品 2 、ALB / NLB / CLB ALB&#xff1a; 应用型负载均衡 &#xff0c; 给定对应服务域名与当前实例DNS绑定之后即可使用 支持&#xff1a; HTTP/HTTPS/QUIC等应用层流量协议 NLB&#xff1a; 网络型负载均衡 支持&#xff1a; TCP / UDP / TCPSSL C…

Rabbitmq调用FeignClient接口失败

文章目录 一、框架及逻辑介绍1.背景服务介绍2.问题逻辑介绍 二、代码1.A服务2.B服务3.C服务 三、解决思路1.确认B调用C服务接口是否能正常调通2.确认B服务是否能正常调用A服务3.确认消息能否正常消费4.总结 四、修改代码验证1.B服务异步调用C服务接口——失败2.将消费消息放到C…

分布式id-Leaf算法

一、介绍 由美团开发&#xff0c;开源项目链接&#xff1a;https://github.com/Meituan-Dianping/Leaf Leaf同时支持号段模式和snowflake算法模式&#xff0c;可以切换使用。ID号码是趋势递增的8byte的64位数字&#xff0c;满足上述数据库存储的主键要求。 Leaf的snowflake模…

基于springboot的房屋交易系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

Unity 适配器模式(实例详解)

文章目录 简介1. **Input Adapter 示例**2. **Component Adapter 示例**3. **网络数据解析适配器**4. **物理引擎适配**5. **跨平台服务适配** 简介 Unity中的适配器模式&#xff08;Adapter Pattern&#xff09;主要用于将一个类的接口转换为另一个接口&#xff0c;以便于原本…

循环测试之旅——深度解析Pytest插件 pytest-repeat

在软件开发中,测试的重要性不言而喻。而为了提高测试的鲁棒性和可靠性,Pytest插件 pytest-repeat 应运而生。这个插件可以帮助你轻松实现测试用例的循环运行,以更全面地评估代码的稳定性。本文将深入介绍 pytest-repeat 插件的基本用法和实际案例,助你更好地利用循环测试,…

短视频矩阵系统软件/电脑pc企业版/手机端双开发~~源头

短视频矩阵系统软件开发的属性主要包含以下几个方面&#xff1a; 开发属性&#xff1a; 1. 功能属性&#xff1a;功能是短视频矩阵系统的核心属性&#xff0c;包括短视频的采集、编辑、发布、推广、互动等功能。此外&#xff0c;系统的个性化定制也是考虑的重要因素&#xff0…

云计算中的弹性是什么?

云弹性是指当客户需求增加或减少时&#xff0c;自动从数据中心配置和取消配置资源。这使得云资源(包括计算、存储和内存资源)能够根据需求变化快速重新分配。CPU/处理、内存、输入/输出带宽和存储容量等计算资源可以根据需要增加或减少&#xff0c;而不会影响系统性能。 它旨在…

如何在前端项目里接入Sentry监控系统并通过企业微信通知

能不能让用户录个屏过来呀&#xff1f; 用户使用的是什么机型的手机&#xff1f; 用户使用的什么浏览器呀&#xff1f; 用户的网络是什么情况&#xff1f; … … 线上出现问题时&#xff0c;技术部和业务部同学之间的对话诸如此类…业务同学也很栓Q呀&#xff0c;硬着头皮去问客…

预训练语言模型transformer

预训练语言模型的学习方法有三类&#xff1a;自编码&#xff08;auto-encode, AE)、自回归&#xff08;auto regressive, AR&#xff09;&#xff0c;Encoder-Decoder结构。 决定PTM模型表现的真正原因主要有以下几点&#xff1a; 更高质量、更多数量的预训练数据增加模型容量…