| 是否可以在兩個進程之間共享SurfaceTexture,例如Activity和Service? 我想用TextureView創(chuàng)建一個Activity,并從一個單獨的Service更新它的SurfaceTexture. 到目前為止,我正在創(chuàng)建一個帶有生成的OpenGL紋理的SurfaceTexture(通過glGenTextures),然后我將這個表面紋理設置為我的TextureView: 在活動上顯示此SurfaceTexture的相機預覽正常工作: 我想做同樣的事情,但是從一個單獨的服務,將texture_id傳遞給它,類似于: 原因是我有一個單獨的進程調用私有api,需要SurfaceTexture來傳輸一些內容,并且可以通過應用程序中的aidl訪問此進程. 謝謝 解決方法: 系統(tǒng)支持執(zhí)行您想要的操作,但我不知道是否可以使用當前的公共API. 一些背景,以確保我們在同一頁… Surface是生產者 – 消費者對的生產者.使用SurfaceTexture,應用程序可以訪問兩端.渲染到SurfaceTexture曲面的任何內容都將轉換為OpenGL ES“外部”紋理. 媒體和顯示API的工作方式是讓消費者創(chuàng)建對,然后將Surface交給應用程序.這就是為什么,如果你創(chuàng)建一個SurfaceView,你不能使用Surface,直到surfaceCreated()回調觸發(fā) – BufferQueue對象由系統(tǒng)圖形合成器(SurfaceFlinger)創(chuàng)建,生產者端通過Binder IPC傳遞給你的應用.對于MediaCodec編碼器的Surface輸入也是如此,它們由mediaserver進程創(chuàng)建. 您可以將SurfaceView或SurfaceTexture獲得的Surface傳遞給產生輸出的東西,例如Camera preview或MediaCodec解碼器.在引擎蓋下,這些通過IPC傳遞到mediaserver過程.生成幀時,圖形緩沖區(qū)通過引用傳遞給使用者. SurfaceFlinger顯示從SurfaceView獲取的幀,SurfaceTexture只是將它們轉換為紋理. 所以你想要做的是在app中創(chuàng)建一個SurfaceTexture,為它構造一個Surface,并將Surface傳遞給你的服務.您的服務會生成幀并將它們寫入Surface,這會將它們通過IPC發(fā)送到您應用中的SurfaceTexture消費者,這會將它們轉換為GLES紋理. 我沒有嘗試通過AIDL傳遞Surface,所以我不知道它是否真的有效. 在進程之間傳遞紋理ID將不起作用.如果在創(chuàng)建第二個上下文時將第一個上下文作為參數(shù)傳遞,則可以從兩個不同的EGLContex中訪問一個紋理,但我不認為這可能會跨進程工作. | 
|  |