跳转到正文

录制引擎内部实现 ​

面向修改子进程管理和录制事件的贡献者。引擎选择和配置见录制引擎。

对于通过源码兼容性校验的 Streamlink 8.5.0 安装,停止录制会通过专用的认证控制连接 请求停止继续采集。仍使用配置的 CLI、平台插件、认证信息、代理、画质和额外参数。 后端先执行有时间上限的插件加载能力探测,再加入内置控制组件;同一可执行文件的 并发探测会合并,结果会缓存。每次录制仍会重新验证控制组件及实际的读取器结构。

读取器配置协作排空行为
分段 HLS/DASH,包括过滤和嵌套复用器停止新的采集,完成已接纳的分片和初始化数据,再将读取缓冲及所有复用器输入读到 EOF。
CPython 3.11/3.14、requests 2.34.2、urllib3 2.7.0 的 HTTP排空 HTTP 预读、TLS 已解密待取数据及 identity/gzip/deflate 解码缓冲;不包含不透明传输适配器或其他解码器。
websocket-client 1.9.2 的 TwitCasting websocket先完成已接纳的消息接收及交付,再停止接收下一条消息。
文件路径和内存 BytesIO 输入保留当前无缓冲文件读取,或完整排空已采集到内存的字节;不包含任意带预读缓冲的文件对象。

控制组件校验上游源码兼容性,而非仅信任版本文本。不支持的旧版、便携版或自定义 可执行文件仍可按原方式录制。不支持的读取器结构也保留原 CLI 行为,但停止时会报告 Streamlink cooperative drain incomplete,不会声称已验证缓冲排空。不会通过禁用 录制引擎功能来获得兼容性。

停止采集时,标准输出转发及标准错误处理会继续运行。成功的协作停止必须确认源输出 实际到达 EOF、管道转发完整且外部 FFmpeg 成功收尾;仅收到控制确认并不足够。 隐藏的 Windows 进程使用控制连接,不依赖控制台信号。内部 FFmpeg 复用进程及版本 验证进程保持隐藏;Windows 复用管道在断开前会刷新已接纳的字节。

这些进程、转发和重封装阶段使用本次录制剩余的停止期限,并为 FFmpeg 收尾预留时间。 后续应用关闭请求可缩短已经在停止的录制期限。必要的最终事件交付仍由原任务持有, 直到消费者接收:直接集成引擎的调用方必须持续读取事件通道;停滞消费者由工作进程 整体强制退出上限约束。超过期限仍会强制终止受控进程树,并可能截断尾部。保证范围 是已采集的数据和已接纳的工作,不包括尚未发现的未来分片、上游损坏或超出期限的工作。

两个子进程树继续受到约束,包括直接父进程退出后留下的后代。在 macOS 上,主进程 退出竞争仅使用剩余的进程树清理预算,不增加新的宽限期。该约束假定后代不会主动 逃离进程组或 Windows Job Object。

录制文件名与状态跟踪 ​

录制模板会展开配置中的日期标记,而主播名称和标题中的百分号保持字面含义。 例如,标题 Top 5%d 仍为 Top 5%d,不会替换成当月日期。启动时的输出根探测 使用相同的元数据字面值规则。

FFmpeg 录制与 Streamlink 重封装需要 info 级别日志和统计信息来跟踪分片及进度。 后端在最后提供 -loglevel info -stats 参数,因此自定义静默日志参数和 -nostats 不会关闭这些必要信息。

基于 MIT 许可证发布。