UIEvents, отправленные с Apple TV при использовании внешнего режима воспроизведения AVPlayer

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

Делать это на устройстве довольно просто, мы просто не раскрываем никаких «обычных» элементов управления для пользователя, а в -remoteControlReceivedWithEvent: мы -remoteControlReceivedWithEvent: все события, которые нас действительно интересуют.

Но мы боремся за поддержку Apple TV. Мы понимаем, что он должен отправлять все события, отправленные с Apple Remote в наше приложение, согласно [0]:

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

Однако, насколько я могу видеть из моей отладки и вытаскивания волос, это не относится к случаям, когда вы позволяете AVPlayer обрабатывать отображение вашего видео. На самом деле, мы вообще ничего не делаем для того, чтобы видео воспроизводилось по телевизору, поскольку свойство allowsExternalPlayback свойствоExternalPlayback по умолчанию.

Если я правильно разбираюсь в документах, используя этот режим с Apple TV, на Apple TV отправляется только URL / данные с устройства, а aTV делает часть декодирования и рендеринга собственной, как [1]:

Режим внешнего воспроизведения – это когда видеоданные отправляются на внешнее устройство, такое как Apple TV через AirPlay, и адаптеры HDMI / VGA на мини-разъем для полноэкранного воспроизведения с его оригинальной точностью. Воспроизведение AirPlay Video также рассматривается как режим «внешнего воспроизведения».

что потенциально может объяснить, почему я не получаю никаких событий на устройстве (например, кто-то из Apple подумал, что, поскольку aTV делает тяжелую работу и фактически декодирует и визуализирует, приложения на устройстве не должны получать эти события).

Итак, мой вопрос в основном таков: есть ли какое-либо явное дерево, которое мне не хватает в лесу, или у меня нет никакого отступления, кроме:

  • уродливые хаки, использующие KVO в позиции воспроизведения и скорости воспроизведения, и наказывая пользователей за «обман»,
  • переопределение всего видеоизображения самостоятельно, просмотр экрана телевизора в качестве второго дисплея

Любые указатели будут очень благодарны.

[0] https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AirPlayGuide/EnrichYourAppforAirPlay/EnrichYourAppforAirPlay.html

[1] https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayer_Class/Chapters/Reference.html#//apple_ref/occ/cl/AVPlayer

Interesting Posts
Давайте будем гением компьютера.