渲染器YUV帧在openGLES中没有CADisplayLink

时间:2014-03-07 05:01:29

标签: ios opengl-es avfoundation

在我的iOS应用中,我使用AVAssetReader解码本地MP4文件,openGLES渲染每个YUV420帧。我正在使用演示时间戳以适当的帧速率驱动播放。我不清楚的是,我是否应该使用CADisplayLink回调知道何时应该显示一个帧(总是观察PTS),或者是否可以不使用它,而是使用简单拉动的辅助线程解码后的图像并通过openGLES呈现它们。我已经尝试了两种解决方案,两者似乎都有效(至少在我看来)。此外,在两种情况下显示YUV帧所需的时间似乎大约相同~2-3ms。那么CADisplayLink的交易是什么?似乎没有必要,但建议......我不明白。有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:1)

CADisplayLink将OpenGL绘图与显示刷新同步,以帮助避免屏幕撕裂。这不是必需的,但建议使用NSTimer,否则您可能会遇到屏幕撕裂。最终,PTS永远不会真正成为用户眼球看到图像的精确时间,但当然,与显示屏上的两个不同帧同时显示时间稍微不一致会更好。