Настройка категории AVAudioSession не влияет на звук из WKWebView.

Кажется, я не могу переопределить категорию или порт AVAudioSession, когда звук воспроизводится из WKWebView. Тот же код отлично работает при использовании обычного UIWebView.

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];

Я также пробовал активировать sharedInstance вот так, но это не помогло:

[session setActive: YES error: nil];

Приведенный выше код не влияет на звук, поступающий из WKWebView. Я нашел несколько сообщений в Твиттере о том, что iOS 8.1 смешивает звук WKWebView со звуком фонового приложения, но я не смог найти источник для этого. См. эту ветку в Твиттере для справки: https://twitter.com/marcoarment/status/530881842900373504


person Lyle Pratt    schedule 26.11.2014    source источник
comment
Вы хотите, чтобы приложение продолжало воспроизводить аудио из Интернета в фоновом режиме?   -  person dcorbatta    schedule 03.12.2014
comment
Нет, я хочу переключить воспроизведение звука с динамика на наушник и обратно.   -  person Lyle Pratt    schedule 04.12.2014
comment
Привет @LylePratt, попробуйте проверить возможную ошибку в -setActive:error:, если возникает ошибка, указатель установлен на объект NSError, который описывает ошибку. Возможно ли, что другие аудиообъекты (например, очереди, преобразователи, проигрыватели или устройства записи) в настоящее время работают?   -  person bl4stwave    schedule 08.12.2014
comment
Вы когда-нибудь находили удовлетворительное решение этой проблемы?   -  person Keab42    schedule 03.02.2017
comment
Привет, ты нашел решение для этого?   -  person Erik Andershed    schedule 03.09.2017


Ответы (1)


Таким образом, очевидно, WKWebView работает в отдельном процессе от вашего приложения. Это, вероятно, означает, что у него есть собственный AudioSession, отдельный от AudioSession вашего приложения. Вот почему изменения в AudioSession вашего приложения не повлияют на webView. А также почему он работает с UIWebView (без отдельного процесса). По крайней мере, это то, что я пока собрал...

Решение для меня состояло в том, чтобы позволить AudioSession моего приложения смешиваться с другими:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord 
                                 withOptions:AVAudioSessionCategoryOptionMixWithOthers
                                       error:&error];

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

person Piet    schedule 14.10.2016
comment
Привет, я пытаюсь воспроизвести звук js из wkwebview, и он НЕ должен останавливать воспроизведение фоновой музыки. Но я не могу заставить его работать, есть идеи? - person Erik Andershed; 03.09.2017
comment
Это не сработало для меня. Воспроизведение в WKWebView вызывает прерывание звука в вашем приложении и отказывается от микширования. - person Jordan H; 23.09.2020