2015-10-28 6 views
1

У меня есть приложение, которое может показывать видео, и мне хотелось бы следующее поведение.AVAudioSession переключение между смешанными и не смешанными режимами

  • Когда видео сначала появляется на экране и начинает воспроизводиться, его аудио должно смешиваться с аудио из других приложений, которые могут уже воспроизводиться. Например, если пользователь прослушивает Spotify, они должны слышать звук из Spotify и воспроизводимого видео.

  • Если пользователь удаляет определенную кнопку, звук из других приложений должен быть отключен, чтобы воспроизводиться только звук из видео.

  • Если пользователь снова нажал кнопку, звук из других приложений должен возобновиться, а аудиосигнал видео вместе со звуком из других приложений должен снова перемещаться.

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

Вот какой код, который показывает, как я изменяю AVAudioSession, чтобы попытаться получить эту функцию.

Включение смешивания режима

AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setCategory:AVAudioSessionCategoryAmbient 
     withOptions:AVAudioSessionCategoryOptionMixWithOthers 
       error:nil]; 
[session setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil]; 

Выключение смешивания Режим

AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setCategory:AVAudioSessionCategoryPlayback 
     withOptions:0 
       error:nil]; 
[session setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil]; 

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

Кажется, что единственный способ уведомить другие приложения, которые они могут возобновить, - это установить сессию звукового сеанса моего приложения как «неактивную». К сожалению, при воспроизведении видео появляется предупреждение о том, что я должен прекратить воспроизведение звука перед отключением аудио сессии. Это также приводит к нарушению AVPlayer, поскольку он больше не может воспроизводить звук.

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

ответ

0

Возможно, вы должны изменить «ДА» на «НЕТ» в блоке «Отключение режима смешивания».

[session setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil]; 
+0

Проблема в том, что я не могу включить сессию аудио в неактивную во время воспроизведения видео. AVPlayer не крут с этим, и он не будет воспроизводить звук впоследствии. Вам нужно снова приостановить и воспроизвести видео, чтобы оправиться от этого. – Antonio

1

Я думаю, вам не повезло. Даже AVAudioSessionCategoryOptionDuckOthers, который звучит так, как будто он должен соответствовать вашему прецеденту, требует от вас деактивировать сеанс, чтобы вернуть объем других приложений в нормальное состояние, но, как вы видели, это вызывает ошибки.

+0

Я, я волновался, что это так. Как насчет того, чтобы каким-то образом обмануть iOS в отправке уведомления «возобновить с прерывания» другим процессам? – Antonio

+0

Считаете ли вы, что расширения имеют свою собственную сессию аудио? –