MPMoviePlayerController и AVAudioPlayer сбой микширования звука - PullRequest
21 голосов
/ 31 января 2011

Я разрабатываю интерактивное приложение типа сборника рассказов для iPhone, и недавно я столкнулся с неприятной ошибкой, связанной с микшированием звука на устройстве.

Во-первых, я настраиваю аудио сеанс. Я устанавливаю категорию на AVAudioSessionCategoryAmbient , а затем запускаю и запускаю мой AVAudioPlayer экземпляр. Теперь в фоновом режиме во время воспроизведения звука я предварительно загружаю видео для воспроизведения, используя MPMoviePlayerController с последующим вызовом prepareToPlay . Причина, по которой я предварительно загружаю видео таким образом, заключается в том, что мне нужно, чтобы оно воспроизводилось сразу после вызова с довольно строгим временем.

В этой конфигурации аудио / видео работает нормально, они смешиваются, и не не прерывают друг друга. Однако эта конкретная категория аудиосеансов не позволяет продолжать воспроизведение звука, пока устройство заблокировано, и эта функция мне действительно нужна. В результате я вынужден рассмотреть другую категорию: AVAudioSessionCategoryPlayback .

По умолчанию эта категория не разрешает микширование с другим аудио, в соответствии с Apple docs . Чтобы включить микширование с другим аудио, я переопределяю соответствующую категорию:

OSStatus propertySetError = 0;
UInt32 setProperty = 1;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(setProperty), &setProperty);
assert(propertySetError == 0);

К сожалению, это решает мою игру во время заблокированной проблемы, но приводит к другой проблеме: AVAudioPlayer звук прерывается на короткое время, когда видео загружается с небольшим заиканием. Заикание небольшое, возможно, меньше секунды, но этого достаточно, чтобы нарушить работу пользователя. Я прочитал этот связанный пост , который позволил мне предварительно загрузить видео с AVAudioSessionCategoryAmbient , но, к сожалению, такой же подход не работает с новой категорией.

Категория аудио сеанса успешно применяется в соответствии с кодом возврата. Кто-нибудь знает, почему включение микширования звука с этой категорией отличается от функции микширования, предоставляемой категорией окружения?

1 Ответ

1 голос
/ 16 августа 2011

Лучший способ найти аналогичную проблему - использовать более новую AVPlayer (+1 @adam) и настроить приложение на включение фонового звука и получение уведомлений от пульта дистанционного управления. @MarquelV уведомил меня об этом Как вы можете воспроизводить музыку из приложения iPod, продолжая получать события пульта дистанционного управления в вашем приложении?

Если вы можете заставить фоновый режим работать должным образом, это должно позволить вам продолжить воспроизведение, пока устройство заблокировано. О, и не забудьте добавить ключи к info.plist, это легко сделать, и тогда вы не будете знать, почему он не работает.

...