Commit Graph
1 Commits
Author SHA1 Message Date
Divarion_D ac2ad9fd6c feat(streams): source drivers — module-owned live sources with their own producer
A module declares SourceDriverInterface classes in module.json
("source_drivers", optional "start_timeout") and claims URL schemes of its
own; core runs the driver's engine in ffmpeg's place for those sources.

- SourceDriverRegistry: scheme -> driver, loaded via ModuleLoader::loadAll()
  (no bootAll, so the streaming entry point works), core schemes reserved,
  a scheme claimed by two modules goes to neither, unknown schemes refused.
- StreamProcess: per-source choice in the supervised spec and the PHP
  monitor path; ffmpeg-only settings (transcode, maps, RTMP, delay…) refuse
  the driver; argv escaped by core, must name the playlist; no fallback_cmd
  or probe_cmd; the driver's start_timeout extends the start wait.
- ProcessManager recognises a driver engine by binary + playlist, so
  monitor, stop and cron treat it as the stream's producer.
- MonitorCommand priority/force checks go through sourceAnswers()
  (driver's available() or ffprobe).
- Offset the added branches in startStream/buildSupervisorSpec/producerKind
  with behaviour-preserving simplifications (CRAP ratchet).
2026-09-27 21:45:44 +03:00