From 7dedaf5744ad663337345cc6917de933a8fb6cfa Mon Sep 17 00:00:00 2001 From: Eli Mallon Date: Mon, 24 Aug 2026 18:51:19 -0700 Subject: [PATCH 1/3] intentionally empty commit -- 2.51.2 From f66f14ae9ed9f1195fe1bc802556e8a4a36ae81e Mon Sep 17 00:00:00 2001 From: Eli Mallon Date: Mon, 24 Aug 2026 19:03:53 -0700 Subject: [PATCH 2/3] iOS: move AVAudioSession ownership into the RTCAudioDevice fork The AppDelegate codemod no longer configures AVAudioSession at boot (previously .playAndRecord + .allowBluetooth only, i.e. no A2DP, fixed for the app's lifetime). AUAudioUnitRTCAudioDevice now owns the session via an AudioSessionCoordinator that derives category/mode/options from playback vs recording state, so Bluetooth headphones get full-quality A2DP routing during playback and the device recovers from route changes and media services resets instead of requiring an app restart. Also drops the enableStereoOutput line from the ObjC codemod variant: this fork's WebRTCModuleOptions has no such property, so that path could never have compiled. Bumps rtcaudiodevice to streamplace/RTCAudioDevice@38bf554. Co-Authored-By: Claude Fable 5 --- js/app/package.json | 2 +- js/config-react-native-webrtc/package.json | 2 +- .../src/config-react-native-webrtc.ts | 28 ++++--------------- pnpm-lock.yaml | 15 +++++----- 4 files changed, 16 insertions(+), 31 deletions(-) diff --git a/js/app/package.json b/js/app/package.json index d631648c1..dabdcefa5 100644 --- a/js/app/package.json +++ b/js/app/package.json @@ -115,7 +115,7 @@ "react-native-webview": "13.16.0", "react-use-websocket": "^4.13.0", "reanimated-color-picker": "^4.0.0", - "rtcaudiodevice": "git+https://github.com/streamplace/RTCAudioDevice.git#918e08a0f6f0818fb495a0db0b696b44d11d1336", + "rtcaudiodevice": "git+https://github.com/streamplace/RTCAudioDevice.git#38bf55484ca14366e4322c565aa4ed025107734b", "sdp-transform": "^2.15.0", "stream-http": "^3.2.0", "streamplace": "workspace:*", diff --git a/js/config-react-native-webrtc/package.json b/js/config-react-native-webrtc/package.json index 221aac9ed..bea60d59e 100644 --- a/js/config-react-native-webrtc/package.json +++ b/js/config-react-native-webrtc/package.json @@ -9,7 +9,7 @@ "dependencies": { "@config-plugins/react-native-webrtc": "10.0.0", "react-native-webrtc": "git+https://github.com/streamplace/react-native-webrtc.git#74fa32266e3a2fee180f5e01bb8753af2a92d9d3", - "rtcaudiodevice": "git+https://github.com/streamplace/RTCAudioDevice.git#918e08a0f6f0818fb495a0db0b696b44d11d1336" + "rtcaudiodevice": "git+https://github.com/streamplace/RTCAudioDevice.git#38bf55484ca14366e4322c565aa4ed025107734b" }, "devDependencies": { "typescript": "~5.3.3" diff --git a/js/config-react-native-webrtc/src/config-react-native-webrtc.ts b/js/config-react-native-webrtc/src/config-react-native-webrtc.ts index 7f961f398..98abb5747 100644 --- a/js/config-react-native-webrtc/src/config-react-native-webrtc.ts +++ b/js/config-react-native-webrtc/src/config-react-native-webrtc.ts @@ -102,23 +102,15 @@ const iosDelegateReplacements = [ to: () => ` self.initialProps = @{}; ////RTC PATCH//// - RTCAudioSessionConfiguration* config = [RTCAudioSessionConfiguration webRTCConfiguration]; - - AVAudioSession * session = [AVAudioSession sharedInstance]; - // Set audio to use phone speaker instead of headset speaker - [session setCategory:AVAudioSessionCategoryPlayAndRecord - withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetooth - error:nil]; - [session setActive:YES error:nil]; - + // AVAudioSession configuration is owned by AUAudioUnitRTCAudioDevice's + // AudioSessionCoordinator, which derives it from playback/recording state. + // Do not configure the session here. id device; device = [[AUAudioUnitRTCAudioDevice alloc] init]; WebRTCModuleOptions *options = [WebRTCModuleOptions sharedInstance]; options.loggingSeverity = RTCLoggingSeverityWarning; options.audioDevice = device; - // Enable stereo audio - options.enableStereoOutput = YES; ////END RTC PATCH//// `, }, @@ -127,17 +119,9 @@ const iosDelegateReplacements = [ from: " let delegate = ReactNativeDelegate()", to: () => ` // WebRTC Configuration - let config = RTCAudioSessionConfiguration.webRTC() - - let session = AVAudioSession.sharedInstance() - do { - try session.setCategory(.playAndRecord, - options: [.defaultToSpeaker, .allowBluetooth]) - try session.setActive(true) - } catch { - print("Failed to configure audio session: \(error)") - } - + // AVAudioSession configuration is owned by AUAudioUnitRTCAudioDevice's + // AudioSessionCoordinator, which derives it from playback/recording state. + // Do not configure the session here. let device = AUAudioUnitRTCAudioDevice() let options = WebRTCModuleOptions.sharedInstance() diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 90a93b9ea..6741a3a6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -315,8 +315,8 @@ importers: specifier: ^4.0.0 version: 4.2.0(expo@55.0.6)(react-native-gesture-handler@2.30.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native-reanimated@4.2.2(react-native-worklets@0.7.4(@babel/core@7.29.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.0)(utf-8-validate@5.0.10))(react@19.2.0) rtcaudiodevice: - specifier: git+https://github.com/streamplace/RTCAudioDevice.git#918e08a0f6f0818fb495a0db0b696b44d11d1336 - version: https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/918e08a0f6f0818fb495a0db0b696b44d11d1336 + specifier: git+https://github.com/streamplace/RTCAudioDevice.git#38bf55484ca14366e4322c565aa4ed025107734b + version: https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/38bf55484ca14366e4322c565aa4ed025107734b sdp-transform: specifier: ^2.15.0 version: 2.15.0 @@ -548,8 +548,8 @@ importers: specifier: git+https://github.com/streamplace/react-native-webrtc.git#74fa32266e3a2fee180f5e01bb8753af2a92d9d3 version: https://codeload.github.com/streamplace/react-native-webrtc/tar.gz/74fa32266e3a2fee180f5e01bb8753af2a92d9d3(react-native@0.83.4(@babel/core@7.29.0)(@types/react@19.2.14)(bufferutil@4.0.8)(react@19.2.4)(utf-8-validate@5.0.10)) rtcaudiodevice: - specifier: git+https://github.com/streamplace/RTCAudioDevice.git#918e08a0f6f0818fb495a0db0b696b44d11d1336 - version: https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/918e08a0f6f0818fb495a0db0b696b44d11d1336 + specifier: git+https://github.com/streamplace/RTCAudioDevice.git#38bf55484ca14366e4322c565aa4ed025107734b + version: https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/38bf55484ca14366e4322c565aa4ed025107734b devDependencies: typescript: specifier: ~5.3.3 @@ -8467,6 +8467,7 @@ packages: eslint@9.39.4: resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true peerDependencies: jiti: '*' @@ -13298,8 +13299,8 @@ packages: resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} engines: {node: 6.* || >= 7.*} - rtcaudiodevice@https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/918e08a0f6f0818fb495a0db0b696b44d11d1336: - resolution: {tarball: https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/918e08a0f6f0818fb495a0db0b696b44d11d1336} + rtcaudiodevice@https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/38bf55484ca14366e4322c565aa4ed025107734b: + resolution: {tarball: https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/38bf55484ca14366e4322c565aa4ed025107734b} version: 0.0.1 rtl-detect@1.1.2: @@ -32238,7 +32239,7 @@ snapshots: rsvp@4.8.5: {} - rtcaudiodevice@https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/918e08a0f6f0818fb495a0db0b696b44d11d1336: {} + rtcaudiodevice@https://codeload.github.com/streamplace/RTCAudioDevice/tar.gz/38bf55484ca14366e4322c565aa4ed025107734b: {} rtl-detect@1.1.2: {} -- 2.51.2 From c42f526997771626408e4dd1c559c5d592d8c93c Mon Sep 17 00:00:00 2001 From: Eli Mallon Date: Wed, 2 Sep 2026 07:31:20 -0700 Subject: [PATCH 3/3] app: bump runtime to v0.12.0 --- js/app/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/app/package.json b/js/app/package.json index dabdcefa5..b543458a6 100644 --- a/js/app/package.json +++ b/js/app/package.json @@ -2,7 +2,7 @@ "name": "@streamplace/app", "main": "./src/entrypoint.tsx", "version": "0.11.29", - "runtimeVersion": "0.10.0", + "runtimeVersion": "0.12.0", "scripts": { "start": "npx expo start -c --port 38081", "android": "expo run:android --no-bundler", -- 2.51.2