Я записываю видео с просмотром в моем приложении.Для написания кадров я использую CADisplayLink
.Я настроил CADisplayLink
с этим кодом
_displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(writeVideoFrame)];
[_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
В writeVideoFrame
Я вычисляю cmtime
для добавления pixelbuffer
.
if (!self.firstTimeStamp) {
self.firstTimeStamp = _displayLink.timestamp;
}
CFTimeInterval elapsed = (_displayLink.timestamp - self.firstTimeStamp);
CMTime time = CMTimeMakeWithSeconds(elapsed, 1000);
Но когда я напечатал время на моем iPhone 7
и iPhone SE
, на iPhone 7 напечатано меньше, чем на iPhone SE.iPhone 7:
{116/1000 = 0.116, rounded}
{249/1000 = 0.249, rounded}
{350/1000 = 0.350, rounded}
{450/1000 = 0.450, rounded}
iPhone SE:
{66/1000 = 0.066, rounded}
{116/1000 = 0.116, rounded}
{133/1000 = 0.133, rounded}
{150/1000 = 0.150, rounded}
Таким образом, после экспорта видео выглядело стоп-кадр с небольшим FPS на iPhone 7 и выглядело гладко на iPhone SE.Но в официальной документации о CADisplayLink
я читал, что он вызывается после обновления экрана.В чем проблема?