Ios8 iOS 8未调用AvPlayerItemDidPlaytoEndTime通知
我有上面的通知设置。当我用iOS 7运行测试时,它被调用得非常棒,然而,当我用iOS 8运行应用程序时,它从来没有被调用过 通过将观察者注册到速率键路径来解决该问题Ios8 iOS 8未调用AvPlayerItemDidPlaytoEndTime通知,ios8,nsnotification,avplayeritem,Ios8,Nsnotification,Avplayeritem,我有上面的通知设置。当我用iOS 7运行测试时,它被调用得非常棒,然而,当我用iOS 8运行应用程序时,它从来没有被调用过 通过将观察者注册到速率键路径来解决该问题 AVPlayerItem *currentItem = self.player.currentItem; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerIte
AVPlayerItem *currentItem = self.player.currentItem;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:currentItem];
投赞成票的答案不准确。这就是我必须做的:
[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
}
}
作为参考,我正在加载一个远程URL音频文件,不确定这是否会对公差产生任何影响。这个答案对我来说更好-接受的答案是启动我的DidReachen方法twicecan您可以更改为swift吗?二进制表达式“CMTime”和“CMTime”的操作数无效
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];
}
}
}