Skip to content
12 changes: 3 additions & 9 deletions packages/playback-core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,6 @@ declare global {

const userAgentStr = globalThis?.navigator?.userAgent ?? '';
const userAgentPlatform = globalThis?.navigator?.userAgentData?.platform ?? '';
const browserBrands = globalThis?.navigator?.userAgentData?.brands ?? [];

// NOTE: Our primary *goal* with this is to detect "non-Apple-OS" platforms which may also support
// native HLS playback. Our primary concern with any check for this is "false negatives" where we
Expand All @@ -354,12 +353,8 @@ const isAndroidLike =
userAgentStr.toLowerCase().includes('android') ||
['x11', 'android'].some((platformStr) => userAgentPlatform.toLowerCase().includes(platformStr));

const googleChromeBrand = browserBrands.find((brand) => brand.brand === 'Google Chrome');

const isChromeWithNativeHLS = (mediaEl: Pick<HTMLMediaElement, 'canPlayType'>) =>
googleChromeBrand &&
parseInt(googleChromeBrand.version ?? '0') >= 141 &&
!!mediaEl.canPlayType('application/vnd.apple.mpegurl');
const isSafari = (mediaEl: Pick<HTMLMediaElement, 'canPlayType'>) =>
/^((?!chrome|android).)*safari/i.test(userAgentStr) && !!mediaEl.canPlayType('application/vnd.apple.mpegurl');

// NOTE: Exporting for testing
export const muxMediaState: WeakMap<
Expand All @@ -370,8 +365,7 @@ export const muxMediaState: WeakMap<
const MUX_VIDEO_DOMAIN = 'mux.com';
const MSE_SUPPORTED = Hls.isSupported?.();

const shouldDefaultToMSE = (mediaEl: Pick<HTMLMediaElement, 'canPlayType'>) =>
isAndroidLike || isChromeWithNativeHLS(mediaEl);
const shouldDefaultToMSE = (mediaEl: Pick<HTMLMediaElement, 'canPlayType'>) => isAndroidLike || !isSafari(mediaEl);

export const generatePlayerInitTime = () => {
return mux.utils.now();
Expand Down
Loading