2012-06-22 3 views
0

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

Мне нужно проигрывать аудио и видео файлы, которые не поддерживаются Apple, на iPhone/IPad, например MKV/MKA файлов, которые содержат моей несколько аудиоканалов.

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

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

Так что в основном я сделал все это и успешное декодирование медиа-контента.

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

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

ответ

2

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

+0

Спасибо за отзыв Стив, в основном мое приложение делает все, т. Е. Записывает, воспроизводит микширование звуковых дорожек и воспроизведение видео. Так как я понял из вашего ответа, я должен выбрать 1. Audio Queue: для микширования и воспроизведения звука 2. AudioUnits: для записи аудио 3. OpenGL: для показа видео. У меня все получилось? – deimus

+0

Я бы порекомендовал AudioUnits для всего, если вы одновременно записываете и играете. В этом случае вам нужно будет использовать модуль ввода-вывода для голосовой обработки. Если вы этого не сделаете, ваши записи будут содержать вывод динамиков. Блок ввода-вывода VP использует акустическое эхоподавление. Да, OpenGL, скорее всего, сделает все возможное. Я бы тестировал другие API сначала, чтобы узнать, приемлемы ли они (например, CoreImage или CoreGraphics). –

 Смежные вопросы

  • Нет связанных вопросов^_^