有时AVPlayer会因AVPlayerItemStatusFailed
失败,并且在失败发生后,AVPlayer会继续AVPlayerItemStatusFailed
失败。我试图清除AVPlayer实例并创建新实例,但我无法解决AVPlayerItemStatusFailed
失败。另外removingFromSuperview
UIView
使用AVPlayer实例并使用AVPlayer初始化新项目也无法解决问题。
所以我认为AVPlayer无法完全清除。是否有人建议完全清除AVPlayer并使其在失败后工作?
错误日志:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x1a689360 {NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x1a688e70 "The operation couldn’t be completed. (OSStatus error -12983.)", NSLocalizedFailureReason=An unknown error occurred (-12983)}
UPD。 对于@matt
playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:filePath.path]];
if (!self.avPlayer) {
avPlayer = [AVPlayer playerWithPlayerItem:playerItem];
}
[avPlayer.currentItem addObserver:self forKeyPath:@"status" options:0 context:nil];
if (self.avPlayer.currentItem != self.playerItem) {
[self.avPlayer replaceCurrentItemWithPlayerItem:playerItem];
}
AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
avPlayerLayer.frame = self.bounds;
[self.layer addSublayer:avPlayerLayer];
avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
[avPlayer play];
答案 0 :(得分:7)
问题是这一行是无条件的:
[self.layer addSublayer:avPlayerLayer];
因此,您每次都要添加一个新的播放器图层。因此,你正在堆积许多玩家层。这是错的。必须只有一个。保持对旧玩家图层的引用并在添加玩家图层之前删除它,或者,如果这是与之前相同的玩家,并且它已经在界面中具有关联的玩家图层,则不执行任何操作。
答案 1 :(得分:0)
使用playerItem = nil创建AVPlayer的sharedInstance。 下次只替换ThePlayerItem。
答案 2 :(得分:0)
它有时发生在iOS模拟器中,
尝试重新启动模拟器可能会工作。 :)