Stabilizza live YouTube/RTMP e fix crash rotazione mobile.
Pipeline YouTube con relay, overlay e publisher sync lato backend; fix GL pauseGlDuringRotation su Android per evitare crash in rotazione durante lo streaming Flutter. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -38,8 +38,6 @@ module Sessions
|
||||
session.create_score_state!
|
||||
mtx = Mediamtx::Client.new
|
||||
mtx.create_path(session)
|
||||
mtx.create_overlay_path(session)
|
||||
start_overlay_relay(session)
|
||||
log_event(session, "pairing", { created: true, platform: session.platform })
|
||||
end
|
||||
|
||||
@@ -66,12 +64,6 @@ module Sessions
|
||||
Youtube::SetupBroadcast.call(session, youtube_channel: youtube_channel)
|
||||
end
|
||||
|
||||
def start_overlay_relay(session)
|
||||
Streams::OverlayRelay.start(session)
|
||||
rescue Streams::OverlayRelay::Error => e
|
||||
Rails.logger.warn("[Sessions::Create] Overlay relay: #{e.message}")
|
||||
end
|
||||
|
||||
def log_event(session, type, metadata)
|
||||
session.stream_events.create!(event_type: type, metadata: metadata, occurred_at: Time.current)
|
||||
end
|
||||
|
||||
@@ -7,11 +7,12 @@ module Sessions
|
||||
def call
|
||||
cancel_timeout_job
|
||||
@session.pause! if @session.may_pause?
|
||||
# Slate già su path (create_path + alwaysAvailable): stop RTMP basta, senza patch API.
|
||||
Mediamtx::Client.new.set_always_available(@session, enabled: true)
|
||||
# Slate su path per HLS in pausa; RTMP telefono si ferma via comando app.
|
||||
log_event("paused")
|
||||
SessionChannel.broadcast_message(@session, { type: "command", action: "pause_stream" })
|
||||
SessionChannel.broadcast_message(@session, { type: "stream_event", event: "paused" })
|
||||
Streams::Overlay::Refresh.call(@session)
|
||||
Youtube::LivePipeline.schedule!(@session, force: true) if @session.platform == "youtube"
|
||||
@session
|
||||
end
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ module Sessions
|
||||
log_event("resumed")
|
||||
SessionChannel.broadcast_message(@session, { type: "command", action: "resume_stream" })
|
||||
SessionChannel.broadcast_message(@session, { type: "stream_event", event: "resumed" })
|
||||
Streams::Overlay::Refresh.call(@session)
|
||||
Youtube::LivePipeline.schedule!(@session, force: true) if @session.platform == "youtube"
|
||||
@session
|
||||
end
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ module Sessions
|
||||
@session.match.team.entitlements.assert_concurrent_stream!(excluding_session: @session)
|
||||
@session.begin_connect! if @session.may_begin_connect?
|
||||
@session.update!(status: "connecting") unless @session.connecting?
|
||||
Youtube::LivePipeline.schedule!(@session, force: true) if @session.platform == "youtube"
|
||||
broadcast_status("connecting")
|
||||
@session
|
||||
end
|
||||
|
||||
@@ -6,7 +6,6 @@ module Sessions
|
||||
|
||||
def call
|
||||
cancel_timeout_job
|
||||
Streams::OverlayRelay.stop(@session)
|
||||
Streams::YoutubeRelay.stop(@session)
|
||||
Sessions::RegiaAccess.revoke!(@session)
|
||||
@session.end_stream!
|
||||
|
||||
Reference in New Issue
Block a user