AVQueuePlayer
AVPlayerItems
의 배열을 통해 루프를 사용하여 메신저를 호출하지 못했습니다. 내가 루핑하는 방식은 AVPlayerItemDidPlayToEndTimeNotification
이고, 호출 될 때마다 현재 오브젝트를 큐의 끝에 추가합니다. 을 heres 코드 :AVQueuePlayer AVPlayerItemDidPlayToEndTimeNotification
viewWillAppear
{
...
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[_queuePlayer currentItem]];
[_queuePlayer play];
}
- (void)playerItemDidReachEnd:(NSNotification *)notification {
AVPlayerItem *p = [notification object];
AVPlayerItem *fakeNew = [[AVPlayerItem alloc] initWithAsset:p.asset];
if (_queuePlayer.items.count == 1)
{
[p seekToTime:kCMTimeZero];
[_queuePlayer play];
}
else
{
[_queuePlayer insertItem:fakeNew afterItem:[_queuePlayer.items lastObject]];
}
NSLog(@"array of items to play:%lu", (unsigned long)_queuePlayer.items.count);
}
문제는 방법은, 그 후, 메서드를 호출하기 중지 만 재생되는 첫 번째 비디오 요구되는, 예를 들면 내가 배열이 영화가 있다면 그래서, 두 가지 + 첫 번째 또 다시 재생할 것입니다. 왜 이런 일이 일어 났습니까?
추가 정보 : 도 매번 새로운 플레이어를 만들어 레이어에 설정하려고했습니다. 어떤 이유로, 때마다 관찰자로 등록되지 않은 뷰에 대해 분명히, 그냥 같은
- (void)playerItemDidReachEnd:(NSNotification *)notification {
AVPlayerItem *p = [notification object];
[self.playList removeObjectAtIndex:0];
[self.playList addObject:p];
AVPlayer *newPlayer = [[AVPlayer alloc] initWithPlayerItem:[self.playList objectAtIndex:0]];
_player = newPlayer;
self.AVPlayerLayerView.layer.player = self.player;
[_player play];
}
, 따라서 당신은뿐만 아니라 currentItem, 그 배열의 각 playerItem에 대한 AVPlayerItemDidPlayToEndNotification 등록해야 – ambientlight