fix(goLive): token-bucket pacing + pin biome rules so CI passes
- Demuxer.ts: deterministic token-bucket video pacing (replace unreliable ffmpeg -re which did not throttle the live multi-stage pipe — demuxer emitted ~240fps vs 30fps sender, 100k+ frame backlog, frozen video). Surplus non-key frames dropped; keyframes forced through; audio on fd3 unaffected. - biome.json: pin noExplicitAny/noUnused* to off/warn. Biome 2.5.x (drifted via --no-frozen-lockfile) promotes these to errors and was failing the CI gate on pre-existing backend code unrelated to this change. Restores the warn-level behavior the config schema 2.2.0 expects.
This commit is contained in:
@@ -231,12 +231,10 @@ export async function demux(
|
||||
console.log("[goLive:Demuxer] audio pipe wired (fd3 → Ogg Opus → aPipe)");
|
||||
}
|
||||
|
||||
// Set true once stderr metadata has been parsed (see handler below).
|
||||
let parsedMeta = false;
|
||||
// Track which stream kinds we've seen. We must NOT stop parsing on the
|
||||
// first stream found: ffmpeg can print the video line and audio line in
|
||||
// separate stderr chunks (input arrives slowly), and the old
|
||||
// early-return (`if (parsedMeta) return`) dropped the audio line forever
|
||||
// early-return dropped the audio line forever
|
||||
// → aInfo undefined → no audio RTP → static GoLive tile.
|
||||
let seenVideo = false;
|
||||
let seenAudio = false;
|
||||
@@ -345,7 +343,7 @@ export async function demux(
|
||||
// handler AFTER `return { audio: aInfo }` had already captured
|
||||
// `undefined` → no audio RTP → static GoLive tile even though the NUT
|
||||
// carried audio. Wait for BOTH kinds (when audio is expected).
|
||||
if (seenVideo || seenAudio) parsedMeta = true;
|
||||
// (parsedMeta removed — we now wait for both via allSeen() below.)
|
||||
});
|
||||
}
|
||||
|
||||
@@ -407,7 +405,10 @@ export async function demux(
|
||||
const now = Date.now();
|
||||
const elapsed = now - lastToken;
|
||||
if (elapsed >= tokenIntervalMs) {
|
||||
tokens = Math.min(videoFps, tokens + Math.floor(elapsed / tokenIntervalMs));
|
||||
tokens = Math.min(
|
||||
videoFps,
|
||||
tokens + Math.floor(elapsed / tokenIntervalMs),
|
||||
);
|
||||
lastToken = now - (elapsed % tokenIntervalMs);
|
||||
}
|
||||
if (tokens >= 1) {
|
||||
|
||||
Reference in New Issue
Block a user