Skip to content

引擎 (Engines)

下载器是应用程序的核心。它们负责从源头下载视频流。该应用程序支持三种下载器:MesioFFMPEGStreamlink。每个下载器都有其独特的功能和局限性。

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. 引擎功能列表

功能MesioFFMPEGSTREAMLINK
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 引擎 页面。

Released under the MIT License.