2011-07-04 129 views
10

我試圖找出在保留Alpha通道透明度的同時在GL紋理上顯示視頻的最佳方法。iOS:使用alpha透明度的GL紋理視頻

關於視頻作爲GL紋理的信息在這裏:Is it possible using video as texture for GL in iOS?iOS4: how do I use video file as an OpenGL texture?

使用ffmpeg的幫助Alpha透明度,但不應用商店友好的是在這裏: iPhone: Display a semi-transparent video on top of a UIView?

視頻源將在綠屏色度鍵的前面拍攝。視頻可以不受影響地離開綠色屏幕或在視頻編輯套件中處理,並導出到Quicktime動畫或帶有Alpha的Apple Pro Res 4444。

我認爲有多種方法可能可行,但我還沒有找到完整的解決方案。

  1. 視頻尋找綠色的實時閾值處理,以除去
  2. 圖如何使用上述的Quicktime編解碼器以保留alpha通道
  3. 混合兩個視頻一起:1)RGB 2主視頻)與阿爾法獨立的視頻面具

我很想得到iOS和OpenGL ES 2.0的

感謝最好的辦法你的看法。

+0

對我來說這是完全不清楚你想要做什麼。你如何獲得視頻到應用程序? – tomk

+0

最有可能存儲在本地主束 – ryatkins

+0

你總是可以做到的顏色鍵控在着色器,這是一個非常簡單的操作。 –

回答

0

蘋果表現出一個示例應用程序在WWDC 2011年稱爲色度,說明如何處理視頻傳遞給一個OpenGL紋理操作的框架,以及可選寫到視頻文件。

(在一個非常高性能的方式)

這是寫使用從攝像機飼料,並使用一種非常粗糙的色度算法。

至於其他的海報說,你可能會想跳過色度代碼,做顏色淘汰賽自己事前。

不應該那麼難以重寫Chromakey示例應用程序來使用視頻文件作爲輸入而不是攝像頭,並且很容易禁用chormakey代碼。

你需要修改設置的視頻輸入期望RGBA數據,而不是RGB或Y/UV。示例應用程序設置爲使用RGB,但我已經看到Apple使用Y/UV的其他示例應用程序。

4

爲簡單混合電影和其他場景進行色度鍵控的最簡單方法是使用我的GPUImage框架中的GPUImageChromaKeyBlendFilter。您可以將電影源提供爲GPUImageMovie,然後將其與背景內容混合使用。色度鍵過濾器允許您指定顏色,與該顏色的接近程度以及在替換操作中使用的混合平滑度。所有這些都是通過調整着色器進行GPU加速的。

圖片,電影和實時相機可以用作來源,但是如果您希望在電影背後使用OpenGL ES內容進行渲染,我建議將OpenGL ES內容渲染爲紋理支持的FBO並傳遞通過GPUImageTextureInput獲取該紋理。

你可能利用此輸出包含與所述帶鍵顏色由恆定顏色用0 alpha通道代替影片幀的紋理,以及。可以使用GPUImageTextureOutput提取此紋理,以便以後在OpenGL ES場景中使用。

0

看一看在App Store上免費的 「APNG」 應用程序。它顯示瞭如何將動畫PNG(.apng)直接呈現給iOS視圖。關鍵是APNG支持文件格式的alpha通道,因此您不需要混淆色度技巧,這對於所有視頻內容都無效。這種方法更有效,因爲每次在循環中顯示紋理時都不需要進行另一輪處理的多層或色度技巧。

如果您想查看一個小示例xcode項目,其中使用OpenGL ES2在旋轉立方體的側面顯示Alpha通道動畫,可以在Load OpenGL textures with alpha channel on iOS找到它。示例代碼顯示了對glTexImage2D()的簡單調用,該顯示鏈接回調將紋理上傳到圖形卡一次。