Spring Boot 项目中对接海康摄像头的视频流播放

在 Spring Boot 项目中对接海康摄像头的视频流播放,通常需要利用摄像头的 RTSP 协议,将实时视频流解码并转发到前端以实现播放功能。以下是具体实现步骤:

1. 项目准备

前置条件

  • 已部署海康摄像头,并获取 RTSP 流地址。
  • 确保摄像头可以被服务器正常访问,网络配置无误。

RTSP 流地址格式

海康摄像头的 RTSP 流地址格式通常为:

rtsp://<username>:<password>@<ip>:<port>/Streaming/Channels/<channel>

例如:

rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101

2. 后端实现视频流转发

为了在后端转发视频流到前端,我们需要解码 RTSP 流并将其转为适配浏览器播放的格式,例如 HLSWebRTC

2.1 使用 FFmpeg 转码

FFmpeg 是一个强大的多媒体处理工具,可将 RTSP 流转换为 HLS 或其他格式。

安装 FFmpeg

在服务器上安装 FFmpeg(Ubuntu 为例):

sudo apt update
sudo apt install ffmpeg
测试 RTSP 流转 HLS

运行以下命令将 RTSP 流转换为 HLS 文件:

ffmpeg -i "rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101" -f hls -hls_time 1 -hls_list_size 3 -hls_wrap 10 /path/to/output/playlist.m3u8
  • -hls_time 1:每片 HLS 文件时长为 1 秒。
  • -hls_list_size 3:HLS 列表最多包含 3 个文件。
  • -hls_wrap 10:最多生成 10 个切片文件。

生成的 HLS 文件可以通过 HTTP 服务器提供给前端。

2.2 Spring Boot 集成

利用 Spring Boot 创建一个后端服务:

引入依赖

pom.xml 中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
转发 HLS 文件

将 HLS 文件通过 Spring Boot 服务暴露:

import org.springframework.core.io.FileSystemResource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;

@RestController
@RequestMapping("/video")
public class VideoController {

    @GetMapping("/hls")
    public ResponseEntity<FileSystemResource> getHls() {
        File file = new File("/path/to/output/playlist.m3u8");
        return ResponseEntity.ok(new FileSystemResource(file));
    }
}

访问 http://<server-ip>:<port>/video/hls 可获取 HLS 播放列表。

3. 前端播放视频流

使用 Video.js 或其他播放器播放 HLS 流。

引入 Video.js

在前端页面中引入 Video.js:

<!DOCTYPE html>
<html>
<head>
    <link href="https://vjs.zencdn.net/7.20.3/video-js.css" rel="stylesheet">
</head>
<body>
    <video id="video" class="video-js vjs-default-skin" controls preload="auto" width="640" height="360">
        <source src="http://<server-ip>:<port>/video/hls" type="application/x-mpegURL">
    </video>

    <script src="https://vjs.zencdn.net/7.20.3/video.min.js"></script>
</body>
</html>

替换 http://<server-ip>:<port>/video/hls 为后端服务地址。

4. 优化与扩展

4.1 异步处理 FFmpeg

使用 Spring Boot 的异步任务或第三方工具(如 Docker)托管 FFmpeg 流媒体服务。

4.2 多路流支持

通过参数化配置管理多个摄像头:

cameras:
  - name: camera1
    rtsp-url: rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/101
  - name: camera2
    rtsp-url: rtsp://admin:12345@192.168.1.101:554/Streaming/Channels/102

在代码中动态调用不同摄像头的 RTSP 流地址。

4.3 WebRTC 支持

若需要更低延迟,可以考虑使用 WebRTC 方案,结合 WebRTC 服务端工具(如 GStreamer 或 Pion)实现流媒体转发。

5. 注意事项

  1. 性能问题:视频流解码和转码对 CPU 和内存要求较高,建议使用高性能服务器或 GPU 加速。
  2. 网络稳定性:确保摄像头网络畅通,避免掉线影响流播放。
  3. 安全性:妥善保护 RTSP 地址和后端接口,防止未经授权的访问。

