mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-21 22:18:04 +02:00
Enregistrements : relancer jusqu'à la fin du match, code amont journalisé
Un match NBA a échoué après 30 refus du fournisseur en 13 min, alors qu'il restait 3 h 20 de diffusion. Le plafond MAX_FFMPEG_ATTEMPTS condamnait tout l'enregistrement sur un refus temporaire : on relance désormais tant que la fenêtre est ouverte, au rythme de ffmpeg_retry_delay (30 s au plus). - direct_proxy journalise le code HTTP du panneau : FFmpeg n'affiche que « 4XX », le code exact (ici 407) n'était visible nulle part. - direct_proxy libère les connexions de lecture orphelines du compte avant d'ouvrir le flux, comme turbo.ts et HLS. Un flux encore regardé n'est jamais coupé. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6368fd6ee2
commit
0f81df1c5e
3 files changed
+39
-37
No files matched your search
@@ -903,14 +903,24 @@ impl Streaming {
|
||||
redact_url(&target)
|
||||
);
|
||||
|
||||
// Compte à une connexion : un FFmpeg de lecture orphelin (spectateur
|
||||
// parti, session pas encore expirée) garde le slot et le panneau
|
||||
// refuse l'enregistrement. On coupe les orphelins comme les autres
|
||||
// routes ; un flux encore regardé n'est jamais coupé.
|
||||
self.claim_upstream(&playlist, &format!("direct_{stream_id}"))
|
||||
.await;
|
||||
|
||||
// Première connexion hors du générateur : elle seule décide du code
|
||||
// de réponse.
|
||||
let client = state.http.clone();
|
||||
let Some(first) = open_live_upstream(&client, &target).await else {
|
||||
println!("[Live Proxy] {stream_id} : fournisseur injoignable");
|
||||
return http::text(502, "Upstream connection failed");
|
||||
};
|
||||
let status = first.status().as_u16();
|
||||
if status != 200 {
|
||||
// FFmpeg ne journalise que « 4XX » : le code exact n'est qu'ici.
|
||||
println!("[Live Proxy] {stream_id} : refusé par le fournisseur (HTTP {status})");
|
||||
return http::text(status, "Upstream refused");
|
||||
}
|
||||
|
||||
@@ -954,8 +964,9 @@ impl Streaming {
|
||||
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||
match open_live_upstream(&client, &target).await {
|
||||
Some(r) if r.status().as_u16() == 200 => next = Some(r),
|
||||
_ => println!(
|
||||
"[Live Proxy] {id} : reconnexion {attempt}/{LIVE_PROXY_MAX_RETRIES} échouée"
|
||||
other => println!(
|
||||
"[Live Proxy] {id} : reconnexion {attempt}/{LIVE_PROXY_MAX_RETRIES} échouée ({})",
|
||||
other.map_or("injoignable".to_string(), |r| format!("HTTP {}", r.status().as_u16()))
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user