使用AVPlayer外部播放模式时从Apple TV发送的UIEvents

Jan*_*usa 6 objective-c ipad ios avplayer airplay

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

在设备上执行它非常简单,我们只是不向用户公开任何"常规"控件,并且在中-remoteControlReceivedWithEvent:,我们包装了我们真正感兴趣的所有事件.

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

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

但是,就我从调试和拔发中看到的情况而言,它不适用于让AVPlayer处理显示视频的情况.我们实际上根本不做任何事情来制作视频在电视上播放,因为AVPlayer的allowsExternalPlayback属性是YES默认的.

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

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

这可能解释了为什么我没有在设备上收到任何事件(例如,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