我有一个显示视频的应用程序,我们拦截所有暂停事件并阻止用户在视频中搜索对我们非常重要 .

在设备上进行操作非常简单,我们只是对用户进行常规'控制',而在 -remoteControlReceivedWithEvent: 中,我们将包含我们真正感兴趣的所有事件 .

但我们正在努力支持Apple TV . 我们的理解是它应该将从Apple Remote发送的所有事件转发到我们的应用程序,如[0]所示:

使用AirPlay时,您的媒体可能正在从主机设备的另一个房间播放 . AirPlay输出设备可能有自己的控件或响应Apple遥控器 . 为了获得最佳用户体验,您的应用应该监听并响应远程事件,例如播放,暂停和快进请求 . 启用远程事件还允许您的应用响应插入主机设备的耳机或耳塞上的控件 .

但是,就我从调试和拉头发中看到的情况而言,由于AVPlayer的 allowsExternalPlayback 属性默认为 YES ,因此它无法做任何事情来使视频在电视上播放 .

如果我正确理解文档,在Apple TV使用该模式时,只有来自设备的URL /数据被发送到Apple TV,而aTV根据[1]自行完成解码和渲染部分:

外部播放模式是指通过AirPlay将视频数据发送到Apple TV等外部设备,以及基于迷你连接器的HDMI / VGA适配器,以原始保真度进行全屏播放 . AirPlay视频播放也被视为“外部播放”模式 .

这可以解释为什么我没有在设备上收到任何事件(例如,Apple的某个人认为,因为aTV完成了繁重的工作,实际上是解码和渲染,设备上的应用程序不应该接收这些事件) .

所以,我的问题基本上是这样的 - 我在森林里是否有任何明显的树,或者除了其中任何一种之外我没有退路:

  • 丑陋的黑客使用KVO播放位置和播放率,并惩罚用户'cheating'

  • 自己重新实现整个视频渲染,将电视屏幕视为第二显示

任何指针将不胜感激 .

[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