@stream-io/video-client 1.48.0 → 1.50.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 +25 -0
- package/dist/index.browser.es.js +1497 -677
- package/dist/index.browser.es.js.map +1 -1
- package/dist/index.cjs.js +1497 -677
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +1497 -677
- package/dist/index.es.js.map +1 -1
- package/dist/src/Call.d.ts +77 -4
- package/dist/src/StreamSfuClient.d.ts +8 -1
- package/dist/src/coordinator/connection/client.d.ts +1 -1
- package/dist/src/coordinator/connection/connection.d.ts +31 -25
- package/dist/src/coordinator/connection/types.d.ts +14 -0
- package/dist/src/coordinator/connection/utils.d.ts +1 -0
- package/dist/src/devices/DeviceManager.d.ts +3 -0
- package/dist/src/devices/DeviceManagerState.d.ts +13 -1
- package/dist/src/gen/video/sfu/event/events.d.ts +5 -1
- package/dist/src/gen/video/sfu/models/models.d.ts +34 -0
- package/dist/src/helpers/AudioBindingsWatchdog.d.ts +3 -3
- package/dist/src/helpers/BlockedAudioTracker.d.ts +30 -0
- package/dist/src/helpers/DynascaleManager.d.ts +8 -86
- package/dist/src/helpers/MediaPlaybackWatchdog.d.ts +32 -0
- package/dist/src/helpers/SlidingWindowRateLimiter.d.ts +28 -0
- package/dist/src/helpers/TrackSubscriptionManager.d.ts +114 -0
- package/dist/src/helpers/ViewportTracker.d.ts +11 -17
- package/dist/src/helpers/browsers.d.ts +13 -0
- package/dist/src/helpers/concurrency.d.ts +6 -4
- package/dist/src/rtc/BasePeerConnection.d.ts +11 -2
- package/dist/src/rtc/Publisher.d.ts +17 -0
- package/dist/src/rtc/Subscriber.d.ts +1 -0
- package/dist/src/rtc/helpers/degradationPreference.d.ts +2 -0
- package/dist/src/rtc/index.d.ts +1 -0
- package/dist/src/rtc/types.d.ts +33 -1
- package/dist/src/stats/rtc/types.d.ts +1 -1
- package/dist/src/store/rxUtils.d.ts +9 -0
- package/dist/src/types.d.ts +18 -0
- package/package.json +2 -2
- package/src/Call.ts +268 -40
- package/src/StreamSfuClient.ts +75 -12
- package/src/__tests__/Call.lifecycle.test.ts +67 -0
- package/src/__tests__/Call.publishing.test.ts +103 -0
- package/src/__tests__/StreamSfuClient.test.ts +275 -0
- package/src/coordinator/connection/__tests__/connection.test.ts +482 -0
- package/src/coordinator/connection/client.ts +1 -1
- package/src/coordinator/connection/connection.ts +149 -96
- package/src/coordinator/connection/types.ts +15 -0
- package/src/coordinator/connection/utils.ts +15 -0
- package/src/devices/DeviceManager.ts +92 -32
- package/src/devices/DeviceManagerState.ts +20 -1
- package/src/devices/__tests__/DeviceManager.test.ts +283 -0
- package/src/devices/__tests__/ScreenShareManager.test.ts +0 -2
- package/src/devices/__tests__/mocks.ts +2 -0
- package/src/devices/devices.ts +2 -1
- package/src/gen/video/sfu/event/events.ts +15 -0
- package/src/gen/video/sfu/models/models.ts +44 -0
- package/src/helpers/AudioBindingsWatchdog.ts +10 -7
- package/src/helpers/BlockedAudioTracker.ts +74 -0
- package/src/helpers/DynascaleManager.ts +46 -337
- package/src/helpers/MediaPlaybackWatchdog.ts +121 -0
- package/src/helpers/SlidingWindowRateLimiter.ts +49 -0
- package/src/helpers/TrackSubscriptionManager.ts +243 -0
- package/src/helpers/ViewportTracker.ts +74 -19
- package/src/helpers/__tests__/BlockedAudioTracker.test.ts +114 -0
- package/src/helpers/__tests__/DynascaleManager.test.ts +175 -122
- package/src/helpers/__tests__/MediaPlaybackWatchdog.test.ts +180 -0
- package/src/helpers/__tests__/SlidingWindowRateLimiter.test.ts +43 -0
- package/src/helpers/__tests__/TrackSubscriptionManager.test.ts +310 -0
- package/src/helpers/__tests__/ViewportTracker.test.ts +83 -0
- package/src/helpers/__tests__/browsers.test.ts +85 -1
- package/src/helpers/browsers.ts +24 -0
- package/src/helpers/concurrency.ts +9 -10
- package/src/rpc/retryable.ts +0 -1
- package/src/rtc/BasePeerConnection.ts +96 -6
- package/src/rtc/Publisher.ts +49 -2
- package/src/rtc/Subscriber.ts +42 -14
- package/src/rtc/__tests__/Call.reconnect.test.ts +761 -0
- package/src/rtc/__tests__/Publisher.test.ts +332 -10
- package/src/rtc/__tests__/Subscriber.test.ts +202 -1
- package/src/rtc/__tests__/mocks/webrtc.mocks.ts +13 -2
- package/src/rtc/helpers/__tests__/degradationPreference.test.ts +23 -0
- package/src/rtc/helpers/degradationPreference.ts +22 -0
- package/src/rtc/index.ts +1 -0
- package/src/rtc/types.ts +38 -1
- package/src/stats/rtc/types.ts +1 -0
- package/src/store/__tests__/rxUtils.test.ts +276 -0
- package/src/store/rxUtils.ts +19 -0
- package/src/types.ts +19 -0
package/src/store/rxUtils.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { withoutConcurrency } from '../helpers/concurrency';
|
|
|
3
3
|
import { videoLoggerSystem } from '../logger';
|
|
4
4
|
|
|
5
5
|
type FunctionPatch<T> = (currentValue: T) => T;
|
|
6
|
+
type AsyncFunctionPatch<T> = (currentValue: T) => Promise<T>;
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* A value or a function which takes the current value and returns a new value.
|
|
@@ -59,6 +60,24 @@ export const setCurrentValue = <T>(subject: Subject<T>, update: Patch<T>) => {
|
|
|
59
60
|
return next;
|
|
60
61
|
};
|
|
61
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Updates the value of the provided Subject asynchronously.
|
|
65
|
+
* Locks the subject to prevent concurrent updates.
|
|
66
|
+
*
|
|
67
|
+
* @param subject the subject to update.
|
|
68
|
+
* @param update the update to apply to the subject.
|
|
69
|
+
*/
|
|
70
|
+
export const setCurrentValueAsync = async <T>(
|
|
71
|
+
subject: Subject<T>,
|
|
72
|
+
update: AsyncFunctionPatch<T>,
|
|
73
|
+
) => {
|
|
74
|
+
return withoutConcurrency(subject, async () => {
|
|
75
|
+
const next = await update(getCurrentValue(subject));
|
|
76
|
+
subject.next(next);
|
|
77
|
+
return next;
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
|
|
62
81
|
/**
|
|
63
82
|
* Updates the value of the provided Subject and returns the previous value
|
|
64
83
|
* and a function to roll back the update.
|
package/src/types.ts
CHANGED
|
@@ -90,6 +90,25 @@ export interface StreamVideoParticipant extends Participant {
|
|
|
90
90
|
*/
|
|
91
91
|
pausedTracks?: TrackType[];
|
|
92
92
|
|
|
93
|
+
/**
|
|
94
|
+
* The list of tracks that are currently not producing media.
|
|
95
|
+
*
|
|
96
|
+
* For remote participants this is currently surfaced for `TrackType.AUDIO`
|
|
97
|
+
* only and reflects the receiver-side `RTCRtpReceiver` track `mute`/`unmute`
|
|
98
|
+
* state, so it covers system mute on the sender (OS audio session
|
|
99
|
+
* interruption, etc.), the sender pausing its track, sustained RTP stalls,
|
|
100
|
+
* and SFU drops. Remote video and screen-share interruption is not tracked.
|
|
101
|
+
*
|
|
102
|
+
* For the local participant it reflects the local track `mute`/`unmute`
|
|
103
|
+
* events surfaced by the browser (e.g. bluetooth disconnect, OS-level
|
|
104
|
+
* mic/camera kill switch, iOS audio session interruption).
|
|
105
|
+
*
|
|
106
|
+
* Orthogonal to `publishedTracks`: a track can be in `publishedTracks`
|
|
107
|
+
* AND in `interruptedTracks` (the participant intends to publish, but
|
|
108
|
+
* no media is flowing right now).
|
|
109
|
+
*/
|
|
110
|
+
interruptedTracks?: TrackType[];
|
|
111
|
+
|
|
93
112
|
/**
|
|
94
113
|
* True if the participant is the local participant.
|
|
95
114
|
*/
|