2016-01-10 5 views
0

Идущие El Capitan с Xcode 7.1.1 разработки TVos 9,1/IOS 9.2Приостановка видеопотока с playerViewController на TVos

Я работает этот код под 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]; 
     }); 

Bon, и с помощью пульта дистанционного управления он ведет себя так же, как и следовало ожидать. Но я хочу реализовать кнопку удаленного паузы в коде; который я использую 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]; 
}); 
} 

Является ли это правильный подход, или я должен делать что-то еще, чтобы добиться такого эффекта?

ответ

0

Я думаю, что нашел ответ на этот вопрос здесь.

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

кажется playerViewController как автоматический перезапуск встроенными, так что даже если я делаю паузу, он сразу перезагружается. Заметили, что меню всплывает, а затем исчезает, когда я пытаюсь сделать паузу.

Который оставляет меня одним вариантом. Убейте playerViewController.

+0

Да, я подтвердил это. Я просто использовал AVPlayer + AVPlayerLayer, и у меня было намного больше контроля, конечно, теперь мне нужно реализовать все элементы управления, что, очевидно, сложнее, чем вы думаете. – user3069232