在 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 流并将其转为适配浏览器播放的格式,例如 HLS 或 WebRTC。
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. 注意事项
- 性能问题:视频流解码和转码对 CPU 和内存要求较高,建议使用高性能服务器或 GPU 加速。
- 网络稳定性:确保摄像头网络畅通,避免掉线影响流播放。
- 安全性:妥善保护 RTSP 地址和后端接口,防止未经授权的访问。
这样,你可以轻松实现海康摄像头的视频流播放功能!
发布者:myrgd,转载请注明出处:https://www.object-c.cn/4475