# rtmp_recorder **Repository Path**: zhu_qiangqiang/rtmp_recorder ## Basic Information - **Project Name**: rtmp_recorder - **Description**: RTMP 视频流拉取 FLV封装后存储本地,支持多路(10路)流录制、FLV格式分段存储、存储空间管理(循环覆写)和详细的日志记录。 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-09-17 - **Last Updated**: 2025-09-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: Cpp, RTMP ## README #### 简介 完整的代码实现 提供了一个功能完善的 RTMP 视频流拉取与存储系统,支持多路(10路)流录制、FLV格式分段存储、存储空间管理和详细的日志记录。 文件名按照日期和开始时间命名: **文件命名**: 输出文件按照 `stream_X_YYYYMMDD_HHMMSS.h264` 格式命名,其中: - `X` 是流索引(0-9) - `YYYYMMDD` 是日期 - `HHMMSS` 是开始时间 #### 1.确保 third_party 目录中包含 FFmpeg 库和头文件: ```shell third_party/ └── ffmpeg/linux-x86_64 or ffmpeg/linux-aarch64 ├── include/ │ ├── libavcodec/ │ ├── libavformat/ │ ├── libavutil/ │ ├── libavdevice/ │ ├── libavfilter/ │ ├── libswresample/ │ └── libswscale/ └── lib/ ├── libavcodec.so (或.a) ├── libavformat.so (或.a) ├── libavutil.so (或.a) ├── libavdevice.so (或.a) ├── libavfilter.so (或.a) ├── libswresample.so (或.a) └── libswscale.so (或.a) ``` #### 2.使用构建脚本编译项目: 对于 x86_64 平台编译: ```shell chmod +x scripts/build-x86_64.sh ./scripts/build-x86_64.sh 或者 mkdir build-x86_64 && cd build-x86_64 cmake .. -DTARGET_ARCH=x86_64 -DCMAKE_BUILD_TYPE=Release make make install ``` 对于 aarch64 平台交叉编译: ```shell chmod +x scripts/build-aarch64.sh ./scripts/build-aarch64.sh 或者 mkdir build-aarch64 && cd build-aarch64 # 修改cmake/toolchain-aarch64.cmake中的TOOLCHAIN_PATH为你的实际工具链路径 cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain-aarch64.cmake -DCMAKE_BUILD_TYPE=Release make make install ``` #### 3.编辑配置文件: ```shell vi config/rtmp_recorder.conf ``` 配置文件字段说明: ```ini # RTMP Recorder Configuration # Generated on 20250910 ############################# 基本配置 ############################# # RTMP 流 URL 列表,逗号分隔。支持最多 10 路视频流 stream_urls = rtmp://example.com/live/stream1,rtmp://example.com/live/stream2,rtmp://example.com/live/stream3,rtmp://example.com/live/stream4,rtmp://example.com/live/stream5,rtmp://example.com/live/stream6,rtmp://example.com/live/stream7,rtmp://example.com/live/stream8,rtmp://example.com/live/stream9,rtmp://example.com/live/stream10 # 视频文件存储目录。程序会自动创建该目录(如果不存在) output_dir = ./recordings # 输出文件格式。当前仅支持 flv 格式 output_format = flv # 视频分段时长,单位: 分钟。系统会尽量按照这个时长分段存储 segment_duration = 10 # 最大存储空间限制,单位: 字节。当存储空间达到此限制时,系统会自动删除最早存储的视频文件 # 10G = 1024 * 1024 * 1024 * 10 max_storage_size = 10737418240 # 流超时时间,单位: 秒。如果在指定时间内没有收到数据包,系统会认为流已断开并尝试重新连接 stream_timeout = 30 # 最大重试次数。当流连接失败时,最多尝试多少次后放弃 max_retry_count = 5 # 重试延迟,单位: 秒。流运行过程中的数据读取失败或错误时,等待多长时间再次尝试 retry_delay = 10 ############################# 日志配置 ############################# # 日志输出级别,可选值: DEBUG, INFO, WARNING, ERROR, CRITICAL。级别越高,输出的日志信息越详细 log_level = DEBUG # 日志文件路径。如果为空,日志将只输出到控制台 log_file = rtmp_recorder.log ``` 修改 RTMP 流 URL、输出目录、日志级别等参数。 #### 4.运行程序: ```shell cd build/bin ./rtmp_recorder ```