近期发现公司项目中的视频文件 seek 不准,误差在 0.1s~0.2s之间
并且已经使用了以下方法:
全部转成
CMTime来 seekseekToTime: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}