У нас тоже была эта проблема. Я считаю, что в суде Apple есть некоторые ошибки, но мы нашли достойный обходной путь, который кажется довольно безопасным от побочных эффектов.
Мы обнаружили, что установка в поле allowsExternalPlayback
проигрывателя значения NO
иногда приводила к правильной потоковой передаче звука без пустого видеоэкрана (наряду с правильным отображением информации теперь воспроизводится, правильным откликом на качельку громкости и т. д.). Однако мы обнаружили, что очень часто он вообще ничего не мог воспроизвести.
Проведя некоторую интроспекцию во время выполнения, мы обнаружили, что проигрыватель всегда корректно буферизуется из сети. Но когда он столкнется с событием isPlaybackLikelyToKeepUp
, он установит в поле rate
проигрывателя значение 1
, указывающее, что он воспроизводится, но чаще всего на самом деле не воспроизводит звук. Об ошибках не сообщалось, и поэтому из всего, что мы могли сказать, сам плеер думает, что он действительно играет, когда это не так. Мы обнаружили, что это зависание происходит только тогда, когда мы настроили устройство AirPlay для вывода звука.
Итак, мы обнаружили, что в определенных обратных вызовах событий и других ключевых местах, если мы добавим простой однострочный код:
if( self.avPlayer.rate == 1 ){ self.avPlayer.rate = 1; }
Это устранит любые внутренние задержки, из-за которых проигрыватель на самом деле не использует AirPlay и правильно транслирует звук. Если игрок уже правильно играл, то ничего страшного.
person
Spencer Nielsen
schedule
18.12.2017
MPNowPlayingInfoCenter
? - person Mats   schedule 27.11.2017AVAudioPlayer
API с локальным аудиофайлом дает желаемый результат при использовании AirPlayed на Apple TV. (т. е. появляется уведомление о воспроизведении, а не ложный черный полноэкранный индикатор выполнения.) Но в документацииAVAudioPlayer
говорится, что он не работает с потоковым мультимедиа. Поэтому я все еще пытаюсь найти способ заставитьAVPlayer
работать с потоковым аудиофайлом. - person Bill Feth   schedule 08.12.2017