Почему CADisplayLink назвал селектор разным на iPhone 7 и iPhone SE? - PullRequest
0 голосов
/ 15 апреля 2019

Я записываю видео с просмотром в моем приложении.Для написания кадров я использую 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 я читал, что он вызывается после обновления экрана.В чем проблема?

...