引擎 (Engines)
下载器是应用程序的核心。它们负责从源头下载视频流。该应用程序支持三种下载器:Mesio、FFMPEG 和 Streamlink。每个下载器都有其独特的功能和局限性。
TIP
对于 Mesio 用户,我们 强烈建议 启用 FLV 一致性修复 和 HLS 一致性修复。这两条流水线会修正或隔离时间戳与流结构变化,降低一次异常转换导致后续录制无法解码的概率。源站从未交付的媒体数据无法恢复。
FFMPEG 下载器是默认下载器,也是最稳定可靠的选择。它使用 C 语言编写,能够下载 FLV 和 HLS 流。它对各种流媒体场景具有极佳的兼容性,包括支持 FLV/RTMP 容器中的非标准 HEVC,通常也只需较低的 CPU 与内存开销。但是,它不支持 HLS 下载的多线程。
NOTE
我们 Docker 镜像中提供的 FFMPEG 版本是来自 yt-dlp/FFmpeg-Builds 的专用构建版本。该版本针对流媒体进行了优化,包含(或已合并入上游)了许多确保与 yt-dlp 顺畅集成的关键补丁,例如修复 AAC HLS 流截断问题、支持 Windows 长路径以及解码 FLV 容器中的非标准 HEVC。
1. 引擎功能列表
| 功能 | Mesio | FFMPEG | STREAMLINK |
|---|---|---|---|
| FLV 下载 | ✅ | ✅ | ❌ |
| HLS 下载 | ✅ (多线程) | ✅ | ✅ (多线程) |
| 录制时长统计 | ✅ (不支持原始数据模式) | ✅ | ✅ |
| 下载码率统计 | ✅ | ✅ (不支持 -f segmentation) | ✅ (不支持 -f segmentation) |
| 按大小分段 | ✅ (不支持原始数据模式) | ✅ (不支持 -f segmentation) | ✅ |
| 按时长分段 | ✅ (不支持原始数据模式) | ✅ | ✅ |
| 下载格式 | FLV, M3U8, TS, M4S | 支持其他格式 | 支持其他格式 |
| FLV 一致性修复 | ✅ (推荐) | ❌ | ❌ |
| HLS 一致性修复 | ✅ (推荐) | ❌ | ❌ |
| CPU 使用率 | 最低 | 低 | 低 |
| 内存使用率 | 最低 | 低 | 中 |
2. FLV 一致性修复
启用后,FLV 数据会在进入写入器前通过一条有序修复链。该链保留媒体载荷,主要修复容器层结构:
| 问题 | 流水线行为 |
|---|---|
| 缺少 FLV 文件头 | 在首个标签前插入有效文件头 |
| 视频或音频格式变化 | 开始写入新文件,并补充播放所需的文件头 |
| 视频数据乱序 | 在保持内存有界的前提下重排相邻标签 |
| 时间戳跳变或回退 | 调整时间戳以保持播放连续性 |
| 重复媒体标签或序列头 | 启用对应选项时过滤 |
| 达到文件大小或时长限制 | 视频在关键帧边界轮换,仅音频输出则在下一个标签轮换 |
| FLV 统计与快速定位索引 | 在文件关闭前更新元数据 |
元数据更新不会重写已经完成的媒体数据。如果可用元数据空间不足,会缩短可选的快速定位索引。带过滤或加密标记的脚本载荷保持不变。
3. 原始数据模式 (Raw Data Mode)
原始数据模式是 Mesio 引擎支持的一种高性能下载模式。在该模式下,引擎会将从网络接收到的流数据直接写入磁盘,而不对内部媒体包(头信息、帧、元数据)进行解析或处理。
主要特点:
- 极致性能:由于不进行包解析或重采样(Re-muxing),CPU 和内存占用被降至绝对最低。
- 零开销:非常适合高带宽流或资源受限的环境(如入门级 NAS 或 VPS)。仅在网络稳定且 CDN / 流来源没有数据波动(如媒体头部信息变更)时推荐使用。
局限性:
由于不检查包结构,启用原始数据模式时,以下高级功能将无法使用:
- 数据统计:无法实时计算录制时长和下载码率统计。
- 自动分段:引擎无法检测帧边沿或时长,因此无法按大小或时长进行精确分段。
- 修复功能:无法应用 FLV 一致性修复或 HLS 一致性修复,因为这些功能需要包级别的操作。
4. HLS 一致性修复 (Mesio 独占)
Mesio 的 HLS 下载反应堆与 HLS 修复流水线职责不同:
- 下载引擎负责对已抓取分段排序,先写入 fMP4 媒体所需的初始化数据,应用已配置的缺口策略,并保留播放列表不连续所形成的输出边界。
- 一致性修复会在已交付分段出现不兼容的编解码器、分辨率、节目布局或 fMP4 初始化数据变化时开始写入新文件,并执行文件大小与时长限制。
该流水线不会改写 TS 或 fMP4 载荷内的时间戳,不能重建缺失媒体,也不会转码。被跳过的分段仍然是可观测的缺口;流水线会保持已交付输出的顺序,并在检测到需要新文件的格式变化时轮换输出。
5. Mesio 架构
Mesio 是进程内的 Rust 引擎,采用基于反应堆的 HLS 下载器,并由 HLS 与 FLV 共用统一的下载会话模型。架构图与内部工作原理详解请参阅专门的 Mesio 引擎 页面。