【问题标题】:Pausing a video stream with playerViewController on TVos在 TVos 上使用 playerViewController 暂停视频流
【发布时间】:2016-01-10 13:04:03
【问题描述】:

使用 Xcode 7.1.1 运行 El Capitan 开发 TVos 9.1 / IOS 9.2

我在 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,使用遥控器,它的行为也符合您的预期。但我想在代码中实现一个远程暂停按钮;我使用蓝牙做的,只有播放开始后我无法暂停播放。我尝试了所有这些,它们编译并且不会使播放器崩溃,它们似乎什么也没做。我做到的最好的办法就是完全杀死它,几乎没有停顿。

-(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];
});
}

这是正确的方法还是我应该做其他事情来达到这种效果?

【问题讨论】:

    标签: ios objective-c avplayer m3u8 avplayerviewcontroller


    【解决方案1】:

    我想我在这里找到了这个问题的答案。

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

    playerViewController 似乎是一个内置的自动重启功能,所以即使我暂停它,它也会立即重启。当我尝试暂停时,注意到菜单弹出然后消失。

    这让我只有一个选择。杀死 playerViewController。

    【讨论】:

    • 是的,我确认了。我只是简单地使用了 AVPlayer + AVPlayerLayer 并且我有更多的控制权,当然现在我需要实现所有的控制,这显然比你想象的要困难。
    猜你喜欢
    • 2017-10-30
    • 2016-02-23
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多