Правильный выбор для воспроизведения аудио и видео контента

Чем я занимаюсь:

Мне нужно воспроизводить аудио и видео файлы, которые не поддерживаются Apple на iPhone / iPad, например файлы mkv / mka, которые содержат несколько аудиоканалов.

Я использую libffmpeg для поиска аудио- и видеопотоков в медиафайле. Видео декодируется с помощью avcodec_decode_video2, а аудио с avcodec_decode_audio3, возвращаемые значения следующие для каждой функции следующие

  • avcodec_decode_video2 - возвращает структуру AVFrame, которая инкапсулирует информацию о видеокадре из пакета, в частности, имеет поле data, которое является указателем на плоскости изображения / канала.
  • avcodec_decode_audio3 - возвращает samples типа int16_t *, который, как я полагаю, является необработанными аудиоданными

В общем, я проделал все это и успешно декодировал медиа-контент.

Что мне нужно сделать: я должен воспроизвести аудио и видео соответственно с помощью сервисов Apple. Воспроизведение, которое мне нужно выполнить, должно поддерживать микширование аудиоканалов при воспроизведении видео, т.е. скажем, файл mkv содержит два аудиоканала и видеоканал. Итак, я хотел бы знать, какая услуга будет для меня подходящей? Мое исследование показало, что служба AudioQueue может быть полезна для воспроизведения звука и, возможно, AVFoundation для видео.

Пожалуйста, помогите найти подходящую технологию для моего случая, то есть воспроизведение видео + воспроизведение звука с возможным микшированием аудиоканалов.


person deimus    schedule 22.06.2012    source источник


Ответы (1)


Вы на правильном пути. Если вы воспроизводите только звук (а не записываете вообще), я бы использовал AudioQueues. Он сделает микширование за вас. Если вы записываете, вам следует использовать AudioUnits. Взгляните на пример проекта MixerHost от Apple. Для видео рекомендую использовать OpenGL. Предполагая, что буфер изображения находится в YUV420, вы можете визуализировать его с помощью простой двухпроходной настройки шейдера. Я верю, что есть пример проекта Apple, показывающий, как это сделать. В любом случае вы можете визуализировать любой формат пикселей с помощью OpenGL и шейдера для преобразования формата пикселей в RGBA. Надеюсь на эту помощь.

person Steve McFarlin    schedule 22.06.2012
comment
Спасибо за ответ, Стив, в основном мое приложение делает все, то есть записывает, воспроизводит, микширует звуковые дорожки и воспроизводит видео. Как я понял из вашего ответа, я должен выбрать 1. Audio Queue: для микширования и воспроизведения звука 2. AudioUnits: для записи звука 3. OpenGL: для показа видео. Я правильно понял? - person deimus; 25.06.2012
comment
Я бы порекомендовал AudioUnits для всего, если вы одновременно записываете и играете. В этом случае вам нужно будет использовать блок ввода-вывода голосовой обработки. Если вы этого не сделаете, тогда ваши записи будут содержать вывод динамиков. Устройство VP IO использует функцию подавления акустического эха. Да, OpenGL, скорее всего, будет работать лучше всех. Я бы сначала протестировал другие API, чтобы убедиться, что они приемлемы (например, CoreImage или CoreGraphics). - person Steve McFarlin; 26.06.2012