2014-03-07 73 views
0

在我的iOS應用程序中,我使用AVAssetReader來解碼本地MP4文件,並使用openGLES來呈現每個YUV420幀。我使用演示時間戳以適當的幀速率驅動播放。我不清楚的是,如果我應該使用CADisplayLink回調函數來了解何時應該顯示幀(始終觀察PTS),還是不使用它,而是使用輔助線程來簡單地提取解碼圖像,以及通過openGLES呈現。我已經嘗試了兩種解決方案,兩者似乎都起作用(至少在我眼中)。在這兩種情況下顯示YUV幀的時間似乎大約相同〜2-3ms。那麼CADisplayLink的交易是什麼?似乎沒有必要,但建議......我不明白。有人可以向我解釋嗎?在沒有CADisplayLinkLink的情況下在openGLES中呈現YUV幀

回答

1

CADisplayLink使OpenGL圖形與顯示刷新同步,以幫助避免屏幕撕裂。這不是必需的,但推薦使用,因爲NSTimer可能會遇到屏幕撕裂。最終,PTS永遠不會是用戶的眼球看到圖像的準確時間,但肯定會對顯示時間產生一點不協調的感覺,而不是一次可能在屏幕上出現兩個不同的幀。

+0

感謝您的回答。這讓我意識到,儘管在我的應用程序中我沒有明確的NSTimer,但事實上,我使用PTS通過在顯示幀之前等待兩個連續PTS之間的差異來驅動播放,它基本上像一個定時器(如你所說)可能不會與屏幕刷新率同步。我現在使用CADisplayLink – Glauco

相關問題