diff --git a/chat_window.php b/chat_window.php index cd4bcff..c2f3f82 100644 --- a/chat_window.php +++ b/chat_window.php @@ -372,6 +372,9 @@ if (empty($user_id)) { + @@ -566,26 +569,40 @@ if (empty($user_id)) { throw new Error('WebAssembly no está disponible en este navegador; no se puede convertir en cliente'); } - // Si FFmpeg no está presente, intentar cargar desde varios CDNs - if (!window.FFmpeg || !window.FFmpeg.createFFmpeg) { +// Si FFmpeg no está presente, intentar cargar desde varios CDNs (varias URLs de fallback) + if (!window.FFmpeg || !window.FFmpeg.createFFmpeg) { const cdns = [ + // CDN funcional conocido (prioritario) + 'https://cdn.jsdelivr.net/npm/@ffmpeg/ffmpeg/dist/ffmpeg.min.js', + // Versioned sources and other fallbacks 'https://cdn.jsdelivr.net/npm/@ffmpeg/ffmpeg@0.11.8/dist/ffmpeg.min.js', - 'https://unpkg.com/@ffmpeg/ffmpeg@0.11.8/dist/ffmpeg.min.js' + 'https://unpkg.com/@ffmpeg/ffmpeg@0.11.8/dist/ffmpeg.min.js', + 'https://unpkg.com/@ffmpeg/ffmpeg/dist/ffmpeg.min.js', + // Fallback local path - recomendamos descargar y colocar manualmente si CDN falla + '/assets/vendor/ffmpeg.min.js' ]; let loaded = false; + const failedSources = []; for (const url of cdns) { try { await loadScript(url); if (window.FFmpeg && window.FFmpeg.createFFmpeg) { + console.info('FFmpeg loaded from', url); loaded = true; break; + } else { + failedSources.push(url + ' (no FFmpeg object)'); } } catch (e) { console.warn('No se pudo cargar ffmpeg desde', url, e); + failedSources.push(url + ' (' + (e.message || e) + ')'); } } if (!loaded) { - throw new Error('No se pudo cargar ffmpeg.wasm desde los CDNs'); + // Mostrar guía al usuario sobre cómo instalar localmente + const helpMsg = 'No se pudo cargar ffmpeg.wasm desde CDNs. Intenta descargar `ffmpeg.min.js` y colócalo en `assets/vendor/ffmpeg.min.js`. Fuentes intentadas: ' + failedSources.join('; '); + console.error(helpMsg); + throw new Error(helpMsg); } } @@ -1712,7 +1729,27 @@ if (empty($user_id)) { startRecording(); } }); - + + // Botón para cargar conversor de audio manualmente (ffmpeg WASM) + const loadBtn = document.getElementById('loadConverterBtn'); + if (loadBtn) { + loadBtn.addEventListener('click', async function() { + loadBtn.disabled = true; + loadBtn.innerHTML = ' Cargando...'; + try { + await ensureFFmpeg(); + showAlert('Conversor cargado correctamente', 'success'); + loadBtn.innerHTML = ' Listo'; + } catch (e) { + console.error('Error cargando conversor:', e); + showAlert('Error cargando conversor: ' + (e.message || e), 'danger'); + loadBtn.innerHTML = ' Error'; + } finally { + loadBtn.disabled = false; + } + }); + } + // Auto-refresh cada 30 segundos para nuevos mensajes setInterval(refreshChat, 30000); });