这个问题是在我打开一个非常依赖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的观测值