Skip to content
/ kvmd Public

Commit e48a84b

Browse files
committed
fix(janus): Set playoutDelayHint=0 for Chrome to fix 1 FPS slowlink issue
Chrome/Blink browsers experience 1 FPS WebRTC streaming with constant 'slowlink' messages after the uStreamer 6.47 FPS limiter update. This fix sets playoutDelayHint=0 on video receivers for Chrome/Blink browsers, similar to how Firefox already has a workaround for related playout-delay issues. The playoutDelayHint helps Chrome's H.264 decoder handle uStreamer's new frame pacing, preventing RTCP feedback delays that trigger Janus slowlink detection. Fixes #1632
1 parent 4d867b3 commit e48a84b

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

web/share/js/kvm/stream_janus.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,23 @@ export function JanusStreamer(__setActive, __setInactive, __setInfo, __organizeH
214214
el.srcObject = new MediaStream();
215215
}
216216
el.srcObject.addTrack(track);
217+
218+
// Chrome/Blink: Set playoutDelayHint to reduce latency and help with frame timing.
219+
// This helps Chrome handle uStreamer's new FPS limiter, preventing slowlink issues.
220+
if ((tools.browser.is_chrome || tools.browser.is_blink) && track.kind === "video") {
221+
if (__handle && __handle.webrtcStuff && __handle.webrtcStuff.pc) {
222+
try {
223+
for (let receiver of __handle.webrtcStuff.pc.getReceivers()) {
224+
if (receiver.track && receiver.track.kind === "video" && receiver.playoutDelayHint !== undefined) {
225+
receiver.playoutDelayHint = 0;
226+
__logInfo("Set playoutDelayHint=0 for Chrome video receiver");
227+
}
228+
}
229+
} catch (e) {
230+
__logInfo("Could not set playoutDelayHint:", e);
231+
}
232+
}
233+
}
217234
};
218235

219236
var __removeTrack = function(track) {

0 commit comments

Comments
 (0)