# 通用视频流处理库 **Repository Path**: marblelog/video_stream_lib ## Basic Information - **Project Name**: 通用视频流处理库 - **Description**: 一个通用实现视频流硬件编解码处理的库,主要使用各硬件SDK、ffmpeg和opencv实现,是为了某些监控摄像头项目而做的封装。暂时代码以硬件种类作为分支分别管理,还没有作通用化处理,MASTER 分支为Nvidia 的硬解实现,使用自行编译FFMPEG+CUDA 的方式实现,使用libnpp 实现YUV转BGR 实现AVFrame转 cv::Mat 。RK3588 使用类似的方式。 - **Primary Language**: C++ - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: http://www.marblelog.com - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-24 - **Last Updated**: 2026-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 视频流处理库 (Video Stream Lib) ## 介绍 本项目是一个基于 **C++** 的高性能视频流处理库,支持RK3588、英伟达、海思3403-SS928、华为昇腾版本,暂时还未实现多版本的通用化整合,不同版本对应不同的分支。主要用于获取视频流、解码并输出帧图像。项目集成了 **FFmpeg** 进行编解码,**OpenCV** 进行图像处理,并提供了 **WebSocket** 服务器功能,便于将实时视频流推送至 Web 端展示。 该库专为监控摄像头项目设计,支持 RTSP/RTMP 等协议,具备低延迟解码和 Base64 编码输出等特性。 ## 功能特点 * **多协议支持**:支持 RTSP/RTMP 等主流视频流协议。 * **高效解码**:利用 FFmpeg 解码,支持 OpenCV 格式转换。 * **Web 推送**:内置 WebSocket 服务器,支持将视频帧以 MJPEG 格式实时推送给浏览器。 * **图像工具**:提供 `Mat` 转 `Base64` 编码,便于 JSON 传输或 Web 显示。 * **配置管理**:支持通过 INI 配置文件批量加载摄像头信息。 * **多线程架构**:编码与推流采用独立工作线程,提高并发处理能力。 ## 环境依赖 在编译本项目之前,请确保系统已安装以下依赖: * **CMake** (>= 3.10) * **FFmpeg** 开发库 (`libavcodec`, `libavformat`, `libavutil`, `libswscale`) * **OpenCV** 开发库 * **WebSocket++** (用于 WebSocket 服务器功能) ## 编译安装 1. **克隆仓库** ```bash git clone https://gitee.com/marblelog/video_stream_lib.git cd video_stream_lib ``` 2. **构建项目** ```bash mkdir build cd build cmake .. make -j$(nproc) ``` 编译成功后,会在 `build` 目录下生成动态链接库(如 `libvideo_stream_lib.so`)。 ## 使用说明 ### 1. 核心接口 项目提供了两个主要操作类: * `VideoStreamInterface`:用于视频流的获取、解码和帧处理。 * `WebsocketServerInterface`:用于 WebSocket 服务的建立和消息推送。 #### 视频流处理 (`video_stream_lib`) 通过工厂函数创建和销毁实例: ```cpp // 创建实例 VideoStreamInterface* vs = createVideoStreamInstance(); // 启动一路视频流 // 参数: 摄像头ID, 视频流URL int result = vs->start_video_stream("cam_01", "rtsp://example.com/stream"); // 获取当前帧 (cv::Mat 格式) cv::Mat frame = vs->getFrame(); // 将帧推送到 RTMP 服务器 vs->pushToStreamServer(frame); // 将帧编码为 Base64 (适用于 Web API) std::string base64_data = vs->Mat2Base64(frame, ".jpg"); // 销毁实例 destroyVideoStreamInstance(vs); ``` #### WebSocket 服务 (`websocket_server_lib`) 用于在后台线程启动服务并处理客户端连接: ```cpp // 获取 WebSocket 服务器单例 websocket_server_interface* ws = websocket_server_lib::get_websocket_server(); // 在指定端口启动服务 (异步运行) ws->run(8080); // 向特定摄像头 ID 的所有连接客户端发送图像 ws->send_mjpeg(frame, "cam_01"); ``` ### 2. 辅助工具 * **摄像头管理 (`camInfoHelper`)**:提供了全局的摄像头信息管理,支持通过 ID 或端口查找摄像头信息。 * **配置加载 (`load_settings`)**:提供了从 INI 文件加载摄像头配置列表的功能。 * **通用工具 (`util`)**:包含时间戳转换、文件目录操作、字符串分割等常用函数。 ## 项目结构 * `base64` / `base64.cpp`: 图像 Base64 编解码实现。 * `camInfoHelper`: 摄像头信息的全局缓存与查询管理。 * `config_test.ini`: 配置文件示例。 * `load_settings`: 负责解析配置文件。 * `util`: 通用工具函数集合。 * `video_stream_lib`: 核心库,包含解码、编码、推流逻辑。 * `websocket_server`: 基于 WebSocket++ 的服务器实现。 ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 开源协议 本项目遵循 MIT 开源协议。