5

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

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

4

3 回答 3

0

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

于 2015-09-21T22:37:44.917 回答
0

虽然您无法通过远程控制事件检测到这一点,但可以通过监控播放器的播放速率来检测代码中列出的事件。

如果使用 AVPlayer,请为“rate”添加一个 KVO 侦听器。当它变为 0.0 时,播放已暂停,当它变为 1.0 时,它正在再次播放。

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

于 2015-10-19T10:30:05.437 回答
-1

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

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

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

于 2015-09-13T08:20:07.180 回答