0%

AVPlayer seek 视频不精确,可通过重新编码解决

近期发现公司项目中的视频文件 seek 不准,误差在 0.1s~0.2s之间
并且已经使用了以下方法:

  • 全部转成 CMTime 来 seek

  • seekToTime:toleranceBefore:toleranceAfter: 方法的前后参数全部是 kCMTimeZero

该问题是跨平台问题,,在 macOS下也可以复现。

如果采用 ffmpeg,则 seek 准确。但项目是基于 AVPlayer 写的,已不可能全部改成ffmpeg。因此考虑编码问题

经过测试,以下编码可以使得 AVPlayer 的 seek 精确。其原理可能是重新分配了关键帧

ffmpeg -i {原始mp4} -vcodec libx264 -x264-params min-keyint=24 -force_key_frames "expr:gte(t,n_forced*1)" {输出mp4}