10

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)}

アップデート。 @マット用

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];
4

3 に答える 3

7

問題は、この行が無条件であることです。

[self.layer addSublayer:avPlayerLayer];

したがって、毎回新しいプレーヤーレイヤーを追加しています。したがって、多くのプレーヤー層を積み上げています。これは間違っています。1つだけある必要があります。古いプレーヤー レイヤーへの参照を保持し、プレーヤー レイヤーを追加する前にそれを削除します。または、これが以前と同じプレーヤーであり、関連付けられたプレーヤー レイヤーが既にインターフェイスにある場合は、何もしません。

于 2014-05-25T11:28:31.540 に答える
0

iOS シミュレーターで発生することがありました
。シミュレーターを再起動してみてください。動作する場合があります。:)

于 2018-01-11T07:13:12.507 に答える