-
Notifications
You must be signed in to change notification settings - Fork 47
Open
Description
Sometimes the video call just keeps on disconnecting on android. Not sure what causes it yet.
I was not able to reproduce it on emulator yet.
But I have this issue constantly on my Pixel 8a phone.
Additional updates:
- 2025-12-05 Issue only happens on physical device - Pixel 8a
- 2025-12-08 Issue only persists when I'm on my home wifi. Switching back to mobile network removes this issue.
- 2025-12-08 Switching stream from WebRTC to HLS does not help
flutter logs output in the timeframe from video freezing to successful reconnection:
I/flutter (21313): 2025-12-05 15:48:47.047086 ⚠️ (W/SV:CallSession-2): [negotiate] #setPublisher; failed: Result.Failure{error: VideoErrorWithCause{message: participant not found, exception: SfuError{code: participantNotFound, message: participant not found, shouldRetry: false, reconnectStrategy: unspecified}, stackTrace: #0 SfuClient._executeWithRetry (package:stream_video/src/sfu/sfu_client.dart:78:49)
I/flutter (21313): <asynchronous suspension>
I/flutter (21313): #1 SfuClient.setPublisher (package:stream_video/src/sfu/sfu_client.dart:142:22)
I/flutter (21313): <asynchronous suspension>
I/flutter (21313): #2 CallSession._onRenegotiationNeeded.<anonymous closure> (package:stream_video/src/call/session/call_session.dart:931:25)
I/flutter (21313): <asynchronous suspension>
I/flutter (21313): #3 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38:16)
I/flutter (21313): <asynchronous suspension>
I/flutter (21313): #4 CallSession._onRenegotiationNeeded (package:stream_video/src/call/session/call_session.dart:913:5)
I/flutter (21313): <asynchronous suspension>
I/flutter (21313): }}
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
W/FlutterWebRTCPlugin(21313): FlutterRTCVideoRenderer.setVideoTrack, set video track to null
W/FlutterWebRTCPlugin(21313): FlutterRTCVideoRenderer.setVideoTrack, set video track to null
D/FlutterWebRTCPlugin(21313): onConnectionChangeCLOSED
D/FlutterWebRTCPlugin(21313): onConnectionChangeCLOSED
I/flutter (21313): 2025-12-05 15:48:48.365337 ⚠️ (W/SV:RtcManager): [getPublisherTrackByType] track not found: video
I/FlutterWebRTCPlugin(21313): getUserMedia(video): ConstraintsMap{mMap={frameRate=30, mirror=defaultMode, facingMode=user, width=1280, height=720}}
D/FlutterWebRTCPlugin(21313): Creating video capturer using Camera2 API.
D/FlutterWebRTCPlugin(21313): Create front camera 1 succeeded
D/FlutterWebRTCPlugin(21313): CameraEventsHandler.waitForCameraOpen
D/FlutterWebRTCPlugin(21313): CameraEventsHandler.onCameraOpening: cameraName=1
D/FlutterWebRTCPlugin(21313): CameraEventsHandler.onCameraDisconnected
D/FlutterWebRTCPlugin(21313): CameraEventsHandler.onFirstFrameAvailable
D/FlutterWebRTCPlugin(21313): CameraEventsHandler.onFirstFrameAvailable
D/FlutterWebRTCPlugin(21313): Target: 1280x720@30, Actual: 1280x720@30
D/FlutterWebRTCPlugin(21313): MediaStream id: a2354503-e2b1-4e80-a9c2-ae291d097a50
I/flutter (21313): 2025-12-05 15:48:48.626216 ⚠️ (W/SV:RtcManager): [getPublisherTrackByType] track not found: audio
I/FlutterWebRTCPlugin(21313): getUserMedia(audio): mandatory: [], optional: [echoCancellation: true, googDAEchoCancellation: true, googEchoCancellation: true, googEchoCancellation2: true, noiseSuppression: true, googNoiseSuppression: true, googNoiseSuppression2: true, googAutoGainControl: true, googHighpassFilter: false, googTypingNoiseDetection: true, DtlsSrtpKeyAgreement: true]
D/FlutterWebRTCPlugin(21313): MediaStream id: c309c537-11fb-4b2c-bee1-6094448d76a8
D/FlutterWebRTCPlugin(21313): onIceGatheringChangeGATHERING
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onAddTrack
D/FlutterWebRTCPlugin(21313): onAddTrack
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
W/FlutterWebRTCPlugin(21313): FlutterRTCVideoRenderer.setVideoTrack, set video track to 8a2287d6-2feb-40c8-8d43-ee888b361f91
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceGatheringChangeGATHERING
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onIceCandidate
D/FlutterWebRTCPlugin(21313): onConnectionChangeDISCONNECTED
D/FlutterWebRTCPlugin(21313): onConnectionChangeDISCONNECTED
I/flutter (21313): 2025-12-05 15:48:53.006861 ⚠️ (W/SV:Call-2): [_reconnect] skipping reconnect (join in progress)
D/FlutterWebRTCPlugin(21313): onConnectionChangeCONNECTING
D/FlutterWebRTCPlugin(21313): onConnectionChangeCONNECTING
D/FlutterWebRTCPlugin(21313): onSelectedCandidatePairChanged
D/FlutterWebRTCPlugin(21313): onIceGatheringChangeCOMPLETE
D/FlutterWebRTCPlugin(21313): onSelectedCandidatePairChanged
D/FlutterWebRTCPlugin(21313): onIceGatheringChangeCOMPLETE
D/FlutterWebRTCPlugin(21313): onConnectionChangeCONNECTED
D/FlutterWebRTCPlugin(21313): onConnectionChangeCONNECTED
W/FlutterWebRTCPlugin(21313): FlutterRTCVideoRenderer.setVideoTrack, set video track to 4765f010-08b6-44bb-82b2-6693b884fe4a
I/flutter (21313): 2025-12-05 15:48:59.755243 ⚠️ (W/SV:Sfu-WS-3): [disconnect] rejected (already disconnected)
D/FlutterWebRTCPlugin(21313): CameraEventsHandler.waitForCameraClosed
D/FlutterWebRTCPlugin(21313): removeTrack(): sender is null
I/flutter (21313): 2025-12-05 15:48:59.794122 ⚠️ (W/SV:RtcManager): [unpublishTrack] removeTrack failed: Unable to RTCPeerConnection::removeTrack: removeTrack(): sender is null
D/FlutterWebRTCPlugin(21313): onConnectionChangeCLOSED
D/FlutterWebRTCPlugin(21313): onConnectionChangeCLOSED
So I ran project on my phone and got more logs on the same issue:
D/AidlBufferPool(29497): bufferpool2 0xb400006de19e0a58 : 5(4608000 size) total buffers - 4(3686400 size) used buffers - 724/729 (recycle/alloc) - 9/1450 (fetch/transfer)
D/MediaConstraintsUtils(29497): mandatory constraints are not a map
D/MediaConstraintsUtils(29497): optional constraints are not an array
D/FlutterWebRTCPlugin(29497): onIceGatheringChangeGATHERING
11
D/FlutterWebRTCPlugin(29497): onIceCandidate
I/flutter (29497): 2025-12-05 16:02:02.716749 ⚠️ (W/SV:CallSession-4): [negotiate] #setPublisher; failed: Result.Failure{error: VideoErrorWithCause{message: participant not found, exception: SfuError{code: participantNotFound, message: participant not found, shouldRetry: false, reconnectStrategy: unspecified}, stackTrace: #0 SfuClient._executeWithRetry (package:stream_video/src/sfu/sfu_client.dart:78:49)
sfu_client.dart:78
I/flutter (29497): <asynchronous suspension>
I/flutter (29497): #1 SfuClient.setPublisher (package:stream_video/src/sfu/sfu_client.dart:142:22)
sfu_client.dart:142
I/flutter (29497): <asynchronous suspension>
I/flutter (29497): #2 CallSession._onRenegotiationNeeded.<anonymous closure> (package:stream_video/src/call/session/call_session.dart:931:25)
call_session.dart:931
I/flutter (29497): <asynchronous suspension>
I/flutter (29497): #3 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38:16)
basic_lock.dart:38
I/flutter (29497): <asynchronous suspension>
I/flutter (29497): #4 CallSession._onRenegotiationNeeded (package:stream_video/src/call/session/call_session.dart:913:5)
call_session.dart:913
I/flutter (29497): <asynchronous suspension>
I/flutter (29497): }}
E/CameraCaptureSession(29497): Session 0: Exception while stopping repeating:
E/CameraCaptureSession(29497): android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): cancelRequest:804: Camera 1: Error clearing streaming request: Function not implemented (-38)
E/CameraCaptureSession(29497): at android.hardware.camera2.utils.ExceptionUtils.throwAsPublicException(ExceptionUtils.java:75)
E/CameraCaptureSession(29497): at android.hardware.camera2.impl.ICameraDeviceUserWrapper.cancelRequest(ICameraDeviceUserWrapper.java:105)
E/CameraCaptureSession(29497): at android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:1696)
E/CameraCaptureSession(29497): at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:603)
E/CameraCaptureSession(29497): at android.hardware.camera2.impl.CameraCaptureSessionImpl$2.onDisconnected(CameraCaptureSessionImpl.java:829)
E/CameraCaptureSession(29497): at android.hardware.camera2.impl.CameraDeviceImpl$9.run(CameraDeviceImpl.java:331)
E/CameraCaptureSession(29497): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
E/CameraCaptureSession(29497): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
E/CameraCaptureSession(29497): at java.lang.Thread.run(Thread.java:1119)
E/CameraCaptureSession(29497): Caused by: android.os.ServiceSpecificException: cancelRequest:804: Camera 1: Error clearing streaming request: Function not implemented (-38) (code 10)
E/CameraCaptureSession(29497): at android.os.Parcel.createExceptionOrNull(Parcel.java:3369)
E/CameraCaptureSession(29497): at android.os.Parcel.createException(Parcel.java:3339)
E/CameraCaptureSession(29497): at android.os.Parcel.readException(Parcel.java:3322)
E/CameraCaptureSession(29497): at android.os.Parcel.readException(Parcel.java:3264)
E/CameraCaptureSession(29497): at android.hardware.camera2.ICameraDeviceUser$Stub$Proxy.cancelRequest(ICameraDeviceUser.java:751)
E/CameraCaptureSession(29497): at android.hardware.camera2.impl.ICameraDeviceUserWrapper.cancelRequest(ICameraDeviceUserWrapper.java:103)
E/CameraCaptureSession(29497): ... 7 more
D/Camera2PresenceSrc(29497): [FetchData] Refreshed camera list: CameraIdentifier{cameraIds=0}, CameraIdentifier{cameraIds=1}
D/FlutterWebRTCPlugin(29497): CameraEventsHandler.onCameraDisconnected
D/Camera2PresenceSrc(29497): [FetchData] Refreshed camera list: CameraIdentifier{cameraIds=0}, CameraIdentifier{cameraIds=1}
D/FlutterWebRTCPlugin(29497): CameraEventsHandler.onFirstFrameAvailable
W/main_texture_ca(29497): type=1400 audit(0.0:62233): avc: denied { getattr } for name="/" dev="dmabuf" ino=1 scontext=u:r:untrusted_app:s0:c71,c258,c512,c768 tcontext=u:object_r:unlabeled:s0 tclass=filesystem permissive=0 app=health.upcoming.client.dev
D/FlutterWebRTCPlugin(29497): CameraEventsHandler.onFirstFrameAvailable
D/FlutterWebRTCPlugin(29497): Target: 1280x720@30, Actual: 1280x720@30
D/FlutterWebRTCPlugin(29497): MediaStream id: 6d467760-6661-44cc-81eb-61ecb7deaf9e
I/flutter (29497): 2025-12-05 16:02:04.296140 ⚠️ (W/SV:RtcManager): [getPublisherTrackByType] track not found: audio
D/MediaConstraintsUtils(29497): mandatory constraints are not a map
D/MediaConstraintsUtils(29497): optional constraints are not an array
D/MediaConstraintsUtils(29497): mandatory constraints are not a map
I/FlutterWebRTCPlugin(29497): getUserMedia(audio): mandatory: [], optional: [echoCancellation: true, googDAEchoCancellation: true, googEchoCancellation: true, googEchoCancellation2: true, noiseSuppression: true, googNoiseSuppression: true, googNoiseSuppression2: true, googAutoGainControl: true, googHighpassFilter: false, googTypingNoiseDetection: true, DtlsSrtpKeyAgreement: true]
D/FlutterWebRTCPlugin(29497): MediaStream id: 1427b437-af78-49f6-8a6d-a493c78dc644
W/main_texture_ca(29497): type=1400 audit(0.0:62234): avc: denied { getattr } for name="/" dev="dmabuf" ino=1 scontext=u:r:untrusted_app:s0:c71,c258,c512,c768 tcontext=u:object_r:unlabeled:s0 tclass=filesystem permissive=0 app=health.upcoming.client.dev
D/FlutterWebRTCPlugin(29497): onIceGatheringChangeGATHERING
4
D/FlutterWebRTCPlugin(29497): onIceCandidate
W/main_texture_ca(29497): type=1400 audit(0.0:62235): avc: denied { getattr } for name="/" dev="dmabuf" ino=1 scontext=u:r:untrusted_app:s0:c71,c258,c512,c768 tcontext=u:object_r:unlabeled:s0 tclass=filesystem permissive=0 app=health.upcoming.client.dev
2
D/FlutterWebRTCPlugin(29497): onIceCandidate
2
D/FlutterWebRTCPlugin(29497): onAddTrack
6
D/FlutterWebRTCPlugin(29497): onIceCandidate
D/MediaConstraintsUtils(29497): mandatory constraints are not a map
D/MediaConstraintsUtils(29497): optional constraints are not an array
2
D/FlutterWebRTCPlugin(29497): onIceCandidate
W/FlutterWebRTCPlugin(29497): FlutterRTCVideoRenderer.setVideoTrack, set video track to 8a2287d6-2feb-40c8-8d43-ee888b361f91
D/FlutterWebRTCPlugin(29497): onIceGatheringChangeGATHERING
5
D/FlutterWebRTCPlugin(29497): onIceCandidate
D/MediaConstraintsUtils(29497): mandatory constraints are not a map
D/MediaConstraintsUtils(29497): optional constraints are not an array
D/FlutterWebRTCPlugin(29497): onIceCandidate
D/CCodec (29497): allocate(c2.exynos.vp9.encoder)
D/CCodec (29497): allocate(c2.exynos.vp9.encoder)
I/CCodec (29497): setting up 'default' as default (vendor) store
W/ming.client.dev(29497): AIBinder_linkToDeath is being called with a non-null cookie and no onUnlink callback set. This might not be intended. AIBinder_DeathRecipient_setOnUnlinked should be called first.
I/CCodec (29497): Created component [c2.exynos.vp9.encoder] for [c2.exynos.vp9.encoder]
D/CCodecConfig(29497): read media type: video/x-vnd.on2.vp9
D/ReflectedParamUpdater(29497): extent() != 1 for single value type: output.subscribed-indices.values
D/ReflectedParamUpdater(29497): extent() != 1 for single value type: input.buffers.allocator-ids.values
D/ReflectedParamUpdater(29497): extent() != 1 for single value type: output.buffers.allocator-ids.values
D/ReflectedParamUpdater(29497): extent() != 1 for single value type: output.buffers.pool-ids.values
D/ReflectedParamUpdater(29497): ignored struct field coding.qp.values
D/CCodecConfig(29497): ignoring local param raw.color (0xc2001809) as it is already supported
I/CCodecConfig(29497): query failed after returning 21 values (BAD_INDEX)
D/CCodecConfig(29497): c2 config diff is Dict {
D/CCodecConfig(29497): c2::u32 algo.bitrate-mode.value = 3
D/CCodecConfig(29497): c2::u32 algo.encoding-quality-level.value = 0
D/CCodecConfig(29497): c2::i32 algo.priority.value = 0
D/CCodecConfig(29497): c2::float algo.rate.value = 0
D/CCodecConfig(29497): c2::i32 coded.average-qp.value = 0
D/CCodecConfig(29497): c2::u32 coded.bitrate-mode.value = 1
D/CCodecConfig(29497): c2::u32 coded.bitrate.value = 64000
D/CCodecConfig(29497): c2::float coded.frame-rate.value = 15
D/CCodecConfig(29497): c2::u32 coded.hdr-format.value = 0
D/CCodecConfig(29497): c2::u32 coded.picture-type.value = 0
D/CCodecConfig(29497): c2::u32 coded.pl.level = 28674
D/CCodecConfig(29497): c2::u32 coded.pl.profile = 28672
D/CCodecConfig(29497): c2::u32 coding.intra-refresh.mode = 0
D/CCodecConfig(29497): c2::float coding.intra-refresh.period = 0
D/CCodecConfig(29497): c2::u32 coding.request-sync-frame.value = 0
D/CCodecConfig(29497): c2::i64 coding.sync-frame-interval.value = 1000000
D/CCodecConfig(29497): Buffer coding.temporal-layering = {
D/CCodecConfig(29497): 00000000: 10 00 00 00 07 20 01 52 00 00 00 00 00 00 00 00 ..... .R........
D/CCodecConfig(29497): }
D/CCodecConfig(29497): Buffer input.hdr-dynamic-info.data = {
D/CCodecConfig(29497): }
D/CCodecConfig(29497): c2::u32 input.hdr-dynamic-info.type = 1
D/CCodecConfig(29497): string input.media-type.value = "video/raw"
D/CCodecConfig(29497): Buffer output.hdr-dynamic-info.data = {
D/CCodecConfig(29497): }
D/CCodecConfig(29497): c2::u32 output.hdr-dynamic-info.type = 1
D/CCodecConfig(29497): string output.med
I/MediaCodec(29497): media_quality service unavailable, skipping updatePictureProfile
D/VQApply (29497): minquality: applies only to VBR encoding
D/MediaCodec(29497): shapeMediaFormat: deltas(0): AMessage(what = 0x00000000) = {
D/MediaCodec(29497): }
D/CCodec (29497): [c2.exynos.vp9.encoder] buffers are bound to CCodec for this session
D/CCodecConfig(29497): no c2 equivalents for color-format
D/CCodecConfig(29497): no c2 equivalents for flags
D/CCodecConfig(29497): no c2 equivalents for encoder
D/CCodecConfig(29497): c2 config diff is c2::u32 algo.bitrate-mode.value = 1
D/CCodecConfig(29497): c2::u32 coded.bitrate.value = 300000
D/CCodecConfig(29497): c2::float coded.frame-rate.value = 30
D/CCodecConfig(29497): c2::i64 coding.sync-frame-interval.value = 3600000000
D/CCodecConfig(29497): c2::u32 raw.size.height = 1280
D/CCodecConfig(29497): c2::u32 raw.size.width = 720
D/CCodec (29497): encoding statistics level = 0
...
2
D/FlutterWebRTCPlugin(29497): onConnectionChangeDISCONNECTED
I/flutter (29497): 2025-12-05 16:02:08.765712 ⚠️ (W/SV:Call-1): [_reconnect] skipping reconnect (join in progress)
D/AidlBufferPool(29497): bufferpool2 0xb400006de19e0a58 : 4(3686400 size) total buffers - 4(3686400 size) used buffers - 782/787 (recycle/alloc) - 10/1564 (fetch/transfer)
D/AidlBufferPoolAcc(29497): evictor expired: 1, evicted: 1
D/AidlBufferPoolAcc(29497): evictor expired: 4, evicted: 0
D/AidlBufferPool(29497): bufferpool2 0xb400006de1b66288 : 0(0 size) total buffers - 0(0 size) used buffers - 0/0 (recycle/alloc) - 0/0 (fetch/transfer)
D/AidlBufferPoolAcc(29497): evictor expired: 1, evicted: 1
2
D/FlutterWebRTCPlugin(29497): onConnectionChangeCONNECTING
D/FlutterWebRTCPlugin(29497): onSelectedCandidatePairChanged
D/FlutterWebRTCPlugin(29497): onIceGatheringChangeCOMPLETE
D/FlutterWebRTCPlugin(29497): onSelectedCandidatePairChanged
D/FlutterWebRTCPlugin(29497): onIceGatheringChangeCOMPLETE
2
D/FlutterWebRTCPlugin(29497): onConnectionChangeCONNECTED
D/AidlBufferPool(29497): Destruction - bufferpool2 0xb400006de1b66288 cached: 0/0M, 0/0% in use; allocs: 0, 0% recycled; transfers: 0, 0% unfetched
Metadata
Metadata
Assignees
Labels
No labels