@microsoft/live-share-media 2.0.0-internal.1 → 2.0.0-internal.10
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/README.md +30 -31
- package/bin/cjs/IMediaPlayer.d.ts.map +1 -0
- package/bin/cjs/IMediaPlayer.js.map +1 -0
- package/bin/{LiveMediaSession.d.ts → cjs/LiveMediaSession.d.ts} +16 -9
- package/bin/cjs/LiveMediaSession.d.ts.map +1 -0
- package/bin/{LiveMediaSession.js → cjs/LiveMediaSession.js} +31 -25
- package/bin/cjs/LiveMediaSession.js.map +1 -0
- package/bin/{LiveMediaSessionCoordinator.d.ts → cjs/LiveMediaSessionCoordinator.d.ts} +57 -13
- package/bin/cjs/LiveMediaSessionCoordinator.d.ts.map +1 -0
- package/bin/{LiveMediaSessionCoordinator.js → cjs/LiveMediaSessionCoordinator.js} +152 -64
- package/bin/cjs/LiveMediaSessionCoordinator.js.map +1 -0
- package/bin/{LiveMediaSessionCoordinatorSuspension.d.ts → cjs/LiveMediaSessionCoordinatorSuspension.d.ts} +1 -1
- package/bin/cjs/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
- package/bin/cjs/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
- package/bin/{MediaPlayerSynchronizer.d.ts → cjs/MediaPlayerSynchronizer.d.ts} +22 -8
- package/bin/cjs/MediaPlayerSynchronizer.d.ts.map +1 -0
- package/bin/{MediaPlayerSynchronizer.js → cjs/MediaPlayerSynchronizer.js} +38 -41
- package/bin/cjs/MediaPlayerSynchronizer.js.map +1 -0
- package/bin/{MediaSessionActionThrottler.d.ts → cjs/MediaSessionActionThrottler.d.ts} +1 -1
- package/bin/cjs/MediaSessionActionThrottler.d.ts.map +1 -0
- package/bin/cjs/MediaSessionActionThrottler.js.map +1 -0
- package/bin/cjs/MediaSessionExtensions.d.ts.map +1 -0
- package/bin/cjs/MediaSessionExtensions.js.map +1 -0
- package/bin/{RepeatedActionThrottler.d.ts → cjs/RepeatedActionThrottler.d.ts} +2 -2
- package/bin/cjs/RepeatedActionThrottler.d.ts.map +1 -0
- package/bin/{RepeatedActionThrottler.js → cjs/RepeatedActionThrottler.js} +2 -2
- package/bin/cjs/RepeatedActionThrottler.js.map +1 -0
- package/bin/{VolumeManager.d.ts → cjs/VolumeManager.d.ts} +6 -6
- package/bin/cjs/VolumeManager.d.ts.map +1 -0
- package/bin/{VolumeManager.js → cjs/VolumeManager.js} +5 -5
- package/bin/cjs/VolumeManager.js.map +1 -0
- package/bin/cjs/index.d.ts +14 -0
- package/bin/cjs/index.d.ts.map +1 -0
- package/bin/{internals → cjs}/index.js +9 -8
- package/bin/cjs/index.js.map +1 -0
- package/bin/{internals → cjs/internals}/GroupCoordinatorState.d.ts +14 -12
- package/bin/cjs/internals/GroupCoordinatorState.d.ts.map +1 -0
- package/bin/{internals → cjs/internals}/GroupCoordinatorState.js +46 -49
- package/bin/cjs/internals/GroupCoordinatorState.js.map +1 -0
- package/bin/{internals → cjs/internals}/GroupPlaybackPosition.d.ts +6 -5
- package/bin/cjs/internals/GroupPlaybackPosition.d.ts.map +1 -0
- package/bin/{internals → cjs/internals}/GroupPlaybackPosition.js +3 -3
- package/bin/cjs/internals/GroupPlaybackPosition.js.map +1 -0
- package/bin/{internals → cjs/internals}/GroupPlaybackRate.d.ts +4 -5
- package/bin/cjs/internals/GroupPlaybackRate.d.ts.map +1 -0
- package/bin/{internals → cjs/internals}/GroupPlaybackRate.js +2 -5
- package/bin/cjs/internals/GroupPlaybackRate.js.map +1 -0
- package/bin/{internals → cjs/internals}/GroupPlaybackTrack.d.ts +5 -6
- package/bin/cjs/internals/GroupPlaybackTrack.d.ts.map +1 -0
- package/bin/{internals → cjs/internals}/GroupPlaybackTrack.js +2 -5
- package/bin/cjs/internals/GroupPlaybackTrack.js.map +1 -0
- package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.d.ts +5 -6
- package/bin/cjs/internals/GroupPlaybackTrackData.d.ts.map +1 -0
- package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.js +4 -7
- package/bin/cjs/internals/GroupPlaybackTrackData.js.map +1 -0
- package/bin/{internals → cjs/internals}/GroupTransportState.d.ts +8 -9
- package/bin/cjs/internals/GroupTransportState.d.ts.map +1 -0
- package/bin/{internals → cjs/internals}/GroupTransportState.js +4 -7
- package/bin/cjs/internals/GroupTransportState.js.map +1 -0
- package/bin/cjs/internals/PriorityTimeInterval.d.ts +33 -0
- package/bin/cjs/internals/PriorityTimeInterval.d.ts.map +1 -0
- package/bin/cjs/internals/PriorityTimeInterval.js +45 -0
- package/bin/cjs/internals/PriorityTimeInterval.js.map +1 -0
- package/bin/cjs/internals/consts.d.ts.map +1 -0
- package/bin/cjs/internals/consts.js.map +1 -0
- package/bin/cjs/internals/errors.d.ts.map +1 -0
- package/bin/cjs/internals/errors.js.map +1 -0
- package/bin/cjs/internals/interfaces.d.ts +23 -0
- package/bin/cjs/internals/interfaces.d.ts.map +1 -0
- package/bin/{internals → cjs/internals}/interfaces.js.map +1 -1
- package/bin/cjs/package.json +1 -0
- package/bin/esm/IMediaPlayer.d.ts +21 -0
- package/bin/esm/IMediaPlayer.d.ts.map +1 -0
- package/bin/esm/IMediaPlayer.js +6 -0
- package/bin/esm/IMediaPlayer.js.map +1 -0
- package/bin/esm/LiveMediaSession.d.ts +97 -0
- package/bin/esm/LiveMediaSession.d.ts.map +1 -0
- package/bin/esm/LiveMediaSession.js +257 -0
- package/bin/esm/LiveMediaSession.js.map +1 -0
- package/bin/esm/LiveMediaSessionCoordinator.d.ts +304 -0
- package/bin/esm/LiveMediaSessionCoordinator.d.ts.map +1 -0
- package/bin/esm/LiveMediaSessionCoordinator.js +556 -0
- package/bin/esm/LiveMediaSessionCoordinator.js.map +1 -0
- package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts +20 -0
- package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
- package/bin/esm/LiveMediaSessionCoordinatorSuspension.js +24 -0
- package/bin/esm/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
- package/bin/esm/MediaPlayerSynchronizer.d.ts +204 -0
- package/bin/esm/MediaPlayerSynchronizer.d.ts.map +1 -0
- package/bin/esm/MediaPlayerSynchronizer.js +570 -0
- package/bin/esm/MediaPlayerSynchronizer.js.map +1 -0
- package/bin/esm/MediaSessionActionThrottler.d.ts +12 -0
- package/bin/esm/MediaSessionActionThrottler.d.ts.map +1 -0
- package/bin/esm/MediaSessionActionThrottler.js +10 -0
- package/bin/esm/MediaSessionActionThrottler.js.map +1 -0
- package/bin/esm/MediaSessionExtensions.d.ts +177 -0
- package/bin/esm/MediaSessionExtensions.d.ts.map +1 -0
- package/bin/esm/MediaSessionExtensions.js +23 -0
- package/bin/esm/MediaSessionExtensions.js.map +1 -0
- package/bin/esm/RepeatedActionThrottler.d.ts +20 -0
- package/bin/esm/RepeatedActionThrottler.d.ts.map +1 -0
- package/bin/esm/RepeatedActionThrottler.js +59 -0
- package/bin/esm/RepeatedActionThrottler.js.map +1 -0
- package/bin/esm/VolumeManager.d.ts +84 -0
- package/bin/esm/VolumeManager.d.ts.map +1 -0
- package/bin/esm/VolumeManager.js +171 -0
- package/bin/esm/VolumeManager.js.map +1 -0
- package/bin/esm/index.d.ts +14 -0
- package/bin/esm/index.d.ts.map +1 -0
- package/bin/esm/index.js +14 -0
- package/bin/esm/index.js.map +1 -0
- package/bin/esm/internals/GroupCoordinatorState.d.ts +110 -0
- package/bin/esm/internals/GroupCoordinatorState.d.ts.map +1 -0
- package/bin/esm/internals/GroupCoordinatorState.js +512 -0
- package/bin/esm/internals/GroupCoordinatorState.js.map +1 -0
- package/bin/esm/internals/GroupPlaybackPosition.d.ts +71 -0
- package/bin/esm/internals/GroupPlaybackPosition.d.ts.map +1 -0
- package/bin/esm/internals/GroupPlaybackPosition.js +166 -0
- package/bin/esm/internals/GroupPlaybackPosition.js.map +1 -0
- package/bin/esm/internals/GroupPlaybackRate.d.ts +38 -0
- package/bin/esm/internals/GroupPlaybackRate.d.ts.map +1 -0
- package/bin/esm/internals/GroupPlaybackRate.js +55 -0
- package/bin/esm/internals/GroupPlaybackRate.js.map +1 -0
- package/bin/esm/internals/GroupPlaybackTrack.d.ts +45 -0
- package/bin/esm/internals/GroupPlaybackTrack.d.ts.map +1 -0
- package/bin/esm/internals/GroupPlaybackTrack.js +118 -0
- package/bin/esm/internals/GroupPlaybackTrack.js.map +1 -0
- package/bin/esm/internals/GroupPlaybackTrackData.d.ts +40 -0
- package/bin/esm/internals/GroupPlaybackTrackData.d.ts.map +1 -0
- package/bin/esm/internals/GroupPlaybackTrackData.js +66 -0
- package/bin/esm/internals/GroupPlaybackTrackData.js.map +1 -0
- package/bin/esm/internals/GroupTransportState.d.ts +52 -0
- package/bin/esm/internals/GroupTransportState.d.ts.map +1 -0
- package/bin/esm/internals/GroupTransportState.js +116 -0
- package/bin/esm/internals/GroupTransportState.js.map +1 -0
- package/bin/esm/internals/PriorityTimeInterval.d.ts +33 -0
- package/bin/esm/internals/PriorityTimeInterval.d.ts.map +1 -0
- package/bin/esm/internals/PriorityTimeInterval.js +41 -0
- package/bin/esm/internals/PriorityTimeInterval.js.map +1 -0
- package/bin/esm/internals/consts.d.ts +83 -0
- package/bin/esm/internals/consts.d.ts.map +1 -0
- package/bin/esm/internals/consts.js +89 -0
- package/bin/esm/internals/consts.js.map +1 -0
- package/bin/esm/internals/errors.d.ts +17 -0
- package/bin/esm/internals/errors.d.ts.map +1 -0
- package/bin/esm/internals/errors.js +29 -0
- package/bin/esm/internals/errors.js.map +1 -0
- package/bin/esm/internals/interfaces.d.ts +23 -0
- package/bin/esm/internals/interfaces.d.ts.map +1 -0
- package/bin/esm/internals/interfaces.js +2 -0
- package/bin/esm/internals/interfaces.js.map +1 -0
- package/package.json +31 -12
- package/src/LiveMediaSession.ts +29 -14
- package/src/LiveMediaSessionCoordinator.ts +149 -37
- package/src/LiveMediaSessionCoordinatorSuspension.ts +1 -1
- package/src/MediaPlayerSynchronizer.ts +26 -11
- package/src/MediaSessionActionThrottler.ts +1 -1
- package/src/RepeatedActionThrottler.ts +2 -2
- package/src/VolumeManager.ts +6 -6
- package/src/index.ts +9 -9
- package/src/internals/GroupCoordinatorState.ts +19 -15
- package/src/internals/GroupPlaybackPosition.ts +9 -9
- package/src/internals/GroupPlaybackRate.ts +4 -4
- package/src/internals/GroupPlaybackTrack.ts +5 -5
- package/src/internals/GroupPlaybackTrackData.ts +5 -5
- package/src/internals/GroupTransportState.ts +8 -8
- package/src/internals/PriorityTimeInterval.ts +76 -0
- package/src/internals/interfaces.ts +15 -1
- package/tsconfig.cjs.json +14 -0
- package/tsconfig.json +65 -74
- package/.nycrc.json +0 -11
- package/bin/IMediaPlayer.d.ts.map +0 -1
- package/bin/IMediaPlayer.js.map +0 -1
- package/bin/LiveMediaSession.d.ts.map +0 -1
- package/bin/LiveMediaSession.js.map +0 -1
- package/bin/LiveMediaSessionCoordinator.d.ts.map +0 -1
- package/bin/LiveMediaSessionCoordinator.js.map +0 -1
- package/bin/LiveMediaSessionCoordinatorSuspension.d.ts.map +0 -1
- package/bin/LiveMediaSessionCoordinatorSuspension.js.map +0 -1
- package/bin/MediaPlayerSynchronizer.d.ts.map +0 -1
- package/bin/MediaPlayerSynchronizer.js.map +0 -1
- package/bin/MediaSessionActionThrottler.d.ts.map +0 -1
- package/bin/MediaSessionActionThrottler.js.map +0 -1
- package/bin/MediaSessionExtensions.d.ts.map +0 -1
- package/bin/MediaSessionExtensions.js.map +0 -1
- package/bin/RepeatedActionThrottler.d.ts.map +0 -1
- package/bin/RepeatedActionThrottler.js.map +0 -1
- package/bin/VolumeManager.d.ts.map +0 -1
- package/bin/VolumeManager.js.map +0 -1
- package/bin/index.d.ts +0 -14
- package/bin/index.d.ts.map +0 -1
- package/bin/index.js +0 -30
- package/bin/index.js.map +0 -1
- package/bin/internals/GroupCoordinatorState.d.ts.map +0 -1
- package/bin/internals/GroupCoordinatorState.js.map +0 -1
- package/bin/internals/GroupPlaybackPosition.d.ts.map +0 -1
- package/bin/internals/GroupPlaybackPosition.js.map +0 -1
- package/bin/internals/GroupPlaybackRate.d.ts.map +0 -1
- package/bin/internals/GroupPlaybackRate.js.map +0 -1
- package/bin/internals/GroupPlaybackTrack.d.ts.map +0 -1
- package/bin/internals/GroupPlaybackTrack.js.map +0 -1
- package/bin/internals/GroupPlaybackTrackData.d.ts.map +0 -1
- package/bin/internals/GroupPlaybackTrackData.js.map +0 -1
- package/bin/internals/GroupTransportState.d.ts.map +0 -1
- package/bin/internals/GroupTransportState.js.map +0 -1
- package/bin/internals/consts.d.ts.map +0 -1
- package/bin/internals/consts.js.map +0 -1
- package/bin/internals/errors.d.ts.map +0 -1
- package/bin/internals/errors.js.map +0 -1
- package/bin/internals/index.d.ts +0 -13
- package/bin/internals/index.d.ts.map +0 -1
- package/bin/internals/index.js.map +0 -1
- package/bin/internals/interfaces.d.ts +0 -10
- package/bin/internals/interfaces.d.ts.map +0 -1
- package/src/internals/index.ts +0 -13
- package/tsconfig.build.json +0 -9
- package/typedoc.json +0 -10
- /package/bin/{IMediaPlayer.d.ts → cjs/IMediaPlayer.d.ts} +0 -0
- /package/bin/{IMediaPlayer.js → cjs/IMediaPlayer.js} +0 -0
- /package/bin/{LiveMediaSessionCoordinatorSuspension.js → cjs/LiveMediaSessionCoordinatorSuspension.js} +0 -0
- /package/bin/{MediaSessionActionThrottler.js → cjs/MediaSessionActionThrottler.js} +0 -0
- /package/bin/{MediaSessionExtensions.d.ts → cjs/MediaSessionExtensions.d.ts} +0 -0
- /package/bin/{MediaSessionExtensions.js → cjs/MediaSessionExtensions.js} +0 -0
- /package/bin/{internals → cjs/internals}/consts.d.ts +0 -0
- /package/bin/{internals → cjs/internals}/consts.js +0 -0
- /package/bin/{internals → cjs/internals}/errors.d.ts +0 -0
- /package/bin/{internals → cjs/internals}/errors.js +0 -0
- /package/bin/{internals → cjs/internals}/interfaces.js +0 -0
|
@@ -12,30 +12,47 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
12
12
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
13
13
|
});
|
|
14
14
|
};
|
|
15
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
16
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
17
|
-
};
|
|
18
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
16
|
exports.LiveMediaSessionCoordinator = void 0;
|
|
20
17
|
const live_share_1 = require("@microsoft/live-share");
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
18
|
+
const internal_1 = require("@microsoft/live-share/internal");
|
|
19
|
+
const GroupCoordinatorState_js_1 = require("./internals/GroupCoordinatorState.js");
|
|
20
|
+
const consts_js_1 = require("./internals/consts.js");
|
|
21
|
+
const errors_js_1 = require("./internals/errors.js");
|
|
22
|
+
const PriorityTimeInterval_js_1 = require("./internals/PriorityTimeInterval.js");
|
|
23
|
+
const LiveMediaSessionCoordinatorSuspension_js_1 = require("./LiveMediaSessionCoordinatorSuspension.js");
|
|
24
|
+
const client_utils_1 = require("@fluid-internal/client-utils");
|
|
25
25
|
/**
|
|
26
26
|
* The `LiveMediaSessionCoordinator` tracks the playback & position state of all other
|
|
27
27
|
* clients being synchronized with. It is responsible for keeping the local media player
|
|
28
28
|
* in sync with the group.
|
|
29
29
|
*/
|
|
30
|
-
class LiveMediaSessionCoordinator extends
|
|
30
|
+
class LiveMediaSessionCoordinator extends client_utils_1.TypedEventEmitter {
|
|
31
31
|
/**
|
|
32
32
|
* @hidden
|
|
33
33
|
* Applications shouldn't directly create new coordinator instances.
|
|
34
34
|
*/
|
|
35
35
|
constructor(id, runtime, liveRuntime, getPlayerState) {
|
|
36
36
|
super();
|
|
37
|
-
this._positionUpdateInterval = new
|
|
38
|
-
|
|
37
|
+
this._positionUpdateInterval = new PriorityTimeInterval_js_1.PriorityTimeInterval(2000,
|
|
38
|
+
// Scale by function
|
|
39
|
+
() => {
|
|
40
|
+
const audience = this._liveRuntime.audience;
|
|
41
|
+
if (!audience)
|
|
42
|
+
return 1;
|
|
43
|
+
// As the audience size gets bigger, we relax the update interval, since more variance is expected
|
|
44
|
+
const count = audience.getMembers().size;
|
|
45
|
+
return 1 + count / 5;
|
|
46
|
+
});
|
|
47
|
+
this._maxPlaybackDrift = new PriorityTimeInterval_js_1.PriorityTimeInterval(1500, // Scale by function
|
|
48
|
+
() => {
|
|
49
|
+
const audience = this._liveRuntime.audience;
|
|
50
|
+
if (!audience)
|
|
51
|
+
return 1;
|
|
52
|
+
// As the audience size gets bigger, we relax the playback drift, since more variance is expected
|
|
53
|
+
const count = audience.getMembers().size;
|
|
54
|
+
return 1 + count / 25;
|
|
55
|
+
});
|
|
39
56
|
this.initializeState = live_share_1.LiveDataObjectInitializeState.needed;
|
|
40
57
|
/**
|
|
41
58
|
* Controls whether or not the local client is allowed to instruct the group to play or pause.
|
|
@@ -121,13 +138,27 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
121
138
|
return this._groupState ? this._groupState.isSuspended : false;
|
|
122
139
|
}
|
|
123
140
|
/**
|
|
124
|
-
*
|
|
141
|
+
* Controls whether or not to scale {@link maxPlaybackDrift} by the number of users in the session.
|
|
125
142
|
*
|
|
126
143
|
* @remarks
|
|
127
|
-
*
|
|
128
|
-
*
|
|
144
|
+
* As more clients join a session, it is more likely that some users will fall behind the presenter.
|
|
145
|
+
* It is also less likely that users will notice drift as more clients are added.
|
|
146
|
+
* It is usually helpful to be more lenient as more clients are added so everyone can watch all the content.
|
|
147
|
+
* Default value is true.
|
|
148
|
+
*/
|
|
149
|
+
get shouldScaleMaxPlaybackDrift() {
|
|
150
|
+
return this._maxPlaybackDrift.shouldPrioritize;
|
|
151
|
+
}
|
|
152
|
+
set shouldScaleMaxPlaybackDrift(value) {
|
|
153
|
+
this._maxPlaybackDrift.shouldPrioritize = value;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Max amount of playback drift allowed in seconds.
|
|
157
|
+
* This will scale automatically according to the number of participants in the session when {@link shouldScaleMaxPlaybackDrift} is true.
|
|
129
158
|
*
|
|
130
|
-
*
|
|
159
|
+
* @remarks
|
|
160
|
+
* Should the local clients playback position lag by more than the specified value, the coordinator will trigger a `catchup` action.
|
|
161
|
+
* Default value is `1.5` seconds.
|
|
131
162
|
*/
|
|
132
163
|
get maxPlaybackDrift() {
|
|
133
164
|
return this._maxPlaybackDrift.seconds;
|
|
@@ -136,11 +167,28 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
136
167
|
this._maxPlaybackDrift.seconds = value;
|
|
137
168
|
}
|
|
138
169
|
/**
|
|
139
|
-
*
|
|
140
|
-
*
|
|
170
|
+
* Controls whether or not to compute {@link positionUpdateInterval} based on whether user has initiated a playback command.
|
|
171
|
+
* Default value is true.
|
|
172
|
+
*
|
|
173
|
+
* @remarks
|
|
174
|
+
* When true, users that are simply watching but not controlling playback will report their positions less frequently.
|
|
175
|
+
* When a user has sent a transport command, they will begin sending position updates more frequently.
|
|
176
|
+
* Most Live Share apps have a concept of a primary presenter, and don't allow anyone to pause/play for the group.
|
|
177
|
+
* By ensuring only one/few users broadcast updates frequently, the server load is reduced considerably.
|
|
178
|
+
*/
|
|
179
|
+
get shouldScalePositionUpdateInterval() {
|
|
180
|
+
return this._positionUpdateInterval.shouldPrioritize;
|
|
181
|
+
}
|
|
182
|
+
set shouldScalePositionUpdateInterval(value) {
|
|
183
|
+
this._positionUpdateInterval.shouldPrioritize = value;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Frequency with which position updates are broadcast to the rest of the group in seconds.
|
|
187
|
+
* When {@link shouldScalePositionUpdateInterval} is set to `true`, the value set is the minimum value.
|
|
188
|
+
* The value returned is the actual value used to send updates by the local user, which may be larger than the value set.
|
|
141
189
|
*
|
|
142
190
|
* @remarks
|
|
143
|
-
* Defaults to a value of `2` seconds.
|
|
191
|
+
* Defaults to a minimum value of `2` seconds.
|
|
144
192
|
*/
|
|
145
193
|
get positionUpdateInterval() {
|
|
146
194
|
return this._positionUpdateInterval.seconds;
|
|
@@ -158,19 +206,23 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
158
206
|
* @returns a void promise that resolves once complete, throws if user does not have proper roles
|
|
159
207
|
*/
|
|
160
208
|
play() {
|
|
161
|
-
var _a;
|
|
162
209
|
return __awaiter(this, void 0, void 0, function* () {
|
|
210
|
+
var _a;
|
|
163
211
|
live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:play", "play", this.initializeState);
|
|
164
|
-
|
|
165
|
-
|
|
212
|
+
errors_js_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:play", "play");
|
|
213
|
+
errors_js_1.ActionBlockedError.assert(this.canPlayPause, "LiveMediaSessionCoordinator:play", "play", "canPlayPause");
|
|
166
214
|
// Get projected position
|
|
167
215
|
const position = this.getPlayerPosition();
|
|
168
216
|
// Send transport command
|
|
169
|
-
this._logger.sendTelemetryEvent(
|
|
217
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.PlayCalled, null, { position: position });
|
|
170
218
|
yield this._playEvent.sendEvent({
|
|
171
219
|
track: this._groupState.playbackTrack.current,
|
|
172
220
|
position: position,
|
|
173
221
|
});
|
|
222
|
+
if (this.canSendPositionUpdates) {
|
|
223
|
+
// User has taken initiative to send event, give priority for sending position updates
|
|
224
|
+
this._positionUpdateInterval.hasPriority = true;
|
|
225
|
+
}
|
|
174
226
|
});
|
|
175
227
|
}
|
|
176
228
|
/**
|
|
@@ -183,19 +235,23 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
183
235
|
* @returns a void promise that resolves once complete, throws if user does not have proper roles
|
|
184
236
|
*/
|
|
185
237
|
pause() {
|
|
186
|
-
var _a;
|
|
187
238
|
return __awaiter(this, void 0, void 0, function* () {
|
|
239
|
+
var _a;
|
|
188
240
|
live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:pause", "pause", this.initializeState);
|
|
189
|
-
|
|
190
|
-
|
|
241
|
+
errors_js_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:pause", "pause");
|
|
242
|
+
errors_js_1.ActionBlockedError.assert(this.canPlayPause, "LiveMediaSessionCoordinator:pause", "pause", "canPlayPause");
|
|
191
243
|
// Get projected position
|
|
192
244
|
const position = this.getPlayerPosition();
|
|
193
245
|
// Send transport command
|
|
194
|
-
this._logger.sendTelemetryEvent(
|
|
246
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.PauseCalled, null, { position: position });
|
|
195
247
|
yield this._pauseEvent.sendEvent({
|
|
196
248
|
track: this._groupState.playbackTrack.current,
|
|
197
249
|
position: position,
|
|
198
250
|
});
|
|
251
|
+
if (this.canSendPositionUpdates) {
|
|
252
|
+
// User has taken initiative to send event, give priority for sending position updates
|
|
253
|
+
this._positionUpdateInterval.hasPriority = true;
|
|
254
|
+
}
|
|
199
255
|
});
|
|
200
256
|
}
|
|
201
257
|
/**
|
|
@@ -208,18 +264,22 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
208
264
|
* @returns a void promise that resolves once complete, throws if user does not have proper roles
|
|
209
265
|
*/
|
|
210
266
|
seekTo(time) {
|
|
211
|
-
var _a;
|
|
212
267
|
return __awaiter(this, void 0, void 0, function* () {
|
|
268
|
+
var _a;
|
|
213
269
|
live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:seekTo", "seekTo", this.initializeState);
|
|
214
|
-
|
|
215
|
-
|
|
270
|
+
errors_js_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:seekTo", "seekTo");
|
|
271
|
+
errors_js_1.ActionBlockedError.assert(this.canSeek, "LiveMediaSessionCoordinator:seekTo", "seekTo", "canSeek");
|
|
216
272
|
// Send transport command
|
|
217
|
-
this._logger.sendTelemetryEvent(
|
|
273
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.SeekToCalled, null, { position: time });
|
|
218
274
|
try {
|
|
219
275
|
yield this._seekToEvent.sendEvent({
|
|
220
276
|
track: this._groupState.playbackTrack.current,
|
|
221
277
|
position: time,
|
|
222
278
|
});
|
|
279
|
+
if (this.canSendPositionUpdates) {
|
|
280
|
+
// User has taken initiative to send event, give priority for sending position updates
|
|
281
|
+
this._positionUpdateInterval.hasPriority = true;
|
|
282
|
+
}
|
|
223
283
|
}
|
|
224
284
|
catch (err) {
|
|
225
285
|
yield this._groupState.syncLocalMediaSession();
|
|
@@ -227,12 +287,24 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
227
287
|
}
|
|
228
288
|
});
|
|
229
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* Sets the playback rate for everyone in the session.
|
|
292
|
+
*
|
|
293
|
+
* @param playbackRate the playback rate to set.
|
|
294
|
+
*
|
|
295
|
+
* @throws
|
|
296
|
+
* Throws an exception if the session/coordinator hasn't been initialized or {@link canSetPlaybackRate} is false.
|
|
297
|
+
*/
|
|
230
298
|
setPlaybackRate(playbackRate) {
|
|
231
299
|
return __awaiter(this, void 0, void 0, function* () {
|
|
232
300
|
live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:setPlaybackRate", "setPlaybackRate", this.initializeState);
|
|
233
|
-
|
|
234
|
-
this._logger.sendTelemetryEvent(
|
|
301
|
+
errors_js_1.ActionBlockedError.assert(this.canSetPlaybackRate, "LiveMediaSessionCoordinator:setPlaybackRate", "setPlaybackRate", "canSetPlaybackRate");
|
|
302
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.SetPlaybackRateCalled, null, { playbackRate });
|
|
235
303
|
yield this._rateChangeEvent.sendEvent({ playbackRate });
|
|
304
|
+
if (this.canSendPositionUpdates) {
|
|
305
|
+
// User has taken initiative to send event, give priority for sending position updates
|
|
306
|
+
this._positionUpdateInterval.hasPriority = true;
|
|
307
|
+
}
|
|
236
308
|
});
|
|
237
309
|
}
|
|
238
310
|
/**
|
|
@@ -248,13 +320,17 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
248
320
|
setTrack(metadata, waitPoints) {
|
|
249
321
|
return __awaiter(this, void 0, void 0, function* () {
|
|
250
322
|
live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:setTrack", "setTrack", this.initializeState);
|
|
251
|
-
|
|
323
|
+
errors_js_1.ActionBlockedError.assert(this.canSetTrack, "LiveMediaSessionCoordinator:setTrack", "setTrack", "canSetTrack");
|
|
252
324
|
// Send transport command
|
|
253
|
-
this._logger.sendTelemetryEvent(
|
|
325
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.SetTrackCalled);
|
|
254
326
|
yield this._setTrackEvent.sendEvent({
|
|
255
327
|
metadata: metadata,
|
|
256
328
|
waitPoints: waitPoints || [],
|
|
257
329
|
});
|
|
330
|
+
if (this.canSendPositionUpdates) {
|
|
331
|
+
// User has taken initiative to send event, give priority for sending position updates
|
|
332
|
+
this._positionUpdateInterval.hasPriority = true;
|
|
333
|
+
}
|
|
258
334
|
});
|
|
259
335
|
}
|
|
260
336
|
/**
|
|
@@ -272,12 +348,16 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
272
348
|
setTrackData(data) {
|
|
273
349
|
return __awaiter(this, void 0, void 0, function* () {
|
|
274
350
|
live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:setTrackData", "setTrackData", this.initializeState);
|
|
275
|
-
|
|
351
|
+
errors_js_1.ActionBlockedError.assert(this.canSetTrackData, "LiveMediaSessionCoordinator:setTrackData", "setTrackData", "canSetTrackData");
|
|
276
352
|
// Send transport command
|
|
277
|
-
this._logger.sendTelemetryEvent(
|
|
353
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.SetTrackDataCalled);
|
|
278
354
|
yield this._setTrackDataEvent.sendEvent({
|
|
279
355
|
data: data,
|
|
280
356
|
});
|
|
357
|
+
if (this.canSendPositionUpdates) {
|
|
358
|
+
// User has taken initiative to send event, give priority for sending position updates
|
|
359
|
+
this._positionUpdateInterval.hasPriority = true;
|
|
360
|
+
}
|
|
281
361
|
});
|
|
282
362
|
}
|
|
283
363
|
/**
|
|
@@ -307,10 +387,10 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
307
387
|
beginSuspension(waitPoint) {
|
|
308
388
|
var _a;
|
|
309
389
|
live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:beginSuspension", "beginSuspension", this.initializeState);
|
|
310
|
-
|
|
390
|
+
errors_js_1.TrackMetadataNotSetError.assert(!!((_a = this._groupState) === null || _a === void 0 ? void 0 : _a.playbackTrack.current.metadata), "LiveMediaSessionCoordinator:beginSuspension", "beginSuspension");
|
|
311
391
|
// Tell group state that suspension is started
|
|
312
392
|
if (waitPoint) {
|
|
313
|
-
this._logger.sendTelemetryEvent(
|
|
393
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.BeginSuspensionAndWait, null, {
|
|
314
394
|
position: waitPoint.position,
|
|
315
395
|
maxClients: waitPoint.maxClients,
|
|
316
396
|
});
|
|
@@ -318,20 +398,20 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
318
398
|
this._groupState.beginSuspension(waitPoint);
|
|
319
399
|
}
|
|
320
400
|
else {
|
|
321
|
-
this._logger.sendTelemetryEvent(
|
|
401
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.BeginSuspension);
|
|
322
402
|
this._groupState.beginSuspension();
|
|
323
403
|
}
|
|
324
404
|
// Return new suspension object
|
|
325
|
-
return new
|
|
405
|
+
return new LiveMediaSessionCoordinatorSuspension_js_1.LiveMediaSessionCoordinatorSuspension(waitPoint, (time) => {
|
|
326
406
|
var _a, _b;
|
|
327
407
|
if (waitPoint) {
|
|
328
|
-
this._logger.sendTelemetryEvent(
|
|
408
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.EndSuspensionAndWait, null, {
|
|
329
409
|
position: waitPoint.position,
|
|
330
410
|
maxClients: waitPoint.maxClients,
|
|
331
411
|
});
|
|
332
412
|
}
|
|
333
413
|
else {
|
|
334
|
-
this._logger.sendTelemetryEvent(
|
|
414
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.EndSuspension);
|
|
335
415
|
}
|
|
336
416
|
this._groupState.endSuspension(time == undefined);
|
|
337
417
|
if (time != undefined &&
|
|
@@ -354,8 +434,8 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
354
434
|
* Called by MediaSession to start coordinator.
|
|
355
435
|
*/
|
|
356
436
|
initialize(acceptTransportChangesFrom) {
|
|
357
|
-
var _a;
|
|
358
437
|
return __awaiter(this, void 0, void 0, function* () {
|
|
438
|
+
var _a;
|
|
359
439
|
live_share_1.LiveDataObjectInitializeNotNeededError.assert("LiveMediaSessionCoordinator:initialize", this.initializeState);
|
|
360
440
|
this.initializeState = live_share_1.LiveDataObjectInitializeState.pending;
|
|
361
441
|
try {
|
|
@@ -369,11 +449,16 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
369
449
|
this.initializeState = live_share_1.LiveDataObjectInitializeState.succeeded;
|
|
370
450
|
try {
|
|
371
451
|
// start needs to happen after setting initializedState to "succeeded"
|
|
372
|
-
yield ((_a = this._synchronizer) === null || _a === void 0 ? void 0 : _a.start(
|
|
452
|
+
yield ((_a = this._synchronizer) === null || _a === void 0 ? void 0 : _a.start({
|
|
453
|
+
initialState: undefined,
|
|
454
|
+
updateState: (evt, sender, local) => __awaiter(this, void 0, void 0, function* () { return false; }),
|
|
455
|
+
getLocalUserCanSend: (connecting) => __awaiter(this, void 0, void 0, function* () { return true; }),
|
|
456
|
+
enableBackgroundUpdates: false,
|
|
457
|
+
}));
|
|
373
458
|
}
|
|
374
459
|
catch (error) {
|
|
375
460
|
// not a fatal error for LiveMediaSession, only used for "connect" event to send new clients position updates.
|
|
376
|
-
this._logger.sendErrorEvent(
|
|
461
|
+
this._logger.sendErrorEvent(consts_js_1.TelemetryEvents.SessionCoordinator
|
|
377
462
|
.LiveObjectSynchronizerStartError, error);
|
|
378
463
|
}
|
|
379
464
|
});
|
|
@@ -390,14 +475,15 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
390
475
|
* @hidden
|
|
391
476
|
* Called by MediaSession to trigger the sending of a position update.
|
|
392
477
|
*/
|
|
393
|
-
sendPositionUpdate(state) {
|
|
478
|
+
sendPositionUpdate(state, targetClientId) {
|
|
394
479
|
var _a, _b;
|
|
395
480
|
live_share_1.LiveDataObjectNotInitializedError.assert("LiveMediaSessionCoordinator:sendPositionUpdate", "sendPositionUpdate", this.initializeState);
|
|
396
481
|
if (this.canSendPositionUpdates) {
|
|
397
482
|
// Send position update event
|
|
398
483
|
const evt = this._groupState.createPositionUpdateEvent(state);
|
|
399
|
-
(_a = this._positionUpdateEvent) === null || _a === void 0 ? void 0 : _a.sendEvent(evt).catch((err) => {
|
|
400
|
-
this._logger.sendErrorEvent(
|
|
484
|
+
(_a = this._positionUpdateEvent) === null || _a === void 0 ? void 0 : _a.sendEvent(evt, targetClientId).catch((err) => {
|
|
485
|
+
this._logger.sendErrorEvent(consts_js_1.TelemetryEvents.SessionCoordinator
|
|
486
|
+
.PositionUpdateEventError, err);
|
|
401
487
|
});
|
|
402
488
|
}
|
|
403
489
|
else if (this.isSuspended) {
|
|
@@ -405,7 +491,7 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
405
491
|
// position update for clients that have canSendPositionUpdates==false, but are suspending
|
|
406
492
|
const evt = this._groupState.createPositionUpdateEvent(state);
|
|
407
493
|
(_b = this._positionUpdateEvent) === null || _b === void 0 ? void 0 : _b.sendLocalEvent(evt).catch((err) => {
|
|
408
|
-
this._logger.sendErrorEvent(
|
|
494
|
+
this._logger.sendErrorEvent(consts_js_1.TelemetryEvents.SessionCoordinator.PositionUpdateEventError, err);
|
|
409
495
|
});
|
|
410
496
|
}
|
|
411
497
|
else {
|
|
@@ -416,37 +502,39 @@ class LiveMediaSessionCoordinator extends events_1.default {
|
|
|
416
502
|
createChildren(acceptTransportChangesFrom) {
|
|
417
503
|
return __awaiter(this, void 0, void 0, function* () {
|
|
418
504
|
// Create event scopes
|
|
419
|
-
const scope = new
|
|
420
|
-
const unrestrictedScope = new
|
|
505
|
+
const scope = new internal_1.LiveEventScope(this._runtime, this._liveRuntime, acceptTransportChangesFrom);
|
|
506
|
+
const unrestrictedScope = new internal_1.LiveEventScope(this._runtime, this._liveRuntime);
|
|
421
507
|
// Initialize internal coordinator state
|
|
422
|
-
this._groupState = new
|
|
423
|
-
this._groupState.on(
|
|
424
|
-
this._groupState.on(
|
|
508
|
+
this._groupState = new GroupCoordinatorState_js_1.GroupCoordinatorState(this._runtime, this._liveRuntime, this._maxPlaybackDrift, this._positionUpdateInterval, this._getPlayerState);
|
|
509
|
+
this._groupState.on(GroupCoordinatorState_js_1.GroupCoordinatorStateEvents.triggeraction, (evt) => this.emit(evt.name, evt));
|
|
510
|
+
this._groupState.on(GroupCoordinatorState_js_1.GroupCoordinatorStateEvents.triggeractionignored, (evt) => this.emit(evt.name, evt));
|
|
425
511
|
// Listen for track changes
|
|
426
|
-
this._setTrackEvent = new
|
|
427
|
-
this._setTrackDataEvent = new
|
|
512
|
+
this._setTrackEvent = new internal_1.LiveEventTarget(scope, "setTrack", (event, local) => this._groupState.handleSetTrack(event, local));
|
|
513
|
+
this._setTrackDataEvent = new internal_1.LiveEventTarget(scope, "setTrackData", (event, local) => this._groupState.handleSetTrackData(event, local));
|
|
428
514
|
// Listen for transport commands
|
|
429
|
-
this._playEvent = new
|
|
430
|
-
this._pauseEvent = new
|
|
431
|
-
this._seekToEvent = new
|
|
432
|
-
this._rateChangeEvent = new
|
|
515
|
+
this._playEvent = new internal_1.LiveEventTarget(scope, "play", (event, local) => this._groupState.handleTransportCommand(event, local));
|
|
516
|
+
this._pauseEvent = new internal_1.LiveEventTarget(scope, "pause", (event, local) => this._groupState.handleTransportCommand(event, local));
|
|
517
|
+
this._seekToEvent = new internal_1.LiveEventTarget(scope, "seekTo", (event, local) => this._groupState.handleTransportCommand(event, local));
|
|
518
|
+
this._rateChangeEvent = new internal_1.LiveEventTarget(scope, "rateChange", (event, local) => {
|
|
433
519
|
this._groupState.handleRateChangeCommand(event, local);
|
|
434
520
|
});
|
|
435
521
|
// Listen for position updates
|
|
436
|
-
this._positionUpdateEvent = new
|
|
437
|
-
this._synchronizer = new
|
|
522
|
+
this._positionUpdateEvent = new internal_1.LiveEventTarget(unrestrictedScope, "positionUpdate", (event, local) => this._groupState.handlePositionUpdate(event, local));
|
|
523
|
+
this._synchronizer = new internal_1.LiveObjectSynchronizer(this._id, this._runtime, this._liveRuntime);
|
|
438
524
|
this._synchronizer.onJoinedListener = (clientId, timestamp) => {
|
|
439
|
-
this._logger.sendTelemetryEvent(
|
|
525
|
+
this._logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.SessionCoordinator.RemoteConnectReceived, null, {
|
|
440
526
|
correlationId: live_share_1.LiveTelemetryLogger.formatCorrelationId(clientId, timestamp),
|
|
441
527
|
});
|
|
442
528
|
// Immediately send a position update
|
|
443
529
|
try {
|
|
444
530
|
const state = this._getPlayerState();
|
|
445
|
-
|
|
531
|
+
// Send only to the user that joined the session using the targetClientId prop.
|
|
532
|
+
// This ensures that only the user that connected receives this one-time position update, minimizing costs.
|
|
533
|
+
this.sendPositionUpdate(state, clientId);
|
|
446
534
|
}
|
|
447
535
|
catch (err) {
|
|
448
536
|
// if player is not setup yet, local client might have also just joined and can't send its position.
|
|
449
|
-
const playerNotSetup = (0,
|
|
537
|
+
const playerNotSetup = (0, internal_1.isErrorLike)(err) &&
|
|
450
538
|
err.message.includes("LiveMediaSession:getCurrentPlayerState");
|
|
451
539
|
if (!playerNotSetup) {
|
|
452
540
|
throw err;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveMediaSessionCoordinator.js","sourceRoot":"","sources":["../../src/LiveMediaSessionCoordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
|
-
import { MediaSessionCoordinatorSuspension, CoordinationWaitPoint } from "./MediaSessionExtensions";
|
|
5
|
+
import { MediaSessionCoordinatorSuspension, CoordinationWaitPoint } from "./MediaSessionExtensions.js";
|
|
6
6
|
export declare class LiveMediaSessionCoordinatorSuspension implements MediaSessionCoordinatorSuspension {
|
|
7
7
|
private _waitPoint?;
|
|
8
8
|
private _onEnd;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveMediaSessionCoordinatorSuspension.d.ts","sourceRoot":"","sources":["../../src/LiveMediaSessionCoordinatorSuspension.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,iCAAiC,EACjC,qBAAqB,EACxB,MAAM,6BAA6B,CAAC;AAErC,qBAAa,qCACT,YAAW,iCAAiC;IAE5C,OAAO,CAAC,UAAU,CAAC,CAAwB;IAC3C,OAAO,CAAC,MAAM,CAA4B;gBAGtC,SAAS,EAAE,qBAAqB,GAAG,SAAS,EAC5C,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI;IAMpC;;OAEG;IACH,IAAW,SAAS,IAAI,qBAAqB,GAAG,SAAS,CAExD;IAED;;;OAGG;IACI,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAGpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveMediaSessionCoordinatorSuspension.js","sourceRoot":"","sources":["../../src/LiveMediaSessionCoordinatorSuspension.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAOH,MAAa,qCAAqC;IAM9C,YACI,SAA4C,EAC5C,KAAgC;QAEhC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,GAAG,CAAC,MAAe;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;CACJ;AA5BD,sFA4BC"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
/**
|
|
3
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
3
|
* Licensed under the Microsoft Live Share SDK License.
|
|
5
4
|
*/
|
|
6
|
-
import { ILiveEvent
|
|
7
|
-
import
|
|
8
|
-
import { ExtendedMediaMetadata, CoordinationWaitPoint, ExtendedMediaSessionActionDetails } from "./MediaSessionExtensions";
|
|
9
|
-
import { VolumeManager } from "./VolumeManager";
|
|
10
|
-
import { LiveMediaSession } from "./LiveMediaSession";
|
|
11
|
-
import { IMediaPlayer } from "./IMediaPlayer";
|
|
5
|
+
import { ILiveEvent } from "@microsoft/live-share";
|
|
6
|
+
import { IRuntimeSignaler } from "@microsoft/live-share/internal";
|
|
7
|
+
import { ExtendedMediaMetadata, CoordinationWaitPoint, ExtendedMediaSessionActionDetails } from "./MediaSessionExtensions.js";
|
|
8
|
+
import { VolumeManager } from "./VolumeManager.js";
|
|
9
|
+
import { LiveMediaSession } from "./LiveMediaSession.js";
|
|
10
|
+
import { IMediaPlayer } from "./IMediaPlayer.js";
|
|
11
|
+
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
12
|
+
import { IEvent } from "@fluidframework/core-interfaces";
|
|
12
13
|
/**
|
|
13
14
|
* Event data returned by `MediaPlayerSynchronizer` object.
|
|
14
15
|
*/
|
|
@@ -33,6 +34,19 @@ export declare enum MediaPlayerSynchronizerEvents {
|
|
|
33
34
|
groupaction = "groupaction",
|
|
34
35
|
useraction = "useraction"
|
|
35
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* @hidden
|
|
39
|
+
* Emitted events from the `MediaPlayerSynchronizer` class.
|
|
40
|
+
*/
|
|
41
|
+
export interface IMediaPlayerSynchronizerEvents extends IEvent {
|
|
42
|
+
/**
|
|
43
|
+
* Event listener for events emitted
|
|
44
|
+
* @param event update
|
|
45
|
+
* @param listener listener function
|
|
46
|
+
* @param listener.event the event instance
|
|
47
|
+
*/
|
|
48
|
+
(event: string, listener: (event: any) => void): void;
|
|
49
|
+
}
|
|
36
50
|
/**
|
|
37
51
|
* Synchronizes a local HTML Media Element with a group of remote HTML Media Elements.
|
|
38
52
|
*
|
|
@@ -42,7 +56,7 @@ export declare enum MediaPlayerSynchronizerEvents {
|
|
|
42
56
|
* to the local player. When the group session is joined the commands will be broadcast to the
|
|
43
57
|
* group in addition to being applied to the local player.
|
|
44
58
|
*/
|
|
45
|
-
export declare class MediaPlayerSynchronizer extends
|
|
59
|
+
export declare class MediaPlayerSynchronizer extends TypedEventEmitter<IMediaPlayerSynchronizerEvents> {
|
|
46
60
|
private static SESSION_ACTIONS;
|
|
47
61
|
private static PLAYER_EVENTS;
|
|
48
62
|
private _logger;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaPlayerSynchronizer.d.ts","sourceRoot":"","sources":["../../src/MediaPlayerSynchronizer.ts"],"names":[],"mappings":"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"}
|