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);
});