unified-video-framework
Version:
Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more
36 lines (33 loc) • 1.27 kB
text/typescript
import { KEY_SYSTEMS, DRMCapabilities } from '../types/DRMTypes';
export class BrowserDetector {
static async detectCapabilities(): Promise<DRMCapabilities> {
const caps: DRMCapabilities = { widevine: false, fairplay: false, playready: false };
if (typeof navigator === 'undefined' || !navigator.requestMediaKeySystemAccess) {
return caps;
}
const basicConfig: MediaKeySystemConfiguration[] = [{
initDataTypes: ['cenc'],
videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }],
}];
const checks: Array<[keyof DRMCapabilities, string]> = [
['widevine', KEY_SYSTEMS.WIDEVINE],
['playready', KEY_SYSTEMS.PLAYREADY],
];
for (const [key, system] of checks) {
try {
await navigator.requestMediaKeySystemAccess(system, basicConfig);
caps[key] = true;
} catch { /* not supported */ }
}
// FairPlay detection via WebKit
if (typeof (window as any).WebKitMediaKeys !== 'undefined') {
caps.fairplay = true;
}
return caps;
}
static isSafari(): boolean {
if (typeof navigator === 'undefined') return false;
const ua = navigator.userAgent;
return /Safari/.test(ua) && !/Chrome/.test(ua);
}
}