Моей компании нужно приложение для видео, поэтому я начинаю работать вчера.
Вы можете увидеть этот код avplayer:
// to get palying time
-(void)addProgressObserver{
__weak typeof(self) weakSelf = self ;
//这里设置每秒执行一次
[self.player addPeriodicTimeObserverForInterval:CMTimeMake(1.0, 1.0) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
double current=weakSelf.player.currentItem.duration.value/weakSelf.player.currentItem.duration.timescale*1.0;
weakSelf.playerProgressDuration = current ;
}];
}
// to get total time
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
AVPlayerItem *playerItem=object;
if ([keyPath isEqualToString:@"status"]) {
AVPlayerStatus status= [[change objectForKey:@"new"] intValue];
if(status==AVPlayerStatusReadyToPlay){
self.playerTotalDuration = playerItem.duration.value / playerItem.duration.timescale * 1.0 ;
}
}
}
Вы можете увидеть этот код. метод addProgressObserver может получить игровое время:
weakSelf.playerProgressDuration = current ;
метод KVO может прослушивать свойство (имя свойства — «статус») и получать общее время видео:
self.playerTotalDuration = playerItem.duration.value / playerItem.duration.timescale * 1.0 ;
но, собрав этот код и запустив ipad 3 (ios 8.1), я могу найти проблему:
Воспроизведение видео завершено, но self.playerProgressDuration не может равняться self.playerTotalDuration!
Поэтому я добавляю уведомление: AVPlayerItemDidPlayToEndTimeNotification, но уведомление не может быть выполнено!
Вопрос: 1、Воспроизведение видео завершено, почему self.playerProgressDuration не может равняться self.playerTotalDuration? 2. Воспроизведение видео завершено. Почему уведомление не выполняется?
Пожалуйста, помогите мне, спасибо.