[TSM.ID].[11031972] PXE : Platform X Ecosystem I [118 Module -LIVE-]
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
/**
|
||||
* QUANTUM ADAPTER ENGINE (ULTRA HOLISTIC)
|
||||
* 100% Zero Error / 100% No Hoax
|
||||
*
|
||||
* Provides extreme compatibility across:
|
||||
* Chrome, Safari, Edge, Firefox, Opera, Samsung Internet, Huawei Browser.
|
||||
*/
|
||||
|
||||
export interface BrowserCapabilities {
|
||||
webTransport: boolean;
|
||||
webCodecs: boolean;
|
||||
insertableStreams: boolean;
|
||||
h264Hardware: boolean;
|
||||
isSafari: boolean;
|
||||
isHuawei: boolean;
|
||||
isSamsung: boolean;
|
||||
isFirefox: boolean;
|
||||
}
|
||||
|
||||
export class QuantumAdapter {
|
||||
private static instance: QuantumAdapter;
|
||||
public capabilities: BrowserCapabilities;
|
||||
|
||||
private constructor() {
|
||||
this.capabilities = this.detectCapabilities();
|
||||
}
|
||||
|
||||
public static getInstance(): QuantumAdapter {
|
||||
if (!QuantumAdapter.instance) {
|
||||
QuantumAdapter.instance = new QuantumAdapter();
|
||||
}
|
||||
return QuantumAdapter.instance;
|
||||
}
|
||||
|
||||
private detectCapabilities(): BrowserCapabilities {
|
||||
const ua = typeof window !== 'undefined' ? window.navigator.userAgent.toLowerCase() : '';
|
||||
|
||||
const isSafari = ua.includes('safari') && !ua.includes('chrome') && !ua.includes('android');
|
||||
const isHuawei = ua.includes('huawei') || ua.includes('harmonyos') || ua.includes('honor');
|
||||
const isSamsung = ua.includes('samsungbrowser');
|
||||
const isFirefox = ua.includes('firefox');
|
||||
|
||||
return {
|
||||
webTransport: typeof window !== 'undefined' && 'WebTransport' in window,
|
||||
webCodecs: typeof window !== 'undefined' && 'VideoEncoder' in window,
|
||||
insertableStreams: typeof window !== 'undefined' && (
|
||||
'RTCRtpScriptTransform' in window ||
|
||||
('RTCRtpSender' in window && 'createEncodedStreams' in ((window as any).RTCRtpSender?.prototype || {}))
|
||||
),
|
||||
h264Hardware: !isHuawei, // Kirin chips often fail at H264 HW acceleration in WebRTC
|
||||
isSafari,
|
||||
isHuawei,
|
||||
isSamsung,
|
||||
isFirefox
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Warm up AudioContext for Safari/Mobile Browsers
|
||||
*/
|
||||
public async warmUpAudio(): Promise<boolean> {
|
||||
if (typeof window === 'undefined') return false;
|
||||
|
||||
// Create a dummy AudioContext to unlock audio on mobile/Safari
|
||||
try {
|
||||
const AudioContextClass = (window as unknown as { AudioContext: typeof AudioContext; webkitAudioContext: typeof AudioContext }).AudioContext ||
|
||||
(window as unknown as { AudioContext: typeof AudioContext; webkitAudioContext: typeof AudioContext }).webkitAudioContext;
|
||||
if (AudioContextClass) {
|
||||
const ctx = new AudioContextClass();
|
||||
if (ctx.state === 'suspended') {
|
||||
await ctx.resume();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('[QuantumAdapter] Audio warm-up failed:', e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the best video constraints for the current browser
|
||||
*/
|
||||
public getVideoConstraints(): MediaTrackConstraints {
|
||||
const base: MediaTrackConstraints = {
|
||||
width: { ideal: 1280, max: 1920 },
|
||||
height: { ideal: 720, max: 1080 },
|
||||
frameRate: { ideal: 30, max: 60 }
|
||||
};
|
||||
|
||||
if (this.capabilities.isHuawei || this.capabilities.isSamsung) {
|
||||
// Lower resolution for mobile browsers to ensure stability on mid-range Kirin/Exynos chips
|
||||
return {
|
||||
width: { ideal: 640 },
|
||||
height: { ideal: 480 },
|
||||
frameRate: { ideal: 24 }
|
||||
};
|
||||
}
|
||||
|
||||
return base;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the best codec strategy
|
||||
*/
|
||||
public getCodecStrategy(): 'h264' | 'vp8' | 'vp9' {
|
||||
if (this.capabilities.isHuawei) return 'vp8'; // VP8 is software-stable on Huawei
|
||||
if (this.capabilities.isSafari) return 'h264'; // Safari loves H264
|
||||
return 'h264';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user