diff --git a/app/library/SegmentEncoders.py b/app/library/SegmentEncoders.py index fb333fc3..eb42a828 100644 --- a/app/library/SegmentEncoders.py +++ b/app/library/SegmentEncoders.py @@ -180,10 +180,8 @@ class QsvBuilder(_BaseBuilder): new_args += [ "-vf", "scale=trunc(iw/2)*2:trunc(ih/2)*2,format=nv12,hwupload=extra_hw_frames=64", - # Favor widely-supported constant quality path and disable LA - "-b:v", - "0", - "-global_quality", + # Use ICQ (Intelligent Constant Quality) ratecontrol mode with quality level + "-q:v", "23", "-look_ahead", "0", diff --git a/ui/app/components/VideoPlayer.vue b/ui/app/components/VideoPlayer.vue index e26407ad..1c4580ef 100644 --- a/ui/app/components/VideoPlayer.vue +++ b/ui/app/components/VideoPlayer.vue @@ -721,22 +721,16 @@ const src_error = async () => { return } - // If we already successfully captured a frame, that means the streamed video codec is working. - if (havePoster.value) { - return - } - await nextTick() if (destroyed.value) { return } - // Check if video is actually paused. - if (video.value && video.value.paused) { + if (video.value && (notFirefox && video.value.paused)) { return } - console.warn('Source failed to load, attempting HLS fallback...') + console.warn('Source failed to load, attempting HLS fallback via hls.js...') attach_hls(makeDownload(config, props.item, 'm3u8')) }