Чтение аудио AAC из контейнера RIFF на iOS
У меня есть файл, который является контейнером RIFF с 3 кусками; Блок RIFF имеет идентификатор "WAVE". Первый блок - это "fmt", второй - "данные", последний - "eink" (мой собственный блок). Так что этот файл генерируется кодом C#, который использует directshow. Аудио кодируется в AAC. Поэтому я не хочу воспроизводить аудио, которое хранится в блоке "данных", на iOS 5.*.
Я попытался прочитать весь блок данных и использовать эти байты в [initWithData:error:][1]
метод AVAudioPlayer
, Но, похоже, работает по-другому.
Чем я думал, я мог попытаться сделать свой собственный m4a
файл с этими байтами и воспроизводить его, но есть ли другой правильный путь? Пожалуйста, предложите мне несколько способов исследовать это? Где почитать? Или другой метод.
1 ответ
Few concepts regarding WAV, AAC and MP4
WAV
является контейнерным форматом, который может хранить любые другие аудиоданные, как сжатые, так и несжатые. Более подробная информация на http://www.sonicspot.com/guide/wavefiles.html
AAC может быть инкапсулирован несколькими способами. Наиболее распространенными являются ADTS и MP4. Подробная информация о формате контейнера AAC находится по адресу http://en.wikipedia.org/wiki/Advanced_Audio_Coding.
ADTS - это относительно простой формат, в котором каждому кадру AAC предшествует заголовок. Более подробную информацию о заголовке ADTS можно найти по адресу http://wiki.multimedia.cx/index.php?title=ADTS
MP4 - относительно более сложный формат с поддержкой хранения различных аудиоформатов и видеоформатов. В случае MP4 информация заголовка сохраняется один раз в структурах MP4 в файле, а остальные кадры AAC не должны иметь никакой информации заголовка.
How to support playing WAV file with AAC payload in iOS?
- Определите тип полезной нагрузки, будь то ADTS или MP4 или ADIF
- Если файл можно преобразовать в автономном режиме, используйте сторонние библиотеки, такие как FFMPEG, для преобразования WAV с файлом AAC в файл M4A, формат, поддерживаемый iOS.
- если файл необходимо преобразовать на устройстве, лучшим способом будет извлечь данные кадра AAC из полезной нагрузки, преобразовать их в ожидаемый iOS и декодировать. Лучший способ определить это - преобразовать файл в автономный режим M4A и посмотреть, как данные передаются в iOS Audio Player.