Почему время 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 ;

метод 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. Воспроизведение видео завершено. Почему уведомление не выполняется?

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


person user5465320    schedule 19.02.2016    source источник


Ответы (1)


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

person user5465320    schedule 19.02.2016