Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/bump-livekit-client-peer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@livekit/react-native': patch
---

Require `livekit-client` ^2.20.0. Earlier 2.19.x releases pre-allocate media sections in single peer connection mode, which React Native's libwebrtc doesn't support, causing remote tracks to never be subscribed or render black (livekit/client-sdk-js#1977, livekit/client-sdk-js#2113).
2 changes: 1 addition & 1 deletion ci/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"@livekit/react-native": "*",
"@livekit/react-native-webrtc": "^144.2.0",
"@react-native/new-app-screen": "0.82.1",
"livekit-client": "^2.19.0",
"livekit-client": "^2.20.0",
"react": "19.1.1",
"react-native": "0.82.1",
"react-native-safe-area-context": "^5.5.2"
Expand Down
38 changes: 23 additions & 15 deletions ci/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1943,12 +1943,12 @@ __metadata:
languageName: node
linkType: hard

"@livekit/protocol@npm:1.45.8":
version: 1.45.8
resolution: "@livekit/protocol@npm:1.45.8"
"@livekit/protocol@npm:1.50.4":
version: 1.50.4
resolution: "@livekit/protocol@npm:1.50.4"
dependencies:
"@bufbuild/protobuf": "npm:^1.10.0"
checksum: 10/53144553718a4fd71b85298201c8548b9a5d814a2f61a7b5d930442444f05a4e27c5f4cf29e0d7221fbda9209684a670ffba8d092d9aaf6b413396e036dd8500
checksum: 10/314539aeb0b2e7e638f0458b4992bb30f0885b39b7b25e99ba6650a73c28df3765fabc469122a19b94d373db2d7310671660a0aac80a900b15656db9462fb4d9
languageName: node
linkType: hard

Expand Down Expand Up @@ -3565,7 +3565,7 @@ __metadata:
eslint: "npm:^8.19.0"
install-local: "npm:^3.0.1"
jest: "npm:^29.6.3"
livekit-client: "npm:^2.19.0"
livekit-client: "npm:^2.20.0"
prettier: "npm:2.8.8"
react: "npm:19.1.1"
react-native: "npm:0.82.1"
Expand Down Expand Up @@ -6394,22 +6394,23 @@ __metadata:
languageName: node
linkType: hard

"livekit-client@npm:^2.19.0":
version: 2.19.2
resolution: "livekit-client@npm:2.19.2"
"livekit-client@npm:^2.20.0":
version: 2.22.3
resolution: "livekit-client@npm:2.22.3"
dependencies:
"@livekit/mutex": "npm:1.1.1"
"@livekit/protocol": "npm:1.45.8"
"@livekit/protocol": "npm:1.50.4"
events: "npm:^3.3.0"
jose: "npm:^6.1.0"
loglevel: "npm:^1.9.2"
machina: "npm:^7.0.0"
sdp-transform: "npm:^2.15.0"
tslib: "npm:2.8.1"
typed-emitter: "npm:^2.1.0"
webrtc-adapter: "npm:9.0.5"
webrtc-adapter: "npm:9.0.6"
peerDependencies:
"@types/dom-mediacapture-record": ^1
checksum: 10/a28eee26e17e3e586e4a7f1c017b6025289d188cf25d24aad2cf3ae8dd73a0f46471325859d36fad43a5975d0220d430640e96da8c5b5b082837872b09bee7f2
checksum: 10/b906339dc47db37c3f29f741f1243595e7a955df4958bc24f7456304e1edecce11653290d44468a791477fc1ec43877b749223f419f36aa54cdb322e25a907e6
languageName: node
linkType: hard

Expand Down Expand Up @@ -6523,6 +6524,13 @@ __metadata:
languageName: node
linkType: hard

"machina@npm:^7.0.0":
version: 7.0.1
resolution: "machina@npm:7.0.1"
checksum: 10/f870eb6a84f71675c0114ecf6e17ebf70e53e7f050d89d5a6581bfb392b5d4ca4258f56947eb236acb934d696c98fe8255e987fd99223778e6b2f58d9fb8cd89
languageName: node
linkType: hard

"make-dir@npm:^4.0.0":
version: 4.0.0
resolution: "make-dir@npm:4.0.0"
Expand Down Expand Up @@ -8874,12 +8882,12 @@ __metadata:
languageName: node
linkType: hard

"webrtc-adapter@npm:9.0.5":
version: 9.0.5
resolution: "webrtc-adapter@npm:9.0.5"
"webrtc-adapter@npm:9.0.6":
version: 9.0.6
resolution: "webrtc-adapter@npm:9.0.6"
dependencies:
sdp: "npm:^3.2.0"
checksum: 10/23c87b78b689b542ad52723c61c71aead3e07d8ddb4479daafa3fd9490ae3a199859149bb9fb4a16c7e9d13a9e0527e684e781791a221391c21781be2fb5c2e9
checksum: 10/f9bbaf85122205a507e63e3bfb033029ff27440f1f17a82c9f476082cf180edc90756ba7a87668dcd5e5122a70110313da2b226b9c274a018e4dd3c1c65667a2
languageName: node
linkType: hard

Expand Down
2 changes: 1 addition & 1 deletion example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"@react-navigation/native": "^7.1.18",
"@react-navigation/native-stack": "^7.3.27",
"@supersami/rn-foreground-service": "^2.2.5",
"livekit-client": "^2.19.0",
"livekit-client": "^2.20.0",
"react": "19.1.1",
"react-native": "0.82.1",
"react-native-callkeep": "^4.3.14",
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.4",
"jest": "^30.4.2",
"livekit-client": "^2.19.0",
"livekit-client": "^2.20.0",
"pod-install": "^1.0.19",
"prettier": "^3.8.3",
"react": "19.2.0",
Expand All @@ -94,7 +94,7 @@
},
"peerDependencies": {
"@livekit/react-native-webrtc": "^144.2.0",
"livekit-client": "^2.19.0",
"livekit-client": "^2.20.0",
"react": "*",
"react-native": "*"
},
Expand Down
9 changes: 6 additions & 3 deletions src/e2ee/RNE2EEManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import type RNKeyProvider from './RNKeyProvider';
import type RTCEngine from 'livekit-client/dist/src/room/RTCEngine';
import EventEmitter from 'events';
import type TypedEventEmitter from 'typed-emitter';
import type { NonSharedUint8Array } from '../utils/types';

