我正在尝试使用 AVFoundation 播放视频。我使用以下代码作为将播放前进一帧的按钮。
它间歇性地工作,在某些执行中它会做正确的事情并前进一帧,但大多数时候我必须按按钮 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];
感谢您的帮助!
这不是很明显(因为奇怪的是它只在 AVPlayerItem 而不是 AVPlayer 中可用),但如果 AVPlayerItem 返回 YEScanStepForward/canStepBackward
然后你可以打电话stepByCount:(NSInteger)stepCount:
向前或向后移动一定数量的帧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)