This commit is contained in:
Халимов Рустам
2026-03-11 17:10:50 +03:00
parent 41dd1c7641
commit 3cf56b62ca

View File

@@ -263,41 +263,44 @@ export default function CallModal({ isOpen, onClose, targetUser, callType: initi
// Force binding to the SINGLE stable video element
// Use a custom property on the video element to track the play promise
// Manage playback via startPlayback helper
if (remoteVideoRef.current) {
const video = remoteVideoRef.current as any;
const startPlayback = async () => {
// If a play promise is already pending, don't start a new one
// If a play request is already in progress, don't start a new one (as per Chrome docs)
if (video._playPromise) {
console.log('[WebRTC] Play promise already pending, skipping...');
console.log('[WebRTC] Play is already in progress, waiting...');
return;
}
try {
// Small stabilization delay (100ms)
await new Promise(r => setTimeout(r, 100));
if (video.srcObject !== stream) {
console.log('[WebRTC] Binding stream to video element');
video.srcObject = stream;
}
video.muted = false;
console.log('[WebRTC] Initiating play()...');
console.log('[WebRTC] Calling video.play()...');
video._playPromise = video.play();
await video._playPromise;
console.log('[WebRTC] Playback started successfully');
console.log('[WebRTC] Playback confirmed');
video._playPromise = null;
setNeedsInteraction(false);
} catch (e: any) {
video._playPromise = null;
if (e.name === 'NotAllowedError' || e.name === 'NotSupportedError') {
console.warn('[WebRTC] Autoplay blocked, waiting for interaction');
if (e.name === 'NotAllowedError') {
console.warn('[WebRTC] Autoplay blocked, showing UI');
setNeedsInteraction(true);
} else if (e.name === 'AbortError') {
console.warn('[WebRTC] Playback interrupted (AbortError), safe to ignore');
console.log('[WebRTC] Play aborted (likely concurrent track), will be retried automatically');
} else {
console.error('[WebRTC] Playback failed:', e);
console.error('[WebRTC] Fatal playback error:', e);
}
}
};