ios - AVPlayer seekTo 不准确

标签 ios objective-c stream streaming avplayer

所以我有一个 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 - AVPlayer seekTo 不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24431440/

相关文章:

ios - UINavigationBar 子类上的 “Auto Layout still required after executing -layoutSubviews"

ios - NSData 查找字节序列

ios - 提示 iOS 用户选择要由应用程序处理的 JPEG

ios - 通过函数 prepare for segue 将数据传递给 ViewController 不起作用

ios - post api调用swift发送参数

c# - 在 .NET 应用程序中检测重定向控制台输出中的关闭管道

java - 是否可以使用java读取传入数据流,从服务器到.exe客户端(使用C++编码)?

java套接字/输出流写入: do they block?

iOS:保持 View 不变或在各种 ViewController 之间传递 View

iphone - 如何添加HUD? (iOS)