iOS 9:带有AVPlayer的旧项目停止播放视频-没有错误消息



这个问题是在我打开一个非常依赖AVPlayers的旧项目时出现的:没有显示或播放任何视频,尽管没有显示控制台消息,代码方面的事情看起来很正常。以下是一些对我来说存在问题的代码:

            AVPlayer *player = [AVPlayer playerWithURL: [[NSBundle mainBundle] URLForResource:@"IMG_8481" withExtension:@"MOV"]];
            AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer: player];
            [self.layer addSublayer: playerLayer];
            [player play];

我不确定这里出了什么问题,但我没有播放视频。

我检查过的东西:-该层可见(通过设置其背景颜色进行检查)-玩家不是零,或者被解除分配-播放器上的currentItem属性不是零-视频文件是在iPhone上录制的,然后用Image Capture完成的,所以应该很好。

有什么想法吗?我将非常感谢:)

使用KVO来监控玩家的状态。当您获得失败状态时,请查看AVPlayer的错误属性以了解更多信息。关于在https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html#//apple_ref/doc/uid/TP40010188-CH3-SW8.

使用KVO可以通知玩家状态的更改,如下所示:

[self.playerItem addObserver:self 
      forKeyPath:@"status"
      options:NSKeyValueObservingOptionNew
      context:nil];

当状态发生变化时,将调用此方法:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                    change:(NSDictionary *)change context:(void  *)context {
    if (object == self.playerItem && [keyPath isEqualToString:@"status"]) {
        // you can get status here
    }
}

如果您的代码在iOS 8中运行良好,但在iOS 9中运行不正常,则应确认应用程序传输安全设置。请参阅:iOS9 中AVPlayerItem的观测值

最新更新