@microsoft/live-share-media 2.0.0-internal.13 → 2.0.0-internal.15

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.
Files changed (86) hide show
  1. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -1
  2. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.js.map +1 -1
  3. package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -1
  4. package/bin/esm/LiveMediaSessionCoordinatorSuspension.js.map +1 -1
  5. package/package.json +7 -7
  6. package/src/LiveMediaSessionCoordinatorSuspension.ts +1 -3
  7. package/bin/IMediaPlayer.d.ts +0 -21
  8. package/bin/IMediaPlayer.d.ts.map +0 -1
  9. package/bin/IMediaPlayer.js +0 -7
  10. package/bin/IMediaPlayer.js.map +0 -1
  11. package/bin/LiveMediaSession.d.ts +0 -90
  12. package/bin/LiveMediaSession.d.ts.map +0 -1
  13. package/bin/LiveMediaSession.js +0 -255
  14. package/bin/LiveMediaSession.js.map +0 -1
  15. package/bin/LiveMediaSessionCoordinator.d.ts +0 -260
  16. package/bin/LiveMediaSessionCoordinator.d.ts.map +0 -1
  17. package/bin/LiveMediaSessionCoordinator.js +0 -472
  18. package/bin/LiveMediaSessionCoordinator.js.map +0 -1
  19. package/bin/LiveMediaSessionCoordinatorSuspension.d.ts +0 -20
  20. package/bin/LiveMediaSessionCoordinatorSuspension.d.ts.map +0 -1
  21. package/bin/LiveMediaSessionCoordinatorSuspension.js +0 -28
  22. package/bin/LiveMediaSessionCoordinatorSuspension.js.map +0 -1
  23. package/bin/MediaPlayerSynchronizer.d.ts +0 -190
  24. package/bin/MediaPlayerSynchronizer.d.ts.map +0 -1
  25. package/bin/MediaPlayerSynchronizer.js +0 -577
  26. package/bin/MediaPlayerSynchronizer.js.map +0 -1
  27. package/bin/MediaSessionActionThrottler.d.ts +0 -12
  28. package/bin/MediaSessionActionThrottler.d.ts.map +0 -1
  29. package/bin/MediaSessionActionThrottler.js +0 -14
  30. package/bin/MediaSessionActionThrottler.js.map +0 -1
  31. package/bin/MediaSessionExtensions.d.ts +0 -177
  32. package/bin/MediaSessionExtensions.d.ts.map +0 -1
  33. package/bin/MediaSessionExtensions.js +0 -26
  34. package/bin/MediaSessionExtensions.js.map +0 -1
  35. package/bin/RepeatedActionThrottler.d.ts +0 -20
  36. package/bin/RepeatedActionThrottler.d.ts.map +0 -1
  37. package/bin/RepeatedActionThrottler.js +0 -63
  38. package/bin/RepeatedActionThrottler.js.map +0 -1
  39. package/bin/VolumeManager.d.ts +0 -84
  40. package/bin/VolumeManager.d.ts.map +0 -1
  41. package/bin/VolumeManager.js +0 -175
  42. package/bin/VolumeManager.js.map +0 -1
  43. package/bin/index.d.ts +0 -14
  44. package/bin/index.d.ts.map +0 -1
  45. package/bin/index.js +0 -30
  46. package/bin/index.js.map +0 -1
  47. package/bin/internals/GroupCoordinatorState.d.ts +0 -108
  48. package/bin/internals/GroupCoordinatorState.d.ts.map +0 -1
  49. package/bin/internals/GroupCoordinatorState.js +0 -519
  50. package/bin/internals/GroupCoordinatorState.js.map +0 -1
  51. package/bin/internals/GroupPlaybackPosition.d.ts +0 -70
  52. package/bin/internals/GroupPlaybackPosition.d.ts.map +0 -1
  53. package/bin/internals/GroupPlaybackPosition.js +0 -170
  54. package/bin/internals/GroupPlaybackPosition.js.map +0 -1
  55. package/bin/internals/GroupPlaybackRate.d.ts +0 -39
  56. package/bin/internals/GroupPlaybackRate.d.ts.map +0 -1
  57. package/bin/internals/GroupPlaybackRate.js +0 -62
  58. package/bin/internals/GroupPlaybackRate.js.map +0 -1
  59. package/bin/internals/GroupPlaybackTrack.d.ts +0 -46
  60. package/bin/internals/GroupPlaybackTrack.d.ts.map +0 -1
  61. package/bin/internals/GroupPlaybackTrack.js +0 -125
  62. package/bin/internals/GroupPlaybackTrack.js.map +0 -1
  63. package/bin/internals/GroupPlaybackTrackData.d.ts +0 -41
  64. package/bin/internals/GroupPlaybackTrackData.d.ts.map +0 -1
  65. package/bin/internals/GroupPlaybackTrackData.js +0 -73
  66. package/bin/internals/GroupPlaybackTrackData.js.map +0 -1
  67. package/bin/internals/GroupTransportState.d.ts +0 -53
  68. package/bin/internals/GroupTransportState.d.ts.map +0 -1
  69. package/bin/internals/GroupTransportState.js +0 -123
  70. package/bin/internals/GroupTransportState.js.map +0 -1
  71. package/bin/internals/consts.d.ts +0 -83
  72. package/bin/internals/consts.d.ts.map +0 -1
  73. package/bin/internals/consts.js +0 -92
  74. package/bin/internals/consts.js.map +0 -1
  75. package/bin/internals/errors.d.ts +0 -17
  76. package/bin/internals/errors.d.ts.map +0 -1
  77. package/bin/internals/errors.js +0 -34
  78. package/bin/internals/errors.js.map +0 -1
  79. package/bin/internals/index.d.ts +0 -13
  80. package/bin/internals/index.d.ts.map +0 -1
  81. package/bin/internals/index.js +0 -29
  82. package/bin/internals/index.js.map +0 -1
  83. package/bin/internals/interfaces.d.ts +0 -10
  84. package/bin/internals/interfaces.d.ts.map +0 -1
  85. package/bin/internals/interfaces.js +0 -3
  86. package/bin/internals/interfaces.js.map +0 -1
