@microsoft/live-share-media 2.0.0-internal.7 → 2.0.0-internal.8

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