Инициализация объектов рендеринга видео¶
По умолчанию, инициализация объектов рендеринга видео при публикации и проигрывании производится автоматически. Однако на некоторых версиях Android в этом случае требуется явное указание контекста для графики OpenGL, в противном случае инициализации рендерера приведет к крашу приложения с android.opengl.GLException
, например
2024-06-13 15:57:47.006 32017-646/com.flashphoner.wcsexample.screencapture I/EglBase14Impl: Using OpenGL ES version 2
2024-06-13 15:57:47.013 32017-646/com.flashphoner.wcsexample.screencapture E/SurfaceTextureHelper: CaptureThread create failure
2024-06-13 15:57:47.013 32017-646/com.flashphoner.wcsexample.screencapture E/SurfaceTextureHelper: android.opengl.GLException: Failed to create EGL context: 0x3000
2024-06-13 15:57:47.015 32017-646/com.flashphoner.wcsexample.screencapture E/SurfaceTextureHelper: [1/2] android.opengl.GLException: Failed to create EGL context: 0x3000
at org.webrtc.EglBase14Impl.createEglContext(EglBase14Impl.java:336)
at org.webrtc.EglBase14Impl.-$$Nest$smcreateEglContext(Unknown Source:0)
at org.webrtc.EglBase14Impl$EglConnection.<init>(EglBase14Impl.java:66)
at org.webrtc.EglBase14Impl.<init>(EglBase14Impl.java:142)
at org.webrtc.EglBase.createEgl14(EglBase.java:263)
at org.webrtc.EglBase.create(EglBase.java:206)
at org.webrtc.SurfaceTextureHelper.<init>(SurfaceTextureHelper.java:187)
at org.webrtc.SurfaceTextureHelper.<init>(Unknown Source:0)
at org.webrtc.SurfaceTextureHelper$1.call(SurfaceTextureHelper.java:75)
at org.webrtc.SurfaceTextureHelper$1.call(SurfaceTextureHelper.java:70)
at org.webrtc.ThreadUtils$3.run(ThreadUtils.java:173)
at android.os.Handler.handleCallback(Handler.java:874)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:198)
at android.os.HandlerThread
Чтобы избежать подобного исключения, в сборке Android SDK 1.1.0.65 добавлена возможность явной инициализации объектов рендеринга с указанием единого OpenGL контекста приложения Flashphoner.eglBaseContext
.
Для этого необходимо отключить автоматическую инициализацию рендереров при создании сессии
sessionOptions = new SessionOptions(mWcsUrlView.getText().toString());
sessionOptions.setLocalRenderer(localRender);
sessionOptions.setRemoteRenderer(remoteRender);
sessionOptions.setAutoInitRenderers(false);
...
session = Flashphoner.createSession(sessionOptions);
и проинициализировать объекты рендеринга явным образом