我試圖在Unity和WebRTC之間架起橋樑。從統一獲取android EGL共享上下文webrtc
更新:好吧,我創建了這個回購協議,仍然遇到與渲染的紋理,這是我想不通 之所以怪異的假象。如果有人想看看。
由於的WebRTC能夠從VideoTracks作爲紋理提供框架,我想如果這股與統一EGL背景下,將是最好的,這樣我就可以直接使其進入發動機。
我想通過在PeerConnectionFactory上設置視頻硬件加速選項。如下:
PeerConnectionFactory.initializeAndroidGlobals(mainActivity.getApplicationContext(), true);
PeerConnectionFactory factory = new PeerConnectionFactory(new PeerConnectionFactory.Options());
EglBase rootEglBase = EglBase.createEgl14(EGL14.eglGetCurrentContext(), EglBase.CONFIG_PIXEL_RGBA_BUFFER);
factory.setVideoHwAccelerationOptions(rootEglBase.getEglBaseContext(),rootEglBase.getEglBaseContext());
當然,這只是它應該如何工作的幾個假設。
由於setVideoHwAccelerationOptions
需要EglBase.Context
這意味着我需要從Unity中查找上下文並將其轉換爲上下文。
爲了做到這一點,我發現EglBase.createEgl14
可能會訣竅,但我需要正確的配置屬性,我找不到。嘗試了幾個組合,但沒有奏效。
我基本卡住了,我不知道從哪裏走。
另一種選擇是從幀中獲取ByteBuffer,並將它們傳遞給Unity,但由於Unity和WebRTC都會使用OpenGL,所以會導致性能下降並浪費資源。我覺得我很接近答案,但缺少一些東西。
更新:我想eglGetCurrentContext()
沒有返回上下文,因爲它沒有從主Unity線程調用。現在我得到了上下文,I420Frame
幀的textureId是有意義的。但他們沒有渲染。我認爲它與配置屬性im傳遞到EglBase.createEgl14
。否則這可能也是一個線程化的東西?
我才意識到,實際問題是** EGL14.eglGetCurrentContext()** **返回** EGL_NO_CONTEXT這意味着團結球員並沒有叫** ** eglMakeCurrent。這是否意味着無法讓上下文創建共享上下文來傳遞數據? –
好吧,我爲此創建了一個回購,仍然遇到渲染紋理的奇怪的工件,我無法弄清楚原因。如果有人想看看。 https://github.com/iBicha/WebRTC-for-Unity/ –