简体中文
录制引擎内部实现
面向修改子进程管理和录制事件的贡献者。引擎选择和配置见录制引擎。
停止 Streamlink 录制
对于通过源码兼容性校验的 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 不会关闭这些必要信息。