所以我有一个 HLS 流,我有 AVPlayer 播放。我正在尝试创建一个按钮来跳回 30 秒,如下所示:
- (void) rewindStream
{
NSLog(@"Seeking...");
NSLog(@"Current Time: %f", CMTimeGetSeconds(self.player.currentTime));
NSLog(@"New Time: %f", CMTimeGetSeconds(CMTimeMakeWithSeconds(CMTimeGetSeconds(self.player.currentTime) - 30.0f, self.player.currentTime.timescale)));
[self.player pause];
CMTime cmTime = CMTimeMakeWithSeconds(CMTimeGetSeconds(self.player.currentTime) - 30.0f, self.player.currentTime.timescale);
[self.player seekToTime:cmTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:^(BOOL finished) {
NSLog(@"Complete. Current Time: %f", CMTimeGetSeconds(self.player.currentTime));
[self.player play];
}];
}
有时有效,但有时无效。这是日志:
Seeking...
Current Time: 47.253361
New Time: 37.254001
Complete. Current Time: 37.254944
Seeking...
Current Time: 59.409800
New Time: 49.410447
Complete. Current Time: 50.103244
Seeking...
Current Time: 68.780054
New Time: 58.780436
Complete. Current Time: 60.086244
Seeking...
Current Time: 80.493733
New Time: 70.494375
Complete. Current Time: 80.140578
Seeking...
Current Time: 92.674773
New Time: 82.675062
Complete. Current Time: 110.135244
我设置了容差,并且我确保为段下载/缓冲留出足够的时间,以便可以进行查找,但我不确定可能是什么问题。
任何帮助将不胜感激。
谢谢。
最佳答案
我总是使用 60000 的时间刻度,这对几乎任何事情都提供了足够的准确性。不确定这是否是您的问题,但我发现我的大部分 CMTime 问题都是在我解决这个问题之前出现的。 Warren Moore 在 http://warrenmoore.net/understanding-cmtime 有一篇很棒的文章描述了这一点
关于ios - AVPlayerseekTo不准确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24431440/