YouTube come destinazione pubblica, non Match Live TV.
Non propone più il link MLTV per sessioni YouTube; la pagina /live reindirizza a YouTube; il relay verso YouTube si riavvia al connect. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -146,10 +146,11 @@ module Api
|
||||
platform: session.platform,
|
||||
rtmp_ingest_url: session.rtmp_ingest_url,
|
||||
hls_playback_url: session.hls_playback_url,
|
||||
watch_page_url: session.watch_page_url,
|
||||
watch_page_url: session.matchlivetv_platform? ? session.watch_page_url : nil,
|
||||
share_url: session.share_url,
|
||||
youtube_watch_url: session.youtube_watch_url,
|
||||
youtube_broadcast_id: session.youtube_broadcast_id,
|
||||
youtube_ready: session.youtube_ready?,
|
||||
privacy_status: session.privacy_status,
|
||||
quality_preset: session.quality_preset,
|
||||
target_bitrate: session.target_bitrate,
|
||||
|
||||
@@ -14,6 +14,7 @@ module Public
|
||||
sessions = StreamSession
|
||||
.broadcasting
|
||||
.publicly_listed
|
||||
.where(platform: "matchlivetv")
|
||||
.includes(:score_state, match: { team: :club })
|
||||
sessions = sessions.joins(:match).where(matches: { team_id: team_ids }) if team_ids.present?
|
||||
|
||||
|
||||
@@ -119,11 +119,13 @@ class StreamSession < ApplicationRecord
|
||||
end
|
||||
|
||||
def share_url
|
||||
if platform == "youtube"
|
||||
youtube_watch_url.presence || watch_page_url
|
||||
else
|
||||
watch_page_url
|
||||
end
|
||||
return youtube_watch_url if platform == "youtube"
|
||||
|
||||
watch_page_url
|
||||
end
|
||||
|
||||
def youtube_ready?
|
||||
platform == "youtube" && youtube_watch_url.present?
|
||||
end
|
||||
|
||||
def link_only?
|
||||
|
||||
@@ -52,6 +52,19 @@ module Streams
|
||||
pid.present? && process_alive?(pid)
|
||||
end
|
||||
|
||||
# Riavvia il relay se è morto (es. avviato prima del segnale su _air).
|
||||
def ensure_publishing!(session)
|
||||
return unless session.platform == "youtube"
|
||||
return if session.terminal?
|
||||
return if session.stream_key.blank?
|
||||
|
||||
return if running?(session.id)
|
||||
|
||||
start(session)
|
||||
rescue Error => e
|
||||
Rails.logger.warn("[YoutubeRelay] ensure_publishing session=#{session.id}: #{e.message}")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def mediamtx_intake_url(session)
|
||||
|
||||
@@ -26,6 +26,7 @@ module Webhooks
|
||||
return if session.paused?
|
||||
|
||||
Streams::OverlayRelay.ensure_publishing!(session)
|
||||
Streams::YoutubeRelay.ensure_publishing!(session) if session.platform == "youtube"
|
||||
|
||||
return if session.live? && session.stream_events.where(event_type: "connected").exists?
|
||||
|
||||
|
||||
@@ -39,6 +39,15 @@ module Youtube
|
||||
metadata: { broadcast_id: broadcast[:broadcast_id] },
|
||||
occurred_at: Time.current
|
||||
)
|
||||
SessionChannel.broadcast_message(
|
||||
@session,
|
||||
{
|
||||
type: "youtube_ready",
|
||||
youtube_watch_url: @session.youtube_watch_url,
|
||||
share_url: @session.share_url,
|
||||
youtube_broadcast_id: @session.youtube_broadcast_id
|
||||
}
|
||||
)
|
||||
@session
|
||||
rescue BroadcastService::Error => e
|
||||
@session.stream_events.create!(
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<% content_for :robots, "noindex, follow" %>
|
||||
|
||||
<% content_for :head do %>
|
||||
<% unless @stream_closed %>
|
||||
<% unless @stream_closed || @session.platform == "youtube" %>
|
||||
<script src="https://cdn.jsdelivr.net/npm/hls.js@1.5.7"></script>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -25,6 +25,19 @@
|
||||
<p class="stream-ended-hint">Il punteggio finale resta visibile sopra.</p>
|
||||
<%= link_to "Tutte le dirette", public_live_index_path, class: "btn btn-secondary stream-ended-btn" %>
|
||||
</div>
|
||||
<% elsif @session.platform == "youtube" %>
|
||||
<div class="stream-ended youtube-live-cta" role="status" aria-live="polite">
|
||||
<div class="stream-ended-icon" aria-hidden="true">▶</div>
|
||||
<h2>Diretta su YouTube</h2>
|
||||
<% if @session.youtube_watch_url.present? %>
|
||||
<p>Questa partita è trasmessa sul canale YouTube Match Live TV, non sul player del sito.</p>
|
||||
<%= link_to "Guarda su YouTube", @session.youtube_watch_url, class: "btn stream-ended-btn", target: "_blank", rel: "noopener" %>
|
||||
<% else %>
|
||||
<p>Stiamo preparando la diretta sul canale YouTube. Aggiorna tra qualche secondo.</p>
|
||||
<meta http-equiv="refresh" content="8">
|
||||
<% end %>
|
||||
<p class="stream-ended-hint">Condividi solo il link YouTube con tifosi e società.</p>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="live-player-wrap">
|
||||
<video id="player" controls playsinline muted autoplay></video>
|
||||
|
||||
Reference in New Issue
Block a user