module Mediamtx # MediaMTX in produzione รจ distroless: runOnReady con wget non funziona. # Sincronizziamo lo stato Rails leggendo l'API paths (poll da /live/:id/status.json). class PublisherSync def initialize(session) @session = session end def call return @session if @session.terminal? info = Mediamtx::Client.new.list_paths.find { |i| i["name"] == @session.mediamtx_path_name } publisher_online = info && info["online"] if publisher_online if @session.paused? # RTMP ancora connesso in pausa: non forzare live/reconnect. elsif @session.may_go_live? @session.go_live! Streams::Overlay::Refresh.call(@session.reload) elsif @session.reconnecting? && @session.may_reconnect? @session.reconnect! cancel_timeout Streams::Overlay::Refresh.call(@session.reload) end elsif !@session.paused? && @session.live? && @session.may_lose_connection? @session.lose_connection! schedule_timeout unless @session.paused? end @session.reload end private def cancel_timeout return if @session.timeout_job_id.blank? Sidekiq::ScheduledSet.new.find_job(@session.timeout_job_id)&.delete @session.update!(timeout_job_id: nil) end def schedule_timeout job = DisconnectionTimeoutJob.perform_in( MatchLiveTv.reconnect_timeout_seconds.seconds, @session.id ) @session.update!(timeout_job_id: job) end end end