@stream-io/video-client 1.40.2 → 1.41.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/CHANGELOG.md +18 -0
- package/dist/index.browser.es.js +165 -30
- package/dist/index.browser.es.js.map +1 -1
- package/dist/index.cjs.js +172 -29
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +165 -30
- package/dist/index.es.js.map +1 -1
- package/dist/src/Call.d.ts +4 -4
- package/dist/src/devices/SpeakerManager.d.ts +0 -2
- package/dist/src/gen/coordinator/index.d.ts +269 -0
- package/dist/src/rtc/helpers/sdp.d.ts +8 -0
- package/dist/src/store/CallState.d.ts +21 -2
- package/dist/src/types.d.ts +29 -1
- package/package.json +1 -1
- package/src/Call.ts +27 -6
- package/src/__tests__/StreamVideoClient.ringing.test.ts +26 -0
- package/src/devices/SpeakerManager.ts +0 -2
- package/src/devices/__tests__/MicrophoneManager.test.ts +34 -23
- package/src/devices/__tests__/mocks.ts +14 -12
- package/src/events/__tests__/call.test.ts +4 -5
- package/src/gen/coordinator/index.ts +293 -0
- package/src/rtc/Publisher.ts +1 -1
- package/src/rtc/helpers/__tests__/sdp.startBitrate.test.ts +105 -0
- package/src/rtc/helpers/sdp.ts +30 -12
- package/src/store/CallState.ts +72 -9
- package/src/store/__tests__/CallState.test.ts +462 -106
- package/src/types.ts +42 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [1.41.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.40.3...@stream-io/video-client-1.41.0) (2026-01-20)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **recording:** Support for Individual, Raw and Composite recording ([#2071](https://github.com/GetStream/stream-video-js/issues/2071)) ([e53269c](https://github.com/GetStream/stream-video-js/commit/e53269ce697121b70dbebaf4a6d2cf875440a2af))
|
|
10
|
+
- stereo audio output support RN-332 ([#2038](https://github.com/GetStream/stream-video-js/issues/2038)) ([2938037](https://github.com/GetStream/stream-video-js/commit/2938037d18e70ccf112a089eb3ec44cb034aed1d))
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- add start bitrate even if there is no existing fmtp line ([#2088](https://github.com/GetStream/stream-video-js/issues/2088)) ([ae1f496](https://github.com/GetStream/stream-video-js/commit/ae1f4965a7ab0b00dbdea45090c6aed49eafabb7))
|
|
15
|
+
|
|
16
|
+
## [1.40.3](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.40.2...@stream-io/video-client-1.40.3) (2026-01-16)
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
- **react:** resolve call state race condition when using join with ring ([#2086](https://github.com/GetStream/stream-video-js/issues/2086)) ([6c2d3b3](https://github.com/GetStream/stream-video-js/commit/6c2d3b35ac96dbf7a85cadba47068a0e417d65be)), closes [#1755](https://github.com/GetStream/stream-video-js/issues/1755) [#2035](https://github.com/GetStream/stream-video-js/issues/2035)
|
|
21
|
+
- **react:** resolve call state race condition when using join with ring ([#2084](https://github.com/GetStream/stream-video-js/issues/2084)) ([f9b5946](https://github.com/GetStream/stream-video-js/commit/f9b59465f22b35304dbd01601e3f6166e1d02ea0)), closes [#1755](https://github.com/GetStream/stream-video-js/issues/1755) [#2035](https://github.com/GetStream/stream-video-js/issues/2035)
|
|
22
|
+
|
|
5
23
|
## [1.40.2](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-1.40.1...@stream-io/video-client-1.40.2) (2026-01-15)
|
|
6
24
|
|
|
7
25
|
### Bug Fixes
|
package/dist/index.browser.es.js
CHANGED
|
@@ -26,6 +26,38 @@ const AudioSettingsResponseDefaultDeviceEnum = {
|
|
|
26
26
|
SPEAKER: 'speaker',
|
|
27
27
|
EARPIECE: 'earpiece',
|
|
28
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* @export
|
|
31
|
+
*/
|
|
32
|
+
const CallRecordingFailedEventRecordingTypeEnum = {
|
|
33
|
+
COMPOSITE: 'composite',
|
|
34
|
+
INDIVIDUAL: 'individual',
|
|
35
|
+
RAW: 'raw',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* @export
|
|
39
|
+
*/
|
|
40
|
+
const CallRecordingReadyEventRecordingTypeEnum = {
|
|
41
|
+
COMPOSITE: 'composite',
|
|
42
|
+
INDIVIDUAL: 'individual',
|
|
43
|
+
RAW: 'raw',
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* @export
|
|
47
|
+
*/
|
|
48
|
+
const CallRecordingStartedEventRecordingTypeEnum = {
|
|
49
|
+
COMPOSITE: 'composite',
|
|
50
|
+
INDIVIDUAL: 'individual',
|
|
51
|
+
RAW: 'raw',
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* @export
|
|
55
|
+
*/
|
|
56
|
+
const CallRecordingStoppedEventRecordingTypeEnum = {
|
|
57
|
+
COMPOSITE: 'composite',
|
|
58
|
+
INDIVIDUAL: 'individual',
|
|
59
|
+
RAW: 'raw',
|
|
60
|
+
};
|
|
29
61
|
/**
|
|
30
62
|
* @export
|
|
31
63
|
*/
|
|
@@ -61,6 +93,22 @@ const FrameRecordingSettingsResponseModeEnum = {
|
|
|
61
93
|
DISABLED: 'disabled',
|
|
62
94
|
AUTO_ON: 'auto-on',
|
|
63
95
|
};
|
|
96
|
+
/**
|
|
97
|
+
* @export
|
|
98
|
+
*/
|
|
99
|
+
const IndividualRecordingSettingsRequestModeEnum = {
|
|
100
|
+
AVAILABLE: 'available',
|
|
101
|
+
DISABLED: 'disabled',
|
|
102
|
+
AUTO_ON: 'auto-on',
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* @export
|
|
106
|
+
*/
|
|
107
|
+
const IndividualRecordingSettingsResponseModeEnum = {
|
|
108
|
+
AVAILABLE: 'available',
|
|
109
|
+
DISABLED: 'disabled',
|
|
110
|
+
AUTO_ON: 'auto-on',
|
|
111
|
+
};
|
|
64
112
|
/**
|
|
65
113
|
* @export
|
|
66
114
|
*/
|
|
@@ -126,11 +174,15 @@ const OwnCapability = {
|
|
|
126
174
|
START_BROADCAST_CALL: 'start-broadcast-call',
|
|
127
175
|
START_CLOSED_CAPTIONS_CALL: 'start-closed-captions-call',
|
|
128
176
|
START_FRAME_RECORD_CALL: 'start-frame-record-call',
|
|
177
|
+
START_INDIVIDUAL_RECORD_CALL: 'start-individual-record-call',
|
|
178
|
+
START_RAW_RECORD_CALL: 'start-raw-record-call',
|
|
129
179
|
START_RECORD_CALL: 'start-record-call',
|
|
130
180
|
START_TRANSCRIPTION_CALL: 'start-transcription-call',
|
|
131
181
|
STOP_BROADCAST_CALL: 'stop-broadcast-call',
|
|
132
182
|
STOP_CLOSED_CAPTIONS_CALL: 'stop-closed-captions-call',
|
|
133
183
|
STOP_FRAME_RECORD_CALL: 'stop-frame-record-call',
|
|
184
|
+
STOP_INDIVIDUAL_RECORD_CALL: 'stop-individual-record-call',
|
|
185
|
+
STOP_RAW_RECORD_CALL: 'stop-raw-record-call',
|
|
134
186
|
STOP_RECORD_CALL: 'stop-record-call',
|
|
135
187
|
STOP_TRANSCRIPTION_CALL: 'stop-transcription-call',
|
|
136
188
|
UPDATE_CALL: 'update-call',
|
|
@@ -168,6 +220,22 @@ const RTMPSettingsRequestQualityEnum = {
|
|
|
168
220
|
PORTRAIT_1080X1920: 'portrait-1080x1920',
|
|
169
221
|
PORTRAIT_1440X2560: 'portrait-1440x2560',
|
|
170
222
|
};
|
|
223
|
+
/**
|
|
224
|
+
* @export
|
|
225
|
+
*/
|
|
226
|
+
const RawRecordingSettingsRequestModeEnum = {
|
|
227
|
+
AVAILABLE: 'available',
|
|
228
|
+
DISABLED: 'disabled',
|
|
229
|
+
AUTO_ON: 'auto-on',
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* @export
|
|
233
|
+
*/
|
|
234
|
+
const RawRecordingSettingsResponseModeEnum = {
|
|
235
|
+
AVAILABLE: 'available',
|
|
236
|
+
DISABLED: 'disabled',
|
|
237
|
+
AUTO_ON: 'auto-on',
|
|
238
|
+
};
|
|
171
239
|
/**
|
|
172
240
|
* @export
|
|
173
241
|
*/
|
|
@@ -3983,15 +4051,18 @@ const extractMid = (transceiver, transceiverInitIndex, sdp) => {
|
|
|
3983
4051
|
return '';
|
|
3984
4052
|
return String(transceiverInitIndex);
|
|
3985
4053
|
};
|
|
3986
|
-
|
|
3987
|
-
* Sets the start bitrate for the VP9 and
|
|
4054
|
+
/**
|
|
4055
|
+
* Sets the start bitrate for the VP9, H264, and AV1 codecs in the SDP.
|
|
3988
4056
|
*
|
|
3989
4057
|
* @param offerSdp the offer SDP to modify.
|
|
3990
|
-
* @param
|
|
4058
|
+
* @param maxBitrateKbps the maximum bitrate in kbps.
|
|
4059
|
+
* @param startBitrateFactor the factor (0-1) to multiply with maxBitrateKbps to get the start bitrate.
|
|
4060
|
+
* @param targetMid the media ID to target.
|
|
3991
4061
|
*/
|
|
3992
4062
|
const setStartBitrate = (offerSdp, maxBitrateKbps, startBitrateFactor, targetMid) => {
|
|
3993
4063
|
// start bitrate should be between 300kbps and max-bitrate-kbps
|
|
3994
|
-
|
|
4064
|
+
// Clamp to max first, then ensure minimum of 300 (but never exceed max)
|
|
4065
|
+
const startBitrate = Math.min(maxBitrateKbps, Math.max(300, startBitrateFactor * maxBitrateKbps));
|
|
3995
4066
|
const parsedSdp = parse(offerSdp);
|
|
3996
4067
|
const targetCodecs = new Set(['av1', 'vp9', 'h264']);
|
|
3997
4068
|
for (const media of parsedSdp.media) {
|
|
@@ -4002,14 +4073,27 @@ const setStartBitrate = (offerSdp, maxBitrateKbps, startBitrateFactor, targetMid
|
|
|
4002
4073
|
for (const rtp of media.rtp) {
|
|
4003
4074
|
if (!targetCodecs.has(rtp.codec.toLowerCase()))
|
|
4004
4075
|
continue;
|
|
4005
|
-
|
|
4006
|
-
|
|
4007
|
-
|
|
4008
|
-
|
|
4009
|
-
|
|
4010
|
-
|
|
4076
|
+
// Find existing fmtp entry for this payload
|
|
4077
|
+
// Guard against media.fmtp being undefined when SDP has no a=fmtp lines
|
|
4078
|
+
const fmtpList = media.fmtp ?? (media.fmtp = []);
|
|
4079
|
+
const existingFmtp = fmtpList.find((fmtp) => fmtp.payload === rtp.payload);
|
|
4080
|
+
if (existingFmtp) {
|
|
4081
|
+
// Append to existing fmtp if not already present
|
|
4082
|
+
// Guard against undefined or empty config from malformed SDP
|
|
4083
|
+
const config = existingFmtp.config ?? '';
|
|
4084
|
+
if (!config.includes('x-google-start-bitrate')) {
|
|
4085
|
+
existingFmtp.config = config
|
|
4086
|
+
? `${config};x-google-start-bitrate=${startBitrate}`
|
|
4087
|
+
: `x-google-start-bitrate=${startBitrate}`;
|
|
4011
4088
|
}
|
|
4012
4089
|
}
|
|
4090
|
+
else {
|
|
4091
|
+
// Create new fmtp entry if none exists
|
|
4092
|
+
fmtpList.push({
|
|
4093
|
+
payload: rtp.payload,
|
|
4094
|
+
config: `x-google-start-bitrate=${startBitrate}`,
|
|
4095
|
+
});
|
|
4096
|
+
}
|
|
4013
4097
|
}
|
|
4014
4098
|
}
|
|
4015
4099
|
return write(parsedSdp);
|
|
@@ -4939,6 +5023,10 @@ const paginatedLayoutSortPreset = combineComparators(pinned, ifInvisibleOrUnknow
|
|
|
4939
5023
|
*/
|
|
4940
5024
|
const livestreamOrAudioRoomSortPreset = combineComparators(ifInvisibleBy(combineComparators(dominantSpeaker, speaking, reactionType('raised-hand'), withVideoIngressSource, publishingVideo, publishingAudio)), role('admin', 'host', 'speaker'));
|
|
4941
5025
|
|
|
5026
|
+
const ensureExhausted = (x, message) => {
|
|
5027
|
+
videoLoggerSystem.getLogger('helpers').warn(message, x);
|
|
5028
|
+
};
|
|
5029
|
+
|
|
4942
5030
|
/**
|
|
4943
5031
|
* Returns the default egress object - when no egress data is available.
|
|
4944
5032
|
*/
|
|
@@ -4968,6 +5056,8 @@ class CallState {
|
|
|
4968
5056
|
this.egressSubject = new BehaviorSubject(undefined);
|
|
4969
5057
|
this.ingressSubject = new BehaviorSubject(undefined);
|
|
4970
5058
|
this.recordingSubject = new BehaviorSubject(false);
|
|
5059
|
+
this.individualRecordingSubject = new BehaviorSubject(false);
|
|
5060
|
+
this.rawRecordingSubject = new BehaviorSubject(false);
|
|
4971
5061
|
this.sessionSubject = new BehaviorSubject(undefined);
|
|
4972
5062
|
this.settingsSubject = new BehaviorSubject(undefined);
|
|
4973
5063
|
this.transcribingSubject = new BehaviorSubject(false);
|
|
@@ -5394,7 +5484,10 @@ class CallState {
|
|
|
5394
5484
|
this.setCurrentValue(this.customSubject, call.custom);
|
|
5395
5485
|
this.setCurrentValue(this.egressSubject, call.egress);
|
|
5396
5486
|
this.setCurrentValue(this.ingressSubject, call.ingress);
|
|
5397
|
-
|
|
5487
|
+
const { individual_recording, composite_recording, raw_recording } = call.egress;
|
|
5488
|
+
this.setCurrentValue(this.recordingSubject, call.recording || composite_recording?.status === 'running');
|
|
5489
|
+
this.setCurrentValue(this.individualRecordingSubject, individual_recording?.status === 'running');
|
|
5490
|
+
this.setCurrentValue(this.rawRecordingSubject, raw_recording?.status === 'running');
|
|
5398
5491
|
const s = this.setCurrentValue(this.sessionSubject, call.session);
|
|
5399
5492
|
this.updateParticipantCountFromSession(s);
|
|
5400
5493
|
this.setCurrentValue(this.settingsSubject, call.settings);
|
|
@@ -5470,6 +5563,21 @@ class CallState {
|
|
|
5470
5563
|
},
|
|
5471
5564
|
}));
|
|
5472
5565
|
};
|
|
5566
|
+
this.updateFromRecordingEvent = (type, running) => {
|
|
5567
|
+
// handle the legacy format, where `type` is absent in the emitted events
|
|
5568
|
+
if (type === undefined || type === 'composite') {
|
|
5569
|
+
this.setCurrentValue(this.recordingSubject, running);
|
|
5570
|
+
}
|
|
5571
|
+
else if (type === 'individual') {
|
|
5572
|
+
this.setCurrentValue(this.individualRecordingSubject, running);
|
|
5573
|
+
}
|
|
5574
|
+
else if (type === 'raw') {
|
|
5575
|
+
this.setCurrentValue(this.rawRecordingSubject, running);
|
|
5576
|
+
}
|
|
5577
|
+
else {
|
|
5578
|
+
ensureExhausted(type, 'Unknown recording type');
|
|
5579
|
+
}
|
|
5580
|
+
};
|
|
5473
5581
|
this.updateParticipantCountFromSession = (session) => {
|
|
5474
5582
|
// when in JOINED state, we should use the participant count coming through
|
|
5475
5583
|
// the SFU healthcheck event, as it's more accurate.
|
|
@@ -5704,6 +5812,8 @@ class CallState {
|
|
|
5704
5812
|
}), distinctUntilChanged(isShallowEqual), shareReplay({ bufferSize: 1, refCount: true }));
|
|
5705
5813
|
this.participantCount$ = duc(this.participantCountSubject);
|
|
5706
5814
|
this.recording$ = duc(this.recordingSubject);
|
|
5815
|
+
this.individualRecording$ = duc(this.individualRecordingSubject);
|
|
5816
|
+
this.rawRecording$ = duc(this.rawRecordingSubject);
|
|
5707
5817
|
this.transcribing$ = duc(this.transcribingSubject);
|
|
5708
5818
|
this.captioning$ = duc(this.captioningSubject);
|
|
5709
5819
|
this.eventHandlers = {
|
|
@@ -5770,9 +5880,15 @@ class CallState {
|
|
|
5770
5880
|
},
|
|
5771
5881
|
'call.permissions_updated': this.updateOwnCapabilities,
|
|
5772
5882
|
'call.reaction_new': this.updateParticipantReaction,
|
|
5773
|
-
'call.recording_started': () =>
|
|
5774
|
-
|
|
5775
|
-
|
|
5883
|
+
'call.recording_started': (e) => {
|
|
5884
|
+
this.updateFromRecordingEvent(e.recording_type, true);
|
|
5885
|
+
},
|
|
5886
|
+
'call.recording_stopped': (e) => {
|
|
5887
|
+
this.updateFromRecordingEvent(e.recording_type, false);
|
|
5888
|
+
},
|
|
5889
|
+
'call.recording_failed': (e) => {
|
|
5890
|
+
this.updateFromRecordingEvent(e.recording_type, false);
|
|
5891
|
+
},
|
|
5776
5892
|
'call.rejected': (e) => this.updateFromCallResponse(e.call),
|
|
5777
5893
|
'call.ring': (e) => this.updateFromCallResponse(e.call),
|
|
5778
5894
|
'call.missed': (e) => this.updateFromCallResponse(e.call),
|
|
@@ -5955,11 +6071,23 @@ class CallState {
|
|
|
5955
6071
|
return this.getCurrentValue(this.ingress$);
|
|
5956
6072
|
}
|
|
5957
6073
|
/**
|
|
5958
|
-
* Will provide the recording state of this call.
|
|
6074
|
+
* Will provide the composite recording state of this call.
|
|
5959
6075
|
*/
|
|
5960
6076
|
get recording() {
|
|
5961
6077
|
return this.getCurrentValue(this.recording$);
|
|
5962
6078
|
}
|
|
6079
|
+
/**
|
|
6080
|
+
* Will provide the individual recording state of this call.
|
|
6081
|
+
*/
|
|
6082
|
+
get individualRecording() {
|
|
6083
|
+
return this.getCurrentValue(this.individualRecording$);
|
|
6084
|
+
}
|
|
6085
|
+
/**
|
|
6086
|
+
* Will provide the raw recording state of this call.
|
|
6087
|
+
*/
|
|
6088
|
+
get rawRecording() {
|
|
6089
|
+
return this.getCurrentValue(this.rawRecording$);
|
|
6090
|
+
}
|
|
5963
6091
|
/**
|
|
5964
6092
|
* Will provide the session data of this call.
|
|
5965
6093
|
*/
|
|
@@ -6060,7 +6188,7 @@ const getSdkVersion = (sdk) => {
|
|
|
6060
6188
|
return sdk ? `${sdk.major}.${sdk.minor}.${sdk.patch}` : '0.0.0-development';
|
|
6061
6189
|
};
|
|
6062
6190
|
|
|
6063
|
-
const version = "1.
|
|
6191
|
+
const version = "1.41.0";
|
|
6064
6192
|
const [major, minor, patch] = version.split('.');
|
|
6065
6193
|
let sdkInfo = {
|
|
6066
6194
|
type: SdkType.PLAIN_JAVASCRIPT,
|
|
@@ -7408,10 +7536,6 @@ class TransceiverCache {
|
|
|
7408
7536
|
}
|
|
7409
7537
|
}
|
|
7410
7538
|
|
|
7411
|
-
const ensureExhausted = (x, message) => {
|
|
7412
|
-
videoLoggerSystem.getLogger('helpers').warn(message, x);
|
|
7413
|
-
};
|
|
7414
|
-
|
|
7415
7539
|
const trackTypeToParticipantStreamKey = (trackType) => {
|
|
7416
7540
|
switch (trackType) {
|
|
7417
7541
|
case TrackType.SCREEN_SHARE:
|
|
@@ -7892,7 +8016,7 @@ class Publisher extends BasePeerConnection {
|
|
|
7892
8016
|
let sdp = dangerouslyForceCodec
|
|
7893
8017
|
? removeCodecsExcept(baseSdp, dangerouslyForceCodec, fmtpLine)
|
|
7894
8018
|
: baseSdp;
|
|
7895
|
-
if (dangerouslySetStartBitrateFactor) {
|
|
8019
|
+
if (dangerouslySetStartBitrateFactor !== undefined) {
|
|
7896
8020
|
this.transceiverCache.items().forEach((t) => {
|
|
7897
8021
|
if (t.publishOption.trackType !== TrackType.VIDEO)
|
|
7898
8022
|
return;
|
|
@@ -11930,8 +12054,6 @@ class SpeakerManager {
|
|
|
11930
12054
|
/**
|
|
11931
12055
|
* Set the volume of a participant.
|
|
11932
12056
|
*
|
|
11933
|
-
* Note: This method is not supported in React Native.
|
|
11934
|
-
*
|
|
11935
12057
|
* @param sessionId the participant's session id.
|
|
11936
12058
|
* @param volume a number between 0 and 1. Set it to `undefined` to use the default volume.
|
|
11937
12059
|
*/
|
|
@@ -12274,6 +12396,7 @@ class Call {
|
|
|
12274
12396
|
this.ringingSubject.next(false);
|
|
12275
12397
|
this.cancelAutoDrop();
|
|
12276
12398
|
this.clientStore.unregisterCall(this);
|
|
12399
|
+
globalThis.streamRNVideoSDK?.callManager.stop();
|
|
12277
12400
|
this.camera.dispose();
|
|
12278
12401
|
this.microphone.dispose();
|
|
12279
12402
|
this.screenShare.dispose();
|
|
@@ -12606,6 +12729,7 @@ class Call {
|
|
|
12606
12729
|
// re-apply them on later reconnections or server-side data fetches
|
|
12607
12730
|
if (!this.deviceSettingsAppliedOnce && this.state.settings) {
|
|
12608
12731
|
await this.applyDeviceConfig(this.state.settings, true);
|
|
12732
|
+
globalThis.streamRNVideoSDK?.callManager.start();
|
|
12609
12733
|
this.deviceSettingsAppliedOnce = true;
|
|
12610
12734
|
}
|
|
12611
12735
|
// We shouldn't persist the `ring` and `notify` state after joining the call
|
|
@@ -12797,7 +12921,7 @@ class Call {
|
|
|
12797
12921
|
}
|
|
12798
12922
|
if (this.streamClient._hasConnectionID()) {
|
|
12799
12923
|
this.watching = true;
|
|
12800
|
-
this.clientStore.
|
|
12924
|
+
this.clientStore.registerOrUpdateCall(this);
|
|
12801
12925
|
}
|
|
12802
12926
|
return joinResponse;
|
|
12803
12927
|
};
|
|
@@ -13397,14 +13521,22 @@ class Call {
|
|
|
13397
13521
|
/**
|
|
13398
13522
|
* Starts recording the call
|
|
13399
13523
|
*/
|
|
13400
|
-
this.startRecording = async (
|
|
13401
|
-
|
|
13524
|
+
this.startRecording = async (dataOrType, type) => {
|
|
13525
|
+
type = typeof dataOrType === 'string' ? dataOrType : type;
|
|
13526
|
+
dataOrType = typeof dataOrType === 'string' ? undefined : dataOrType;
|
|
13527
|
+
const endpoint = !type
|
|
13528
|
+
? `/start_recording`
|
|
13529
|
+
: `/recordings/${encodeURIComponent(type)}/start`;
|
|
13530
|
+
return this.streamClient.post(`${this.streamClientBasePath}${endpoint}`, dataOrType);
|
|
13402
13531
|
};
|
|
13403
13532
|
/**
|
|
13404
13533
|
* Stops recording the call
|
|
13405
13534
|
*/
|
|
13406
|
-
this.stopRecording = async () => {
|
|
13407
|
-
|
|
13535
|
+
this.stopRecording = async (type) => {
|
|
13536
|
+
const endpoint = !type
|
|
13537
|
+
? `/stop_recording`
|
|
13538
|
+
: `/recordings/${encodeURIComponent(type)}/stop`;
|
|
13539
|
+
return this.streamClient.post(`${this.streamClientBasePath}${endpoint}`);
|
|
13408
13540
|
};
|
|
13409
13541
|
/**
|
|
13410
13542
|
* Starts the transcription of the call.
|
|
@@ -13801,6 +13933,9 @@ class Call {
|
|
|
13801
13933
|
* @internal
|
|
13802
13934
|
*/
|
|
13803
13935
|
this.applyDeviceConfig = async (settings, publish) => {
|
|
13936
|
+
globalThis.streamRNVideoSDK?.callManager.setup({
|
|
13937
|
+
default_device: settings.audio.default_device,
|
|
13938
|
+
});
|
|
13804
13939
|
await this.camera.apply(settings.video, publish).catch((err) => {
|
|
13805
13940
|
this.logger.warn('Camera init failed', err);
|
|
13806
13941
|
});
|
|
@@ -15114,7 +15249,7 @@ class StreamClient {
|
|
|
15114
15249
|
this.getUserAgent = () => {
|
|
15115
15250
|
if (!this.cachedUserAgent) {
|
|
15116
15251
|
const { clientAppIdentifier = {} } = this.options;
|
|
15117
|
-
const { sdkName = 'js', sdkVersion = "1.
|
|
15252
|
+
const { sdkName = 'js', sdkVersion = "1.41.0", ...extras } = clientAppIdentifier;
|
|
15118
15253
|
this.cachedUserAgent = [
|
|
15119
15254
|
`stream-video-${sdkName}-v${sdkVersion}`,
|
|
15120
15255
|
...Object.entries(extras).map(([key, value]) => `${key}=${value}`),
|
|
@@ -15750,5 +15885,5 @@ const humanize = (n) => {
|
|
|
15750
15885
|
return String(n);
|
|
15751
15886
|
};
|
|
15752
15887
|
|
|
15753
|
-
export { AudioSettingsRequestDefaultDeviceEnum, AudioSettingsResponseDefaultDeviceEnum, browsers as Browsers, Call, CallState, CallType, CallTypes, CallingState, CameraManager, CameraManagerState, CreateDeviceRequestPushProviderEnum, DebounceType, DeviceManager, DeviceManagerState, DynascaleManager, ErrorFromResponse, FrameRecordingSettingsRequestModeEnum, FrameRecordingSettingsRequestQualityEnum, FrameRecordingSettingsResponseModeEnum, IngressAudioEncodingOptionsRequestChannelsEnum, IngressSourceRequestFpsEnum, IngressVideoLayerRequestCodecEnum, LayoutSettingsRequestNameEnum, MicrophoneManager, MicrophoneManagerState, NoiseCancellationSettingsModeEnum, OwnCapability, RNSpeechDetector, RTMPBroadcastRequestQualityEnum, RTMPSettingsRequestQualityEnum, RecordSettingsRequestModeEnum, RecordSettingsRequestQualityEnum, rxUtils as RxUtils, ScreenShareManager, ScreenShareState, events as SfuEvents, SfuJoinError, models as SfuModels, SpeakerManager, SpeakerState, StartClosedCaptionsRequestLanguageEnum, StartTranscriptionRequestLanguageEnum, StreamSfuClient, StreamVideoClient, StreamVideoReadOnlyStateStore, StreamVideoWriteableStateStore, TranscriptionSettingsRequestClosedCaptionModeEnum, TranscriptionSettingsRequestLanguageEnum, TranscriptionSettingsRequestModeEnum, TranscriptionSettingsResponseClosedCaptionModeEnum, TranscriptionSettingsResponseLanguageEnum, TranscriptionSettingsResponseModeEnum, VideoSettingsRequestCameraFacingEnum, VideoSettingsResponseCameraFacingEnum, ViewportTracker, VisibilityState, checkIfAudioOutputChangeSupported, combineComparators, conditional, createSoundDetector, defaultSortPreset, descending, deviceIds$, disposeOfMediaStream, dominantSpeaker, getAudioBrowserPermission, getAudioDevices, getAudioOutputDevices, getAudioStream, getClientDetails, getDeviceState, getScreenShareStream, getSdkInfo, getVideoBrowserPermission, getVideoDevices, getVideoStream, getWebRTCInfo, hasAudio, hasPausedTrack, hasScreenShare, hasScreenShareAudio, hasVideo, humanize, isPinned, livestreamOrAudioRoomSortPreset, logToConsole, name, noopComparator, paginatedLayoutSortPreset, pinned, publishingAudio, publishingVideo, reactionType, resolveDeviceId, role, screenSharing, setDeviceInfo, setOSInfo, setPowerState, setSdkInfo, setThermalState, setWebRTCInfo, speakerLayoutSortPreset, speaking, videoLoggerSystem, withParticipantSource };
|
|
15888
|
+
export { AudioSettingsRequestDefaultDeviceEnum, AudioSettingsResponseDefaultDeviceEnum, browsers as Browsers, Call, CallRecordingFailedEventRecordingTypeEnum, CallRecordingReadyEventRecordingTypeEnum, CallRecordingStartedEventRecordingTypeEnum, CallRecordingStoppedEventRecordingTypeEnum, CallState, CallType, CallTypes, CallingState, CameraManager, CameraManagerState, CreateDeviceRequestPushProviderEnum, DebounceType, DeviceManager, DeviceManagerState, DynascaleManager, ErrorFromResponse, FrameRecordingSettingsRequestModeEnum, FrameRecordingSettingsRequestQualityEnum, FrameRecordingSettingsResponseModeEnum, IndividualRecordingSettingsRequestModeEnum, IndividualRecordingSettingsResponseModeEnum, IngressAudioEncodingOptionsRequestChannelsEnum, IngressSourceRequestFpsEnum, IngressVideoLayerRequestCodecEnum, LayoutSettingsRequestNameEnum, MicrophoneManager, MicrophoneManagerState, NoiseCancellationSettingsModeEnum, OwnCapability, RNSpeechDetector, RTMPBroadcastRequestQualityEnum, RTMPSettingsRequestQualityEnum, RawRecordingSettingsRequestModeEnum, RawRecordingSettingsResponseModeEnum, RecordSettingsRequestModeEnum, RecordSettingsRequestQualityEnum, rxUtils as RxUtils, ScreenShareManager, ScreenShareState, events as SfuEvents, SfuJoinError, models as SfuModels, SpeakerManager, SpeakerState, StartClosedCaptionsRequestLanguageEnum, StartTranscriptionRequestLanguageEnum, StreamSfuClient, StreamVideoClient, StreamVideoReadOnlyStateStore, StreamVideoWriteableStateStore, TranscriptionSettingsRequestClosedCaptionModeEnum, TranscriptionSettingsRequestLanguageEnum, TranscriptionSettingsRequestModeEnum, TranscriptionSettingsResponseClosedCaptionModeEnum, TranscriptionSettingsResponseLanguageEnum, TranscriptionSettingsResponseModeEnum, VideoSettingsRequestCameraFacingEnum, VideoSettingsResponseCameraFacingEnum, ViewportTracker, VisibilityState, checkIfAudioOutputChangeSupported, combineComparators, conditional, createSoundDetector, defaultSortPreset, descending, deviceIds$, disposeOfMediaStream, dominantSpeaker, getAudioBrowserPermission, getAudioDevices, getAudioOutputDevices, getAudioStream, getClientDetails, getDeviceState, getScreenShareStream, getSdkInfo, getVideoBrowserPermission, getVideoDevices, getVideoStream, getWebRTCInfo, hasAudio, hasPausedTrack, hasScreenShare, hasScreenShareAudio, hasVideo, humanize, isPinned, livestreamOrAudioRoomSortPreset, logToConsole, name, noopComparator, paginatedLayoutSortPreset, pinned, publishingAudio, publishingVideo, reactionType, resolveDeviceId, role, screenSharing, setDeviceInfo, setOSInfo, setPowerState, setSdkInfo, setThermalState, setWebRTCInfo, speakerLayoutSortPreset, speaking, videoLoggerSystem, withParticipantSource };
|
|
15754
15889
|
//# sourceMappingURL=index.browser.es.js.map
|