@stream-io/video-client 0.6.2 → 0.6.3
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 +7 -0
- package/dist/index.browser.es.js +269 -20
- package/dist/index.browser.es.js.map +1 -1
- package/dist/index.cjs.js +270 -19
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +269 -20
- package/dist/index.es.js.map +1 -1
- package/dist/src/Call.d.ts +1 -0
- package/dist/src/StreamSfuClient.d.ts +2 -1
- package/dist/src/client-details.d.ts +10 -1
- package/dist/src/gen/coordinator/index.d.ts +19 -0
- package/dist/src/gen/video/sfu/signal_rpc/signal.client.d.ts +9 -1
- package/dist/src/gen/video/sfu/signal_rpc/signal.d.ts +58 -0
- package/dist/src/rtc/flows/join.d.ts +1 -0
- package/dist/src/stats/SfuStatsReporter.d.ts +25 -0
- package/dist/src/stats/index.d.ts +3 -0
- package/dist/src/stats/utils.d.ts +6 -0
- package/dist/src/store/CallState.d.ts +1 -1
- package/package.json +1 -1
- package/src/Call.ts +26 -9
- package/src/StreamSfuClient.ts +12 -0
- package/src/client-details.ts +18 -1
- package/src/gen/coordinator/index.ts +19 -0
- package/src/gen/video/sfu/signal_rpc/signal.client.ts +26 -0
- package/src/gen/video/sfu/signal_rpc/signal.ts +250 -0
- package/src/helpers/RNSpeechDetector.ts +1 -1
- package/src/rtc/flows/join.ts +4 -2
- package/src/stats/SfuStatsReporter.ts +88 -0
- package/src/stats/index.ts +3 -0
- package/src/stats/{state-store-stats-reporter.ts → stateStoreStatsReporter.ts} +1 -13
- package/src/stats/utils.ts +12 -0
- package/src/store/CallState.ts +1 -1
- /package/dist/src/stats/{state-store-stats-reporter.d.ts → stateStoreStatsReporter.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
### [0.6.3](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-0.6.2...@stream-io/video-client-0.6.3) (2024-03-25)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* SFU stats reporting ([#1297](https://github.com/GetStream/stream-video-js/issues/1297)) ([f46e927](https://github.com/GetStream/stream-video-js/commit/f46e927cbd650bc9af64a01cd5ebcec6cf2cfda8)), closes [#1276](https://github.com/GetStream/stream-video-js/issues/1276)
|
|
11
|
+
|
|
5
12
|
### [0.6.2](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-client-0.6.1...@stream-io/video-client-0.6.2) (2024-03-25)
|
|
6
13
|
|
|
7
14
|
|
package/dist/index.browser.es.js
CHANGED
|
@@ -2446,6 +2446,159 @@ var models = /*#__PURE__*/Object.freeze({
|
|
|
2446
2446
|
// @generated from protobuf file "video/sfu/signal_rpc/signal.proto" (package "stream.video.sfu.signal", syntax proto3)
|
|
2447
2447
|
// tslint:disable
|
|
2448
2448
|
// @generated message type with reflection information, may provide speed optimized methods
|
|
2449
|
+
class SendStatsRequest$Type extends MessageType {
|
|
2450
|
+
constructor() {
|
|
2451
|
+
super('stream.video.sfu.signal.SendStatsRequest', [
|
|
2452
|
+
{ no: 1, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
|
|
2453
|
+
{
|
|
2454
|
+
no: 2,
|
|
2455
|
+
name: 'subscriber_stats',
|
|
2456
|
+
kind: 'scalar',
|
|
2457
|
+
T: 9 /*ScalarType.STRING*/,
|
|
2458
|
+
},
|
|
2459
|
+
{
|
|
2460
|
+
no: 3,
|
|
2461
|
+
name: 'publisher_stats',
|
|
2462
|
+
kind: 'scalar',
|
|
2463
|
+
T: 9 /*ScalarType.STRING*/,
|
|
2464
|
+
},
|
|
2465
|
+
{
|
|
2466
|
+
no: 4,
|
|
2467
|
+
name: 'webrtc_version',
|
|
2468
|
+
kind: 'scalar',
|
|
2469
|
+
T: 9 /*ScalarType.STRING*/,
|
|
2470
|
+
},
|
|
2471
|
+
{ no: 5, name: 'sdk', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
|
|
2472
|
+
{
|
|
2473
|
+
no: 6,
|
|
2474
|
+
name: 'sdk_version',
|
|
2475
|
+
kind: 'scalar',
|
|
2476
|
+
T: 9 /*ScalarType.STRING*/,
|
|
2477
|
+
},
|
|
2478
|
+
]);
|
|
2479
|
+
}
|
|
2480
|
+
create(value) {
|
|
2481
|
+
const message = globalThis.Object.create(this.messagePrototype);
|
|
2482
|
+
message.sessionId = '';
|
|
2483
|
+
message.subscriberStats = '';
|
|
2484
|
+
message.publisherStats = '';
|
|
2485
|
+
message.webrtcVersion = '';
|
|
2486
|
+
message.sdk = '';
|
|
2487
|
+
message.sdkVersion = '';
|
|
2488
|
+
if (value !== undefined)
|
|
2489
|
+
reflectionMergePartial(this, message, value);
|
|
2490
|
+
return message;
|
|
2491
|
+
}
|
|
2492
|
+
internalBinaryRead(reader, length, options, target) {
|
|
2493
|
+
let message = target ?? this.create(), end = reader.pos + length;
|
|
2494
|
+
while (reader.pos < end) {
|
|
2495
|
+
let [fieldNo, wireType] = reader.tag();
|
|
2496
|
+
switch (fieldNo) {
|
|
2497
|
+
case /* string session_id */ 1:
|
|
2498
|
+
message.sessionId = reader.string();
|
|
2499
|
+
break;
|
|
2500
|
+
case /* string subscriber_stats */ 2:
|
|
2501
|
+
message.subscriberStats = reader.string();
|
|
2502
|
+
break;
|
|
2503
|
+
case /* string publisher_stats */ 3:
|
|
2504
|
+
message.publisherStats = reader.string();
|
|
2505
|
+
break;
|
|
2506
|
+
case /* string webrtc_version */ 4:
|
|
2507
|
+
message.webrtcVersion = reader.string();
|
|
2508
|
+
break;
|
|
2509
|
+
case /* string sdk */ 5:
|
|
2510
|
+
message.sdk = reader.string();
|
|
2511
|
+
break;
|
|
2512
|
+
case /* string sdk_version */ 6:
|
|
2513
|
+
message.sdkVersion = reader.string();
|
|
2514
|
+
break;
|
|
2515
|
+
default:
|
|
2516
|
+
let u = options.readUnknownField;
|
|
2517
|
+
if (u === 'throw')
|
|
2518
|
+
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
2519
|
+
let d = reader.skip(wireType);
|
|
2520
|
+
if (u !== false)
|
|
2521
|
+
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
2522
|
+
}
|
|
2523
|
+
}
|
|
2524
|
+
return message;
|
|
2525
|
+
}
|
|
2526
|
+
internalBinaryWrite(message, writer, options) {
|
|
2527
|
+
/* string session_id = 1; */
|
|
2528
|
+
if (message.sessionId !== '')
|
|
2529
|
+
writer.tag(1, WireType.LengthDelimited).string(message.sessionId);
|
|
2530
|
+
/* string subscriber_stats = 2; */
|
|
2531
|
+
if (message.subscriberStats !== '')
|
|
2532
|
+
writer.tag(2, WireType.LengthDelimited).string(message.subscriberStats);
|
|
2533
|
+
/* string publisher_stats = 3; */
|
|
2534
|
+
if (message.publisherStats !== '')
|
|
2535
|
+
writer.tag(3, WireType.LengthDelimited).string(message.publisherStats);
|
|
2536
|
+
/* string webrtc_version = 4; */
|
|
2537
|
+
if (message.webrtcVersion !== '')
|
|
2538
|
+
writer.tag(4, WireType.LengthDelimited).string(message.webrtcVersion);
|
|
2539
|
+
/* string sdk = 5; */
|
|
2540
|
+
if (message.sdk !== '')
|
|
2541
|
+
writer.tag(5, WireType.LengthDelimited).string(message.sdk);
|
|
2542
|
+
/* string sdk_version = 6; */
|
|
2543
|
+
if (message.sdkVersion !== '')
|
|
2544
|
+
writer.tag(6, WireType.LengthDelimited).string(message.sdkVersion);
|
|
2545
|
+
let u = options.writeUnknownFields;
|
|
2546
|
+
if (u !== false)
|
|
2547
|
+
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
2548
|
+
return writer;
|
|
2549
|
+
}
|
|
2550
|
+
}
|
|
2551
|
+
/**
|
|
2552
|
+
* @generated MessageType for protobuf message stream.video.sfu.signal.SendStatsRequest
|
|
2553
|
+
*/
|
|
2554
|
+
const SendStatsRequest = new SendStatsRequest$Type();
|
|
2555
|
+
// @generated message type with reflection information, may provide speed optimized methods
|
|
2556
|
+
class SendStatsResponse$Type extends MessageType {
|
|
2557
|
+
constructor() {
|
|
2558
|
+
super('stream.video.sfu.signal.SendStatsResponse', [
|
|
2559
|
+
{ no: 1, name: 'error', kind: 'message', T: () => Error$2 },
|
|
2560
|
+
]);
|
|
2561
|
+
}
|
|
2562
|
+
create(value) {
|
|
2563
|
+
const message = globalThis.Object.create(this.messagePrototype);
|
|
2564
|
+
if (value !== undefined)
|
|
2565
|
+
reflectionMergePartial(this, message, value);
|
|
2566
|
+
return message;
|
|
2567
|
+
}
|
|
2568
|
+
internalBinaryRead(reader, length, options, target) {
|
|
2569
|
+
let message = target ?? this.create(), end = reader.pos + length;
|
|
2570
|
+
while (reader.pos < end) {
|
|
2571
|
+
let [fieldNo, wireType] = reader.tag();
|
|
2572
|
+
switch (fieldNo) {
|
|
2573
|
+
case /* stream.video.sfu.models.Error error */ 1:
|
|
2574
|
+
message.error = Error$2.internalBinaryRead(reader, reader.uint32(), options, message.error);
|
|
2575
|
+
break;
|
|
2576
|
+
default:
|
|
2577
|
+
let u = options.readUnknownField;
|
|
2578
|
+
if (u === 'throw')
|
|
2579
|
+
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
|
2580
|
+
let d = reader.skip(wireType);
|
|
2581
|
+
if (u !== false)
|
|
2582
|
+
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
|
2583
|
+
}
|
|
2584
|
+
}
|
|
2585
|
+
return message;
|
|
2586
|
+
}
|
|
2587
|
+
internalBinaryWrite(message, writer, options) {
|
|
2588
|
+
/* stream.video.sfu.models.Error error = 1; */
|
|
2589
|
+
if (message.error)
|
|
2590
|
+
Error$2.internalBinaryWrite(message.error, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
|
2591
|
+
let u = options.writeUnknownFields;
|
|
2592
|
+
if (u !== false)
|
|
2593
|
+
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
2594
|
+
return writer;
|
|
2595
|
+
}
|
|
2596
|
+
}
|
|
2597
|
+
/**
|
|
2598
|
+
* @generated MessageType for protobuf message stream.video.sfu.signal.SendStatsResponse
|
|
2599
|
+
*/
|
|
2600
|
+
const SendStatsResponse = new SendStatsResponse$Type();
|
|
2601
|
+
// @generated message type with reflection information, may provide speed optimized methods
|
|
2449
2602
|
class ICERestartRequest$Type extends MessageType {
|
|
2450
2603
|
constructor() {
|
|
2451
2604
|
super('stream.video.sfu.signal.ICERestartRequest', [
|
|
@@ -3336,6 +3489,12 @@ const SignalServer = new ServiceType('stream.video.sfu.signal.SignalServer', [
|
|
|
3336
3489
|
I: ICERestartRequest,
|
|
3337
3490
|
O: ICERestartResponse,
|
|
3338
3491
|
},
|
|
3492
|
+
{
|
|
3493
|
+
name: 'SendStats',
|
|
3494
|
+
options: {},
|
|
3495
|
+
I: SendStatsRequest,
|
|
3496
|
+
O: SendStatsResponse,
|
|
3497
|
+
},
|
|
3339
3498
|
]);
|
|
3340
3499
|
|
|
3341
3500
|
/**
|
|
@@ -5631,6 +5790,13 @@ class SignalServerClient {
|
|
|
5631
5790
|
const method = this.methods[5], opt = this._transport.mergeOptions(options);
|
|
5632
5791
|
return stackIntercept('unary', this._transport, method, opt, input);
|
|
5633
5792
|
}
|
|
5793
|
+
/**
|
|
5794
|
+
* @generated from protobuf rpc: SendStats(stream.video.sfu.signal.SendStatsRequest) returns (stream.video.sfu.signal.SendStatsResponse);
|
|
5795
|
+
*/
|
|
5796
|
+
sendStats(input, options) {
|
|
5797
|
+
const method = this.methods[6], opt = this._transport.mergeOptions(options);
|
|
5798
|
+
return stackIntercept('unary', this._transport, method, opt, input);
|
|
5799
|
+
}
|
|
5634
5800
|
}
|
|
5635
5801
|
|
|
5636
5802
|
const defaultOptions = {
|
|
@@ -5885,6 +6051,7 @@ function getIceCandidate(candidate) {
|
|
|
5885
6051
|
let sdkInfo;
|
|
5886
6052
|
let osInfo;
|
|
5887
6053
|
let deviceInfo;
|
|
6054
|
+
let webRtcInfo;
|
|
5888
6055
|
const setSdkInfo = (info) => {
|
|
5889
6056
|
sdkInfo = info;
|
|
5890
6057
|
};
|
|
@@ -5903,6 +6070,12 @@ const setDeviceInfo = (info) => {
|
|
|
5903
6070
|
const getDeviceInfo = () => {
|
|
5904
6071
|
return deviceInfo;
|
|
5905
6072
|
};
|
|
6073
|
+
const getWebRTCInfo = () => {
|
|
6074
|
+
return webRtcInfo;
|
|
6075
|
+
};
|
|
6076
|
+
const setWebRTCInfo = (info) => {
|
|
6077
|
+
webRtcInfo = info;
|
|
6078
|
+
};
|
|
5906
6079
|
const getClientDetails = () => {
|
|
5907
6080
|
if (isReactNative()) {
|
|
5908
6081
|
// Since RN doesn't support web, sharing browser info is not required
|
|
@@ -8486,6 +8659,12 @@ class StreamSfuClient {
|
|
|
8486
8659
|
sessionId: this.sessionId,
|
|
8487
8660
|
}), this.logger);
|
|
8488
8661
|
};
|
|
8662
|
+
this.sendStats = async (stats) => {
|
|
8663
|
+
return retryable(() => this.rpc.sendStats({
|
|
8664
|
+
...stats,
|
|
8665
|
+
sessionId: this.sessionId,
|
|
8666
|
+
}), this.logger);
|
|
8667
|
+
};
|
|
8489
8668
|
this.join = async (data) => {
|
|
8490
8669
|
const joinRequest = JoinRequest.create({
|
|
8491
8670
|
...data,
|
|
@@ -9020,8 +9199,7 @@ const registerRingingCallEventHandlers = (call) => {
|
|
|
9020
9199
|
* @param data the data for the call.
|
|
9021
9200
|
*/
|
|
9022
9201
|
const join = async (httpClient, type, id, data) => {
|
|
9023
|
-
const
|
|
9024
|
-
const { call, credentials, members, own_capabilities } = joinCallResponse;
|
|
9202
|
+
const { call, credentials, members, own_capabilities, stats_options } = await doJoin(httpClient, type, id, data);
|
|
9025
9203
|
return {
|
|
9026
9204
|
connectionConfig: toRtcConfiguration(credentials.ice_servers),
|
|
9027
9205
|
sfuServer: credentials.server,
|
|
@@ -9029,6 +9207,7 @@ const join = async (httpClient, type, id, data) => {
|
|
|
9029
9207
|
metadata: call,
|
|
9030
9208
|
members,
|
|
9031
9209
|
ownCapabilities: own_capabilities,
|
|
9210
|
+
statsOptions: stats_options,
|
|
9032
9211
|
};
|
|
9033
9212
|
};
|
|
9034
9213
|
const doJoin = async (httpClient, type, id, data) => {
|
|
@@ -9052,6 +9231,19 @@ const toRtcConfiguration = (config) => {
|
|
|
9052
9231
|
return rtcConfig;
|
|
9053
9232
|
};
|
|
9054
9233
|
|
|
9234
|
+
/**
|
|
9235
|
+
* Flatten the stats report into an array of stats objects.
|
|
9236
|
+
*
|
|
9237
|
+
* @param report the report to flatten.
|
|
9238
|
+
*/
|
|
9239
|
+
const flatten$1 = (report) => {
|
|
9240
|
+
const stats = [];
|
|
9241
|
+
report.forEach((s) => {
|
|
9242
|
+
stats.push(s);
|
|
9243
|
+
});
|
|
9244
|
+
return stats;
|
|
9245
|
+
};
|
|
9246
|
+
|
|
9055
9247
|
/**
|
|
9056
9248
|
* Creates a new StatsReporter instance that collects metrics about the ongoing call and reports them to the state store
|
|
9057
9249
|
*/
|
|
@@ -9272,18 +9464,58 @@ const aggregate = (stats) => {
|
|
|
9272
9464
|
}
|
|
9273
9465
|
return report;
|
|
9274
9466
|
};
|
|
9275
|
-
|
|
9276
|
-
|
|
9277
|
-
|
|
9278
|
-
|
|
9279
|
-
|
|
9280
|
-
const
|
|
9281
|
-
|
|
9282
|
-
|
|
9283
|
-
|
|
9284
|
-
|
|
9285
|
-
|
|
9286
|
-
|
|
9467
|
+
|
|
9468
|
+
class SfuStatsReporter {
|
|
9469
|
+
constructor(sfuClient, { options, clientDetails, subscriber, publisher }) {
|
|
9470
|
+
this.logger = getLogger(['SfuStatsReporter']);
|
|
9471
|
+
this.run = async () => {
|
|
9472
|
+
const [subscriberStats, publisherStats] = await Promise.all([
|
|
9473
|
+
this.subscriber.getStats().then(flatten$1).then(JSON.stringify),
|
|
9474
|
+
this.publisher.getStats().then(flatten$1).then(JSON.stringify),
|
|
9475
|
+
]);
|
|
9476
|
+
await this.sfuClient.sendStats({
|
|
9477
|
+
sdk: this.sdkName,
|
|
9478
|
+
sdkVersion: this.sdkVersion,
|
|
9479
|
+
webrtcVersion: this.webRTCVersion,
|
|
9480
|
+
subscriberStats,
|
|
9481
|
+
publisherStats,
|
|
9482
|
+
});
|
|
9483
|
+
};
|
|
9484
|
+
this.start = () => {
|
|
9485
|
+
if (this.options.reporting_interval_ms <= 0)
|
|
9486
|
+
return;
|
|
9487
|
+
this.intervalId = setInterval(() => {
|
|
9488
|
+
this.run().catch((err) => {
|
|
9489
|
+
this.logger('warn', 'Failed to report stats', err);
|
|
9490
|
+
});
|
|
9491
|
+
}, this.options.reporting_interval_ms);
|
|
9492
|
+
};
|
|
9493
|
+
this.stop = () => {
|
|
9494
|
+
clearInterval(this.intervalId);
|
|
9495
|
+
this.intervalId = undefined;
|
|
9496
|
+
};
|
|
9497
|
+
this.sfuClient = sfuClient;
|
|
9498
|
+
this.options = options;
|
|
9499
|
+
this.subscriber = subscriber;
|
|
9500
|
+
this.publisher = publisher;
|
|
9501
|
+
const webRTCInfo = getWebRTCInfo();
|
|
9502
|
+
const { sdk, browser } = clientDetails;
|
|
9503
|
+
this.sdkName =
|
|
9504
|
+
sdk && sdk.type === SdkType.REACT
|
|
9505
|
+
? 'stream-react'
|
|
9506
|
+
: sdk && sdk.type === SdkType.REACT_NATIVE
|
|
9507
|
+
? 'stream-react-native'
|
|
9508
|
+
: 'stream-js';
|
|
9509
|
+
this.sdkVersion = sdk
|
|
9510
|
+
? `${sdk.major}.${sdk.minor}.${sdk.patch}`
|
|
9511
|
+
: '0.0.0-development';
|
|
9512
|
+
// The WebRTC version if passed from the SDK, it is taken else the browser info is sent.
|
|
9513
|
+
this.webRTCVersion =
|
|
9514
|
+
webRTCInfo?.version ||
|
|
9515
|
+
`${browser?.name || ''}-${browser?.version || ''}` ||
|
|
9516
|
+
'N/A';
|
|
9517
|
+
}
|
|
9518
|
+
}
|
|
9287
9519
|
|
|
9288
9520
|
const DEFAULT_THRESHOLD = 0.35;
|
|
9289
9521
|
class ViewportTracker {
|
|
@@ -11217,6 +11449,8 @@ class Call {
|
|
|
11217
11449
|
}
|
|
11218
11450
|
this.statsReporter?.stop();
|
|
11219
11451
|
this.statsReporter = undefined;
|
|
11452
|
+
this.sfuStatsReporter?.stop();
|
|
11453
|
+
this.sfuStatsReporter = undefined;
|
|
11220
11454
|
this.subscriber?.close();
|
|
11221
11455
|
this.subscriber = undefined;
|
|
11222
11456
|
this.publisher?.close();
|
|
@@ -11356,12 +11590,14 @@ class Call {
|
|
|
11356
11590
|
let sfuServer;
|
|
11357
11591
|
let sfuToken;
|
|
11358
11592
|
let connectionConfig;
|
|
11593
|
+
let statsOptions;
|
|
11359
11594
|
try {
|
|
11360
11595
|
if (this.sfuClient?.isFastReconnecting) {
|
|
11361
11596
|
// use previous SFU configuration and values
|
|
11362
11597
|
connectionConfig = this.publisher?.connectionConfiguration;
|
|
11363
11598
|
sfuServer = this.sfuClient.sfuServer;
|
|
11364
11599
|
sfuToken = this.sfuClient.token;
|
|
11600
|
+
statsOptions = this.sfuStatsReporter?.options;
|
|
11365
11601
|
}
|
|
11366
11602
|
else {
|
|
11367
11603
|
// full join flow - let the Coordinator pick a new SFU for us
|
|
@@ -11372,6 +11608,7 @@ class Call {
|
|
|
11372
11608
|
connectionConfig = call.connectionConfig;
|
|
11373
11609
|
sfuServer = call.sfuServer;
|
|
11374
11610
|
sfuToken = call.token;
|
|
11611
|
+
statsOptions = call.statsOptions;
|
|
11375
11612
|
}
|
|
11376
11613
|
if (this.streamClient._hasConnectionID()) {
|
|
11377
11614
|
this.watching = true;
|
|
@@ -11428,6 +11665,8 @@ class Call {
|
|
|
11428
11665
|
this.publisher = undefined;
|
|
11429
11666
|
this.statsReporter?.stop();
|
|
11430
11667
|
this.statsReporter = undefined;
|
|
11668
|
+
this.sfuStatsReporter?.stop();
|
|
11669
|
+
this.sfuStatsReporter = undefined;
|
|
11431
11670
|
// clean up current connection
|
|
11432
11671
|
sfuClient.close(StreamSfuClient.NORMAL_CLOSURE, 'js-client: attempting full reconnect');
|
|
11433
11672
|
}
|
|
@@ -11568,10 +11807,10 @@ class Call {
|
|
|
11568
11807
|
connectionConfig,
|
|
11569
11808
|
});
|
|
11570
11809
|
}
|
|
11571
|
-
const audioSettings = this.state.settings?.audio;
|
|
11572
|
-
const isDtxEnabled = !!audioSettings?.opus_dtx_enabled;
|
|
11573
|
-
const isRedEnabled = !!audioSettings?.redundant_coding_enabled;
|
|
11574
11810
|
if (!this.publisher) {
|
|
11811
|
+
const audioSettings = this.state.settings?.audio;
|
|
11812
|
+
const isDtxEnabled = !!audioSettings?.opus_dtx_enabled;
|
|
11813
|
+
const isRedEnabled = !!audioSettings?.redundant_coding_enabled;
|
|
11575
11814
|
this.publisher = new Publisher({
|
|
11576
11815
|
sfuClient,
|
|
11577
11816
|
dispatcher: this.dispatcher,
|
|
@@ -11588,6 +11827,16 @@ class Call {
|
|
|
11588
11827
|
state: this.state,
|
|
11589
11828
|
});
|
|
11590
11829
|
}
|
|
11830
|
+
const clientDetails = getClientDetails();
|
|
11831
|
+
if (!this.sfuStatsReporter && statsOptions) {
|
|
11832
|
+
this.sfuStatsReporter = new SfuStatsReporter(sfuClient, {
|
|
11833
|
+
clientDetails,
|
|
11834
|
+
options: statsOptions,
|
|
11835
|
+
subscriber: this.subscriber,
|
|
11836
|
+
publisher: this.publisher,
|
|
11837
|
+
});
|
|
11838
|
+
this.sfuStatsReporter.start();
|
|
11839
|
+
}
|
|
11591
11840
|
try {
|
|
11592
11841
|
// 1. wait for the signal server to be ready before sending "joinRequest"
|
|
11593
11842
|
sfuClient.signalReady
|
|
@@ -11607,7 +11856,7 @@ class Call {
|
|
|
11607
11856
|
: undefined;
|
|
11608
11857
|
return sfuClient.join({
|
|
11609
11858
|
subscriberSdp: sdp || '',
|
|
11610
|
-
clientDetails
|
|
11859
|
+
clientDetails,
|
|
11611
11860
|
migration,
|
|
11612
11861
|
fastReconnect: previousSfuClient?.isFastReconnecting ?? false,
|
|
11613
11862
|
});
|
|
@@ -14105,7 +14354,7 @@ class StreamClient {
|
|
|
14105
14354
|
});
|
|
14106
14355
|
};
|
|
14107
14356
|
this.getUserAgent = () => {
|
|
14108
|
-
const version = "0.6.
|
|
14357
|
+
const version = "0.6.3" ;
|
|
14109
14358
|
return (this.userAgent ||
|
|
14110
14359
|
`stream-video-javascript-client-${this.node ? 'node' : 'browser'}-${version}`);
|
|
14111
14360
|
};
|
|
@@ -14653,5 +14902,5 @@ class StreamVideoServerClient extends StreamVideoClient {
|
|
|
14653
14902
|
}
|
|
14654
14903
|
}
|
|
14655
14904
|
|
|
14656
|
-
export { AudioSettingsDefaultDeviceEnum, AudioSettingsRequestDefaultDeviceEnum, browsers as Browsers, Call, CallState, CallType, CallTypes, CallingState, CameraManager, CameraManagerState, CreateDeviceRequestPushProviderEnum, DebounceType, DynascaleManager, ErrorFromResponse, InputMediaDeviceManager, InputMediaDeviceManagerState, LayoutSettingsNameEnum, LayoutSettingsRequestNameEnum, MicrophoneManager, MicrophoneManagerState, OwnCapability, RecordSettingsRequestModeEnum, RecordSettingsRequestQualityEnum, rxUtils as RxUtils, ScreenShareManager, ScreenShareState, events as SfuEvents, models as SfuModels, SpeakerManager, SpeakerState, StreamSfuClient, StreamVideoClient, StreamVideoReadOnlyStateStore, StreamVideoServerClient, StreamVideoWriteableStateStore, TranscriptionSettingsModeEnum, TranscriptionSettingsRequestModeEnum, VideoSettingsCameraFacingEnum, VideoSettingsRequestCameraFacingEnum, ViewportTracker, VisibilityState, checkIfAudioOutputChangeSupported, combineComparators, conditional, createSoundDetector, defaultSortPreset, descending, deviceIds$, disposeOfMediaStream, dominantSpeaker, getAudioDevices, getAudioOutputDevices, getAudioStream, getClientDetails, getDeviceInfo, getLogger, getOSInfo, getScreenShareStream, getSdkInfo, getVideoDevices, getVideoStream, livestreamOrAudioRoomSortPreset, logLevels, logToConsole, name, noopComparator, paginatedLayoutSortPreset, pinned, publishingAudio, publishingVideo, reactionType, role, screenSharing, setDeviceInfo, setLogLevel, setLogger, setOSInfo, setSdkInfo, speakerLayoutSortPreset, speaking };
|
|
14905
|
+
export { AudioSettingsDefaultDeviceEnum, AudioSettingsRequestDefaultDeviceEnum, browsers as Browsers, Call, CallState, CallType, CallTypes, CallingState, CameraManager, CameraManagerState, CreateDeviceRequestPushProviderEnum, DebounceType, DynascaleManager, ErrorFromResponse, InputMediaDeviceManager, InputMediaDeviceManagerState, LayoutSettingsNameEnum, LayoutSettingsRequestNameEnum, MicrophoneManager, MicrophoneManagerState, OwnCapability, RecordSettingsRequestModeEnum, RecordSettingsRequestQualityEnum, rxUtils as RxUtils, ScreenShareManager, ScreenShareState, events as SfuEvents, models as SfuModels, SpeakerManager, SpeakerState, StreamSfuClient, StreamVideoClient, StreamVideoReadOnlyStateStore, StreamVideoServerClient, StreamVideoWriteableStateStore, TranscriptionSettingsModeEnum, TranscriptionSettingsRequestModeEnum, VideoSettingsCameraFacingEnum, VideoSettingsRequestCameraFacingEnum, ViewportTracker, VisibilityState, checkIfAudioOutputChangeSupported, combineComparators, conditional, createSoundDetector, defaultSortPreset, descending, deviceIds$, disposeOfMediaStream, dominantSpeaker, getAudioDevices, getAudioOutputDevices, getAudioStream, getClientDetails, getDeviceInfo, getLogger, getOSInfo, getScreenShareStream, getSdkInfo, getVideoDevices, getVideoStream, getWebRTCInfo, livestreamOrAudioRoomSortPreset, logLevels, logToConsole, name, noopComparator, paginatedLayoutSortPreset, pinned, publishingAudio, publishingVideo, reactionType, role, screenSharing, setDeviceInfo, setLogLevel, setLogger, setOSInfo, setSdkInfo, setWebRTCInfo, speakerLayoutSortPreset, speaking };
|
|
14657
14906
|
//# sourceMappingURL=index.browser.es.js.map
|