2011-04-11 51 views
23

我試圖在OpenGL中將視頻文件的內容(現在我們只是說沒有音頻)顯示在UV映射的3D對象上。我在OpenGL中做了相當多的工作,但不知道從哪裏開始處理視頻文件,並且大多數例子似乎都是從攝像頭獲取視頻幀,這不是我所追求的。iOS4:如何將視頻文件用作OpenGL紋理?

目前我覺得如果我可以將視頻的個別幀作爲CGImageRef進行設置,那麼我想知道如何做到這一點?也許甚至有更好的方法來做到這一點?我應該從哪裏開始,以及iOS上視頻播放最直接的文件格式是什麼? .mov格式?

回答

32

道歉;在iPhone上打字,這樣我會簡短一點。

使用視頻的URL創建一個AVURLAsset - 如果您願意,可以使用本地文件的URL。 QuickTime可以做的任何事情都很好,所以H.264中的MOV或M4V可能是最好的來源。

查詢資產以查找AVMediaTypeVideo類型的曲目。除非您的源視頻具有多個攝像頭視角,否則應該只有一個,所以只需採用objectAtIndex:0就可以獲得所需的AVAssetTrack。

使用它來創建一個AVAssetReaderTrackOutput。可能你想指定kCVPixelFormatType_32BGRA。

使用資產創建AVAssetReader;將資產讀取器軌道輸出附加爲輸出。並調用startReading。

此後,您可以在軌道輸出上調用copyNextSampleBuffer以獲取新的CMSampleBuffers,使您處於與從攝像機獲取輸入相同的位置。所以你可以鎖定它來獲取像素內容,並通過Apple的BGRA擴展將它們推送到OpenGL。

+8

聲音怎麼樣? – 2011-06-27 11:03:10

+0

也謝謝。這一切都很完美,您可以獲得非常高的FPS(取決於視頻數據速率)。 – 2011-06-30 05:26:41

+0

另外感謝。這對我也很好。請注意,您必須處理自己同步的視頻播放幀速率。 – 2011-08-10 02:56:37

-1

您可能將不得不使用播放器圖層並將其內容平鋪到位圖上下文中。請參閱AVPlayerLayer的文檔。雖然表現可能非常差。