0

TVos 9.1 / IOS 9.2 を開発する Xcode 7.1.1 で El Capitan を実行する

このコードを TVos で実行しています ...

-(void)runVideo {
    self.avPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:videoHLS]];
    avPlayerItem = self.avPlayer.currentItem;
    [avPlayer.currentItem addObserver:self forKeyPath:@"status" opt    ons:NSKeyValueObservingOptionNew context:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:avPlayerItem];
    playerViewController = [[AVPlayerViewController alloc] initWithNibName:nil bundle:nil];
    playerViewController.player = avPlayer;
    playerViewController.view.frame = self.view.frame;
    [self addChildViewController:playerViewController];
    [self.view addSubview:playerViewController.view];

    [playerViewController didMoveToParentViewController:self];
}  

私が呼び出すと動作します...

dispatch_async(dispatch_get_main_queue(), ^(void) {
            [playerViewController.player play];
        });

私が電話したときにも機能します...

dispatch_async(dispatch_get_main_queue(), ^(void) {
            [avPlayer play];
        });

ボン、そしてリモコンを使用すると、期待どおりに動作します. しかし、コードでリモート一時停止ボタンを実装したいと考えています。Bluetoothを使用して行っていますが、再生が開始されると再生を一時停止できません。私はこれらすべてを試しましたが、コンパイルしてプレーヤーをクラッシュさせませんでした。私が管理した最善の方法は、ほとんど一時停止せずに完全に殺すことです。

-(void)doPause {
//NSLog(@"self.playerViewController.player.rate %f",self.playerViewController.player.rate);
    self.playerViewController.player.rate = 0.000000;
    playerViewController.player.rate = 0.000000;
    [self.playerViewController.player pause];
    [self.avPlayer pause];
    self.avPlayer.rate = 0.000000;
    avPlayer.rate = 0.000000;
    [self.avPlayer.currentItem cancelPendingSeeks];
    [self.avPlayer.currentItem.asset cancelLoading];
    self.playerViewController.player.rate = 0.000000;
    [self.playerViewController player].rate = 0.000000;

// これによりプレイヤーが強制終了され、親 VC に戻されます

dispatch_async(dispatch_get_main_queue(), ^(void) {
    [playerViewController willMoveToParentViewController:nil];
    [playerViewController.view removeFromSuperview];
    [playerViewController removeFromParentViewController];
});
}

これは正しいアプローチですか、それともこの効果を達成するために何か他のことをする必要がありますか?

4

1 に答える 1

0

ここでこの質問に対する答えを見つけたと思います。

https://forums.developer.apple.com/message/81573#81573

playerViewController は組み込みの自動再起動のように見えるので、一時停止してもすぐに再起動します。一時停止しようとすると、メニューがポップアップして消えてしまうことに気付きました。

それは私に1つのオプションを残します。playerViewController を殺します。

于 2016-01-10T14:28:46.713 に答える