草庐IT

ios - addPeriodicTimeObserverForInterval 调用额外时间

coder 2023-09-27 原文

我有一个带有 4 秒视频的 AVPlayer(NSTimeInterval duration = CMTimeGetSeconds(self.playerItem.asset.duration) = 4)。

我想通过更改来更新 UI:

self.periodicTimeObserver = [self.player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {

    [weakSelf currentTimeDidChange:CMTimeGetSeconds(time)];

}];

但由于某些原因,我收到了对 UI 的额外调用:

- (void)currentTimeDidChange:(NSTimeInterval)currentTime {
    NSLog(@"timePassed %f, total: %f", currentTime, self.duration);
}

日志:

2015-07-23 13:47:07.412   timePassed 0.000000, total: 4.000000
2015-07-23 13:47:07.448   timePassed 0.002814, total: 4.000000
2015-07-23 13:47:07.450   timePassed 0.005481, total: 4.000000
2015-07-23 13:47:08.447   timePassed 1.001473, total: 4.000000
2015-07-23 13:47:09.446   timePassed 2.001612, total: 4.000000
2015-07-23 13:47:10.446   timePassed 3.002021, total: 4.000000
2015-07-23 13:47:11.446   timePassed 4.002139, total: 4.000000
2015-07-23 13:47:12.445   timePassed 5.001977, total: 4.000000
2015-07-23 13:47:12.492   timePassed 5.046618, total: 4.000000

感谢任何帮助

最佳答案

你需要确定你没有多次调用 periodicTimeObserver 所以写这段代码

if (self.periodicTimeObserver == nil){
self.periodicTimeObserver = [self.player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {

    [weakSelf currentTimeDidChange:CMTimeGetSeconds(time)];

}];
}

然后在您的视频播放完毕后立即移除观察者

[player removeTimeObserver:self.periodicTimeObserver];
self.periodicTimeObserver = nil;

关于ios - addPeriodicTimeObserverForInterval 调用额外时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31588482/

有关ios - addPeriodicTimeObserverForInterval 调用额外时间的更多相关文章

随机推荐