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:
@@ -47,14 +47,16 @@ module Youtube
|
||||
rtmp_url: stream_result.cdn.ingestion_info.ingestion_address
|
||||
}
|
||||
rescue Google::Apis::Error => e
|
||||
ApiThrottle.mark_rate_limited! if ApiThrottle.rate_limit_error?(e.message)
|
||||
raise Error, friendly_api_error(e)
|
||||
end
|
||||
|
||||
# Porta in onda appena c’è ingest su YouTube (non attendere scheduledStartTime).
|
||||
# @return [Symbol] :live, :waiting_ingest, :transitioned, :skipped
|
||||
# @return [Symbol] :live, :waiting_ingest, :transitioned, :skipped, :rate_limited
|
||||
def activate_broadcast!(broadcast_id)
|
||||
return :skipped if broadcast_id.blank?
|
||||
return :skipped if @credential.blank? || missing_oauth_config?
|
||||
return :rate_limited if ApiThrottle.rate_limited?
|
||||
|
||||
client = authorized_client
|
||||
item = client.list_live_broadcasts("status,contentDetails", id: broadcast_id).items&.first
|
||||
@@ -68,7 +70,11 @@ module Youtube
|
||||
if stream_id.present?
|
||||
stream = client.list_live_streams("status", id: stream_id).items&.first
|
||||
stream_status = stream&.status&.stream_status.to_s
|
||||
Rails.logger.info("[Youtube::BroadcastService] activate #{broadcast_id}: lifecycle=#{status} stream_status=#{stream_status.presence || "(blank)"}")
|
||||
return :waiting_ingest unless stream_status == "active"
|
||||
else
|
||||
Rails.logger.info("[Youtube::BroadcastService] activate #{broadcast_id}: lifecycle=#{status} stream_status=(unbound)")
|
||||
return :waiting_ingest
|
||||
end
|
||||
|
||||
if %w[ready created].include?(status)
|
||||
@@ -82,6 +88,11 @@ module Youtube
|
||||
|
||||
:skipped
|
||||
rescue Google::Apis::Error => e
|
||||
if ApiThrottle.rate_limit_error?(e.message)
|
||||
ApiThrottle.mark_rate_limited!
|
||||
Rails.logger.warn("[Youtube::BroadcastService] activate rate limited #{broadcast_id}")
|
||||
return :rate_limited
|
||||
end
|
||||
Rails.logger.warn("[Youtube::BroadcastService] activate #{broadcast_id}: #{e.message}")
|
||||
:skipped
|
||||
end
|
||||
@@ -133,6 +144,8 @@ module Youtube
|
||||
return "Orario programmazione YouTube non valido. Riprova: la diretta partirà appena invii il segnale RTMP."
|
||||
end
|
||||
|
||||
return "YouTube temporaneamente occupato. Riprova tra 1–2 minuti." if ApiThrottle.rate_limit_error?(msg)
|
||||
|
||||
msg
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user