module MediamtxPlayback extend ActiveSupport::Concern private def mediamtx_paths_index mediamtx_paths_index_for_url(MatchLiveTv.mediamtx_api_url) end def mediamtx_paths_index_for(session) mediamtx_paths_index_for_url(session.mediamtx_api_base_url) end def mediamtx_paths_index_for_url(api_url) @mediamtx_paths_by_origin ||= {} @mediamtx_paths_by_origin[api_url] ||= Mediamtx::Client.new(base_url: api_url).list_paths.index_by { |i| i["name"] } end def mediamtx_path_info(session, path_name: mediamtx_playback_path_name(session)) mediamtx_paths_index_for(session)[path_name] end def mediamtx_playback_path_name(session) session.effective_hls_path_name end # Player HLS: path grezzo MediaMTX (live/match_{uuid}). def mediamtx_stream_playable?(session) return false if session.terminal? mediamtx_path_has_output?(session) end def mediamtx_path_has_output?(session) info = mediamtx_path_info(session) info && (info["ready"] || info["available"] || info["online"]) end def mediamtx_publisher_online?(session) info = mediamtx_paths_index_for(session)[session.mediamtx_path_name] info && info["online"] end end