现在 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey 已被弃用,找到播放结束原因的最佳方法是啥?

Posted

技术标签:

【中文标题】现在 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey 已被弃用,找到播放结束原因的最佳方法是啥?【英文标题】:Now that MPMoviePlayerPlaybackDidFinishReasonUserInfoKey is deprecated, what is the best way to find why playback ended?现在 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey 已被弃用,找到播放结束原因的最佳方法是什么? 【发布时间】:2015-10-20 13:34:08 【问题描述】:

ios9 中,MPMoviePlayer 类已全部弃用,取而代之的是 AVPlayer。我有一个使用 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey 的现有应用程序来确定如何记录有关视频播放器如何结束的事件。我如何对 AVPlayer 做同样的事情?

以下是结束原因键:

MPMovieFinishReasonPlaybackEnded MPMovieFinishReasonPlaybackError MPMovieFinishReasonUserExited

【问题讨论】:

【参考方案1】:

在 AVKit 中没有 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey 和 MPMoviePlayerPlaybackDidFinishNotification 等价物。要在 AVKit 中完成相同的功能,您必须分别收听三个通知,而不是一个具有不同可能原因的通知。

MPMovieFinishReasonPlaybackEnded >>> AVPlayerItemDidPlayToEndTimeNotification MPMovieFinishReasonPlaybackError >>> AVPlayerItemFailedToPlayToEndTimeNotification MPMovieFinishReasonUserExited。没有转换。有多种方法可以检测用户是否杀死了玩家。一个是检测模式已关闭。

如果你想知道视频是否正在播放,你可以做一个 KVO:

[self.player addObserver:self forKeyPath:@"rate" options:0 context:nil];

然后添加这个方法:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 

    if ([keyPath isEqualToString:@"rate"]) 
        if ([self.player rate]) 
            [self changeToPause];  // This changes the button to Pause
        
        else 
            [self changeToPlay];   // This changes the button to Play
        
    

【讨论】:

谢谢!所有这些迅速的变化都耗费了大量的时间。干杯。【参考方案2】:

试试看,viewDidLoad:

    AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"yoururl"]];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:playerItem];

    AVPlayer* player = [[[AVPlayer alloc] initWithPlayerItem:playerItem] autorelease];

    [player play]

-(void)itemDidFinishPlaying:(NSNotification *) notification 
    // Will be called when AVPlayer finishes playing playerItem

【讨论】:

以上是关于现在 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey 已被弃用,找到播放结束原因的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

英语一般现在时的基本结构

JavaScript 现在BOM还有用吗?

英语里 现在分词做定语flying saucer(飞碟现在分词做定语此处不是正在) running

不定式做结果状语与现在分词作状语的区别

请问现在NOIP允许哪些STL模板

会用且现在能用SPSS的人进来~急!!!