我正在尝试使用AVFoundation播放视频。我使用以下代码来实现按一次按钮推进播放一帧的功能。
它的效果是间歇性的,有些时候它会推进一帧,但大多数情况下,我需要按3或4次按钮才能推进一帧。
这让我认为这是某种精度问题,但我无法弄清楚是什么问题。每次运行时,新的CMTime似乎都按相同的数量推进。
我的另一个理论是,这可能是由于currentTime没有设置为我帧速率下的精确帧边界(由于浏览视频而导致)。但我不知道如何“捕捉”到我帧速率下最近的帧。
感谢您的帮助!
它的效果是间歇性的,有些时候它会推进一帧,但大多数情况下,我需要按3或4次按钮才能推进一帧。
这让我认为这是某种精度问题,但我无法弄清楚是什么问题。每次运行时,新的CMTime似乎都按相同的数量推进。
我的另一个理论是,这可能是由于currentTime没有设置为我帧速率下的精确帧边界(由于浏览视频而导致)。但我不知道如何“捕捉”到我帧速率下最近的帧。
AVAssetTrack *videoTrack = ...;
Float64 frameRate = [videoTrack nominalFrameRate];
CMTime currentTime = [self.playerItem currentTime];
CMTime oneFrame = CMTimeMakeWithSeconds(1.0 / frameRate, currentTime.timescale);
CMTime added = CMTimeAdd(currentTime, oneFrame);
[self.player seekToTime:added toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
感谢您的帮助!