在我的iOS应用上,我使用AVAssetReader
解码本地MP4文件,并使用openGLES
渲染每个YUV420帧。我正在使用演示时间戳记以适当的帧频驱动播放。对我还不清楚的是,是否应该使用CADisplayLink
回调来知道何时应显示帧(始终遵守PTS),或者可以不用它,而可以使用辅助线程简单地将解码后的内容显示出来。图片并通过openGLES
渲染它们。我已经尝试了这两种解决方案,并且似乎都起作用(至少在我看来)。同样,在两种情况下显示YUV帧所花费的时间似乎大约相同,约为2-3ms。那么CADisplayLink
怎么处理?似乎没有必要,但建议使用...我不明白。有人可以向我解释吗?
最佳答案
CADisplayLink将OpenGL绘图与显示刷新同步,以帮助避免屏幕撕裂。它不是必需的,但建议使用,因为使用NSTimer可能会导致屏幕撕裂。最终,PTS永远不会真正成为用户的眼球看到图像的准确时间,但是与显示时间略有不一致肯定比在屏幕上同时具有两个不同的帧要好。