From 54d62c7577e228658962041f183ee529535a0417 Mon Sep 17 00:00:00 2001 From: Asen-O-Nikolov <98342935+Asen-O-Nikolov@users.noreply.github.com> Date: Wed, 10 Apr 2024 20:16:43 +0300 Subject: [PATCH] Bugfix: preferManagedMediaSource:false when MSE is not present (#6338) (cherry picked from commit 0d00e7e4e72193970d3596037882a2159c2e5f6b) --- src/controller/buffer-controller.ts | 13 ++++++++----- src/utils/mediasource-helper.ts | 6 ++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/controller/buffer-controller.ts b/src/controller/buffer-controller.ts index 729dee65fa7..ffb7f06665e 100755 --- a/src/controller/buffer-controller.ts +++ b/src/controller/buffer-controller.ts @@ -6,7 +6,10 @@ import { getCodecCompatibleName, pickMostCompleteCodecName, } from '../utils/codecs'; -import { getMediaSource } from '../utils/mediasource-helper'; +import { + getMediaSource, + isManagedMediaSource, +} from '../utils/mediasource-helper'; import { ElementaryStreamTypes } from '../loader/fragment'; import type { TrackSet } from '../types/track'; import BufferOperationQueue from './buffer-operation-queue'; @@ -89,10 +92,9 @@ export default class BufferController implements ComponentAPI { constructor(hls: Hls) { this.hls = hls; const logPrefix = '[buffer-controller]'; - this.appendSource = - hls.config.preferManagedMediaSource && - typeof self !== 'undefined' && - (self as any).ManagedMediaSource; + this.appendSource = isManagedMediaSource( + getMediaSource(hls.config.preferManagedMediaSource), + ); this.log = logger.log.bind(logger, logPrefix); this.warn = logger.warn.bind(logger, logPrefix); this.error = logger.error.bind(logger, logPrefix); @@ -190,6 +192,7 @@ export default class BufferController implements ComponentAPI { ) { const media = (this.media = data.media); const MediaSource = getMediaSource(this.appendSource); + if (media && MediaSource) { const ms = (this.mediaSource = new MediaSource()); this.log(`created media source: ${ms.constructor?.name}`); diff --git a/src/utils/mediasource-helper.ts b/src/utils/mediasource-helper.ts index f9ed92ddb65..77e799dd16b 100644 --- a/src/utils/mediasource-helper.ts +++ b/src/utils/mediasource-helper.ts @@ -15,3 +15,9 @@ export function getMediaSource( ((self as any).WebKitMediaSource as typeof MediaSource) ); } + +export function isManagedMediaSource(source: typeof MediaSource | undefined) { + return ( + typeof self !== 'undefined' && source === (self as any).ManagedMediaSource + ); +}