По умолчанию, инициализация объектов рендеринга видео при публикации и проигрывании производится автоматически. Однако на некоторых версиях Android в этом случае требуется явное указание контекста для графики OpenGL, в противном случае инициализации рендерера приведет к крашу приложения с android.opengl.GLException, например
Code Block |
---|
|
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
|
Чтобы избежать подобного исключения, необходимо отключить автоматическую инициализацию рендереров при создании сессии
code
Code Block |
---|
|
sessionOptions = new SessionOptions(mWcsUrlView.getText().toString());
sessionOptions.setLocalRenderer(localRender);
sessionOptions.setRemoteRenderer(remoteRender);
sessionOptions.setAutoInitRenderers(false);
...
session = Flashphoner.createSession(sessionOptions); |
и проинициализировать объекты рендеринга явным образом
code
Code Block |
---|
|
localRender = (SurfaceViewRenderer) findViewById(R.id.local_video_view);
remoteRender = (SurfaceViewRenderer) findViewById(R.id.remote_video_view);
...
localRender.init(Flashphoner.eglBaseContext, null);
remoteRender.init(Flashphoner.eglBaseContext, null); |