Repository navigation
chore: backport #2594 and #2596 to v1 - #2597
Merged
Merged
Conversation
### 💡 Overview Follow-up to #2589. Every option in `call.settings.extra_opts` can now be overridden per browser with a suffixed key next to it, e.g. `audio.use_web_audio_safari` next to `audio.use_web_audio`, or `audio.media_constraints.echo_cancellation_firefox`. The suffixed key wins over the plain key. Each browser matches exactly one suffix: | Runtime | Suffix | |---|---| | Safari (macOS/iOS), the other iOS browsers, and iOS WebViews that copy Safari's user agent | `_safari` | | Other WebKit runtimes: WKWebViews without a `Safari` token | `_webkit` | | Chromium browsers and shells: Chrome, Edge, Android Chrome, Android WebViews, Electron | `_chrome` | | Firefox | `_firefox` | | No browser (React Native, server) | none: plain keys only | ### 📝 Implementation notes - All in `getCallExtraOpts` (`helpers/extraOpts.ts`), so screen share, mic constraints, Web Audio, silent audio, noise cancellation and the React and React Native providers pick it up without changes. The backend stores `extra_opts` untyped, so no backend change is needed. - The suffix comes from the existing `isSafari`/`isWebKit`/`isFirefox`/`isChrome` helpers. Each option reads as `asX(read(record, key))`: a missing or `null` override falls back to the plain key, and an override of the wrong type falls to the SDK default, like an invalid plain value. - Groups (`audio`, `media_constraints`, `noise_cancellation`) take no suffix; their options do. - Tests stub real user agents for Safari, iOS Chrome, a WKWebView, the Google app's WebView, an Android WebView, Chrome, Edge, Firefox and no browser. 🎫 Ticket: https://linear.app/stream/issue/VID-1741/staff-managed-client-media-settings-per-call-type-screenshare-content 📑 Docs: not needed, staff-only settings <!-- This is an auto-generated comment: release notes by coderabbit.ai --> <!-- coderabbit-ai-generated:v1 --> ## Summary by CodeRabbit * **New Features** * Call options can use browser-specific overrides for Safari (including iOS browsers reporting as Safari), WebViews, Firefox, and Chromium browsers. Missing or `null` overrides fall back to the plain option. * Browser-specific overrides apply to individual options, not to audio, media constraints, or noise cancellation groups. <!-- end of auto-generated comment: release notes by coderabbit.ai --> (cherry picked from commit 4a31de3)
#2596) ### 💡 Overview `StartNoiseCancellation` and `StopNoiseCancellation` now tell the SFU which engine runs (Krisp or Stream's FastEnhancer) and which model variant. Protocol change: GetStream/protocol#2242 ### 📝 Implementation notes - Regenerated the SFU protocol types (protobuf-ts 2.10.0). This also picks up two comment-only updates already on protocol main. - `@stream-io/audio-filters-web`: a `model` getter on `INoiseCancellation`. Krisp reports its model file name without the extension (from `krispSDKParams.models.modelNC`, then the call settings `model_path`, then the default `krisp-nc-o-med-v7`). FastEnhancer reports its size (`tiny`, `base`, `small`). The `NoiseCancellation` router reports the running engine's model. - `MicrophoneManager` maps `engine: 'stream'` to `STREAM` and anything else to Krisp, the proto zero value. That covers React Native and custom implementations; the model is empty when unknown. - Stop sends what Start sent: the router drops its engine before the final `change` event, so reading the model at that point would lose it. - Tests: the reported engine and model in `MicrophoneManager`, the router's `model`, and the Krisp and FastEnhancer model getters. 🎫 Ticket: https://linear.app/stream/issue/VID-1741 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> <!-- coderabbit-ai-generated:v1 --> ## Summary by CodeRabbit * **New Features** * Noise cancellation notifications now include the selected engine and model when starting or stopping, providing more detail about the active configuration. * Supported noise cancellation engines now expose their model name when available. The reported name reflects the configured model, including custom model selections. * The active model is available through the noise cancellation interface while an engine is running, and is undefined when no active model is available. <!-- end of auto-generated comment: release notes by coderabbit.ai --> (cherry picked from commit 595b708)
Contributor
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
Bundle sizeBuilt package output. Sizes in KB; delta vs
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
💡 Overview
Weekly v1 backport round. Cherry-picks (
-x) of the mergedbackport-v1PRs frommain, in merge order:📝 Implementation notes
(cherry picked from commit ...)trailer.main's.release-v1: no new type errors in the touched packages, client vitest passes (the three suites that needSTREAM_SECRETrun in CI),audio-filters-webtests pass (24), Prettier and ESLint clean.🎫 Ticket: https://linear.app/stream/issue/REACT-1531
📑 Docs: N/A