在视频播放期间响应apple tv控件

时间:2015-09-08 02:45:56

标签: ios controls tvos apple-tv

我有一个带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];
}

任何帮助将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:0)

这似乎是使用Xcode 7 / iOS 9 SDK构建的项目的问题。使用Xcode 6试过同样的事情,效果很好。 我已经向Apple bug记者提出了这个问题。

答案 1 :(得分:0)

虽然您无法通过遥控器事件检测到这种情况,但可以通过监控播放器的播放速率来检测代码中列出的事件。

如果使用AVPlayer,请添加KVO听众以进行评分'。当此变为0.0时,播放暂停,当它变为1.0时,它再次播放。

我已成功使用此功能来更新我的UI控件以反映当前状态。

答案 2 :(得分:-1)

您使用UITapGestureRecognizer检测tvOS上的按钮点击。设置allowedPressType属性(例如设置为@ [@(UIPressTypePlayPause)])。

但是,您不应在tvOS上实现自定义交互式播放UI。相反,使用AVPlayerViewController(AVKit)。您的自定义播放器将远远低于用户的期望(Siri命令无法正常工作,某些遥控器无法正常工作,您的手势会略有不同等)。

如果您发现AVPlayerViewController对其他平台的限制太多,请再看一下 - tvOS上有许多新的API用于增强回放,包括外部元数据和插页式广告。