mirror of
https://github.com/R0m1k3/Regisflow.git
synced 2026-10-20 13:48:21 +02:00
Improve camera functionality and address issues with blank image display
Enhances CameraModal and useCamera hook with autoplay, error handling, and metadata checks to resolve blank image issues. Replit-Commit-Author: Agent Replit-Commit-Session-Id: dec54137-d5a2-4406-8ad4-5f2f9fb110bf Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0715008c-7244-40f4-befc-26c014852236/957e99ed-c3d1-4917-a66f-70911fc0ed4b.jpg
This commit is contained in:
1 parent
c426abfc33
commit
ed38c25c9f
2 files changed
+54
-10
No files matched your search
@@ -55,36 +55,75 @@ export function useCamera() {
|
||||
setIsOpen(true);
|
||||
|
||||
if (videoRef.current) {
|
||||
videoRef.current.srcObject = stream;
|
||||
const video = videoRef.current;
|
||||
video.srcObject = stream;
|
||||
console.log('Video stream attached to video element');
|
||||
|
||||
// Forcer le démarrage de la vidéo
|
||||
video.autoplay = true;
|
||||
video.playsInline = true;
|
||||
video.muted = true;
|
||||
|
||||
// Forcer le play immédiatement
|
||||
try {
|
||||
await video.play();
|
||||
console.log('Video play() successful');
|
||||
} catch (playError) {
|
||||
console.warn('Video play() failed:', playError);
|
||||
}
|
||||
|
||||
// Attendre que la vidéo soit prête
|
||||
return new Promise<boolean>((resolve, reject) => {
|
||||
const video = videoRef.current!;
|
||||
|
||||
const handleLoadedMetadata = () => {
|
||||
console.log('Video metadata loaded, dimensions:', video.videoWidth, 'x', video.videoHeight);
|
||||
console.log('Video metadata loaded successfully');
|
||||
console.log('Video dimensions:', video.videoWidth, 'x', video.videoHeight);
|
||||
console.log('Video readyState:', video.readyState);
|
||||
console.log('Video paused:', video.paused);
|
||||
console.log('Video ended:', video.ended);
|
||||
video.removeEventListener('loadedmetadata', handleLoadedMetadata);
|
||||
video.removeEventListener('error', handleError);
|
||||
video.removeEventListener('canplay', handleCanPlay);
|
||||
resolve(true);
|
||||
};
|
||||
|
||||
const handleCanPlay = () => {
|
||||
console.log('Video can play event fired');
|
||||
if (video.videoWidth > 0 && video.videoHeight > 0) {
|
||||
handleLoadedMetadata();
|
||||
}
|
||||
};
|
||||
|
||||
const handleError = (error: Event) => {
|
||||
console.error('Video error:', error);
|
||||
console.error('Video error event:', error);
|
||||
video.removeEventListener('loadedmetadata', handleLoadedMetadata);
|
||||
video.removeEventListener('error', handleError);
|
||||
video.removeEventListener('canplay', handleCanPlay);
|
||||
reject(new Error('Erreur lors du chargement de la vidéo'));
|
||||
};
|
||||
|
||||
video.addEventListener('loadedmetadata', handleLoadedMetadata);
|
||||
video.addEventListener('canplay', handleCanPlay);
|
||||
video.addEventListener('error', handleError);
|
||||
|
||||
// Timeout de sécurité
|
||||
// Si les métadonnées sont déjà chargées
|
||||
if (video.readyState >= 1 && video.videoWidth > 0) {
|
||||
console.log('Video metadata already available');
|
||||
handleLoadedMetadata();
|
||||
}
|
||||
|
||||
// Timeout de sécurité réduit
|
||||
setTimeout(() => {
|
||||
video.removeEventListener('loadedmetadata', handleLoadedMetadata);
|
||||
video.removeEventListener('error', handleError);
|
||||
resolve(true); // Continuer même si metadata pas encore chargé
|
||||
}, 5000);
|
||||
video.removeEventListener('canplay', handleCanPlay);
|
||||
console.log('Video load timeout, current state:', {
|
||||
readyState: video.readyState,
|
||||
videoWidth: video.videoWidth,
|
||||
videoHeight: video.videoHeight,
|
||||
paused: video.paused
|
||||
});
|
||||
resolve(true);
|
||||
}, 3000);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user