Risolve timeout creazione sessione YouTube lato app.
La setup broadcast YouTube (~23s) passa in background job; l'API risponde subito. Aumentato anche il timeout Dio mobile per createSession YouTube. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
52
backend/app/services/youtube/setup_broadcast.rb
Normal file
52
backend/app/services/youtube/setup_broadcast.rb
Normal file
@@ -0,0 +1,52 @@
|
||||
module Youtube
|
||||
# Crea broadcast/stream YouTube e avvia relay (operazione lenta, ~20s).
|
||||
class SetupBroadcast
|
||||
class Error < StandardError; end
|
||||
|
||||
def self.call(session, youtube_channel: nil)
|
||||
new(session, youtube_channel: youtube_channel).call
|
||||
end
|
||||
|
||||
def initialize(session, youtube_channel: nil)
|
||||
@session = session
|
||||
@youtube_channel = youtube_channel
|
||||
end
|
||||
|
||||
def call
|
||||
@session.reload
|
||||
return @session if @session.terminal?
|
||||
return @session if @session.platform != "youtube"
|
||||
return @session if @session.youtube_broadcast_id.present?
|
||||
|
||||
yt = BroadcastService.new(@session.match.team, channel: @youtube_channel)
|
||||
title = "#{@session.match.team.name} vs #{@session.match.opponent_name}"
|
||||
broadcast = yt.create_broadcast!(
|
||||
title: title,
|
||||
privacy_status: @session.privacy_status,
|
||||
scheduled_at: @session.match.scheduled_at
|
||||
)
|
||||
|
||||
@session.update!(
|
||||
youtube_broadcast_id: broadcast[:broadcast_id],
|
||||
youtube_stream_id: broadcast[:stream_id],
|
||||
stream_key: broadcast[:stream_key],
|
||||
rtmp_url: broadcast[:rtmp_url]
|
||||
)
|
||||
|
||||
Streams::YoutubeRelay.start(@session)
|
||||
@session.stream_events.create!(
|
||||
event_type: "youtube_ready",
|
||||
metadata: { broadcast_id: broadcast[:broadcast_id] },
|
||||
occurred_at: Time.current
|
||||
)
|
||||
@session
|
||||
rescue BroadcastService::Error => e
|
||||
@session.stream_events.create!(
|
||||
event_type: "error",
|
||||
metadata: { source: "youtube_setup", message: e.message },
|
||||
occurred_at: Time.current
|
||||
)
|
||||
raise Error, e.message
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user