livekit / client-sdk-android

LiveKit SDK for Android
https://docs.livekit.io
Apache License 2.0
160 stars 63 forks source link

GLException: Failed to create EGL context: 0x3000 #374

Open kendo6666 opened 5 months ago

kendo6666 commented 5 months ago

When creating a room containing 6-8 users, and one user frequently connects and disconnects the room, about 30 times, other users will have the following exception:

android.opengl.GLException: Failed to create EGL context: 0x3000 at org.webrtc.EglBase14Impl.createEglContext(EglBase14Impl.java:268) at org.webrtc.EglBase14Impl.(EglBase14Impl.java:63) at org.webrtc.EglBase.createEgl14(EglBase.java:213) at org.webrtc.EglBase.create(EglBase.java:156) at org.webrtc.EglRenderer.lambda$init$0$org-webrtc-EglRenderer(EglRenderer.java:241) at org.webrtc.EglRenderer$$ExternalSyntheticLambda7.run(Unknown Source:6) at org.webrtc.ThreadUtils$4.call(ThreadUtils.java:199) at org.webrtc.ThreadUtils$4.call(ThreadUtils.java:196) at org.webrtc.ThreadUtils$3.run(ThreadUtils.java:173) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at org.webrtc.EglRenderer$HandlerWithExceptionCallback.dispatchMessage(EglRenderer.java:103) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.os.HandlerThread.run(HandlerThread.java:67) at org.webrtc.ThreadUtils.invokeAtFrontUninterruptibly(ThreadUtils.java:184) at org.webrtc.ThreadUtils.invokeAtFrontUninterruptibly(ThreadUtils.java:196) at org.webrtc.EglRenderer.init(EglRenderer.java:232) at org.webrtc.EglRenderer.init(EglRenderer.java:259) at org.webrtc.SurfaceEglRenderer.init(SurfaceEglRenderer.java:61) at io.livekit.android.renderer.TextureViewRenderer.init(TextureViewRenderer.kt:91) at io.livekit.android.renderer.TextureViewRenderer.init$default(TextureViewRenderer.kt:81) at io.livekit.android.room.Room.initVideoRenderer(Room.kt:1029)

The debugging information shows that in the ParticipantItem class, setupVideoIfNeeded will be called to bind new tracks for all users, and then all old tracks will be unbind. It is suspected that there is a bug in removeRenderer and the EGL context is not released correctly.

thanks.

Device Info:

wzJun1 commented 5 months ago

You must be call release() on the TextureViewRenderer or SurfaceViewRenderer