Conversation
|
@pblazej thank you for such a quick fix and solution! I can confirm that this does indeed fix the undesired reconnection issue from happening! However, it appears it introduced a new issue. If the LocalParticipant tries to republish their tracks after they unpublished them, the video and audio tracks are published (According to the delegates) but you can neither see them or hear them on either the local or remote sides. However, on the RemoteParticipant side, only I can also confirm this was not an issue before this change because as soon as the undesired reconnection took place, we could successfully publish (and see and hear the tracks) again on all devices. |
|
@Daltron let me revisit it, will keep you posted. |
|
@pblazej really appreciate it, thank you! |
|
@Daltron I was unable to reproduce this particular regression in an isolated environment (killing ICE, blocking UDP, etc.). However, I think there's another gap in the logic I tried to fix above ⬆️ It would be great to validate on your side (and provide full logs). |
|
@pblazej Unfortunately, the same issue persists to where local tracks can not be published a second time. I've attached logs which are broken down into sections which indicate what is triggered where: |
|
@pblazej attached are the full logs from the |
|
@Daltron thanks for the full details, I think the root cause is in the transceiver cleanup (workaround)... Added one more change - let's try to validate it ⬆️ 🤞 |
|
@Daltron were you able to check it with the latest release (2.13.0)? |
|
@pblazej I have tested both the 2.13.0 release and this branch and nothing has changed unfortunately. |
|
@Daltron are you able to reproduce it locally in a reliable way? Any specific steps? |
|
@pblazej I am able to reproduce it 100% of the time locally:
Two issues:
|
After unpublishAll(), the sticky hasPublished flag kept the publisher transport marked as critical. When the idle publisher ICE timed out, this triggered an unnecessary reconnect cycle that escalated from quick to full, connecting without the reconnect flag and causing the server to remove the participant with DUPLICATE_IDENTITY. Reset hasPublished to false when no track publications with non-nil tracks remain, preventing both the spurious reconnect trigger and unnecessary publisher ICE restarts during any server-initiated reconnect. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reproduces #958: publish simulcast video (720x1280, 3 layers) + audio, unpublish all, then republish — only audio reaches the remote side, video never appears (trackPublications.count → 1 instead of 2). The test uses the same parameterized V0/V1 pattern as the existing signaling tests and is expected to fail until the underlying transceiver reuse issue is fixed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4ae0adb to
875b271
Compare
|
|
|
@boks1971 I tried to extract something from logs, do you think we can fix the regression server-side? |
|
@Daltron to be absolutely sure, could you try reproducing against |
Resolves #958
After
unpublishAll(), the stickyhasPublishedflag kept the publisher transport marked as critical. When the idle publisher ICE timed out, this triggered an unnecessary reconnect cycle that escalated from quick to full, connecting without the reconnect flag and causing the server to remove the participant withDUPLICATE_IDENTITY.Reset
hasPublishedto false when no track publications with non-nil tracks remain, preventing both the spurious reconnect trigger and unnecessary publisher ICE restarts during any server-initiated reconnect.