@microsoft/live-share-media 0.1.1 → 0.2.1
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/.vscode/settings.json +2 -0
- package/LICENSE +87 -0
- package/README.md +118 -92
- package/bin/EphemeralMediaSession.d.ts +51 -4
- package/bin/EphemeralMediaSession.d.ts.map +1 -1
- package/bin/EphemeralMediaSession.js +91 -44
- package/bin/EphemeralMediaSession.js.map +1 -1
- package/bin/EphemeralMediaSessionCoordinator.d.ts +173 -6
- package/bin/EphemeralMediaSessionCoordinator.d.ts.map +1 -1
- package/bin/EphemeralMediaSessionCoordinator.js +170 -23
- package/bin/EphemeralMediaSessionCoordinator.js.map +1 -1
- package/bin/EphemeralMediaSessionCoordinatorSuspension.d.ts +1 -1
- package/bin/EphemeralMediaSessionCoordinatorSuspension.js +1 -1
- package/bin/IMediaPlayer.d.ts +1 -1
- package/bin/IMediaPlayer.js +1 -1
- package/bin/MediaPlayerSynchronizer.d.ts +95 -6
- package/bin/MediaPlayerSynchronizer.d.ts.map +1 -1
- package/bin/MediaPlayerSynchronizer.js +93 -31
- package/bin/MediaPlayerSynchronizer.js.map +1 -1
- package/bin/MediaSessionActionThrottler.d.ts +1 -1
- package/bin/MediaSessionActionThrottler.js +1 -1
- package/bin/MediaSessionExtensions.d.ts +1 -1
- package/bin/MediaSessionExtensions.js +1 -1
- package/bin/RepeatedActionThrottler.d.ts +1 -1
- package/bin/RepeatedActionThrottler.js +1 -1
- package/bin/VolumeLimiter.d.ts +2 -2
- package/bin/VolumeLimiter.js +2 -2
- package/bin/index.d.ts +1 -1
- package/bin/index.js +1 -1
- package/bin/internals/GroupCoordinatorState.d.ts +22 -1
- package/bin/internals/GroupCoordinatorState.d.ts.map +1 -1
- package/bin/internals/GroupCoordinatorState.js +10 -4
- package/bin/internals/GroupCoordinatorState.js.map +1 -1
- package/bin/internals/GroupPlaybackPosition.d.ts +8 -1
- package/bin/internals/GroupPlaybackPosition.d.ts.map +1 -1
- package/bin/internals/GroupPlaybackPosition.js +5 -2
- package/bin/internals/GroupPlaybackPosition.js.map +1 -1
- package/bin/internals/GroupPlaybackTrack.d.ts +13 -1
- package/bin/internals/GroupPlaybackTrack.d.ts.map +1 -1
- package/bin/internals/GroupPlaybackTrack.js +8 -2
- package/bin/internals/GroupPlaybackTrack.js.map +1 -1
- package/bin/internals/GroupPlaybackTrackData.d.ts +13 -1
- package/bin/internals/GroupPlaybackTrackData.d.ts.map +1 -1
- package/bin/internals/GroupPlaybackTrackData.js +8 -2
- package/bin/internals/GroupPlaybackTrackData.js.map +1 -1
- package/bin/internals/GroupTransportState.d.ts +13 -1
- package/bin/internals/GroupTransportState.d.ts.map +1 -1
- package/bin/internals/GroupTransportState.js +8 -2
- package/bin/internals/GroupTransportState.js.map +1 -1
- package/bin/internals/consts.d.ts +2 -1
- package/bin/internals/consts.d.ts.map +1 -1
- package/bin/internals/consts.js +5 -1
- package/bin/internals/consts.js.map +1 -1
- package/bin/internals/index.d.ts +1 -1
- package/bin/internals/index.js +1 -1
- package/package.json +14 -5
- package/src/EphemeralMediaSession.ts +95 -48
- package/src/EphemeralMediaSessionCoordinator.ts +190 -26
- package/src/EphemeralMediaSessionCoordinatorSuspension.ts +1 -1
- package/src/IMediaPlayer.ts +1 -1
- package/src/MediaPlayerSynchronizer.ts +101 -33
- package/src/MediaSessionActionThrottler.ts +1 -1
- package/src/MediaSessionExtensions.ts +1 -1
- package/src/RepeatedActionThrottler.ts +1 -1
- package/src/VolumeLimiter.ts +2 -2
- package/src/index.ts +1 -1
- package/src/internals/GroupCoordinatorState.ts +39 -18
- package/src/internals/GroupPlaybackPosition.ts +16 -10
- package/src/internals/GroupPlaybackTrack.ts +22 -9
- package/src/internals/GroupPlaybackTrackData.ts +20 -7
- package/src/internals/GroupTransportState.ts +20 -7
- package/src/internals/consts.ts +7 -3
- package/src/internals/index.ts +1 -1
- package/src/test/GroupPlaybackPosition.spec.ts +1 -1
- package/src/test/GroupPlaybackTrack.spec.ts +1 -1
- package/src/test/SharedMediaSession.spec.ts +1 -1
- package/src/test/SharedMediaSessionCoordinator.spec.ts +1 -1
|
@@ -1,27 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the
|
|
3
|
+
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { IEvent } from '@microsoft/live-share';
|
|
7
7
|
import EventEmitter from 'events';
|
|
8
8
|
import { GroupPlaybackTrack, GroupPlaybackTrackEvents } from './GroupPlaybackTrack';
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @hidden
|
|
13
|
+
*/
|
|
14
|
+
export interface IPlaybackTrackData {
|
|
11
15
|
data: object|null;
|
|
12
16
|
timestamp: number;
|
|
13
17
|
clientId: string;
|
|
14
18
|
}
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
/**
|
|
21
|
+
* @hidden
|
|
22
|
+
*/
|
|
23
|
+
export enum PlaybackTrackDataEvents {
|
|
17
24
|
dataChange = 'dataChange'
|
|
18
25
|
}
|
|
19
26
|
|
|
27
|
+
/**
|
|
28
|
+
* @hidden
|
|
29
|
+
*/
|
|
20
30
|
export interface IPlaybackTrackDataChangeEvent extends IEvent {
|
|
21
31
|
data: object|null;
|
|
22
32
|
}
|
|
23
33
|
|
|
24
|
-
|
|
34
|
+
/**
|
|
35
|
+
* @hidden
|
|
36
|
+
*/
|
|
37
|
+
export class GroupPlaybackTrackData extends EventEmitter {
|
|
25
38
|
private _track: GroupPlaybackTrack;
|
|
26
39
|
private _current: IPlaybackTrackData;
|
|
27
40
|
|
|
@@ -50,7 +63,7 @@ export class GroupPlaybackTrackData extends EventEmitter {
|
|
|
50
63
|
}
|
|
51
64
|
|
|
52
65
|
public updateData(event: IPlaybackTrackData): boolean {
|
|
53
|
-
// Ignore state changes that are older
|
|
66
|
+
// Ignore state changes that are older
|
|
54
67
|
const current = this.current;
|
|
55
68
|
if (event.timestamp < current.timestamp) {
|
|
56
69
|
return false;
|
|
@@ -70,8 +83,8 @@ export class GroupPlaybackTrackData extends EventEmitter {
|
|
|
70
83
|
this._current = event;
|
|
71
84
|
|
|
72
85
|
// Notify listeners
|
|
73
|
-
this.emit(PlaybackTrackDataEvents.dataChange, { type: PlaybackTrackDataEvents.dataChange, data: event.data });
|
|
74
|
-
|
|
86
|
+
this.emit(PlaybackTrackDataEvents.dataChange, { type: PlaybackTrackDataEvents.dataChange, data: event.data });
|
|
87
|
+
|
|
75
88
|
return true;
|
|
76
89
|
}
|
|
77
90
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the
|
|
3
|
+
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { IEvent, EphemeralEvent } from '@microsoft/live-share';
|
|
@@ -9,23 +9,36 @@ import { IMediaPlayerState } from '../EphemeralMediaSessionCoordinator';
|
|
|
9
9
|
import { ExtendedMediaSessionPlaybackState, ExtendedMediaSessionAction } from '../MediaSessionExtensions';
|
|
10
10
|
import { GroupPlaybackTrack, GroupPlaybackTrackEvents } from './GroupPlaybackTrack';
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @hidden
|
|
15
|
+
*/
|
|
16
|
+
export interface ITransportState {
|
|
13
17
|
playbackState: ExtendedMediaSessionPlaybackState;
|
|
14
18
|
startPosition: number;
|
|
15
19
|
timestamp: number;
|
|
16
20
|
clientId: string;
|
|
17
21
|
}
|
|
18
22
|
|
|
23
|
+
/**
|
|
24
|
+
* @hidden
|
|
25
|
+
*/
|
|
19
26
|
export enum GroupTransportStateEvents {
|
|
20
27
|
transportStateChange = 'transportStateChange'
|
|
21
28
|
}
|
|
22
29
|
|
|
30
|
+
/**
|
|
31
|
+
* @hidden
|
|
32
|
+
*/
|
|
23
33
|
export interface ITransportStateChangeEvent extends IEvent {
|
|
24
34
|
action: ExtendedMediaSessionAction;
|
|
25
35
|
seekTime?: number;
|
|
26
36
|
}
|
|
27
37
|
|
|
28
|
-
|
|
38
|
+
/**
|
|
39
|
+
* @hidden
|
|
40
|
+
*/
|
|
41
|
+
export class GroupTransportState extends EventEmitter {
|
|
29
42
|
private readonly _getMediaPlayerState: () => IMediaPlayerState;
|
|
30
43
|
private _track: GroupPlaybackTrack;
|
|
31
44
|
private _current: ITransportState;
|
|
@@ -83,7 +96,7 @@ export class GroupTransportState extends EventEmitter {
|
|
|
83
96
|
return false;
|
|
84
97
|
}
|
|
85
98
|
|
|
86
|
-
// Ignore state changes that are older
|
|
99
|
+
// Ignore state changes that are older
|
|
87
100
|
const originalState = this.current;
|
|
88
101
|
if (state.timestamp < originalState.timestamp) {
|
|
89
102
|
return false;
|
|
@@ -100,13 +113,13 @@ export class GroupTransportState extends EventEmitter {
|
|
|
100
113
|
// Trigger transport change
|
|
101
114
|
const playerState = this._getMediaPlayerState().playbackState;
|
|
102
115
|
if (originalState.playbackState == state.playbackState && playerState != 'ended') {
|
|
103
|
-
this.emit(GroupTransportStateEvents.transportStateChange, { type: GroupTransportStateEvents.transportStateChange, action: 'seekto', seekTime: state.startPosition });
|
|
116
|
+
this.emit(GroupTransportStateEvents.transportStateChange, { type: GroupTransportStateEvents.transportStateChange, action: 'seekto', seekTime: state.startPosition });
|
|
104
117
|
} else if (state.playbackState == 'playing') {
|
|
105
118
|
const now = EphemeralEvent.getTimestamp();
|
|
106
119
|
const projectedPosition = state.startPosition + ((now - state.timestamp) / 1000);
|
|
107
|
-
this.emit(GroupTransportStateEvents.transportStateChange, { type: GroupTransportStateEvents.transportStateChange, action: 'play', seekTime: projectedPosition});
|
|
120
|
+
this.emit(GroupTransportStateEvents.transportStateChange, { type: GroupTransportStateEvents.transportStateChange, action: 'play', seekTime: projectedPosition});
|
|
108
121
|
} else {
|
|
109
|
-
this.emit(GroupTransportStateEvents.transportStateChange, { type: GroupTransportStateEvents.transportStateChange, action: 'pause', seekTime: state.startPosition});
|
|
122
|
+
this.emit(GroupTransportStateEvents.transportStateChange, { type: GroupTransportStateEvents.transportStateChange, action: 'pause', seekTime: state.startPosition});
|
|
110
123
|
}
|
|
111
124
|
|
|
112
125
|
return true;
|
package/src/internals/consts.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the
|
|
3
|
+
* Licensed under the Microsoft Live Share SDK License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* @hidden
|
|
8
|
+
* List of telemetry events. Wrap with a call to transmit() if the event should be transmitted to
|
|
9
|
+
* the telemetry service.
|
|
9
10
|
*/
|
|
10
11
|
export const TelemetryEvents = {
|
|
11
12
|
MediaPlayerSynchronizer: {
|
|
@@ -71,6 +72,9 @@ export const TelemetryEvents = {
|
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
|
|
75
|
+
/**
|
|
76
|
+
* @hidden
|
|
77
|
+
*/
|
|
74
78
|
function transmit(eventName: string): string {
|
|
75
79
|
return `${eventName}#transmit`;
|
|
76
80
|
}
|
package/src/internals/index.ts
CHANGED