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 を使用している場合は、「レート」の KVO リスナーを追加します。これが 0.0 に変わると再生が一時停止され、1.0 に変わると再生が再開されます。

これを使用して、現在の状態を反映するように UI コントロールを更新しました。

于 2015-10-19T10:30:05.437 に答える
-1

UITapGestureRecognizer を使用して、tvOS でのボタンのクリックを検出します。allowedPressType プロパティを設定します (例: @[@(UIPressTypePlayPause)])。

ただし、カスタムの対話型再生 UI を tvOS に実装しないでください。代わりに、AVPlayerViewController (AVKit) を使用してください。カスタム プレーヤーは、ユーザーの期待を大幅に下回ります (Siri コマンドが機能しない、一部のリモコンが機能しない、ジェスチャがわずかに異なるなど)。

他のプラットフォームで AVPlayerViewController があまりにも制限的であることがわかった場合は、もう一度確認してください。tvOS には、外部メタデータやインタースティシャルなど、再生を強化するための新しい API が多数あります。

于 2015-09-13T08:20:07.180 に答える