我有一个 4 秒视频 ( NSTimeInterval duration = CMTimeGetSeconds(self.playerItem.asset.duration)
= 4)的 AVPlayer 。
我想通过更改更新用户界面:
self.periodicTimeObserver = [self.player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
[weakSelf currentTimeDidChange:CMTimeGetSeconds(time)];
}];
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,我收到了对 UI 的额外调用:
- (void)currentTimeDidChange:(NSTimeInterval)currentTime {
NSLog(@"timePassed %f, total: %f", currentTime, self.duration);
}
Run Code Online (Sandbox Code Playgroud)
日志:
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
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏
您需要确保您没有多次调用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)];
}];
}
Run Code Online (Sandbox Code Playgroud)
然后一旦您的视频播放完毕就删除观察者
[player removeTimeObserver:self.periodicTimeObserver];
self.periodicTimeObserver = nil;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4209 次 |
最近记录: |