Ios 在不带CADisplayLink的openGLES中渲染YUV帧

Ios 在不带CADisplayLink的openGLES中渲染YUV帧,ios,opengl-es,avfoundation,Ios,Opengl Es,Avfoundation,在我的iOS应用程序中,我使用avassetrader解码本地MP4文件,并使用openGLES渲染每个YUV420帧。我使用演示时间戳以适当的帧速率驱动播放。我不清楚的是,我是否应该使用CADisplayLink回调来知道何时应该显示帧(始终观察PTS),或者是否可以不使用它,而是使用一个辅助线程来简单地提取解码图像并通过openGLES渲染它们。我已经试验了这两种解决方案,而且两种方案似乎都有效(至少在我看来)。此外,在两种情况下显示YUV帧所需的时间似乎约为2-3ms。那么,如何处理CAD

在我的iOS应用程序中,我使用
avassetrader
解码本地MP4文件,并使用
openGLES
渲染每个YUV420帧。我使用演示时间戳以适当的帧速率驱动播放。我不清楚的是,我是否应该使用
CADisplayLink
回调来知道何时应该显示帧(始终观察PTS),或者是否可以不使用它,而是使用一个辅助线程来简单地提取解码图像并通过
openGLES
渲染它们。我已经试验了这两种解决方案,而且两种方案似乎都有效(至少在我看来)。此外,在两种情况下显示YUV帧所需的时间似乎约为2-3ms。那么,如何处理
CADisplayLink
?这似乎没有必要,但我建议……我不明白。有人能给我解释一下吗?

CADisplayLink将OpenGL绘图与显示刷新同步,以帮助避免屏幕撕裂。这不是必需的,但推荐使用,因为使用NSTimer可能会导致屏幕撕裂。最终,PTS永远不会真正成为用户眼球看到图像的准确时间,但与同时在屏幕上显示两个不同的帧相比,与显示时间有一点不一致肯定会更好。

谢谢您的回答。这让我意识到,虽然在我的应用程序中,我没有一个显式的NSTimer,但事实上,我正在使用PTS来驱动播放,在显示帧之前等待两个连续PTS之间的差异,它基本上就像一个计时器(如你所说)可能与屏幕刷新率不同步。我现在正在使用CADisplayLink