2014-10-22 1 views
3
AVPlayerItem *currentItem = self.player.currentItem; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:currentItem]; 

위의 알림 설정이 있습니다. 그러나 iOS 7에서 테스트를 실행할 때 환상적으로 호출됩니다. 그러나 iOS 8을 사용하여 응용 프로그램을 실행하면 절대로 호출되지 않습니다.iOS에서 AVPlayerItemDidPlayToEndTimeNotification이 호출되지 않습니다.

답변

4

비율 키 패스에 관찰자를 등록하면 해결됩니다.

[self.player addObserver:self forKeyPath:@"rate" options:0 context:nil]; 

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context { 
if (self.player.rate == 0.0) { 
    CMTime time = self.player.currentTime; 
    if (time >= duration) { 
     //song reached end 
    } 
} 
3

위의 대답은 부정확합니다. 이것은 내가해야 할 일을했을 것입니다 :

if ([keyPath isEqualToString:@"rate"]) { 

    if (_player.rate == 0.0) { 
     CMTime time = _player.currentTime; 
     NSTimeInterval timeSeconds = CMTimeGetSeconds(time); 
     CMTime duration = _player.currentItem.asset.duration; 
     NSTimeInterval durationSeconds = CMTimeGetSeconds(duration); 
     if (timeSeconds >= durationSeconds - 1.0) { // 1 sec epsilon for comparison 
      [_delegate playerDidReachEnd:_player]; 
     } 
    } 
} 

이 참고로, 내가 원격 URL의 오디오 파일을로드하고있어,이 허용 오차에 관해서 차이를 만드는 있는지 확실하지 않습니다.

+0

이 답변은 저에게 더 좋았습니다 - 허용 된 답변이 내 "didReachEnd"방법을 두 번 실행했습니다 –

+0

신속하게 변경할 수 있습니까? – Jan