2016-02-19 2 views
0

Моя компания нуждается в видеоприложении, поэтому я начинаю работать вчера.Почему неправильное время avplayer в iOS

Вы можете увидеть этот код 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 ; 

метод КВО может слушать свойство (имя свойства является «состояние»), и получить общее время данного видео:

self.playerTotalDuration = playerItem.duration.value/playerItem.duration.timescale * 1.0 ; 

но , bulid этот код и работает ipad 3 (ios 8.1), я могу найти проблему:

Воспроизведение видео завершено, но self.playerProgressDuration не может равняться self.playerTotalDuration!

Поэтому я добавляю уведомление: AVPlayerItemDidPlayToEndTimeNotification, но уведомление не может быть выполнено!

Вопрос: 1, Воспроизведение видео завершено, почему self.playerProgressDuration не может равняться self.playerTotalDuration? 2, Воспроизведение видео завершено, Почему уведомление не выполняется?

Пожалуйста, помогите мне, спасибо.

ответ

0

1, пожалуйста, используйте double или int_64; 2, потому что у объекта уведомления есть ошибка! установите nil или AVPlayerItem на объект уведомления, не можете установить AVPlayer на объект уведомления!