@@ -1,108 +0,0 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Licensed under the Microsoft Live Share SDK License.
4
- */
5
- /// <reference types="node" />
6
- import { ILiveEvent, TimeInterval, IRuntimeSignaler, LiveShareRuntime, IEvent } from "@microsoft/live-share";
7
- import EventEmitter from "events";
8
- import { ExtendedMediaMetadata, CoordinationWaitPoint, ExtendedMediaSessionPlaybackState, ExtendedMediaSessionActionDetails } from "../MediaSessionExtensions";
9
- import { GroupPlaybackTrack, IPlaybackTrack } from "./GroupPlaybackTrack";
10
- import { GroupTransportState, ITransportState } from "./GroupTransportState";
11
- import { GroupPlaybackPosition } from "./GroupPlaybackPosition";
12
- import { IMediaPlayerState } from "../LiveMediaSessionCoordinator";
13
- import { GroupPlaybackTrackData, IPlaybackTrackData } from "./GroupPlaybackTrackData";
14
- import { GroupPlaybackRate, IPlaybackRate } from "./GroupPlaybackRate";
15
- /**
16
- * @hidden
17
- */
18
- export interface IPositionUpdateEvent {
19
- track: IPlaybackTrack;
20
- trackData: IPlaybackTrackData;
21
- transport: ITransportState;
22
- playbackRate: IPlaybackRate;
23
- playbackState: ExtendedMediaSessionPlaybackState;
24
- position: number;
25
- waitPoint?: CoordinationWaitPoint;
26
- }
27
- /**
28
- * @hidden
29
- */
30
- export interface ITransportCommandEvent {
31
- track: IPlaybackTrack;
32
- position: number;
33
- }
34
- /**
35
- * @hidden
36
- */
37
- export interface IRateChangeCommandEvent {
38
- playbackRate: number;
39
- }
40
- /**
41
- * @hidden
42
- */
43
- export interface ISetTrackEvent {
44
- metadata: ExtendedMediaMetadata | null;
45
- waitPoints: CoordinationWaitPoint[];
46
- }
47
- /**
48
- * @hidden
49
- */
50
- export interface ISetTrackDataEvent {
51
- data: object | null;
52
- }
53
- /**
54
- * @hidden
55
- */
56
- export interface ITriggerActionEvent extends IEvent {
57
- details: ExtendedMediaSessionActionDetails;
58
- }
59
- /**
60
- * @hidden
61
- */
62
- export declare enum GroupCoordinatorStateEvents {
63
- newwaitpoint = "newwaitpoint",
64
- triggeraction = "triggeraction",
65
- triggeractionignored = "triggeractionignored"
66
- }
67
- /**
68
- * @hidden
69
- */
70
- export declare class GroupCoordinatorState extends EventEmitter {
71
- private readonly _runtime;
72
- private readonly _liveRuntime;
73
- private readonly _logger;
74
- private readonly _maxPlaybackDrift;
75
- private _getMediaPlayerState;
76
- private _playbackTrack;
77
- private _playbackTrackData;
78
- private _transportState;
79
- private _playbackPosition;
80
- private _playbackRate;
81
- private _suspensionCnt;
82
- private _waitPoint?;
83
- private _lastStateChange;
84
- private _lastStateChangeTime;
85
- constructor(runtime: IRuntimeSignaler, liveRuntime: LiveShareRuntime, maxPlaybackDrift: TimeInterval, positionUpdateInterval: TimeInterval, getMediaPlayerState: () => IMediaPlayerState);
86
- get playbackTrack(): GroupPlaybackTrack;
87
- get playbackTrackData(): GroupPlaybackTrackData;
88
- get transportState(): GroupTransportState;
89
- get playbackPosition(): GroupPlaybackPosition;
90
- get playbackRate(): GroupPlaybackRate;
91
- get waitingAt(): CoordinationWaitPoint | undefined;
92
- get isSuspended(): boolean;
93
- get isWaiting(): boolean;
94
- beginSuspension(waitPoint?: CoordinationWaitPoint): void;
95
- endSuspension(syncState: boolean): void;
96
- createPositionUpdateEvent(state: IMediaPlayerState): IPositionUpdateEvent;
97
- handleSetTrack(event: ILiveEvent<ISetTrackEvent>, local: boolean): void;
98
- handleSetTrackData(event: ILiveEvent<ISetTrackDataEvent>, local: boolean): void;
99
- handleRateChangeCommand(event: ILiveEvent<IRateChangeCommandEvent>, local: boolean): void;
100
- handleTransportCommand(event: ILiveEvent<ITransportCommandEvent>, local: boolean): void;
101
- handlePositionUpdate(event: ILiveEvent<IPositionUpdateEvent>, local: boolean): void;
102
- syncLocalMediaSession(): Promise<void>;
103
- private emitSetTrack;
104
- private emitTriggerActionOrIgnored;
105
- private emitTriggerAction;
106
- private emitTriggerActionIgnored;
107
- }
108
- //# sourceMappingURL=GroupCoordinatorState.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GroupCoordinatorState.d.ts","sourceRoot":"","sources":["../../src/internals/GroupCoordinatorState.ts"],"names":[],"mappings":"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"}
@@ -1,519 +0,0 @@
1
- "use strict";
2
- /**
3
- * Copyright (c) Microsoft Corporation. All rights reserved.
4
- * Licensed under the Microsoft Live Share SDK License.
5
- */
6
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
- return new (P || (P = Promise))(function (resolve, reject) {
9
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
- step((generator = generator.apply(thisArg, _arguments || [])).next());
13
- });
14
- };
15
- var __importDefault = (this && this.__importDefault) || function (mod) {
16
- return (mod && mod.__esModule) ? mod : { "default": mod };
17
- };
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.GroupCoordinatorState = exports.GroupCoordinatorStateEvents = void 0;
20
- const live_share_1 = require("@microsoft/live-share");
21
- const events_1 = __importDefault(require("events"));
22
- const GroupPlaybackTrack_1 = require("./GroupPlaybackTrack");
23
- const GroupTransportState_1 = require("./GroupTransportState");
24
- const GroupPlaybackPosition_1 = require("./GroupPlaybackPosition");
25
- const GroupTransportState_2 = require("./GroupTransportState");
26
- const GroupPlaybackTrackData_1 = require("./GroupPlaybackTrackData");
27
- const consts_1 = require("./consts");
28
- const internals_1 = require("@microsoft/live-share/bin/internals");
29
- const GroupPlaybackRate_1 = require("./GroupPlaybackRate");
30
- /**
31
- * @hidden
32
- */
33
- var GroupCoordinatorStateEvents;
34
- (function (GroupCoordinatorStateEvents) {
35
- GroupCoordinatorStateEvents["newwaitpoint"] = "newwaitpoint";
36
- GroupCoordinatorStateEvents["triggeraction"] = "triggeraction";
37
- GroupCoordinatorStateEvents["triggeractionignored"] = "triggeractionignored";
38
- })(GroupCoordinatorStateEvents = exports.GroupCoordinatorStateEvents || (exports.GroupCoordinatorStateEvents = {}));
39
- /**
40
- * @hidden
41
- */
42
- class GroupCoordinatorState extends events_1.default {
43
- constructor(runtime, liveRuntime, maxPlaybackDrift, positionUpdateInterval, getMediaPlayerState) {
44
- super();
45
- // Suspension tracking
46
- this._suspensionCnt = 0;
47
- // "Soft Suspension" tracking
48
- // - Soft suspensions temporarily disconnect the local media session when transitioning between
49
- // paused, playing, and none states. This is to give the local client time to finish any inprogress
50
- // operations like sending a transport command or ending a suspension.
51
- this._lastStateChange = "none";
52
- this._lastStateChangeTime = 0;
53
- this._runtime = runtime;
54
- this._liveRuntime = liveRuntime;
55
- this._logger = new live_share_1.LiveTelemetryLogger(runtime, liveRuntime);
56
- this._maxPlaybackDrift = maxPlaybackDrift;
57
- this._playbackTrack = new GroupPlaybackTrack_1.GroupPlaybackTrack(getMediaPlayerState);
58
- this._playbackTrackData = new GroupPlaybackTrackData_1.GroupPlaybackTrackData(this._playbackTrack);
59
- this._playbackRate = new GroupPlaybackRate_1.GroupPlaybackRate();
60
- this._transportState = new GroupTransportState_1.GroupTransportState(this._playbackTrack, this._playbackRate, getMediaPlayerState, this._liveRuntime);
61
- this._playbackPosition = new GroupPlaybackPosition_1.GroupPlaybackPosition(this._transportState, this._playbackRate, this._runtime, this._liveRuntime, positionUpdateInterval);
62
- this._getMediaPlayerState = getMediaPlayerState;
63
- // Listen track related events
64
- this._playbackTrack.on(GroupPlaybackTrack_1.GroupPlaybackTrackEvents.trackChange, (evt) => {
65
- if (!this.isSuspended) {
66
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackChanged);
67
- this.emitSetTrack(evt.clientId, evt.metadata, evt.source);
68
- }
69
- else {
70
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackChangeDelayed);
71
- }
72
- });
73
- // Listen for track data changes
74
- this._playbackTrackData.on(GroupPlaybackTrackData_1.PlaybackTrackDataEvents.dataChange, (evt) => __awaiter(this, void 0, void 0, function* () {
75
- if (!this.isSuspended && !this.isWaiting) {
76
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackDataChanged);
77
- }
78
- else {
79
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackDataChangeDelayed);
80
- }
81
- const clientId = yield (0, internals_1.waitUntilConnected)(this._runtime);
82
- this.emitTriggerActionOrIgnored({
83
- action: "datachange",
84
- source: evt.source,
85
- data: evt.data,
86
- clientId: evt.clientId,
87
- local: evt.clientId === clientId,
88
- });
89
- }));
90
- this._playbackRate.on(GroupPlaybackRate_1.PlaybackRateEvents.rateChange, (evt) => __awaiter(this, void 0, void 0, function* () {
91
- if (!this.isSuspended && !this.isWaiting) {
92
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.PlaybackRateChanged);
93
- }
94
- else {
95
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator
96
- .PlaybackRateChangedDelayed);
97
- }
98
- const localClientId = yield (0, internals_1.waitUntilConnected)(this._runtime);
99
- const local = evt.clientId === localClientId;
100
- this.emitTriggerActionOrIgnored({
101
- action: "ratechange",
102
- source: evt.source,
103
- clientId: evt.clientId,
104
- local,
105
- playbackRate: evt.playbackRate,
106
- });
107
- }));
108
- // Listen to transport related events
109
- this._transportState.on(GroupTransportState_2.GroupTransportStateEvents.transportStateChange, (evt) => __awaiter(this, void 0, void 0, function* () {
110
- const tag = this.isSuspended || this.isWaiting
111
- ? consts_1.TelemetryEvents.GroupCoordinator
112
- .TransportStateChangeDelayed
113
- : consts_1.TelemetryEvents.GroupCoordinator
114
- .TransportStateChanged;
115
- this._logger.sendTelemetryEvent(tag, null, {
116
- action: evt.action,
117
- seekTime: evt.seekTime,
118
- });
119
- const localClientId = yield (0, internals_1.waitUntilConnected)(this._runtime);
120
- const local = evt.clientId === localClientId;
121
- // Trigger action
122
- switch (evt.action) {
123
- case "play":
124
- this.emitTriggerActionOrIgnored({
125
- action: "play",
126
- source: evt.source,
127
- clientId: evt.clientId,
128
- local,
129
- seekTime: evt.seekTime,
130
- });
131
- break;
132
- case "pause":
133
- this.emitTriggerActionOrIgnored({
134
- action: "pause",
135
- source: evt.source,
136
- clientId: evt.clientId,
137
- local,
138
- seekTime: evt.seekTime,
139
- });
140
- break;
141
- case "seekto":
142
- this.emitTriggerActionOrIgnored({
143
- action: "seekto",
144
- source: evt.source,
145
- clientId: evt.clientId,
146
- local,
147
- seekTime: evt.seekTime,
148
- });
149
- break;
150
- }
151
- }));
152
- }
153
- get playbackTrack() {
154
- return this._playbackTrack;
155
- }
156
- get playbackTrackData() {
157
- return this._playbackTrackData;
158
- }
159
- get transportState() {
160
- return this._transportState;
161
- }
162
- get playbackPosition() {
163
- return this._playbackPosition;
164
- }
165
- get playbackRate() {
166
- return this._playbackRate;
167
- }
168
- get waitingAt() {
169
- return this._waitPoint;
170
- }
171
- get isSuspended() {
172
- return this._suspensionCnt > 0;
173
- }
174
- get isWaiting() {
175
- return !!this._waitPoint;
176
- }
177
- beginSuspension(waitPoint) {
178
- this._suspensionCnt++;
179
- if (waitPoint) {
180
- // Save most recent wait point
181
- this._waitPoint = waitPoint;
182
- // Add to track state if dynamic wait point
183
- this.playbackTrack.addWaitPoint(waitPoint);
184
- }
185
- }
186
- endSuspension(syncState) {
187
- if (this._suspensionCnt == 0) {
188
- throw new Error(`GroupCoordinatorState:endSuspension - cannot end suspension when there are no active suspensions. The expected value is > 0 but the actual count is ${this._suspensionCnt}`);
189
- }
190
- this._suspensionCnt--;
191
- if (this._suspensionCnt == 0 && syncState) {
192
- // Sync media session to group
193
- this.syncLocalMediaSession();
194
- }
195
- }
196
- createPositionUpdateEvent(state) {
197
- const { positionState, playbackState } = state;
198
- if (this.isSuspended) {
199
- // Report suspension state
200
- return {
201
- track: this.playbackTrack.current,
202
- trackData: this.playbackTrackData.current,
203
- transport: this.transportState.current,
204
- playbackRate: this.playbackRate.current,
205
- playbackState: "suspended",
206
- position: (positionState === null || positionState === void 0 ? void 0 : positionState.position) || 0.0,
207
- waitPoint: this._waitPoint,
208
- };
209
- }
210
- else {
211
- // Report current position
212
- return {
213
- track: this.playbackTrack.current,
214
- trackData: this.playbackTrackData.current,
215
- transport: this.transportState.current,
216
- playbackRate: this.playbackRate.current,
217
- playbackState: this._waitPoint ? "waiting" : playbackState,
218
- position: (positionState === null || positionState === void 0 ? void 0 : positionState.position) || 0.0,
219
- waitPoint: this._waitPoint,
220
- };
221
- }
222
- }
223
- handleSetTrack(event, local) {
224
- // Update shared track
225
- // - Will trigger 'trackChange' event to update media session
226
- const updated = this.playbackTrack.updateTrack({
227
- metadata: event.data.metadata,
228
- waitPoints: event.data.waitPoints,
229
- timestamp: event.timestamp,
230
- clientId: event.clientId || "",
231
- }, "user");
232
- if (updated) {
233
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, {
234
- correlationId: live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp),
235
- });
236
- }
237
- }
238
- handleSetTrackData(event, local) {
239
- // Update shared track data
240
- // - Will trigger 'dataChange' event to update media session
241
- const updated = this.playbackTrackData.updateData({
242
- data: event.data.data,
243
- timestamp: event.timestamp,
244
- clientId: event.clientId || "",
245
- }, "user");
246
- if (updated) {
247
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, {
248
- correlationId: live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp),
249
- });
250
- }
251
- }
252
- handleRateChangeCommand(event, local) {
253
- const newState = {
254
- playbackRate: event.data.playbackRate,
255
- clientId: event.clientId,
256
- timestamp: event.timestamp,
257
- };
258
- const updated = this.playbackRate.updatePlaybackRate(newState, "user");
259
- if (updated) {
260
- const correlationId = live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp);
261
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemoteRateChangeReceived, null, {
262
- correlationId: correlationId,
263
- });
264
- }
265
- }
266
- handleTransportCommand(event, local) {
267
- // Ensure change is for current track
268
- // - Will trigger a 'trackChange' event if newer track.
269
- this.playbackTrack.updateTrack(event.data.track, "system");
270
- if (this.playbackTrack.compare(event.data.track.metadata)) {
271
- // Update playback state
272
- let playbackState = this.transportState.playbackState;
273
- switch (event.name) {
274
- case "play":
275
- playbackState = "playing";
276
- break;
277
- case "pause":
278
- playbackState = "paused";
279
- break;
280
- }
281
- // Try to update playback state
282
- const newState = {
283
- playbackState: playbackState,
284
- startPosition: event.data.position,
285
- timestamp: event.timestamp,
286
- clientId: event.clientId || "",
287
- };
288
- const updated = this.transportState.updateState(newState, "user");
289
- if (updated) {
290
- const correlationId = live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp);
291
- switch (event.name) {
292
- case "play":
293
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator
294
- .RemotePlayReceived, null, {
295
- correlationId: correlationId,
296
- });
297
- break;
298
- case "pause":
299
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator
300
- .RemotePauseReceived, null, {
301
- correlationId: correlationId,
302
- });
303
- break;
304
- case "seekTo":
305
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator
306
- .RemoteSeekToReceived, null, {
307
- correlationId: correlationId,
308
- });
309
- break;
310
- }
311
- }
312
- }
313
- }
314
- handlePositionUpdate(event, local) {
315
- // Ensure change is for current track
316
- // - Will trigger a 'trackChange' event if newer track.
317
- this.playbackTrack.updateTrack(event.data.track, "system");
318
- if (this.playbackTrack.compare(event.data.track.metadata)) {
319
- // Ensure we have the latest track data
320
- this.playbackTrackData.updateData(event.data.trackData, "system");
321
- // Update transport state if needed
322
- // - Ignore transport state changes if the client has ended as this will cause the local
323
- // player to start playback even though the video may have ended for everyone.
324
- if (event.data.playbackState != "ended") {
325
- this.transportState.updateState(event.data.transport, "system");
326
- }
327
- // Ensure change is for current transport state
328
- if (this.transportState.compare(event.data.transport)) {
329
- // Update playback position
330
- const position = {
331
- playbackState: event.data.playbackState,
332
- waitPoint: event.data.waitPoint,
333
- position: event.data.position,
334
- timestamp: event.timestamp,
335
- clientId: event.clientId || "",
336
- };
337
- this.playbackPosition.UpdatePlaybackPosition(position);
338
- // Ensure local media session is in sync with group
339
- if (local && !this.isSuspended) {
340
- // Begin a "soft suspension" on select state changes
341
- // - This is needed because the catchup logic can try to sync the client with
342
- // the rest of the group while the local player is trying to to seek to a
343
- // new position.
344
- switch (event.data.playbackState) {
345
- case "none":
346
- case "paused":
347
- case "playing":
348
- if (event.data.playbackState !=
349
- this._lastStateChange) {
350
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator
351
- .BeginSoftSuspension, null, { playbackState: event.data.playbackState });
352
- this._lastStateChange =
353
- event.data.playbackState;
354
- this._lastStateChangeTime =
355
- this._liveRuntime.getTimestamp();
356
- }
357
- break;
358
- }
359
- // Are we waiting?
360
- if (this.isWaiting) {
361
- // Check for end of waiting
362
- if (this.playbackPosition.clientsWaiting == 0) {
363
- this._waitPoint = undefined;
364
- // Start syncing again
365
- this.syncLocalMediaSession();
366
- }
367
- }
368
- else {
369
- // Sync client with group
370
- this.syncLocalMediaSession();
371
- }
372
- }
373
- }
374
- }
375
- }
376
- syncLocalMediaSession() {
377
- return __awaiter(this, void 0, void 0, function* () {
378
- // Skip further syncs if we're waiting or in a "soft suspension".
379
- const softSuspensionDelta = this._liveRuntime.getTimestamp() - this._lastStateChangeTime;
380
- if (!this.isWaiting && softSuspensionDelta >= 1000) {
381
- let { metadata, trackData, positionState, playbackState } = this._getMediaPlayerState();
382
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.CheckingForSyncIssues);
383
- // Check for track change
384
- if (!this.playbackTrack.compare(metadata)) {
385
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackOutOfSync);
386
- this.emitSetTrack(this.playbackTrack.current.clientId, this.playbackTrack.metadata, "system");
387
- return;
388
- }
389
- // Once local playback has ended there's no need to further sync the client. In fact
390
- // doing so could cause the player to loop.
391
- // - The playbackPosition.trackEnded check is to catch late joiners and prevents syncing if everyone
392
- // else has finished the video.
393
- // - Should another user seek or press play after the video has ended that will cause
394
- // a transport action to trigger which will take the player out of the ended state.
395
- if (playbackState != "ended" &&
396
- !this._playbackPosition.trackEnded) {
397
- // Ensure we have a position
398
- let position = positionState === null || positionState === void 0 ? void 0 : positionState.position;
399
- if (position == undefined) {
400
- position = 0.0;
401
- }
402
- // Check for catchup
403
- // - Target can return -1 in cases where there is no position tracking data
404
- const target = this.playbackPosition.targetPosition;
405
- if (target >= 0.0 &&
406
- Math.abs(target - position) >=
407
- Math.max(this._maxPlaybackDrift.seconds, this._maxPlaybackDrift.seconds *
408
- this._playbackRate.rate)) {
409
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.PositionOutOfSync, null, {
410
- current: position,
411
- target: target,
412
- });
413
- this.emitTriggerAction({
414
- action: "catchup",
415
- source: "system",
416
- clientId: yield (0, internals_1.waitUntilConnected)(this._runtime),
417
- local: true,
418
- seekTime: target,
419
- });
420
- }
421
- const localClientId = yield (0, internals_1.waitUntilConnected)(this._runtime);
422
- // Sync transport state
423
- if (this.transportState.playbackState != playbackState) {
424
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TransportOutOfSync, null, {
425
- current: playbackState,
426
- target: this.transportState.playbackState,
427
- });
428
- const local = localClientId === this.transportState.current.clientId;
429
- switch (this.transportState.playbackState) {
430
- case "playing":
431
- this.emitTriggerAction({
432
- action: "play",
433
- source: "system",
434
- clientId: this.transportState.current.clientId,
435
- local,
436
- });
437
- break;
438
- case "paused":
439
- this.emitTriggerAction({
440
- action: "pause",
441
- source: "system",
442
- clientId: this.transportState.current.clientId,
443
- local,
444
- });
445
- break;
446
- }
447
- }
448
- // Sync track data
449
- if (JSON.stringify(this.playbackTrackData.data) !=
450
- JSON.stringify(trackData)) {
451
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackDataOutOfSync);
452
- const local = localClientId ===
453
- this.playbackTrackData.current.clientId;
454
- this.emitTriggerAction({
455
- action: "datachange",
456
- source: "system",
457
- clientId: this.playbackTrackData.current.clientId,
458
- local,
459
- data: this.playbackTrackData.data,
460
- });
461
- }
462
- // Sync playback rate
463
- if (this.playbackRate.rate != (positionState === null || positionState === void 0 ? void 0 : positionState.playbackRate)) {
464
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.PlaybackRateOutOfSync);
465
- const local = localClientId ===
466
- this.playbackTrackData.current.clientId;
467
- this.emitTriggerAction({
468
- action: "ratechange",
469
- source: "system",
470
- clientId: this.playbackTrackData.current.clientId,
471
- local,
472
- playbackRate: this.playbackRate.rate,
473
- });
474
- }
475
- }
476
- }
477
- });
478
- }
479
- emitSetTrack(clientId, metadata, source) {
480
- return __awaiter(this, void 0, void 0, function* () {
481
- // Reset tracking states
482
- this._waitPoint = undefined;
483
- const localClientId = yield (0, internals_1.waitUntilConnected)(this._runtime);
484
- // Trigger settrack action
485
- this.emitTriggerAction({
486
- action: "settrack",
487
- source,
488
- clientId,
489
- local: localClientId === clientId,
490
- metadata,
491
- });
492
- });
493
- }
494
- emitTriggerActionOrIgnored(details) {
495
- if (this.isSuspended || this.isWaiting) {
496
- return this.emitTriggerActionIgnored(details);
497
- }
498
- else {
499
- return this.emitTriggerAction(details);
500
- }
501
- }
502
- emitTriggerAction(details) {
503
- const evt = {
504
- name: GroupCoordinatorStateEvents.triggeraction,
505
- details: details,
506
- };
507
- this.emit(GroupCoordinatorStateEvents.triggeraction, evt);
508
- }
509
- emitTriggerActionIgnored(details) {
510
- details.ignoreReason = "localusersuspended";
511
- const evt = {
512
- name: GroupCoordinatorStateEvents.triggeractionignored,
513
- details: details,
514
- };
515
- this.emit(GroupCoordinatorStateEvents.triggeractionignored, evt);
516
- }
517
- }
518
- exports.GroupCoordinatorState = GroupCoordinatorState;
519
- //# sourceMappingURL=GroupCoordinatorState.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GroupCoordinatorState.js","sourceRoot":"","sources":["../../src/internals/GroupCoordinatorState.ts"],"names":[],"mappings":"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"}