/**
* @experimental
Expand Down Expand Up @@ -212,10 +213,11 @@ export default class RNE2EEManager
if (!encryptedPacket) {
throw new Error('encryption for packet failed');
}
// Buffers from the native cryptor are never shared.
return {
uuid: '', //not used
payload: encryptedPacket.payload,
iv: encryptedPacket.iv,
payload: encryptedPacket.payload as NonSharedUint8Array,
iv: encryptedPacket.iv as NonSharedUint8Array,
keyIndex: encryptedPacket.keyIndex,
};
}
Expand Down Expand Up @@ -244,7 +246,8 @@ export default class RNE2EEManager

return {
uuid: '', //not used
payload: decryptedData,
// Buffers from the native cryptor are never shared.
payload: decryptedData as NonSharedUint8Array,
} satisfies DecryptDataResponseMessage['data'];
}

Expand Down
3 changes: 3 additions & 0 deletions src/utils/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// Resolves to `Uint8Array<ArrayBuffer>` on TS 5.7+ and plain `Uint8Array` on
// older versions. Matches the alias livekit-client uses for its e2ee types.
export type NonSharedUint8Array = ReturnType<typeof Uint8Array.from>;
42 changes: 25 additions & 17 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3603,12 +3603,12 @@ __metadata:
languageName: node
linkType: hard

"@livekit/protocol@npm:1.45.8":
version: 1.45.8
resolution: "@livekit/protocol@npm:1.45.8"
"@livekit/protocol@npm:1.50.4":
version: 1.50.4
resolution: "@livekit/protocol@npm:1.50.4"
dependencies:
"@bufbuild/protobuf": "npm:^1.10.0"
checksum: 10/53144553718a4fd71b85298201c8548b9a5d814a2f61a7b5d930442444f05a4e27c5f4cf29e0d7221fbda9209684a670ffba8d092d9aaf6b413396e036dd8500
checksum: 10/314539aeb0b2e7e638f0458b4992bb30f0885b39b7b25e99ba6650a73c28df3765fabc469122a19b94d373db2d7310671660a0aac80a900b15656db9462fb4d9
languageName: node
linkType: hard

Expand Down Expand Up @@ -3647,7 +3647,7 @@ __metadata:
eslint-plugin-prettier: "npm:^5.5.4"
events: "npm:^3.3.0"
jest: "npm:^30.4.2"
livekit-client: "npm:^2.19.0"
livekit-client: "npm:^2.20.0"
loglevel: "npm:^1.8.0"
pod-install: "npm:^1.0.19"
prettier: "npm:^3.8.3"
Expand All @@ -3663,7 +3663,7 @@ __metadata:
well-known-symbols: "npm:^4.1.0"
peerDependencies:
"@livekit/react-native-webrtc": ^144.2.0
livekit-client: ^2.19.0
livekit-client: ^2.20.0
react: "*"
react-native: "*"
languageName: unknown
Expand Down Expand Up @@ -9512,22 +9512,23 @@ __metadata:
languageName: node
linkType: hard

"livekit-client@npm:^2.19.0":
version: 2.19.2
resolution: "livekit-client@npm:2.19.2"
"livekit-client@npm:^2.20.0":
version: 2.22.3
resolution: "livekit-client@npm:2.22.3"
dependencies:
"@livekit/mutex": "npm:1.1.1"
"@livekit/protocol": "npm:1.45.8"
"@livekit/protocol": "npm:1.50.4"
events: "npm:^3.3.0"
jose: "npm:^6.1.0"
loglevel: "npm:^1.9.2"
machina: "npm:^7.0.0"
sdp-transform: "npm:^2.15.0"
tslib: "npm:2.8.1"
typed-emitter: "npm:^2.1.0"
webrtc-adapter: "npm:9.0.5"
webrtc-adapter: "npm:9.0.6"
peerDependencies:
"@types/dom-mediacapture-record": ^1
checksum: 10/a28eee26e17e3e586e4a7f1c017b6025289d188cf25d24aad2cf3ae8dd73a0f46471325859d36fad43a5975d0220d430640e96da8c5b5b082837872b09bee7f2
checksum: 10/b906339dc47db37c3f29f741f1243595e7a955df4958bc24f7456304e1edecce11653290d44468a791477fc1ec43877b749223f419f36aa54cdb322e25a907e6
languageName: node
linkType: hard

Expand All @@ -9552,7 +9553,7 @@ __metadata:
"@types/fastestsmallesttextencoderdecoder": "npm:^1.0.0"
"@types/react": "npm:^19.2.0"
babel-plugin-module-resolver: "npm:^5.0.2"
livekit-client: "npm:^2.19.0"
livekit-client: "npm:^2.20.0"
patch-package: "npm:^8.0.0"
react: "npm:19.1.1"
react-native: "npm:0.82.1"
Expand Down Expand Up @@ -9701,6 +9702,13 @@ __metadata:
languageName: node
linkType: hard

"machina@npm:^7.0.0":
version: 7.0.1
resolution: "machina@npm:7.0.1"
checksum: 10/f870eb6a84f71675c0114ecf6e17ebf70e53e7f050d89d5a6581bfb392b5d4ca4258f56947eb236acb934d696c98fe8255e987fd99223778e6b2f58d9fb8cd89
languageName: node
linkType: hard

"make-dir@npm:^4.0.0":
version: 4.0.0
resolution: "make-dir@npm:4.0.0"
Expand Down Expand Up @@ -13046,12 +13054,12 @@ __metadata:
languageName: node
linkType: hard

"webrtc-adapter@npm:9.0.5":
version: 9.0.5
resolution: "webrtc-adapter@npm:9.0.5"
"webrtc-adapter@npm:9.0.6":
version: 9.0.6
resolution: "webrtc-adapter@npm:9.0.6"
dependencies:
sdp: "npm:^3.2.0"
checksum: 10/23c87b78b689b542ad52723c61c71aead3e07d8ddb4479daafa3fd9490ae3a199859149bb9fb4a16c7e9d13a9e0527e684e781791a221391c21781be2fb5c2e9
checksum: 10/f9bbaf85122205a507e63e3bfb033029ff27440f1f17a82c9f476082cf180edc90756ba7a87668dcd5e5122a70110313da2b226b9c274a018e4dd3c1c65667a2
languageName: node
linkType: hard

Expand Down
Loading