1. 项目概述:stream-rec 是什么?
stream-rec 是一款开源的跨平台直播流录制工具,专为解决多平台直播内容存档需求而设计。不同于传统录屏软件,它直接从直播平台拉取原始流媒体数据,实现无损录制。我在实际使用中发现,对于需要同时监控多个直播间的主播、赛事分析人员或内容创作者而言,这个工具能节省90%以上的硬件资源占用。
核心优势在于三点:首先支持B站、斗鱼、虎牙等主流平台的无缝切换;其次采用模块化设计,可通过配置文件自由组合录制策略;最重要的是完全本地化运行,所有数据不出本地设备。最近三个月GitHub星标增长超过300%,已经成为开源社区直播工具类项目的TOP3。
2. 核心功能解析
2.1 多平台兼容性实现原理
工具底层基于FFmpeg开发,但做了关键性改进:每个平台适配器(如bilibili.py)都实现了统一的流地址解析接口。当输入直播间URL时,会先通过平台API获取真实m3u8地址,再交给FFmpeg处理。实测在i5-1135G7设备上可同时录制8个1080p直播流而不卡顿。
支持的平台包括:
- 国内:B站(含港澳台)、斗鱼、虎牙、快手、抖音
- 国际:Twitch、YouTube Live(需配置代理)
- 音频专用:网易云音乐电台、QQ音乐直播
2.2 录制策略配置详解
核心配置文件config.yaml包含这些关键参数:
yaml复制recording:
max_duration: 36000 # 单次最长录制秒数
segment_time: 1800 # 分段存储间隔
quality: "best" # 画质选项
monitor:
check_interval: 60 # 直播状态检测频率
特别实用的功能是智能重连机制:当网络波动导致中断时,会自动尝试续传录制。我在测试中模拟断网5分钟后恢复,工具成功接续了直播内容,且时间轴连续无跳跃。
3. 完整安装与配置指南
3.1 环境准备(Windows/macOS/Linux)
先确保安装:
- Python 3.8+(建议用Miniconda管理)
- FFmpeg 4.3+(需加入系统PATH)
- Git(用于更新代码)
通过命令行一键安装依赖:
bash复制git clone https://github.com/stream-rec/stream-rec.git
cd stream-rec
pip install -r requirements.txt
3.2 首次运行配置
新建config.yaml并配置基础参数:
yaml复制storage:
output_dir: "D:/LiveRecords" # 存储路径
naming_rule: "{platform}/{date}/{name}_{time}.mp4"
启动监控模式:
bash复制python main.py monitor --config config.yaml
4. 高级使用技巧
4.1 批量录制管理
通过list.txt文件管理多个直播间:
code复制https://live.bilibili.com/12345
https://www.douyu.com/54321
使用命令启动批量录制:
bash复制python main.py batch -f list.txt
4.2 自动转码与压缩
在配置中添加post_process节实现录制后处理:
yaml复制post_process:
convert_to: "h264" # 转码格式
crf: 28 # 质量参数
remove_origin: false # 是否删除原文件
5. 常见问题解决方案
5.1 录制文件损坏排查
典型症状:视频无法播放或时长异常
- 检查FFmpeg版本(必须≥4.3)
- 验证存储空间是否充足
- 尝试添加
-strict unofficial参数
5.2 平台兼容性问题处理
当遇到新平台时:
- 使用
python detector.py [URL]测试支持情况 - 查看issues中是否有临时解决方案
- 手动提取m3u8地址后用FFmpeg直接录制
6. 性能优化实践
在长期使用中总结出这些经验:
- 对Intel核显设备,添加
-hwaccel qsv参数可降低30%CPU占用 - 网络不稳定时,设置
-timeout 10 -reconnect 1参数 - 需要长期运行时,建议配合systemd或supervisor做进程守护
录制4个1080p直播流时的资源占用对比:
| 参数配置 | CPU占用 | 内存占用 | 磁盘IO |
|---|---|---|---|
| 默认参数 | 75% | 1.2GB | 30MB/s |
| 优化参数 | 52% | 800MB | 25MB/s |
7. 二次开发建议
项目采用插件化架构,新增平台支持只需:
- 在platforms/下新建py文件
- 实现get_stream_url()方法
- 在__init__.py中注册平台类
典型代码结构:
python复制class NewPlatform(PlatformBase):
def get_stream_url(self):
# 实现提取真实流地址的逻辑
return m3u8_url
最近有开发者基于这个框架添加了AfreecaTV的支持,代码已被合并到主分支。这种开放生态正是开源项目的魅力所在。