这样,你可以轻松实现海康摄像头的视频流播放功能!

发布者:myrgd,转载请注明出处:https://www.object-c.cn/4475

Like (0)
Previous 2024年11月24日 下午12:00
Next 2024年11月24日 下午12:33

相关推荐

  • 微信小程序的 RequestTask.onChunkReceived 接口接收二进制数据流

    微信小程序的 RequestTask.onChunkReceived 接口允许接收分块的二进制数据流(如视频或音频流),但在小程序环境中,由于不支持 TextDecoder,处理这些数据时需要采用其他方法。 解析数据流的方案 模拟 TextDecoder 功能 如果需要将 ArrayBuffer 转换为字符串(如 UTF-8 编码),可以通过自定义方法模拟 …

    2024年11月26日
    00
  • 在 Go 语言中,对文件的基础操作介绍

    在 Go 语言中,文件操作是基础技能之一,主要通过 os、io 和 io/ioutil 等标准库完成。以下是对文件操作的全面介绍,帮助你在 Go 语言的“成神之路”上迈出关键一步! 1. 创建文件使用 os.Create 创建文件,如果文件已存在会被清空。示例代码 2. 打开文件使用 os.Open 打开文件(只读模式),使用 os.OpenFile 可以指…

    2024年12月2日
    00
  • 在 Apache Spark 中,任务的切分(Task Division)机制

    在 Apache Spark 中,任务的切分(Task Division)是 Spark 将应用程序逻辑划分为多个并行任务的核心机制。任务切分的主要原则是基于数据分区和操作算子。以下是任务切分的核心原则和关键影响因素: 1. Spark 任务切分的基本概念 2. 任务切分的原则 2.1 基于分区(Partition)的切分 2.2 基于依赖关系(Depend…

    2024年11月25日
    00
  • Python 的 json模块序列化数据从文件里读取出来或存入文件

    Python 的 json 模块用于处理 JSON 格式的数据,可以将 JSON 数据与 Python 数据结构之间相互转换。以下是具体用法,包括从文件读取 JSON 数据以及将数据写入文件: 1. 将 JSON 数据从文件中读取到 Python 数据结构 代码示例: 解析过程: 2. 将 Python 数据结构写入到文件中(序列化为 JSON) 代码示例:…

    2024年11月26日
    00
  • 在 .NET 8 框架中使用 Web API 项目并通过引用 SqlSugar ORM 来操作数据库

    在 .NET 8 框架中使用 Web API 项目并通过引用 SqlSugar ORM 来操作数据库,可以遵循以下步骤: 1. 准备工作确保已安装 .NET 8 SDK 和 SqlSugar NuGet 包。创建或打开现有的 Web Core API 项目。安装 SqlSugar NuGet 包: 2. 配置 SqlSugar在 Web API 项目中配置 …

    2024年11月27日
    00
  • 在使用 VS Code 和 Keil 协同开发 STM32 程序

    在使用 VS Code 和 Keil 协同开发 STM32 程序时,可以利用 Keil 强大的编译器 和 VS Code 的高效代码编辑功能,结合起来提高开发效率。以下是实现协同开发的详细步骤: 前置准备安装 Keil确保已安装 Keil MDK-ARM,并配置好开发环境。Keil 下载地址:Keil 官方网站安装 VS Code下载并安装最新版本的 VS …

    2024年12月1日
    00
  • uni-app 中的一个 API,uni.getLocation用于获取用户的地理位置信息

    uni.getLocation 是 uni-app 中的一个 API,用于获取用户的地理位置信息。它可以通过 GPS 或网络方式获取当前位置,并提供包括经纬度、速度、精度等信息。这个 API 在移动端(如安卓、iOS)和 H5 平台上均可使用。基本语法 参数说明type(可选):指定位置的坐标类型。支持 ‘wgs84’ 和 ‘gcj02’,默认值为 ‘wgs…

    2024年11月28日
    00
  • Web实时通信和 @microsoft/signalr 微软开发的一款基于 SignalR 的实时通信库

    Web实时通信和 @microsoft/signalr@microsoft/signalr 是微软开发的一款基于 SignalR 的实时通信库,专为 Web 应用提供强大的实时通信功能。SignalR 的主要特点包括支持双向通信、自动选择传输协议(WebSockets、Server-Sent Events 或 Long Polling)以及简化的服务器与客户…

    2024年12月1日
    00
  • 通过 PHP 读取微软邮箱(Outlook/Office 365 邮箱)

    通过 PHP 读取微软邮箱(Outlook/Office 365 邮箱)邮件,通常需要使用 Microsoft Graph API,因为微软逐步淘汰了基于用户名和密码的 IMAP/SMTP 方式。Microsoft Graph API 支持 OAuth2.0 认证,可以安全地访问和管理用户邮件。 以下是实现读取微软邮箱邮件的完整示例。 实现步骤 1. 准备工…

    2024年11月25日
    00
  • Unity 项目升级URP/HDRP渲染管线时如何解决材质丢失问题

    在 Unity 项目中升级到 URP(通用渲染管线) 或 HDRP(高清渲染管线) 后,材质丢失是一个常见问题。这通常是因为原来的材质或着色器不兼容新渲染管线,需要手动调整或重新配置。以下是详细的解决方法: 1. 理解渲染管线的变化 2. 自动转换材质(官方工具) Unity 提供了从 Built-in 渲染管线迁移到 URP 或 HDRP 的官方工具,可以…

    2024年11月25日
    00
  • 出现 ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES) 错误的解决方法

    出现 ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES) 错误,通常是由于 MySQL 用户身份验证失败,可能的原因包括密码错误、用户权限配置问题或身份验证插件不匹配等。以下是解决方法: 1. 检查密码是否正确确保输入的密码与 MySQL 中为…

    2024年11月26日
    00
  • Android Studio 国内镜像,加速下载和构建过程

    在国内使用 Android Studio 时,由于访问 Google 的官方资源(如 Gradle 和 SDK)速度较慢甚至无法访问,可以通过配置国内镜像源来加速下载和构建过程。以下是详细配置步骤: 1. 配置 Gradle 国内镜像 Gradle 是 Android Studio 构建项目的重要工具,其依赖库通常托管在 Google Maven 和 JCe…

    2024年11月25日
    00
  • 远程仓库 ,从GitHub拉取代码失败的解决办法

    从GitHub拉取代码失败通常由以下几种原因引起:网络问题、认证失败、远程仓库配置错误等。以下是常见的失败场景及解决办法。 1. 网络问题症状连接超时。报错如:fatal: unable to access ‘https://github.com/…’: Failed to connect to github.com port 443: Connecti…

    2024年11月28日
    00
  • 开源工具 Flowise 构建可视化的 AI 工作流

    Flowise 是一个开源的工具,用于构建可视化的 AI 工作流和对话代理。通过 Flowise,用户可以快速集成各种大语言模型(LLM)并与数据库交互。以下是详细的本地部署教程: 1. 前置条件 1.1 硬件和系统要求 1.2 软件要求 2. 本地部署步骤 2.1 克隆 Flowise 代码库 2.2 安装依赖 2.3 配置环境变量 2.4 启动服务 运行…

    2024年11月24日
    00
  • 在Spring 项目中使用 Spring AI 模块的教程

    Spring AI 是 Spring 项目中一个面向 AI 应用的模块,旨在通过集成开源框架、提供标准化的工具和便捷的开发体验,加速 AI 驱动应用程序的构建和部署。以下是 Spring AI 的一些常见功能和使用方法的详解。 1. 项目背景 Spring AI 主要用于: 2. 环境配置 前置条件 添加依赖 在 pom.xml 中添加以下依赖: 或者在 b…

    2024年11月24日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信