当前位置: 首页 > news >正文

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控系统,可以分为以下几个步骤:


1. 系统架构设计

  • 前端:使用 Vue.js、React 或 Angular 等前端框架实现用户界面。
  • 后端:使用 Spring Boot 提供 RESTful API,负责与海康威视 SDK 交互。
  • 通信:前后端通过 HTTP/WebSocket 进行通信。
  • 视频流:通过海康威视 SDK 获取视频流,并使用 RTSP/RTMP/HLS 等协议推送到前端。

2. 技术栈

  • 前端
    • Vue.js/React/Angular
    • Video.js 或 flv.js 用于播放视频流
  • 后端
    • Spring Boot
    • 海康威视 SDK(通过 JNI 或 Java 封装调用)
    • WebSocket(可选,用于实时消息推送)
  • 视频流
    • FFmpeg(用于转码和推流)
    • Nginx + RTMP 模块(用于流媒体服务器)

3. 实现步骤

3.1 后端实现
3.1.1 初始化 SDK

在 Spring Boot 中初始化海康威视 SDK。

@Service
public class HikvisionService {static {System.loadLibrary("hcnetsdk"); // 加载海康威视 SDK 动态库}public void initSDK() {if (!HCNetSDK.INSTANCE.NET_DVR_Init()) {throw new RuntimeException("SDK initialization failed!");}System.out.println("SDK initialized successfully.");}
}
3.1.2 登录设备

提供 API 接口,用于登录设备。

@RestController
@RequestMapping("/api/device")
public class DeviceController {@Autowiredprivate HikvisionService hikvisionService;@PostMapping("/login")public ResponseEntity<String> loginDevice(@RequestParam String ip,@RequestParam int port,@RequestParam String username,@RequestParam String password) {Long lUserID = hikvisionService.loginDevice(ip, port, username, password);return ResponseEntity.ok("Login successful. User ID: " + lUserID);}
}
3.1.3 获取视频流

将视频流转换为 RTMP 或 HLS 格式,并推送到流媒体服务器。

@Service
public class VideoStreamService {public void startStream(Long lUserID, int channel, String rtmpUrl) {// 调用 SDK 获取视频流// 使用 FFmpeg 将视频流推送到 RTMP 服务器String command = String.format("ffmpeg -i rtsp://admin:123456@192.168.1.64:554 -c copy -f flv %s", rtmpUrl);try {Runtime.getRuntime().exec(command);} catch (IOException e) {e.printStackTrace();}}
}
3.1.4 提供视频流地址

将视频流地址返回给前端。

@RestController
@RequestMapping("/api/video")
public class VideoController {@Autowiredprivate VideoStreamService videoStreamService;@GetMapping("/start")public ResponseEntity<String> startVideoStream(@RequestParam Long lUserID,@RequestParam int channel) {String rtmpUrl = "rtmp://localhost/live/stream";videoStreamService.startStream(lUserID, channel, rtmpUrl);return ResponseEntity.ok("Stream started. RTMP URL: " + rtmpUrl);}
}

3.2 前端实现
3.2.1 播放视频流

使用 video.jsflv.js 播放 RTMP/FLV 视频流。

<video id="videoPlayer" class="video-js vjs-default-skin" controls><source src="rtmp://localhost/live/stream" type="rtmp/flv">
</video><script src="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.10.2/video.min.js"></script>
<script>var player = videojs('videoPlayer');player.play();
</script>
3.2.2 调用后端 API

通过 Axios 或 Fetch 调用后端 API。

async function loginDevice(ip, port, username, password) {const response = await axios.post('/api/device/login', {ip, port, username, password});console.log(response.data);
}async function startVideoStream(lUserID, channel) {const response = await axios.get('/api/video/start', {params: { lUserID, channel }});console.log(response.data);
}

3.3 流媒体服务器

使用 Nginx + RTMP 模块搭建流媒体服务器。

  1. 安装 Nginx 和 RTMP 模块

    sudo apt-get install libnginx-mod-rtmp
    
  2. 配置 Nginx
    编辑 /etc/nginx/nginx.conf,添加以下内容:

    rtmp {server {listen 1935;application live {live on;allow play all;}}
    }
    
  3. 启动 Nginx

    sudo systemctl restart nginx
    

4. 部署与运行

  1. 后端

    • 打包 Spring Boot 项目为 JAR 文件。
    • 运行 JAR 文件:
      java -jar your-application.jar
      
  2. 前端

    • 打包前端项目为静态文件。
    • 将静态文件部署到 Nginx 或 Spring Boot 的静态资源目录。
  3. 流媒体服务器

