Фоновая потоковая передача Airplay, такая как Spotify / Amazon Music

Можно ли выполнять потоковую передачу звука Airplay, например Spotify или Amazon Music. Когда я настраиваю поток Airplay со звуком из своего приложения, экран (на Apple-TV) становится черным и показывает только индикатор выполнения.

Можно ли показать небольшую подсказку в верхнем углу со всей аудиоинформацией, которая исчезает через несколько секунд и не блокирует весь пользовательский интерфейс Apple TV?

Или это своего рода привилегия Spotify/Amazon Music?


person ANE    schedule 27.11.2017    source источник
comment
Рассматривали ли вы возможность использования MPNowPlayingInfoCenter?   -  person Mats    schedule 27.11.2017
comment
Использование AVAudioPlayer API с локальным аудиофайлом дает желаемый результат при использовании AirPlayed на Apple TV. (т. е. появляется уведомление о воспроизведении, а не ложный черный полноэкранный индикатор выполнения.) Но в документации AVAudioPlayer говорится, что он не работает с потоковым мультимедиа. Поэтому я все еще пытаюсь найти способ заставить AVPlayer работать с потоковым аудиофайлом.   -  person Bill Feth    schedule 08.12.2017
comment
@BillFeth спасибо, что поделились своими знаниями. Было бы здорово, если бы вы сообщили мне/нам, когда вы добьетесь прогресса в этой теме.   -  person ANE    schedule 13.12.2017
comment
@ANE, Спенсер описывает довольно краткое решение ниже. Пожалуйста, поднимите палец вверх за его ответ, если вы также найдете его полезным.   -  person Bill Feth    schedule 10.01.2018


Ответы (1)


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

Мы обнаружили, что установка в поле allowsExternalPlayback проигрывателя значения NO иногда приводила к правильной потоковой передаче звука без пустого видеоэкрана (наряду с правильным отображением информации теперь воспроизводится, правильным откликом на качельку громкости и т. д.). Однако мы обнаружили, что очень часто он вообще ничего не мог воспроизвести.

Проведя некоторую интроспекцию во время выполнения, мы обнаружили, что проигрыватель всегда корректно буферизуется из сети. Но когда он столкнется с событием isPlaybackLikelyToKeepUp, он установит в поле rate проигрывателя значение 1, указывающее, что он воспроизводится, но чаще всего на самом деле не воспроизводит звук. Об ошибках не сообщалось, и поэтому из всего, что мы могли сказать, сам плеер думает, что он действительно играет, когда это не так. Мы обнаружили, что это зависание происходит только тогда, когда мы настроили устройство AirPlay для вывода звука.

Итак, мы обнаружили, что в определенных обратных вызовах событий и других ключевых местах, если мы добавим простой однострочный код:

if( self.avPlayer.rate == 1 ){ self.avPlayer.rate = 1; }

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

person Spencer Nielsen    schedule 18.12.2017
comment
определенные обратные вызовы событий и другие ключевые места Что это за места? - person anitteb; 21.02.2018
comment
Такие места, как обратные вызовы, которые запускаются при получении буферов, изменении состояния воспроизведения и т.п. Идея состоит в том, чтобы просто поставить галочку в достаточном количестве мест, которые выполняются достаточно часто, чтобы быстро удалить все, что задерживает фактическое воспроизведение. - person Spencer Nielsen; 22.02.2018