livekit / client-sdk-android

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

MediaStreamTrack has been disposed! #236

Closed mohsen2986 closed 1 year ago

mohsen2986 commented 1 year ago

we got huge crash error on MediaStreamTrack has been disposed! our crash reporter , record big number of crash on VideoTrack. i dont know how it produce :(

here is reported logs:

java.lang.IllegalStateException: MediaStreamTrack has been disposed. at org.webrtc.MediaStreamTrack.checkMediaStreamTrackExists(MediaStreamTrack.java:13) at org.webrtc.MediaStreamTrack.getNativeMediaStreamTrack(MediaStreamTrack.java) at org.webrtc.VideoTrack.addSink(VideoTrack.java:23) at io.livekit.android.room.track.VideoTrack.addRenderer(VideoTrack.java:14) at io.livekit.android.compose.VideoRendererKt.VideoRenderer$setupVideoIfNeeded(VideoRendererKt.java:27) at io.livekit.android.compose.VideoRendererKt.access$VideoRenderer$setupVideoIfNeeded(VideoRendererKt.java) at io.livekit.android.compose.VideoRendererKt$VideoRenderer$4.invoke(VideoRendererKt$VideoRenderer.java:23) at io.livekit.android.compose.VideoRendererKt$VideoRenderer$4.invoke(VideoRendererKt$VideoRenderer.java:2) at androidx.compose.ui.viewinterop.ViewFactoryHolder.setFactory(ViewFactoryHolder.java:13) at androidx.compose.ui.viewinterop.AndroidView_androidKt$AndroidView$1.invoke(AndroidView_androidKt$AndroidView.java:13) at androidx.compose.ui.viewinterop.AndroidView_androidKt$AndroidView$1.invoke(AndroidView_androidKt$AndroidView.java) at androidx.compose.ui.viewinterop.AndroidView_androidKt$AndroidView$$inlined$ComposeNode$1.invoke(AndroidView_androidKt$AndroidView$$inlined$ComposeNode.java:2) at androidx.compose.runtime.ComposerImpl$createNode$2.invoke(ComposerImpl$createNode.java:17) at androidx.compose.runtime.ComposerImpl$createNode$2.invoke(ComposerImpl$createNode.java:6) at androidx.compose.runtime.ComposerImpl$recordInsert$2.invoke(ComposerImpl$recordInsert.java:36) at androidx.compose.runtime.ComposerImpl$recordInsert$2.invoke(ComposerImpl$recordInsert.java:6) at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(CompositionImpl.java:60) at androidx.compose.runtime.CompositionImpl.applyChanges(CompositionImpl.java:5) at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer$runRecomposeAndApplyChanges$2.java:174) at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer$runRecomposeAndApplyChanges$2.java:6) at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock$withFrameNanos$2$callback.java:10) at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.java:33) at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.java) at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher$dispatchCallback.java:16) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:994) at android.view.Choreographer.doCallbacks(Choreographer.java:794) at android.view.Choreographer.doFrame(Choreographer.java:725) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:981) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7948) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075) Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException

davidliu commented 1 year ago

Hmm, sounds like you're attaching a track beyond its lifecycle. Not sure if there's anything we can do on our end to fix this. Make sure you're not holding on to tracks locally and attempting to attach them when they're no longer valid.

gerasanchit commented 3 months ago

Facing this issue on internet disconnection and reconnection non repeatitive

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:558)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: MediaStreamTrack has been disposed.
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at io.livekit.android.webrtc.peerconnection.RTCThreadUtilsKt.executeBlockingOnRTCThread(RTCThreadUtils.kt:87)
    at io.livekit.android.room.track.VideoTrack.addRenderer(VideoTrack.kt:37)
    at io.livekit.android.room.track.RemoteVideoTrack.addRenderer(RemoteVideoTrack.kt:86)
    at io.livekit.android.compose.ui.VideoTrackViewKt.VideoTrackView$setupVideoIfNeeded(VideoTrackView.kt:116)
    at io.livekit.android.compose.ui.VideoTrackViewKt.access$VideoTrackView$setupVideoIfNeeded(VideoTrackView.kt:1)
    at io.livekit.android.compose.ui.VideoTrackViewKt$VideoTrackView$8.invoke(VideoTrackView.kt:159)
    at io.livekit.android.compose.ui.VideoTrackViewKt$VideoTrackView$8.invoke(VideoTrackView.kt:141)
    at androidx.compose.ui.viewinterop.ViewFactoryHolder$updateBlock$1.invoke(AndroidView.android.kt:367)
    at androidx.compose.ui.viewinterop.ViewFactoryHolder$updateBlock$1.invoke(AndroidView.android.kt:367)
    at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2299)
    at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:467)
    at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
    at androidx.compose.ui.viewinterop.AndroidViewHolder$runUpdate$1.invoke(AndroidViewHolder.android.kt:178)
    at androidx.compose.ui.viewinterop.AndroidViewHolder$runUpdate$1.invoke(AndroidViewHolder.android.kt:176)
    at androidx.compose.ui.viewinterop.AndroidViewHolder$onCommitAffectingUpdate$1.invoke$lambda$0(AndroidViewHolder.android.kt:173)
    at androidx.compose.ui.viewinterop.AndroidViewHolder$onCommitAffectingUpdate$1.$r8$lambda$mF6AO8JmlFeJVsgs3SzniVwxyYo(Unknown Source:0)
    at androidx.compose.ui.viewinterop.AndroidViewHolder$onCommitAffectingUpdate$1$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
    at android.os.Handler.handleCallback(Handler.java:942)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loopOnce(Looper.java:201)
    at android.os.Looper.loop(Looper.java:288)
    at android.app.ActivityThread.main(ActivityThread.java:7927)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
Caused by: java.lang.IllegalStateException: MediaStreamTrack has been disposed.
    at livekit.org.webrtc.MediaStreamTrack.checkMediaStreamTrackExists(MediaStreamTrack.java:120)
    at livekit.org.webrtc.MediaStreamTrack.getNativeMediaStreamTrack(MediaStreamTrack.java:114)
    at livekit.org.webrtc.VideoTrack.addSink(VideoTrack.java:40)
    at io.livekit.android.room.track.VideoTrack$addRenderer$1.invoke(VideoTrack.kt:39)
    at io.livekit.android.room.track.VideoTrack$addRenderer$1.invoke(VideoTrack.kt:37)
    at io.livekit.android.webrtc.peerconnection.RTCThreadUtilsKt.executeBlockingOnRTCThread$lambda$1(RTCThreadUtils.kt:87)
    at io.livekit.android.webrtc.peerconnection.RTCThreadUtilsKt.$r8$lambda$ix-Gm1lHyeu28BSkgrvFK1qfBnU(Unknown Source:0)
    at io.livekit.android.webrtc.peerconnection.RTCThreadUtilsKt$$ExternalSyntheticLambda1.call(D8$$SyntheticClass:0)
davidzhao commented 3 months ago

@gerasanchit Please file a new issue with detailed repro steps.

gerasanchit commented 3 months ago

hi @davidzhao already added here https://github.com/livekit/client-sdk-android/issues/442

davidzhao commented 3 months ago

Thanks @gerasanchit