Я создаю видеопроигрыватель в своем приложении с 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 вместе с настройкой аудиоплеера на нуль и при инициализации нового игрока установите для себя делегат. –
У AVPlayer есть методы делегирования? ты уверен? – MTA
жаль, что это было мое замешательство, его AVAudioplayer, у которого есть метод делегатов. –