Skip to content

Update libwebrtc to m144 and fix audio device lifecycle/processing#5958

Open
roxanneskelly wants to merge 117 commits into
release/26.3from
roxie/webrtc-m144
Open

Update libwebrtc to m144 and fix audio device lifecycle/processing#5958
roxanneskelly wants to merge 117 commits into
release/26.3from
roxie/webrtc-m144

Conversation

@roxanneskelly

Copy link
Copy Markdown
Contributor

Description

  • Update libwebrtc to version m144 (autobuild.xml).
  • Use WebRTC's software APM exclusively; disable built-in (hardware/OS) AEC/AGC/NS, including after each device (re)deploy.
  • Only run the output device once a peer connection's audio is established (and bring devices up with the user's selected device at that point), fixing the buzz heard before/without an active connection.
  • Keep capture warm across mute/unmute to avoid the AEC cold-start hiss; stop recording 30s after a sustained mute so the OS mic indicator clears.
  • Reliably (re)select and (re)start capture/playout after teleport or voice restart so audio sends/records again.
  • Don't suspend the voice channel when entering tuning mode (Vivox-era behavior that dropped the peer connection).

Related Issues

improves #5953 - reduced the chance of hisses occurring
closes #5825 - removed some old vivox code that dropped calls when editing audio settings


Test Guidance

In addition to the reproduction steps for #5953 and #5825, this will need a thorough voice test run, as we updated libwebrtc.
This includes:

  • Device handling
  • Teleports
  • cross-region
  • p2p/adhoc/group
  • etc.

maxim-productengine and others added 30 commits April 13, 2026 12:40
…5632)

The glTF importer branches on LLJointData::mSupport when it decides whether a collision volume should inherit the current rest matrix or the support-rest matrix. That value was never copied from the avatar skeleton XML into LLJointData, so the importer was effectively making that decision on uninitialized state.
The glTF importer rebuilt collision volume override-rest matrices from the imported translation override and viewer-side scale only. That dropped the collision volume rotation defined in avatar_skeleton.xml and produced incorrect inverse bind matrices for rotated collision volumes, especially the torso volumes that use non-uniform scale. The result was a visible mismatch between rigged mesh imported from .glb and the equivalent .dae upload.
…lay the type of connection the version is applicable to.
Bumps [BugSplat-Git/symbol-upload](https://github.com/bugsplat-git/symbol-upload) from 095d163ae9ceb006d286a731dcd35cf6a1b458c8 to 2a0d2b8cf9c54c494144048f25da863d93a02ccd.
- [Release notes](https://github.com/bugsplat-git/symbol-upload/releases)
- [Commits](BugSplat-Git/symbol-upload@095d163...2a0d2b8)

---
updated-dependencies:
- dependency-name: BugSplat-Git/symbol-upload
  dependency-version: 2a0d2b8cf9c54c494144048f25da863d93a02ccd
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
#5634: Apply version string from janus server if available. Also display the type of connection the version is applicable to.
This fixes a bug where the user logs in with good cache, server issues use-cached response, and then the viewer would send another mutelist request on region change.

Signed-off-by: Darl <me@darl.cat>
Constitutes zero behavioral changes.

Signed-off-by: Darl <me@darl.cat>
Velopack's uninstall can't be canceled, so instead it now checks for presense of a running window, makes sure window matches velopack's path, then sends a shutdown message. Window gets the message, verifies path, initiates shutdown.
* #5690 fix viewer trying to fetch group chat history for p2p IM
* #5690 cache "FetchGroupChatHistory" setting
#5702: Ensure non-visible preloaded media has PRIORITY_HIDDEN
Might be better to throw a 'missing files' error here, but we normally continue in such cases, so I'm just logging the incident.
I'm not sure if viewer should actually be shutting down on this, but as
a minimum we should be updating or clearing marker files. If viewer
crashes because of a hibernation, it isn't our problem. Viewer isn't
built for that and we can't maintain 'heartbeats' in hibernation.
akleshchev and others added 23 commits June 4, 2026 01:31
by handling WM_ERASEBKGND with black brush (#5903)
* Get the viewer building on macOS 27

* Strip -mmacosx-version-min when we're below an SDK supported version.

Substitutes an actual SDK supported minimum version.

* Move kIOMainPortDefault behind an SDK compatibility check.

* Update llwindowmacosx_iokit.h

* Update llwindowmacosx_iokit.h
mVisibilityPreference was rarely up to date
sanity check size, catch exceptions. Cache isn't mission critical.
- Drag-and-drop reordering for clothing layers with visual insertion indicator
- Includes new `keep_scroll_pos` param to preserve and restore scroll positions during layout and resize
- Update libwebrtc to version m144 (autobuild.xml).
- Use WebRTC's software APM exclusively; disable built-in (hardware/OS)
  AEC/AGC/NS, including after each device (re)deploy.
- Only run the output device once a peer connection's audio is established
  (and bring devices up with the user's selected device at that point),
  fixing the buzz heard before/without an active connection.
- Keep capture warm across mute/unmute to avoid the AEC cold-start hiss;
  stop recording 30s after a sustained mute so the OS mic indicator clears.
- Reliably (re)select and (re)start capture/playout after teleport or
  voice restart so audio sends/records again.
- Don't suspend the voice channel when entering tuning mode (Vivox-era
  behavior that dropped the peer connection).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added the c/cpp label Jun 26, 2026
Mute now zeroes captured gain and disables the sender tracks instead of
stopping the capture device, so unmuting no longer cold-starts the AEC
(no hiss) and Bluetooth devices no longer drop/restart as they switch
between mono and stereo.

Capture is gated on voice being enabled rather than on mute: it starts
when voice is enabled and runs across calls and mute/unmute, and is
released when voice is disabled (setVoiceEnabled). Playout stays gated on
there being a connection to render. As a result the OS "mic in use"
indicator is on for the length of the session and only clears when voice
is disabled.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@roxanneskelly roxanneskelly requested a review from akleshchev June 30, 2026 21:59
@roxanneskelly roxanneskelly marked this pull request as ready for review June 30, 2026 21:59
@roxanneskelly roxanneskelly changed the base branch from develop to release/26.3 July 1, 2026 21:35
@akleshchev

Copy link
Copy Markdown
Contributor

changed the base branch from develop to release/26.3

Looks like it included a bunch of changes from develop that shouldn't be here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

P2P Voice call issues after editing voice settings in preferences