From c862f0013fc1d72f50f7e5c28b2f1c01693a66c5 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Tue, 17 Mar 2026 21:12:50 +0900 Subject: [PATCH 1/4] bump --- README.md | 2 +- android/build.gradle | 2 +- .../com/oney/WebRTCModule/RTCCryptoManager.java | 17 ++++++++++++++++- ios/RCTWebRTC/WebRTCModule+RTCFrameCryptor.m | 15 ++++++++++++++- livekit-react-native-webrtc.podspec | 2 +- package.json | 2 +- src/RTCFrameCryptorFactory.ts | 11 +++++++++-- src/RTCRtpSendParameters.ts | 1 + src/index.ts | 3 ++- 9 files changed, 46 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ff88912af..c8ffc53bc 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Software encode/decode factories have been enabled by default. ## WebRTC Revision -* Currently used revision: [M125](https://github.com/webrtc-sdk/webrtc/tree/m125_release) +* Currently used revision: [M144](https://github.com/webrtc-sdk/webrtc/tree/m144_release) * Supported architectures * Android: armeabi-v7a, arm64-v8a, x86, x86_64 * iOS: arm64, x86_64 diff --git a/android/build.gradle b/android/build.gradle index 38d28c544..400607288 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -31,6 +31,6 @@ android { dependencies { implementation "com.facebook.react:react-android:+" - api 'io.github.webrtc-sdk:android:137.7151.04' + api 'io.github.webrtc-sdk:android:144.7559.01' implementation "androidx.core:core:1.7.0" } diff --git a/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java b/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java index e6318da01..383bb8695 100644 --- a/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java +++ b/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java @@ -15,6 +15,7 @@ import org.webrtc.FrameCryptor; import org.webrtc.FrameCryptorAlgorithm; import org.webrtc.FrameCryptorFactory; +import org.webrtc.FrameCryptorKeyDerivationAlgorithm; import org.webrtc.FrameCryptorKeyProvider; import org.webrtc.RtpReceiver; import org.webrtc.RtpSender; @@ -92,6 +93,17 @@ private FrameCryptorAlgorithm frameCryptorAlgorithmFromInt(int algorithm) { } } + private FrameCryptorKeyDerivationAlgorithm keyDerivationAlgorithmFromInt(int algorithm) { + switch (algorithm) { + case 0: + return FrameCryptorKeyDerivationAlgorithm.PBKDF2; + case 1: + return FrameCryptorKeyDerivationAlgorithm.HKDF; + default: + return FrameCryptorKeyDerivationAlgorithm.PBKDF2; + } + } + public String frameCryptorFactoryCreateFrameCryptor(ReadableMap params) { String keyProviderId = params.getString("keyProviderId"); FrameCryptorKeyProvider keyProvider = keyProviders.get(keyProviderId); @@ -238,13 +250,16 @@ public String frameCryptorFactoryCreateKeyProvider(ReadableMap keyProviderOption int keyRingSize = (int) keyProviderOptions.getInt("keyRingSize"); boolean discardFrameWhenCryptorNotReady = (boolean) keyProviderOptions.getBoolean("discardFrameWhenCryptorNotReady"); + int keyDerivationAlgorithm = keyProviderOptions.hasKey("keyDerivationAlgorithm") + ? keyProviderOptions.getInt("keyDerivationAlgorithm") : 0; FrameCryptorKeyProvider keyProvider = FrameCryptorFactory.createFrameCryptorKeyProvider(sharedKey, ratchetSalt, ratchetWindowSize, uncryptedMagicBytes, failureTolerance, keyRingSize, - discardFrameWhenCryptorNotReady); + discardFrameWhenCryptorNotReady, + keyDerivationAlgorithmFromInt(keyDerivationAlgorithm)); keyProviders.put(keyProviderId, keyProvider); return keyProviderId; } diff --git a/ios/RCTWebRTC/WebRTCModule+RTCFrameCryptor.m b/ios/RCTWebRTC/WebRTCModule+RTCFrameCryptor.m index dd3ce112e..5483355c1 100644 --- a/ios/RCTWebRTC/WebRTCModule+RTCFrameCryptor.m +++ b/ios/RCTWebRTC/WebRTCModule+RTCFrameCryptor.m @@ -26,6 +26,17 @@ - (RTCCryptorAlgorithm)getAlgorithm:(NSNumber *)algorithm { } } +- (RTCKeyDerivationAlgorithm)getKeyDerivationAlgorithm:(NSNumber *)algorithm { + switch ([algorithm intValue]) { + case 0: + return RTCKeyDerivationAlgorithmPBKDF2; + case 1: + return RTCKeyDerivationAlgorithmHKDF; + default: + return RTCKeyDerivationAlgorithmPBKDF2; + } +} + - (NSData *)bytesFromMap:(NSDictionary *)map key:(NSString *)key isBase64Key:(nullable NSString *)isBase64Key { BOOL isBase64 = YES; if (isBase64Key) { @@ -257,6 +268,7 @@ - (NSData *)bytesFromMap:(NSDictionary *)map key:(NSString *)key isBase64Key:(nu NSNumber *keyRingSize = keyProviderOptions[@"keyRingSize"]; NSNumber *discardFrameWhenCryptorNotReady = keyProviderOptions[@"discardFrameWhenCryptorNotReady"]; + NSNumber *keyDerivationAlgorithm = keyProviderOptions[@"keyDerivationAlgorithm"]; RTCFrameCryptorKeyProvider *keyProvider = [[RTCFrameCryptorKeyProvider alloc] initWithRatchetSalt:ratchetSalt @@ -267,7 +279,8 @@ - (NSData *)bytesFromMap:(NSDictionary *)map key:(NSString *)key isBase64Key:(nu keyRingSize:keyRingSize != nil ? [keyRingSize intValue] : 0 discardFrameWhenCryptorNotReady:discardFrameWhenCryptorNotReady != nil ? [discardFrameWhenCryptorNotReady boolValue] - : NO]; + : NO + keyDerivationAlgorithm:[self getKeyDerivationAlgorithm:keyDerivationAlgorithm]]; self.keyProviders[keyProviderId] = keyProvider; return; }); diff --git a/livekit-react-native-webrtc.podspec b/livekit-react-native-webrtc.podspec index 3eeaffd92..8c9ad330c 100644 --- a/livekit-react-native-webrtc.podspec +++ b/livekit-react-native-webrtc.podspec @@ -19,7 +19,7 @@ Pod::Spec.new do |s| s.libraries = 'c', 'sqlite3', 'stdc++' s.framework = 'AudioToolbox','AVFoundation', 'CoreAudio', 'CoreGraphics', 'CoreVideo', 'GLKit', 'VideoToolbox' s.dependency 'React-Core' - s.dependency 'WebRTC-SDK', '=137.7151.09' + s.dependency 'WebRTC-SDK', '=144.7559.01' # Swift/Objective-C compatibility s.pod_target_xcconfig = { diff --git a/package.json b/package.json index 7b50def68..181f249a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@livekit/react-native-webrtc", - "version": "137.0.2", + "version": "144.0.0", "repository": { "type": "git", "url": "git+https://github.com/livekit/react-native-webrtc.git" diff --git a/src/RTCFrameCryptorFactory.ts b/src/RTCFrameCryptorFactory.ts index c80669260..9baf8afca 100644 --- a/src/RTCFrameCryptorFactory.ts +++ b/src/RTCFrameCryptorFactory.ts @@ -12,6 +12,11 @@ export enum RTCFrameCryptorAlgorithm { // kAesCbc = 1, } +export enum RTCKeyDerivationAlgorithm { + PBKDF2 = 0, + HKDF = 1, +} + export type RTCKeyProviderOptions = { sharedKey: boolean, ratchetSalt: string | Uint8Array, @@ -19,7 +24,8 @@ export type RTCKeyProviderOptions = { uncryptedMagicBytes?: Uint8Array, failureTolerance?: number, keyRingSize?: number, - discardFrameWhenCryptorNotReady?: boolean + discardFrameWhenCryptorNotReady?: boolean, + keyDerivationAlgorithm?: RTCKeyDerivationAlgorithm, } export default class RTCFrameCryptorFactory { @@ -74,7 +80,8 @@ export default class RTCFrameCryptorFactory { 'ratchetWindowSize': options.ratchetWindowSize, 'failureTolerance': options.failureTolerance ?? -1, 'keyRingSize': options.keyRingSize ?? 16, - 'discardFrameWhenCryptorNotReady': options.discardFrameWhenCryptorNotReady ?? false + 'discardFrameWhenCryptorNotReady': options.discardFrameWhenCryptorNotReady ?? false, + 'keyDerivationAlgorithm': options.keyDerivationAlgorithm ?? 0 }; if (typeof options.ratchetSalt === 'string') { diff --git a/src/RTCRtpSendParameters.ts b/src/RTCRtpSendParameters.ts index 338c60c4b..c3ed851f4 100644 --- a/src/RTCRtpSendParameters.ts +++ b/src/RTCRtpSendParameters.ts @@ -6,6 +6,7 @@ type DegradationPreferenceType = 'maintain-framerate' | 'maintain-resolution' | 'balanced' | 'disabled' + | 'maintain-framerate-and-resolution' /** diff --git a/src/index.ts b/src/index.ts index eaedc773e..d082b0725 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,7 +20,7 @@ import RTCDataPacketCryptor, { RTCEncryptedPacket } from './RTCDataPacketCryptor import RTCDataPacketCryptorFactory from './RTCDataPacketCryptorFactory'; import RTCErrorEvent from './RTCErrorEvent'; import RTCFrameCryptor, { RTCFrameCryptorState } from './RTCFrameCryptor'; -import RTCFrameCryptorFactory, { RTCFrameCryptorAlgorithm, RTCKeyProviderOptions } from './RTCFrameCryptorFactory'; +import RTCFrameCryptorFactory, { RTCFrameCryptorAlgorithm, RTCKeyDerivationAlgorithm, RTCKeyProviderOptions } from './RTCFrameCryptorFactory'; import RTCIceCandidate from './RTCIceCandidate'; import RTCKeyProvider from './RTCKeyProvider'; import RTCPIPView, { startIOSPIP, stopIOSPIP } from './RTCPIPView'; @@ -55,6 +55,7 @@ export { RTCFrameCryptor, RTCFrameCryptorAlgorithm, RTCFrameCryptorState, + RTCKeyDerivationAlgorithm, RTCFrameCryptorFactory, RTCKeyProvider, RTCKeyProviderOptions, From 3008c07d06c6e3740e209c86d304accdc073f356 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Tue, 24 Mar 2026 09:50:09 +0900 Subject: [PATCH 2/4] fix CI --- .../src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java | 3 ++- package-lock.json | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java b/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java index 383bb8695..f251ea5aa 100644 --- a/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java +++ b/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java @@ -251,7 +251,8 @@ public String frameCryptorFactoryCreateKeyProvider(ReadableMap keyProviderOption boolean discardFrameWhenCryptorNotReady = (boolean) keyProviderOptions.getBoolean("discardFrameWhenCryptorNotReady"); int keyDerivationAlgorithm = keyProviderOptions.hasKey("keyDerivationAlgorithm") - ? keyProviderOptions.getInt("keyDerivationAlgorithm") : 0; + ? keyProviderOptions.getInt("keyDerivationAlgorithm") + : 0; FrameCryptorKeyProvider keyProvider = FrameCryptorFactory.createFrameCryptorKeyProvider(sharedKey, ratchetSalt, ratchetWindowSize, diff --git a/package-lock.json b/package-lock.json index 7b0655699..972d7171a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@livekit/react-native-webrtc", - "version": "137.0.2", + "version": "144.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@livekit/react-native-webrtc", - "version": "137.0.2", + "version": "144.0.0", "license": "MIT", "dependencies": { "base64-js": "1.5.1", From e5636d40f942b265d283da504e163eba8929ea1a Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Tue, 24 Mar 2026 09:54:50 +0900 Subject: [PATCH 3/4] fix CI --- src/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index d082b0725..9264230c3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,7 +20,9 @@ import RTCDataPacketCryptor, { RTCEncryptedPacket } from './RTCDataPacketCryptor import RTCDataPacketCryptorFactory from './RTCDataPacketCryptorFactory'; import RTCErrorEvent from './RTCErrorEvent'; import RTCFrameCryptor, { RTCFrameCryptorState } from './RTCFrameCryptor'; -import RTCFrameCryptorFactory, { RTCFrameCryptorAlgorithm, RTCKeyDerivationAlgorithm, RTCKeyProviderOptions } from './RTCFrameCryptorFactory'; +import RTCFrameCryptorFactory, { + RTCFrameCryptorAlgorithm, RTCKeyDerivationAlgorithm, RTCKeyProviderOptions, +} from './RTCFrameCryptorFactory'; import RTCIceCandidate from './RTCIceCandidate'; import RTCKeyProvider from './RTCKeyProvider'; import RTCPIPView, { startIOSPIP, stopIOSPIP } from './RTCPIPView'; From 1046fcc1a50ba9fc5dd05b2f0da35f6a08101b93 Mon Sep 17 00:00:00 2001 From: davidliu Date: Wed, 25 Mar 2026 18:02:23 +0900 Subject: [PATCH 4/4] revert package version change --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8de92704..2435fd88f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@livekit/react-native-webrtc", - "version": "144.0.0", + "version": "137.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@livekit/react-native-webrtc", - "version": "144.0.0", + "version": "137.0.2", "license": "MIT", "dependencies": { "base64-js": "1.5.1", diff --git a/package.json b/package.json index 5f4fdbf9b..b3cb6f070 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@livekit/react-native-webrtc", - "version": "144.0.0", + "version": "137.0.2", "repository": { "type": "git", "url": "git+https://github.com/livekit/react-native-webrtc.git"