livekit-client 2.22.3 → 2.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -0
- package/dist/livekit-client.e2ee.worker.js +1 -1
- package/dist/livekit-client.e2ee.worker.js.map +1 -1
- package/dist/livekit-client.e2ee.worker.mjs +71 -8
- package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
- package/dist/livekit-client.esm.mjs +1746 -547
- package/dist/livekit-client.esm.mjs.map +1 -1
- package/dist/livekit-client.fm.worker.js +1 -1
- package/dist/livekit-client.fm.worker.js.map +1 -1
- package/dist/livekit-client.fm.worker.mjs +2 -1
- package/dist/livekit-client.fm.worker.mjs.map +1 -1
- package/dist/livekit-client.umd.js +1 -1
- package/dist/livekit-client.umd.js.map +1 -1
- package/dist/src/api/SignalClient.d.ts +4 -2
- package/dist/src/api/SignalClient.d.ts.map +1 -1
- package/dist/src/api/WebSocketStream.d.ts +1 -0
- package/dist/src/api/WebSocketStream.d.ts.map +1 -1
- package/dist/src/api/utils.d.ts +1 -1
- package/dist/src/api/utils.d.ts.map +1 -1
- package/dist/src/e2ee/E2eeManager.d.ts.map +1 -1
- package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
- package/dist/src/e2ee/worker/naluUtils.d.ts +12 -1
- package/dist/src/e2ee/worker/naluUtils.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/options.d.ts +14 -0
- package/dist/src/options.d.ts.map +1 -1
- package/dist/src/room/DefaultReconnectPolicy.d.ts.map +1 -1
- package/dist/src/room/PCTransport.d.ts +100 -7
- package/dist/src/room/PCTransport.d.ts.map +1 -1
- package/dist/src/room/PCTransportManager.d.ts.map +1 -1
- package/dist/src/room/RTCEngine.d.ts +16 -0
- package/dist/src/room/RTCEngine.d.ts.map +1 -1
- package/dist/src/room/Room.d.ts +54 -1
- package/dist/src/room/Room.d.ts.map +1 -1
- package/dist/src/room/data-channel/DataChannelManager.d.ts +9 -8
- package/dist/src/room/data-channel/DataChannelManager.d.ts.map +1 -1
- package/dist/src/room/data-channel/FlowControlledDataChannel.d.ts +25 -12
- package/dist/src/room/data-channel/FlowControlledDataChannel.d.ts.map +1 -1
- package/dist/src/room/data-channel/LossyDataChannel.d.ts.map +1 -1
- package/dist/src/room/data-channel/ReliableDataChannel.d.ts.map +1 -1
- package/dist/src/room/data-stream/incoming/IncomingDataStreamManager.d.ts.map +1 -1
- package/dist/src/room/defaults.d.ts.map +1 -1
- package/dist/src/room/errors.d.ts +18 -0
- package/dist/src/room/errors.d.ts.map +1 -1
- package/dist/src/room/events.d.ts +3 -2
- package/dist/src/room/events.d.ts.map +1 -1
- package/dist/src/room/participant/LocalParticipant.d.ts +4 -0
- package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
- package/dist/src/room/participant/Participant.d.ts +1 -1
- package/dist/src/room/participant/Participant.d.ts.map +1 -1
- package/dist/src/room/participant/publishUtils.d.ts.map +1 -1
- package/dist/src/room/rpc/client/RpcClientManager.d.ts.map +1 -1
- package/dist/src/room/rpc/utils.d.ts.map +1 -1
- package/dist/src/room/track/LocalAudioTrack.d.ts +24 -1
- package/dist/src/room/track/LocalAudioTrack.d.ts.map +1 -1
- package/dist/src/room/track/LocalTrack.d.ts +18 -0
- package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
- package/dist/src/room/track/LocalVideoTrack.d.ts +9 -0
- package/dist/src/room/track/LocalVideoTrack.d.ts.map +1 -1
- package/dist/src/room/track/RemoteAudioTrack.d.ts +6 -0
- package/dist/src/room/track/RemoteAudioTrack.d.ts.map +1 -1
- package/dist/src/room/track/processor/types.d.ts +11 -0
- package/dist/src/room/track/processor/types.d.ts.map +1 -1
- package/dist/src/room/track/utils.d.ts +13 -0
- package/dist/src/room/track/utils.d.ts.map +1 -1
- package/dist/src/room/utils.d.ts +60 -1
- package/dist/src/room/utils.d.ts.map +1 -1
- package/dist/src/test/compressionStreamStubs.d.ts +12 -0
- package/dist/src/test/compressionStreamStubs.d.ts.map +1 -0
- package/dist/ts4.2/api/SignalClient.d.ts +187 -185
- package/dist/ts4.2/api/SignalClientStateMachine.d.ts +85 -85
- package/dist/ts4.2/api/WebSocketStream.d.ts +34 -33
- package/dist/ts4.2/api/utils.d.ts +9 -9
- package/dist/ts4.2/connectionHelper/ConnectionCheck.d.ts +30 -30
- package/dist/ts4.2/connectionHelper/checks/Checker.d.ts +62 -62
- package/dist/ts4.2/connectionHelper/checks/cloudRegion.d.ts +18 -18
- package/dist/ts4.2/connectionHelper/checks/connectionProtocol.d.ts +20 -20
- package/dist/ts4.2/connectionHelper/checks/publishAudio.d.ts +6 -6
- package/dist/ts4.2/connectionHelper/checks/publishVideo.d.ts +7 -7
- package/dist/ts4.2/connectionHelper/checks/reconnect.d.ts +6 -6
- package/dist/ts4.2/connectionHelper/checks/turn.d.ts +6 -6
- package/dist/ts4.2/connectionHelper/checks/webrtc.d.ts +6 -6
- package/dist/ts4.2/connectionHelper/checks/websocket.d.ts +6 -6
- package/dist/ts4.2/e2ee/E2eeManager.d.ts +111 -111
- package/dist/ts4.2/e2ee/KeyProvider.d.ts +54 -54
- package/dist/ts4.2/e2ee/constants.d.ts +21 -21
- package/dist/ts4.2/e2ee/errors.d.ts +12 -12
- package/dist/ts4.2/e2ee/events.d.ts +39 -39
- package/dist/ts4.2/e2ee/index.d.ts +6 -6
- package/dist/ts4.2/e2ee/types.d.ts +231 -231
- package/dist/ts4.2/e2ee/utils.d.ts +32 -32
- package/dist/ts4.2/e2ee/worker/DataCryptor.d.ts +16 -16
- package/dist/ts4.2/e2ee/worker/ErrorRateLimiter.d.ts +21 -21
- package/dist/ts4.2/e2ee/worker/FrameCryptor.d.ts +209 -209
- package/dist/ts4.2/e2ee/worker/ParticipantKeyHandler.d.ts +81 -84
- package/dist/ts4.2/e2ee/worker/e2ee.worker.d.ts +2 -2
- package/dist/ts4.2/e2ee/worker/naluUtils.d.ts +39 -28
- package/dist/ts4.2/e2ee/worker/sifPayload.d.ts +23 -23
- package/dist/ts4.2/frameMetadata/FrameMetadataManager.d.ts +53 -53
- package/dist/ts4.2/frameMetadata/frameMetadata.d.ts +33 -33
- package/dist/ts4.2/frameMetadata/types.d.ts +62 -62
- package/dist/ts4.2/frameMetadata/utils.d.ts +9 -9
- package/dist/ts4.2/frameMetadata/worker/frameMetadata.worker.d.ts +2 -2
- package/dist/ts4.2/index.d.ts +76 -76
- package/dist/ts4.2/logger.d.ts +66 -66
- package/dist/ts4.2/options.d.ts +163 -149
- package/dist/ts4.2/room/BackOffStrategy.d.ts +27 -27
- package/dist/ts4.2/room/DefaultReconnectPolicy.d.ts +8 -8
- package/dist/ts4.2/room/DeviceManager.d.ts +12 -12
- package/dist/ts4.2/room/PCTransport.d.ts +268 -175
- package/dist/ts4.2/room/PCTransportManager.d.ts +77 -77
- package/dist/ts4.2/room/RTCEngine.d.ts +277 -262
- package/dist/ts4.2/room/ReconnectPolicy.d.ts +24 -24
- package/dist/ts4.2/room/RegionUrlProvider.d.ts +36 -36
- package/dist/ts4.2/room/Room.d.ts +407 -365
- package/dist/ts4.2/room/attribute-typings.d.ts +35 -35
- package/dist/ts4.2/room/data-channel/DataChannelManager.d.ts +63 -62
- package/dist/ts4.2/room/data-channel/FlowControlledDataChannel.d.ts +107 -95
- package/dist/ts4.2/room/data-channel/LossyDataChannel.d.ts +41 -41
- package/dist/ts4.2/room/data-channel/ReliableDataChannel.d.ts +57 -57
- package/dist/ts4.2/room/data-channel/types.d.ts +12 -12
- package/dist/ts4.2/room/data-stream/compression.d.ts +49 -49
- package/dist/ts4.2/room/data-stream/constants.d.ts +18 -18
- package/dist/ts4.2/room/data-stream/incoming/IncomingDataStreamManager.d.ts +29 -29
- package/dist/ts4.2/room/data-stream/incoming/StreamReader.d.ts +80 -80
- package/dist/ts4.2/room/data-stream/outgoing/OutgoingDataStreamManager.d.ts +73 -73
- package/dist/ts4.2/room/data-stream/outgoing/StreamWriter.d.ts +16 -16
- package/dist/ts4.2/room/data-stream/outgoing/header-utils.d.ts +18 -18
- package/dist/ts4.2/room/data-track/LocalDataTrack.d.ts +79 -80
- package/dist/ts4.2/room/data-track/RemoteDataTrack.d.ts +50 -50
- package/dist/ts4.2/room/data-track/depacketizer.d.ts +59 -59
- package/dist/ts4.2/room/data-track/frame.d.ts +22 -22
- package/dist/ts4.2/room/data-track/handle.d.ts +27 -27
- package/dist/ts4.2/room/data-track/incoming/IncomingDataTrackManager.d.ts +124 -124
- package/dist/ts4.2/room/data-track/incoming/errors.d.ts +24 -24
- package/dist/ts4.2/room/data-track/incoming/pipeline.d.ts +41 -41
- package/dist/ts4.2/room/data-track/incoming/types.d.ts +20 -20
- package/dist/ts4.2/room/data-track/outgoing/OutgoingDataTrackManager.d.ts +126 -126
- package/dist/ts4.2/room/data-track/outgoing/errors.d.ts +74 -74
- package/dist/ts4.2/room/data-track/outgoing/pipeline.d.ts +23 -23
- package/dist/ts4.2/room/data-track/outgoing/types.d.ts +48 -48
- package/dist/ts4.2/room/data-track/packet/constants.d.ts +20 -20
- package/dist/ts4.2/room/data-track/packet/errors.d.ts +40 -40
- package/dist/ts4.2/room/data-track/packet/extensions.d.ts +69 -69
- package/dist/ts4.2/room/data-track/packet/index.d.ts +98 -98
- package/dist/ts4.2/room/data-track/packet/serializable.d.ts +13 -13
- package/dist/ts4.2/room/data-track/packetizer.d.ts +43 -43
- package/dist/ts4.2/room/data-track/track-interfaces.d.ts +23 -23
- package/dist/ts4.2/room/data-track/types.d.ts +22 -22
- package/dist/ts4.2/room/data-track/utils.d.ts +60 -60
- package/dist/ts4.2/room/debounce.d.ts +11 -11
- package/dist/ts4.2/room/defaults.d.ts +9 -9
- package/dist/ts4.2/room/errors.d.ts +180 -162
- package/dist/ts4.2/room/events.d.ts +638 -637
- package/dist/ts4.2/room/participant/LocalParticipant.d.ts +291 -287
- package/dist/ts4.2/room/participant/Participant.d.ts +142 -144
- package/dist/ts4.2/room/participant/ParticipantTrackPermission.d.ts +26 -26
- package/dist/ts4.2/room/participant/RemoteParticipant.d.ts +85 -86
- package/dist/ts4.2/room/participant/publishUtils.d.ts +53 -53
- package/dist/ts4.2/room/rpc/client/RpcClientManager.d.ts +43 -43
- package/dist/ts4.2/room/rpc/client/events.d.ts +8 -8
- package/dist/ts4.2/room/rpc/index.d.ts +7 -7
- package/dist/ts4.2/room/rpc/server/RpcServerManager.d.ts +44 -44
- package/dist/ts4.2/room/rpc/server/events.d.ts +8 -8
- package/dist/ts4.2/room/rpc/utils.d.ts +131 -131
- package/dist/ts4.2/room/stats.d.ts +71 -71
- package/dist/ts4.2/room/statsSummary.d.ts +13 -13
- package/dist/ts4.2/room/timers.d.ts +12 -12
- package/dist/ts4.2/room/token-source/TokenSource.d.ts +82 -82
- package/dist/ts4.2/room/token-source/types.d.ts +70 -70
- package/dist/ts4.2/room/token-source/utils.d.ts +8 -8
- package/dist/ts4.2/room/track/FrameMetadataExtractor.d.ts +19 -19
- package/dist/ts4.2/room/track/LocalAudioTrack.d.ts +62 -42
- package/dist/ts4.2/room/track/LocalTrack.d.ts +143 -125
- package/dist/ts4.2/room/track/LocalTrackPublication.d.ts +42 -42
- package/dist/ts4.2/room/track/LocalVideoTrack.d.ts +109 -100
- package/dist/ts4.2/room/track/RemoteAudioTrack.d.ts +61 -55
- package/dist/ts4.2/room/track/RemoteTrack.d.ts +38 -38
- package/dist/ts4.2/room/track/RemoteTrackPublication.d.ts +72 -75
- package/dist/ts4.2/room/track/RemoteVideoTrack.d.ts +73 -76
- package/dist/ts4.2/room/track/Track.d.ts +156 -166
- package/dist/ts4.2/room/track/TrackPublication.d.ts +75 -81
- package/dist/ts4.2/room/track/create.d.ts +25 -25
- package/dist/ts4.2/room/track/facingMode.d.ts +41 -41
- package/dist/ts4.2/room/track/options.d.ts +403 -403
- package/dist/ts4.2/room/track/processor/types.d.ts +42 -31
- package/dist/ts4.2/room/track/record.d.ts +13 -13
- package/dist/ts4.2/room/track/types.d.ts +28 -28
- package/dist/ts4.2/room/track/utils.d.ts +60 -47
- package/dist/ts4.2/room/types.d.ts +127 -127
- package/dist/ts4.2/room/utils.d.ts +273 -214
- package/dist/ts4.2/test/MockMediaStreamTrack.d.ts +26 -26
- package/dist/ts4.2/test/compressionStreamStubs.d.ts +12 -0
- package/dist/ts4.2/test/mocks.d.ts +12 -12
- package/dist/ts4.2/test/promiseState.d.ts +12 -12
- package/dist/ts4.2/test/signalToken.d.ts +26 -26
- package/dist/ts4.2/type-polyfills/non-shared-typed-arrays.d.ts +2 -2
- package/dist/ts4.2/utils/AsyncQueue.d.ts +23 -23
- package/dist/ts4.2/utils/TypedPromise.d.ts +17 -17
- package/dist/ts4.2/utils/abort-signal-polyfill.d.ts +13 -13
- package/dist/ts4.2/utils/browserParser.d.ts +13 -13
- package/dist/ts4.2/utils/camelToSnakeCase.d.ts +8 -8
- package/dist/ts4.2/utils/cloneDeep.d.ts +2 -2
- package/dist/ts4.2/utils/dataPacketBuffer.d.ts +34 -34
- package/dist/ts4.2/utils/deferrable-map.d.ts +32 -32
- package/dist/ts4.2/utils/machineInspector.d.ts +54 -54
- package/dist/ts4.2/utils/serializer.d.ts +48 -48
- package/dist/ts4.2/utils/subscribeToEvents.d.ts +15 -15
- package/dist/ts4.2/utils/ttlmap.d.ts +20 -20
- package/dist/ts4.2/version.d.ts +15 -15
- package/package.json +5 -4
- package/src/api/SignalClient.e2e.test.ts +1 -3
- package/src/api/SignalClient.test.ts +394 -10
- package/src/api/SignalClient.ts +132 -76
- package/src/api/WebSocketStream.test.ts +11 -0
- package/src/api/WebSocketStream.ts +22 -1
- package/src/api/utils.ts +1 -1
- package/src/e2ee/E2eeManager.test.ts +43 -0
- package/src/e2ee/E2eeManager.ts +6 -2
- package/src/e2ee/worker/FrameCryptor.test.ts +212 -90
- package/src/e2ee/worker/FrameCryptor.ts +21 -4
- package/src/e2ee/worker/naluUtils.test.ts +123 -0
- package/src/e2ee/worker/naluUtils.ts +57 -2
- package/src/index.ts +2 -0
- package/src/options.ts +16 -0
- package/src/room/DefaultReconnectPolicy.test.ts +58 -0
- package/src/room/DefaultReconnectPolicy.ts +14 -2
- package/src/room/PCTransport.test.ts +327 -9
- package/src/room/PCTransport.ts +339 -36
- package/src/room/PCTransportManager.ts +3 -1
- package/src/room/RTCEngine.test.ts +318 -2
- package/src/room/RTCEngine.ts +126 -12
- package/src/room/Room.test.ts +148 -6
- package/src/room/Room.ts +312 -80
- package/src/room/data-channel/DataChannelManager.test.ts +24 -7
- package/src/room/data-channel/DataChannelManager.ts +43 -38
- package/src/room/data-channel/FlowControlledDataChannel.test.ts +60 -18
- package/src/room/data-channel/FlowControlledDataChannel.ts +40 -22
- package/src/room/data-channel/LossyDataChannel.test.ts +38 -0
- package/src/room/data-channel/LossyDataChannel.ts +10 -1
- package/src/room/data-channel/ReliableDataChannel.test.ts +72 -0
- package/src/room/data-channel/ReliableDataChannel.ts +16 -5
- package/src/room/data-stream/incoming/IncomingDataStreamManager.test.ts +47 -20
- package/src/room/data-stream/incoming/IncomingDataStreamManager.ts +16 -5
- package/src/room/data-stream/outgoing/OutgoingDataStreamManager.test.ts +60 -39
- package/src/room/data-stream/outgoing/OutgoingDataStreamManager.ts +4 -4
- package/src/room/defaults.ts +1 -0
- package/src/room/errors.test.ts +36 -0
- package/src/room/errors.ts +27 -0
- package/src/room/events.ts +2 -1
- package/src/room/participant/LocalParticipant.test.ts +136 -1
- package/src/room/participant/LocalParticipant.ts +66 -17
- package/src/room/participant/Participant.ts +6 -3
- package/src/room/participant/publishUtils.ts +0 -19
- package/src/room/participant/restartOnDefaultAudioDevice.test.ts +177 -0
- package/src/room/rpc/client/RpcClientManager.test.ts +51 -0
- package/src/room/rpc/client/RpcClientManager.ts +32 -15
- package/src/room/rpc/utils.test.ts +32 -0
- package/src/room/rpc/utils.ts +7 -0
- package/src/room/track/LocalAudioTrack.ts +101 -10
- package/src/room/track/LocalTrack.ts +87 -19
- package/src/room/track/LocalVideoTrack.ts +17 -3
- package/src/room/track/RemoteAudioTrack.ts +59 -14
- package/src/room/track/RemoteVideoTrack.test.ts +210 -0
- package/src/room/track/RemoteVideoTrack.ts +29 -3
- package/src/room/track/processor/types.ts +11 -0
- package/src/room/track/utils.test.ts +206 -2
- package/src/room/track/utils.ts +117 -5
- package/src/room/utils.test.ts +250 -0
- package/src/room/utils.ts +152 -19
- package/src/test/compressionStreamStubs.ts +53 -0
|
@@ -4790,7 +4790,7 @@ var RoomEvent;
|
|
|
4790
4790
|
* Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.
|
|
4791
4791
|
* All participants in the room will receive the messages sent to the room.
|
|
4792
4792
|
*
|
|
4793
|
-
* args: (payload: NonSharedUint8Array, participant: [[Participant]], kind: [[DataPacket_Kind]], topic?: string)
|
|
4793
|
+
* args: (payload: NonSharedUint8Array, participant: [[Participant]] | undefined, kind: [[DataPacket_Kind]], topic?: string, encryptionType?: Encryption_Type, participantIdentity?: string)
|
|
4794
4794
|
*/
|
|
4795
4795
|
RoomEvent["DataReceived"] = "dataReceived";
|
|
4796
4796
|
/**
|
|
@@ -5148,6 +5148,7 @@ var EngineEvent;
|
|
|
5148
5148
|
EngineEvent["Joined"] = "joined";
|
|
5149
5149
|
EngineEvent["TokenRefreshed"] = "tokenRefreshed";
|
|
5150
5150
|
EngineEvent["ServerRegionsReported"] = "serverRegionsReported";
|
|
5151
|
+
EngineEvent["RequestSubscribedCodecRefresh"] = "requestSubscribedCodecRefresh";
|
|
5151
5152
|
})(EngineEvent || (EngineEvent = {}));
|
|
5152
5153
|
var TrackEvent;
|
|
5153
5154
|
(function (TrackEvent) {
|
|
@@ -6585,8 +6586,14 @@ function isH265SliceNALU(naluType) {
|
|
|
6585
6586
|
* @returns Detected codec type
|
|
6586
6587
|
*/
|
|
6587
6588
|
function detectCodecFromNALUs(data, naluIndices) {
|
|
6589
|
+
// h264 runs to completion first. Several non-slice h264 NALUs read as h265 slice types
|
|
6590
|
+
// (AUD 0x09 -> STSA_N, SEI 0x06 -> TSA_R), so interleaving the two checks lets one of
|
|
6591
|
+
// those outrank the real h264 slice that follows it. The reverse cannot happen: h265
|
|
6592
|
+
// header bytes are even at nuh_layer_id 0, so they never mask to an h264 slice type.
|
|
6588
6593
|
for (const naluIndex of naluIndices) {
|
|
6589
6594
|
if (isH264SliceNALU(parseH264NALUType(data[naluIndex]))) return 'h264';
|
|
6595
|
+
}
|
|
6596
|
+
for (const naluIndex of naluIndices) {
|
|
6590
6597
|
if (isH265SliceNALU(parseH265NALUType(data[naluIndex]))) return 'h265';
|
|
6591
6598
|
}
|
|
6592
6599
|
return 'unknown';
|
|
@@ -6664,12 +6671,21 @@ function findNALUIndices(stream) {
|
|
|
6664
6671
|
/**
|
|
6665
6672
|
* Process NALU data for frame encryption, detecting codec and finding unencrypted bytes
|
|
6666
6673
|
* @param data Frame data
|
|
6667
|
-
* @param knownCodec
|
|
6674
|
+
* @param knownCodec Codec from other sources, used only when the bytes are inconclusive (optional)
|
|
6668
6675
|
* @returns NALU processing result
|
|
6669
6676
|
*/
|
|
6670
6677
|
function processNALUsForEncryption(data, knownCodec) {
|
|
6671
6678
|
const naluIndices = findNALUIndices(data);
|
|
6672
|
-
|
|
6679
|
+
// The bytes outrank knownCodec, which can be the codec the client asked for rather than the
|
|
6680
|
+
// one that was negotiated. Parsing the wrong one mis-slices without raising anything: the
|
|
6681
|
+
// offset lands before the real slice header, so the header itself gets encrypted.
|
|
6682
|
+
// That holds in one direction only. An h264 access unit carrying no slice NALU but carrying
|
|
6683
|
+
// an AUD or SEI that reads as an h265 slice now slices there instead of throwing. No real
|
|
6684
|
+
// WebRTC access unit can reach it, because every one of them carries a type 1 or 5 slice.
|
|
6685
|
+
let detectedCodec = detectCodecFromNALUs(data, naluIndices);
|
|
6686
|
+
if (detectedCodec === 'unknown') {
|
|
6687
|
+
detectedCodec = knownCodec !== null && knownCodec !== void 0 ? knownCodec : 'unknown';
|
|
6688
|
+
}
|
|
6673
6689
|
if (detectedCodec === 'unknown') {
|
|
6674
6690
|
return {
|
|
6675
6691
|
unencryptedBytes: 0,
|
|
@@ -6687,6 +6703,44 @@ function processNALUsForEncryption(data, knownCodec) {
|
|
|
6687
6703
|
requiresNALUProcessing: true
|
|
6688
6704
|
};
|
|
6689
6705
|
}
|
|
6706
|
+
/**
|
|
6707
|
+
* Rewrite every 3-byte Annex B start code (00 00 01) in `data` to the 4-byte form (00 00 00 01).
|
|
6708
|
+
*
|
|
6709
|
+
* WebRTC's H.264/H.265 depacketizer always reconstructs NALUs with 4-byte start codes, regardless
|
|
6710
|
+
* of what the encoder emitted. Some encoders (e.g. Intel Quick Sync) emit 3-byte start codes, so
|
|
6711
|
+
* the unencrypted header a receiver sees would differ from what the sender authenticated as
|
|
6712
|
+
* AES-GCM additionalData. Normalizing on the sender makes both sides agree.
|
|
6713
|
+
*
|
|
6714
|
+
* Returns `data` unchanged (same instance) when it contains no 3-byte start codes.
|
|
6715
|
+
*/
|
|
6716
|
+
function normalizeAnnexBStartCodes(data) {
|
|
6717
|
+
const shortStartCodes = [];
|
|
6718
|
+
for (let i = 0; i + 2 < data.length;) {
|
|
6719
|
+
if (data[i + 2] === 0) {
|
|
6720
|
+
i += 1;
|
|
6721
|
+
continue;
|
|
6722
|
+
}
|
|
6723
|
+
if (data[i + 2] === 1 && data[i] === 0 && data[i + 1] === 0 && (i === 0 || data[i - 1] !== 0)) {
|
|
6724
|
+
shortStartCodes.push(i);
|
|
6725
|
+
}
|
|
6726
|
+
// data[i + 2] is non-zero, so no start code can begin at i + 1 or i + 2 either.
|
|
6727
|
+
i += 3;
|
|
6728
|
+
}
|
|
6729
|
+
if (shortStartCodes.length === 0) {
|
|
6730
|
+
return data;
|
|
6731
|
+
}
|
|
6732
|
+
// The new array is zero-filled, so the one-byte gap left before each short start code becomes
|
|
6733
|
+
// the inserted leading 00.
|
|
6734
|
+
const result = new Uint8Array(data.length + shortStartCodes.length);
|
|
6735
|
+
let from = 0;
|
|
6736
|
+
for (let inserted = 0; inserted < shortStartCodes.length; inserted++) {
|
|
6737
|
+
const to = shortStartCodes[inserted];
|
|
6738
|
+
result.set(data.subarray(from, to), from + inserted);
|
|
6739
|
+
from = to;
|
|
6740
|
+
}
|
|
6741
|
+
result.set(data.subarray(from), from + shortStartCodes.length);
|
|
6742
|
+
return result;
|
|
6743
|
+
}
|
|
6690
6744
|
|
|
6691
6745
|
/**
|
|
6692
6746
|
* Create a crypto hash using Web Crypto API for secure comparison operations
|
|
@@ -7060,7 +7114,12 @@ class FrameCryptor extends BaseFrameCryptor {
|
|
|
7060
7114
|
const iv = this.makeIV((_a = encodedFrame.getMetadata().synchronizationSource) !== null && _a !== void 0 ? _a : -1, encodedFrame.timestamp);
|
|
7061
7115
|
let frameInfo = this.getUnencryptedBytes(encodedFrame);
|
|
7062
7116
|
// Thіs is not encrypted and contains the VP8 payload descriptor or the Opus TOC byte.
|
|
7063
|
-
|
|
7117
|
+
let frameHeader = new Uint8Array(encodedFrame.data, 0, frameInfo.unencryptedBytes);
|
|
7118
|
+
if (frameInfo.requiresNALUProcessing) {
|
|
7119
|
+
// The receiver's depacketizer rebuilds NALUs with 4-byte start codes, so authenticate (and
|
|
7120
|
+
// send) the header in that form or decryption fails for encoders emitting 3-byte ones.
|
|
7121
|
+
frameHeader = normalizeAnnexBStartCodes(frameHeader);
|
|
7122
|
+
}
|
|
7064
7123
|
// Frame trailer contains the R|IV_LENGTH and key index
|
|
7065
7124
|
const frameTrailer = new Uint8Array(2);
|
|
7066
7125
|
frameTrailer[0] = IV_LENGTH;
|
|
@@ -7076,7 +7135,7 @@ class FrameCryptor extends BaseFrameCryptor {
|
|
|
7076
7135
|
const cipherText = yield crypto.subtle.encrypt({
|
|
7077
7136
|
name: ENCRYPTION_ALGORITHM,
|
|
7078
7137
|
iv,
|
|
7079
|
-
additionalData:
|
|
7138
|
+
additionalData: frameHeader
|
|
7080
7139
|
}, encryptionKey, new Uint8Array(encodedFrame.data, frameInfo.unencryptedBytes));
|
|
7081
7140
|
let newDataWithoutHeader = new Uint8Array(cipherText.byteLength + iv.byteLength + frameTrailer.byteLength);
|
|
7082
7141
|
newDataWithoutHeader.set(new Uint8Array(cipherText)); // add ciphertext.
|
|
@@ -7385,7 +7444,7 @@ class FrameCryptor extends BaseFrameCryptor {
|
|
|
7385
7444
|
};
|
|
7386
7445
|
}
|
|
7387
7446
|
} catch (e) {
|
|
7388
|
-
this.logNALUFallbackOnce(fallbackKey, payloadType, e);
|
|
7447
|
+
this.logNALUFallbackOnce(fallbackKey, frame, payloadType, detectedCodec, e);
|
|
7389
7448
|
}
|
|
7390
7449
|
// Fallback to VP8 handling
|
|
7391
7450
|
return {
|
|
@@ -7397,14 +7456,18 @@ class FrameCryptor extends BaseFrameCryptor {
|
|
|
7397
7456
|
* Logs a NALU processing fallback at most once per (participant, trackId, payloadType) tuple,
|
|
7398
7457
|
* so a persistent bad state doesn't flood the console (Firefox doesn't filter debug).
|
|
7399
7458
|
*/
|
|
7400
|
-
logNALUFallbackOnce(fallbackKey, payloadType, error) {
|
|
7459
|
+
logNALUFallbackOnce(fallbackKey, frame, payloadType, detectedCodec, error) {
|
|
7401
7460
|
if (this.loggedNALUFallbacks.has(fallbackKey)) {
|
|
7402
7461
|
return;
|
|
7403
7462
|
}
|
|
7404
7463
|
this.loggedNALUFallbacks.add(fallbackKey);
|
|
7405
7464
|
workerLogger.warn('NALU processing failed, falling back to VP8 handling', Object.assign({
|
|
7406
7465
|
error,
|
|
7407
|
-
payloadType
|
|
7466
|
+
payloadType,
|
|
7467
|
+
detectedCodec,
|
|
7468
|
+
frameType: frame.type,
|
|
7469
|
+
byteLength: frame.data.byteLength,
|
|
7470
|
+
firstBytes: Array.from(new Uint8Array(frame.data, 0, Math.min(16, frame.data.byteLength))).map(b => b.toString(16).padStart(2, '0')).join(' ')
|
|
7408
7471
|
}, this.logContext));
|
|
7409
7472
|
}
|
|
7410
7473
|
/**
|