Usando JavaScript del navegador, necesito cargar archivos mp4 que contengan datos de audio AAC y extraer estos datos de audio para usarlos más adelante.
Hay un bloque mdat
en el archivo mp4 que (según tengo entendido) contiene los datos aac incrustados, pero simplemente extraer el contenido de ese bloque mdata no parece darme datos aac válidos.
Entonces, ¿cuál es la forma más sencilla de, en el navegador, obtener datos de audio aac incrustados de un archivo contenedor mp4?
Editar:
Al profundizar en esto, usando un análisis de archivos hexadecimales, se revela la razón por la cual falla la decodificación de aac cuando solo se toman los datos del bloque mdat:
Como se ve en la siguiente ilustración, donde se compara la estructura de archivo de un archivo ejemplo.aac y un archivo ejemplo.mp4 que contienen los mismos datos de audio, existe una clara diferencia en la forma en que se almacenan los datos:
En los datos aac originales, los fragmentos de datos de audio comprimidos se separan con cadenas de algo así como FF F1 4C 80 ** ** FC
(rojo en la ilustración). En la versión mp4 , exactamente los mismos datos (verde en la ilustración) no tienen esta separación.
Para resolver mi caso, tengo que trabajar al revés, supongo: tomar los datos comprimidos "no separados" del archivo .mp4 e "inyectar" la cadena de separación para que los decodificadores aac lo reconozcan como válido...
Entonces, ¿alguien sabe dónde encontrar información sobre esta "cadena de separación de datos aac" y cómo inyectarla en el navegador en los datos mp4, lo que da como resultado un bloque de archivo aac válido?
Edit2:
Investigaciones posteriores muestran que .mp4 almacena los datos aac como "aac raw" , sin encabezados ADTS de 7 bytes que separan los cuadros de audio comprimidos.
El script mp4.js de Syu Kato ( https://github.com/ukyo/mp4.js ) tiene un extractRawAudio(mp4DataAsUInt8Array)
que puede extraer los datos aac sin procesar e inyectar los encabezados de marco necesarios, lo que me resuelve el problema.