簡體   English   中英

從捕獲的視頻幀創建openGL紋理以覆蓋視頻上的openGL視圖的替代方法? (蘋果手機)

[英]Alternatives to creating an openGL texture from a captured video frame to overlay an openGL view over video? (iPhone)

這主要與增強現實類型應用相關。 Apple提供了有關如何使用AVCaptureSession捕獲視頻幀(並在需要時將其另存為圖像)的信息:

http://developer.apple.com/library/ios/#qa/qa2010/qa1702.html

我知道可以在捕獲的視頻幀中創建一個openGL紋理,然后將其用作openGL視圖中的背景,覆蓋其他圖形。

我想知道這種方法是否有其他選擇? 上面提到的方法可能是最好的(我不知道是不是),但是如果有其他方法可以嘗試,那將是很好的。 例如,有沒有辦法直接在AVCaptureVideoPreviewLayer上覆蓋openGL視圖?

您確實可以通過AVCaptureVideoPreviewLayer等方式對OpenGL內容進行分層,但您的性能會受到影響。 Apple強烈建議您不要將非不透明的OpenGL ES內容疊加在其他顯示元素之上。 適用於iOSOpenGL ES編程指南

為了獲得絕對最佳性能,您的應用程序應僅依靠OpenGL ES來呈現您的內容。 為此,請調整包含CAEAGLLayer對象以匹配屏幕的視圖,將其opaque屬性設置為YES,並確保沒有其他Core Animation圖層或視圖可見。 如果您的OpenGL ES圖層在其他圖層之上合成,則使您的CAEAGLLayer對象不透明會降低但不會消除性能成本。

如果您的CAEAGLLayer對象在圖層層次結構中混合在其下面的圖層之上,則渲染緩沖區的顏色數據必須采用預乘Alpha格式才能由Core Animation正確合成。 將OpenGL ES內容混合到其他內容之上會嚴重影響性能。

老實說,將視頻作為紋理拉入並將其顯示為3-D疊加層背后的廣告牌並不難。 我的示例應用程序此處確實相機視頻的直通到一個OpenGL ES(2.0)紋理顯示在屏幕上。 只需進行一些修改,您就可以在其上放置3-D內容。 這將比嘗試在AVCaptureVideoPreviewLayer上繪制非不透明的3-D內容提供更好的性能。

但是,如果您只想在OpenGL ES內容上顯示簡單的靜態UIViews,那么可以在沒有太多性能損失的情況下完成(根據我的經驗,幀速率降低約5%)。

當然,無論內容如何,​​視圖都可以分層。 在視頻上分層GL與在2D上分層2D沒什么不同。

幾乎唯一的問題是你需要渲染你的GL內容,以便生成的圖像被alpha預乘(就像iOS上的所有其他透明內容一樣被預乘)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM