私はAVPlayerLayer
とAVPlayer
で私のアプリでビデオプレーヤーをビルドします。AVPlayerLayerとAVPlayer
新しいビデオは、私はこの方法を行う選択された場合:
//this to remove the current video
if (avPlayerLayer) {
[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:[audioPlayer currentItem]];
[avPlayerLayer.player pause];
[avPlayerLayer removeFromSuperlayer];
avPlayerLayer = nil;
}
//and this is to add a new one
audioPlayer = [[AVPlayer alloc]initWithURL:[NSURL fileURLWithPath:fileName]];
avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:audioPlayer] retain];
[avPlayerLayer setFrame:self.view.bounds];
CGRect frame = avPlayerLayer.frame;
[avPlayerLayer setFrame:CGRectMake(frame.origin.x, frame.origin.y - 30, frame.size.width, frame.size.height)];
[[self.view layer] addSublayer:avPlayerLayer];
[audioPlayer play];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(finishPlayingSong)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[audioPlayer currentItem]];
[audioPlayer release];
さて、私はデバイスがビデオの再生を開始しないで、この方法を実行し、いくつかの回(それはだ同時に発生していない同じ映像上)。それはなぜ起こるか?どのように私はそれを処理することができますか?
編集
私は5曲を演奏した後に気付きました。
avplayerの代理メソッドが利用可能な場合、なぜ通知を使用していますか? audioplayer.delegate = nilを設定して、audioplayerをnilに設定し、新しいプレーヤーを初期化しながらデリゲートをselfに設定します。 –
AVPlayerには代理メソッドがありますか?本気ですか? – MTA
申し訳ありませんが、私の混乱は、デリゲートメソッドを持つAVAudioplayerです。 –