在视频播放期间响应 Apple tv 控件
Posted
技术标签:
【中文标题】在视频播放期间响应 Apple tv 控件【英文标题】:Respond to apple tv controls during video playback 【发布时间】:2015-12-03 14:07:31 【问题描述】:我有一个带有 AVPlayer 的应用来播放视频。我希望能够检测到用户何时按下了遥控器上的按钮。我尝试实现以下方法,但是 remoteControlReceivedWithEvent() 不响应任何控制事件。
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
//if it is a remote control event handle it correctly
if (event.type == UIEventTypeRemoteControl)
if (event.subtype == UIEventSubtypeRemoteControlPlay)
NSLog(@"play");
else if (event.subtype == UIEventSubtypeRemoteControlPause)
NSLog(@"pause");
else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause)
NSLog(@"toggle");
- (BOOL)canBecomeFirstResponder
return YES;
- (void)viewDidAppear:(BOOL)animated
// Setup Apple TV control events
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
- (void)viewWillDisappear:(BOOL)animated
// Remove Apple TV control events
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
任何帮助将不胜感激,谢谢!
【问题讨论】:
【参考方案1】:您使用 UITapGestureRecognizer 来检测 tvOS 上的按钮点击。设置 allowedPressType 属性(例如设置为 @[@(UIPressTypePlayPause)])。
但是,您不应在 tvOS 上实现自定义交互式播放 UI。相反,使用 AVPlayerViewController (AVKit)。您的自定义播放器将大大低于用户的期望(Siri 命令不起作用、某些遥控器不起作用、您的手势会略有不同等)。
如果您发现 AVPlayerViewController 在其他平台上的限制过多,请再看一下 - tvOS 上有许多用于增强播放的新 API,包括外部元数据和插页式广告。
【讨论】:
嗨,Dan,感谢您的回复,但这不是与 tvOS 相关的问题。我只是指 Apple TV(第一代、第二代或第三代)上的正常播放。 遥控器是否与您的 AirPlay-ing 机器(OS X 或 ios)配对? Apple TV 上不需要配对。遥控器无论如何都可以工作。【参考方案2】:这似乎是使用 Xcode 7/iOS 9 SDK 构建的项目的问题。使用 Xcode 6 尝试了同样的事情,效果很好。 我已经向 Apple 错误报告者提出了这个问题。
【讨论】:
【参考方案3】:虽然您无法通过远程控制事件检测到这一点,但可以通过监控播放器的播放速率来检测代码中列出的事件。
如果使用 AVPlayer,请为“rate”添加一个 KVO 侦听器。当它变为 0.0 时,播放已暂停,当它变为 1.0 时,它会再次播放。
我已经成功地使用它来更新我的 UI 控件以反映当前状态。
【讨论】:
感谢回复,我已经实现了。但是,可以检测到远程控制事件(如上面的代码),Apple 开发支持已经证实了这一点。这适用于使用 iOS 8 SDK 及更低版本构建的应用程序,iOS 9 SDK 打破了这一点。 Apple 正在努力修复。 我希望你是对的。我试图让它工作很长时间,但它仍然没有出现在我的代码中,尽管它与上面的示例几乎相同。此外,许多其他人认为只有控制中心事件在起作用,而不是遥控器。不过,如果你说的是正确的,也许还有另一个原因它对我不起作用。以上是关于在视频播放期间响应 Apple tv 控件的主要内容,如果未能解决你的问题,请参考以下文章
是否可以强制 AVPlayer 停止在外部播放视频(在 Apple TV 上)
从IOS设备播放音频/视频内容到Apple TV的起点[关闭]