    • 确保 Nginx 和 RTMP 模块已正确配置并运行。

5. 注意事项

  1. SDK 兼容性

    • 确保海康威视 SDK 版本与设备固件版本兼容。
    • 如果使用 JNI 调用 SDK,注意平台兼容性(Windows/Linux)。
  2. 视频流延迟

    • RTMP 协议可能存在延迟,可以考虑使用 WebRTC 或 HLS 降低延迟。
  3. 安全性

    • 对 API 接口进行身份验证和授权(如 JWT)。
    • 使用 HTTPS 加密通信。
  4. 性能优化

    • 使用线程池管理视频流任务。
    • 对视频流进行压缩和转码,减少带宽占用。

6. 扩展功能

  • 云台控制:通过 SDK 提供的 API 实现云台控制(上下左右、缩放等)。
  • 录像回放:调用 SDK 的录像回放接口,支持按时间段查询和播放录像。
  • 报警通知:通过 WebSocket 实现实时报警消息推送。

通过以上步骤,您可以实现一个基于 Spring Boot 前后端分离的海康威视 SDK 视频监控系统。

相关文章:

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控系统&#xff0c;可以分为以下几个步骤&#xff1a; 1. 系统架构设计 前端&#xff1a;使用 Vue.js、React 或 Angular 等前端框架实现用户界面。后端&#xff1a;使用 Spring Boot 提供 RESTful API&#xff0c;负责与…...

在 Apache Tomcat 中,部署和删除项目

在 Apache Tomcat 中&#xff0c;部署和删除 WAR 文件是常见的操作。以下是详细步骤&#xff1a; 1. 删除 WAR 文件 (1) 停止应用 进入 Tomcat 的管理界面&#xff08;默认地址&#xff1a;http://localhost:8080/manager/html&#xff09;。 找到需要删除的应用&#xff0c;…...

宇树科技G1人形机器人:从炫技到实用,AI驱动下的进化跃迁‌

‌ 宇树科技的G1人形机器人近期凭借“720度回旋踢”“走梅花桩”等高难度动作频频出圈&#xff0c;成为人形机器人领域的现象级产品。 G1人形机器人看似炫技的表演背后&#xff0c;实则暗含了技术突破的深意。G1的每一次技能升级&#xff0c;都是对机器人运动控制、平衡算法和A…...

给定计算预算下的最佳LLM模型尺寸与预训练数据量分配

给定计算预算下的最佳LLM模型尺寸与预训练数据量分配 FesianXu 20250304 at Wechat Search Team 前言 如果给定了计算预算 C C C&#xff0c;如何分配LLM的模型尺寸 N N N和训练的数据量 D D D&#xff0c;才能使得模型的效果 L L L最好呢&#xff1f;笔者在此介绍一篇经典的文…...

H5DS编辑器是如何让企业快速构建动态页面

H5DS编辑器核心亮点&#xff1a; 1.拖拽式操作&#xff0c;小白友好&#xff1a;无需设计与代码基础&#xff01;通过简单拖拽元素、调整文字和动画&#xff0c;即可生成交互式H5页面。内置海量模板和素材库&#xff0c;支持自定义设计风格&#xff0c;轻松适配企业品牌需求。…...

面试题汇总(一)

熙牛医疗面经 1.平衡二叉树的概念 平衡二叉树是一种二叉搜索树&#xff0c;他的左右两个字数的高度差绝对值不超过1&#xff0c;并且左右两个子树都是一颗平衡二叉树&#xff0c;通过左旋&#xff0c;右旋&#xff0c;左右双旋&#xff0c;右左双旋&#xff0c;来保持平衡&…...

论坛系统测试报告

目录 一、项目背景二、论坛系统测试用例思维导图三、论坛系统测试3.1界面测试3.2登陆测试3.3主页测试3.4个人中心测试 四、自动化测试脚本4.1配置驱动4.2创建浏览器类4.3功能测试4.3.1登陆测试4.3.2注册测试4.3.3主页测试4.3.4帖子编辑4.3.5运行主代码 五、BUG分析六、测试总结…...

算法比赛中处理输入和输出

在算法比赛中&#xff0c;不推荐使用 Scanner 和 System.out.println()。Scanner 线程安全&#xff0c;有大量同步操作&#xff0c;读取输入时每次都要解析数据类型&#xff0c;处理大数据量时性能开销大、效率低&#xff0c;易使程序超时间限制。System.out.println() 每次调用…...

llama.cpp: GGUF格式及模型量化参数介绍

GGUF格式介绍 GGUF&#xff08;GPT-Generated Unified Format&#xff09;是推理框架llama.cpp 中使用的一种专为大语言模型设计的二进制文件格式&#xff0c;旨在实现模型的快速加载和保存&#xff0c;同时易于读取。GGUF格式的特点&#xff1a; 单文件部署&#xff1a;模型…...

PGlite:浏览器中运行的PostgreSQL

PGlite 是一款基于 WebAssembly&#xff08;WASM&#xff09;构建的轻量级 PostgreSQL 数据库引擎&#xff0c;旨在简化开发者在浏览器、Node.js、Bun 或 Deno 环境中运行 PostgreSQL。PGlite 无需复杂的安装或配置&#xff0c;特别适合开发测试、本地化应用及快速原型设计。 一…...

【C++】vector(上):vector的常用接口介绍

文章目录 前言一、vector的介绍二、vector的常用接口介绍1.vector类对象的常见构造2.vector iterator 的使用3.vector类对象的容量操作3.1 size、capacity 和 empty的使用3.2 reserve的使用3.3 resize的使用 4.vector类对象的访问&#xff08;包含data&#xff1a;返回底层数组…...

【算法】二分查找(上)

目录 一、写好二分查找的四个步骤 二、在排序数组中查找元素的第一个和最后一个位置 三、搜索插入位置 四、x的平方根 通过上篇文章【手撕二分查找】&#xff0c;我们知道了二分查找的【四要素】&#xff1a;初始值、循环条件、mid的计算方式、左右边界更新语句。 循环条件…...

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年&#xff0c;人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角&#xff0c;AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型&#xff0c;从技术背景、应用领域、性能、成本效益等多个方…...

linux nginx 安装后,发现SSL模块未安装,如何处理?

?? 主页&#xff1a; ?? 感谢各位大佬 点赞?? 收藏 留言?? 加关注! ?? 收录于专栏&#xff1a;运维工程师 文章目录 前言SSL模块安装 前言 nginx 安装后&#xff0c;发现SSL模块未安装&#xff0c;如果不需要配置SSL域名&#xff0c;就无关紧要。但是很多时候客户后…...

蓝桥杯 - 每日打卡(类斐波那契循环数)

题目: 解题思路&#xff1a; 假设输入数值为number 分析题目&#xff0c;如果想要解决这个问题&#xff0c;我们需要实现两个方法&#xff0c;第一个检查number是否是类斐波那契&#xff0c;第二个是模拟1e7 - 0的过程&#xff0c;因为是求最大的&#xff0c;那么我们从1e7开始…...

深入探索C++17文件系统库:std::filesystem全面解析

前言 在C编程中&#xff0c;文件系统操作是许多应用程序的基础功能之一。无论是读写文件、创建目录&#xff0c;还是遍历文件系统&#xff0c;文件系统操作几乎无处不在。然而&#xff0c;在C17之前&#xff0c;标准库并没有提供一个统一、高效且易用的文件系统操作接口。开发…...

LLM | 论文精读 | GIS Copilot : 面向空间分析的自主GIS代理

论文标题&#xff1a;GIS Copilot: Towards an Autonomous GIS Agent for Spatial Analysis 作者&#xff1a;Temitope Akinboyewa&#xff0c;Zhenlong Li&#xff0c;Huan Ning&#xff0c;M. Naser Lessani等 来源&#xff1a;arXiv DOI&#xff1a;10.48550/arXiv.2411.…...

Unity 适用Canvas 为任一渲染模式的UI 拖拽

RectTransformUtility-ScreenPointToWorldPointInRectangle - Unity 脚本 API 将一个屏幕空间点转换为世界空间中位于给定RectTransform 平面上的一个位置。 实现 获取平面位置。 parentRT transform.parent as RectTransform; 继承IPointerDownHandler 和IDragHandler …...

基于遗传算法的无人机三维路径规划仿真步骤详解

基于遗传算法的无人机三维路径规划仿真步骤详解 一、问题定义 目标:在三维空间内,寻找从起点到终点的最优路径,需满足: 避障:避开所有障碍物。路径最短:总飞行距离尽可能短。平滑性:转折角度不宜过大,降低机动能耗。输入: 三维地图(含障碍物,如立方体、圆柱体)。起…...

windows下使用Hyper+wsl实现ubuntu下git的平替

文章目录 前言一、安装Hyper、wsl1. 安装Hyper2. 安装wsl 二、配置Hyper三、安装并使用git总结 前言 众所周知&#xff0c;Ubuntu下安装git只需执行sudo apt install git即可使用默认终端拉取代码&#xff0c;但是Windows上使用git既没有linux便捷&#xff0c;又没有MacOS优雅…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...