module Sessions # Silenzia o riattiva il microfono della camera in onda. # Lo stream continua a inviare AAC silenzioso (YouTube/MediaMTX richiedono la traccia audio). class SetAudioMute def initialize(session, muted:) @session = session @muted = ActiveModel::Type::Boolean.new.cast(muted) end def call return @session if @session.audio_muted == @muted @session.update!(audio_muted: @muted) action = @muted ? "mute_audio" : "unmute_audio" event_type = @muted ? "audio_muted" : "audio_unmuted" log_event(event_type) SessionChannel.broadcast_message(@session, { type: "command", action: action, muted: @muted }) SessionChannel.broadcast_message(@session, { type: "stream_event", event: "audio_muted", muted: @muted }) @session end private def log_event(type) @session.stream_events.create!(event_type: type, occurred_at: Time.current, metadata: { muted: @muted }) end end end