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

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

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

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

 [session setActive: YES error: nil]; 

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

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

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

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

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

  • Как я могу получить файл с помощью WKWebView?
  • WKWebView не возвращает правильную высоту размера контента
  • Swift 3 WKWebView 'URLRequest'; вы хотели использовать «как» для явного преобразования? (BUG)
  • Получение всех файлов cookie из WKWebView
  • com.apple.WebKit.WebContent drop 113 error: Не удалось найти указанную службу
  • Почему методы WKNavigationDelegate не вызываются на некоторых сайтах?
  • WKWebView Cookies
  • Переопределение MPNowPlayingInfoCenter при использовании WKWebView
  • Ответ URL-адреса кэша для автономного просмотра с помощью WKWebView
  • Как очистить WKBackForwardList от WKWebView?
  • После деинсталляции webView видео, встроенное в webView, все еще играет - iOS
  • Давайте будем гением компьютера.