У меня есть файл, который представляет собой контейнер RIFF с тремя кусками; RIFF имеет идентификатор WAVE. Первый фрагмент - «fmt», второй - «данные», последний - «eink» (мой собственный кусок). Таким образом, файл создается с помощью кода C#, который использует directshow. Звук закодирован в AAC. Поэтому я не хочу воспроизводить звук, который хранится в блоке данных, на iOS 5. *.
Я попытался прочитать весь фрагмент данных и использовать эти байты в [initWithData:error:][1]
методе AVAudioPlayer
. Но, похоже, это работает по-другому.
Чем я думал, я мог бы попытаться сделать свой собственный файл m4a
с этими байтами и воспроизвести его, но есть ли другой правильный путь? Пожалуйста, предложите мне несколько способов исследовать его? Где читать? Или другой метод.Чтение аудио AAC из контейнера RIFF на iOS
ответ
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#Container_formats
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.
Итак, правильно ли я понимаю, AAC может храниться как ADTS или ADIF внутри полезной нагрузки WAV. И рамки iOS могут читать только контейнеры mp4? Как определить, являются ли данные ADTS или ADIF? Что мне делать, когда я это выясню? И, пожалуйста, объясните больше в последнем решении ditail? Большое спасибо за помощь. – DanSkeel
Хорошо, если это ADTS, это были бы те 12 бит syncwords ... – DanSkeel
AAC в WAV может быть в следующих форматах - ADIF, ADTS и M4A. Вы знаете, какой формат присутствует в вашем WAV-файле? Некоторые ссылки, которые могут помочь найти формат (a) http://wiki.multimedia.cx/index.php?title=ADTS (b) http://developer.apple.com/library/ios/#technotes/ tn2236/_index.html –
Я не знаю, может ли он помочь определить формат, но когда я переименовал файл в '* .aac', VLC мог его воспроизвести. Я все еще занимаюсь исследованиями. Я буду обновлять информацию, когда другой разработчик, создающий этот файл, произнесет свое слово. – DanSkeel
любое обновление по проблеме? –