@microsoft/live-share-media 0.5.1 → 1.0.0-preview.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/.nycrc.json +10 -10
  2. package/.vscode/launch.json +29 -0
  3. package/.vscode/settings.json +2 -0
  4. package/LICENSE +86 -86
  5. package/README.md +138 -137
  6. package/bin/IMediaPlayer.d.ts.map +1 -1
  7. package/bin/{EphemeralMediaSession.d.ts → LiveMediaSession.d.ts} +14 -21
  8. package/bin/LiveMediaSession.d.ts.map +1 -0
  9. package/bin/{EphemeralMediaSession.js → LiveMediaSession.js} +39 -37
  10. package/bin/LiveMediaSession.js.map +1 -0
  11. package/bin/{EphemeralMediaSessionCoordinator.d.ts → LiveMediaSessionCoordinator.d.ts} +5 -5
  12. package/bin/LiveMediaSessionCoordinator.d.ts.map +1 -0
  13. package/bin/{EphemeralMediaSessionCoordinator.js → LiveMediaSessionCoordinator.js} +60 -48
  14. package/bin/LiveMediaSessionCoordinator.js.map +1 -0
  15. package/bin/{EphemeralMediaSessionCoordinatorSuspension.d.ts → LiveMediaSessionCoordinatorSuspension.d.ts} +3 -3
  16. package/bin/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  17. package/bin/{EphemeralMediaSessionCoordinatorSuspension.js → LiveMediaSessionCoordinatorSuspension.js} +4 -4
  18. package/bin/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  19. package/bin/MediaPlayerSynchronizer.d.ts +11 -11
  20. package/bin/MediaPlayerSynchronizer.d.ts.map +1 -1
  21. package/bin/MediaPlayerSynchronizer.js +132 -75
  22. package/bin/MediaPlayerSynchronizer.js.map +1 -1
  23. package/bin/MediaSessionActionThrottler.d.ts +1 -1
  24. package/bin/MediaSessionActionThrottler.d.ts.map +1 -1
  25. package/bin/MediaSessionActionThrottler.js.map +1 -1
  26. package/bin/MediaSessionExtensions.d.ts.map +1 -1
  27. package/bin/RepeatedActionThrottler.d.ts +2 -2
  28. package/bin/RepeatedActionThrottler.d.ts.map +1 -1
  29. package/bin/RepeatedActionThrottler.js +9 -3
  30. package/bin/RepeatedActionThrottler.js.map +1 -1
  31. package/bin/VolumeManager.d.ts +84 -0
  32. package/bin/VolumeManager.d.ts.map +1 -0
  33. package/bin/VolumeManager.js +175 -0
  34. package/bin/VolumeManager.js.map +1 -0
  35. package/bin/index.d.ts +9 -9
  36. package/bin/index.d.ts.map +1 -1
  37. package/bin/index.js +4 -4
  38. package/bin/index.js.map +1 -1
  39. package/bin/internals/GroupCoordinatorState.d.ts +12 -12
  40. package/bin/internals/GroupCoordinatorState.d.ts.map +1 -1
  41. package/bin/internals/GroupCoordinatorState.js +94 -56
  42. package/bin/internals/GroupCoordinatorState.js.map +1 -1
  43. package/bin/internals/GroupPlaybackPosition.d.ts +3 -3
  44. package/bin/internals/GroupPlaybackPosition.d.ts.map +1 -1
  45. package/bin/internals/GroupPlaybackPosition.js +24 -15
  46. package/bin/internals/GroupPlaybackPosition.js.map +1 -1
  47. package/bin/internals/GroupPlaybackTrack.d.ts +4 -4
  48. package/bin/internals/GroupPlaybackTrack.d.ts.map +1 -1
  49. package/bin/internals/GroupPlaybackTrack.js +14 -4
  50. package/bin/internals/GroupPlaybackTrack.js.map +1 -1
  51. package/bin/internals/GroupPlaybackTrackData.d.ts +3 -3
  52. package/bin/internals/GroupPlaybackTrackData.d.ts.map +1 -1
  53. package/bin/internals/GroupPlaybackTrackData.js +8 -4
  54. package/bin/internals/GroupPlaybackTrackData.js.map +1 -1
  55. package/bin/internals/GroupTransportState.d.ts +5 -5
  56. package/bin/internals/GroupTransportState.d.ts.map +1 -1
  57. package/bin/internals/GroupTransportState.js +28 -13
  58. package/bin/internals/GroupTransportState.js.map +1 -1
  59. package/bin/internals/consts.d.ts.map +1 -1
  60. package/bin/internals/consts.js +54 -54
  61. package/bin/internals/consts.js.map +1 -1
  62. package/bin/internals/index.d.ts +6 -6
  63. package/package.json +38 -38
  64. package/src/IMediaPlayer.ts +29 -21
  65. package/src/LiveMediaSession.ts +300 -0
  66. package/src/LiveMediaSessionCoordinator.ts +621 -0
  67. package/src/{EphemeralMediaSessionCoordinatorSuspension.ts → LiveMediaSessionCoordinatorSuspension.ts} +39 -31
  68. package/src/MediaPlayerSynchronizer.ts +627 -450
  69. package/src/MediaSessionActionThrottler.ts +16 -14
  70. package/src/MediaSessionExtensions.ts +52 -42
  71. package/src/RepeatedActionThrottler.ts +74 -56
  72. package/src/VolumeManager.ts +197 -0
  73. package/src/index.ts +14 -15
  74. package/src/internals/GroupCoordinatorState.ts +606 -446
  75. package/src/internals/GroupPlaybackPosition.ts +227 -193
  76. package/src/internals/GroupPlaybackTrack.ts +176 -147
  77. package/src/internals/GroupPlaybackTrackData.ts +98 -90
  78. package/src/internals/GroupTransportState.ts +157 -127
  79. package/src/internals/consts.ts +98 -80
  80. package/src/internals/index.ts +11 -11
  81. package/src/test/GroupPlaybackPosition.spec.ts +600 -340
  82. package/src/test/GroupPlaybackTrack.spec.ts +122 -66
  83. package/src/test/SharedMediaSession.spec.ts +149 -113
  84. package/src/test/SharedMediaSessionCoordinator.spec.ts +271 -231
  85. package/src/test/VolumeManager.spec.ts +219 -0
  86. package/tsconfig.build.json +8 -8
  87. package/tsconfig.json +76 -75
  88. package/bin/EphemeralMediaSession.d.ts.map +0 -1
  89. package/bin/EphemeralMediaSession.js.map +0 -1
  90. package/bin/EphemeralMediaSessionCoordinator.d.ts.map +0 -1
  91. package/bin/EphemeralMediaSessionCoordinator.js.map +0 -1
  92. package/bin/EphemeralMediaSessionCoordinatorSuspension.d.ts.map +0 -1
  93. package/bin/EphemeralMediaSessionCoordinatorSuspension.js.map +0 -1
  94. package/bin/VolumeLimiter.d.ts +0 -70
  95. package/bin/VolumeLimiter.d.ts.map +0 -1
  96. package/bin/VolumeLimiter.js +0 -170
  97. package/bin/VolumeLimiter.js.map +0 -1
  98. package/src/EphemeralMediaSession.ts +0 -248
  99. package/src/EphemeralMediaSessionCoordinator.ts +0 -461
  100. package/src/VolumeLimiter.ts +0 -182
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the Microsoft Live Share SDK License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.VolumeManager = exports.LimitLevelType = void 0;
8
+ const live_share_1 = require("@microsoft/live-share");
9
+ var LimitLevelType;
10
+ (function (LimitLevelType) {
11
+ LimitLevelType[LimitLevelType["fixed"] = 0] = "fixed";
12
+ LimitLevelType[LimitLevelType["percentage"] = 1] = "percentage";
13
+ })(LimitLevelType = exports.LimitLevelType || (exports.LimitLevelType = {}));
14
+ /**
15
+ * Smooth audio level changes when volume is modified, or if volume limiting has started/ended.
16
+ */
17
+ class VolumeManager {
18
+ constructor(player) {
19
+ this._volumeChangeDuration = new live_share_1.TimeInterval(500);
20
+ // defaults to player volume
21
+ this._volume = 0.0;
22
+ this._isLimiting = false;
23
+ this._limitLevel = 0.1;
24
+ this._limitLevelType = LimitLevelType.fixed;
25
+ this._startTime = 0;
26
+ this._startVolume = 0;
27
+ this._running = false;
28
+ this._player = player;
29
+ this._volume = this._player.volume;
30
+ }
31
+ /**
32
+ * The selected volume.
33
+ *
34
+ * @remarks
35
+ * Expressed as a value between 0.0 and 1.0. The default value is 1.0.
36
+ * Can be used for things like volume sliders.
37
+ *
38
+ * Does not return the current volume if limiting is enabled, but the desired volume.
39
+ */
40
+ get volume() {
41
+ return this._volume;
42
+ }
43
+ set volume(value) {
44
+ if (value < 0 || value > 1.0) {
45
+ throw new Error(`VolumeManager: cannot set volume to ${value}. Level must be between 0.0 and 1.0.`);
46
+ }
47
+ this._volume = value;
48
+ this.startAdjusting();
49
+ }
50
+ /**
51
+ * Target level to lower volume to.
52
+ *
53
+ * @remarks
54
+ * Expressed as a value between 0.0 and 1.0. The value is applied based upon the configured
55
+ * `levelType`. The default value is 0.1.
56
+ *
57
+ * For a level type of `LevelType.fixed` the value is the exact level the volume will be
58
+ * lowered to. The default value of 0.1 would cause the volume to be lowered to 0.1.
59
+ *
60
+ * For a level type of `LevelType.percentage` the value is the percentage by which the volume
61
+ * level should be lowered to. The default value of 0.1 would cause the volume to be lowered
62
+ * to 10% of its starting value.
63
+ */
64
+ get limitLevel() {
65
+ return this._limitLevel;
66
+ }
67
+ set limitLevel(value) {
68
+ if (value < 0 || value > 1.0) {
69
+ throw new Error(`VolumeManager: cannot set level to ${value}. Level must be between 0.0 and 1.0.`);
70
+ }
71
+ this._limitLevel = value;
72
+ }
73
+ /**
74
+ * The type of level represented by the `limitLevel` property.
75
+ */
76
+ get limitLevelType() {
77
+ return this._limitLevelType;
78
+ }
79
+ set limitLevelType(value) {
80
+ this._limitLevelType = value;
81
+ }
82
+ /**
83
+ * Amount of time, in seconds, it should take to change the volume up or down to the desired level.
84
+ *
85
+ * @remarks
86
+ * Default `volumeChangeDuration` is 0.5 seconds.
87
+ */
88
+ get volumeChangeDuration() {
89
+ return this._volumeChangeDuration.seconds;
90
+ }
91
+ set volumeChangeDuration(value) {
92
+ this._volumeChangeDuration.seconds = Math.abs(value);
93
+ }
94
+ /**
95
+ * Whether or not volume limiting is currently enabled.
96
+ */
97
+ get isLimiting() {
98
+ return this._isLimiting;
99
+ }
100
+ /**
101
+ * Limits volume based on `limitLevel` and `limitLevelType` properties.
102
+ * @see `limitLevel`
103
+ * @see `limitLevelType`
104
+ */
105
+ startLimiting() {
106
+ this._isLimiting = true;
107
+ this.startAdjusting();
108
+ }
109
+ /**
110
+ * Disables volume limit.
111
+ */
112
+ stopLimiting() {
113
+ this._isLimiting = false;
114
+ this.startAdjusting();
115
+ }
116
+ startAdjusting() {
117
+ const adjustVolume = () => {
118
+ // Schedule next animation frame if volume change not finished
119
+ if (this.millisSinceVolumeChangeStart() <=
120
+ this._volumeChangeDuration.milliseconds) {
121
+ this._player.volume = this.computeInterpolatedVolume();
122
+ this.scheduleAnimationFrame(adjustVolume);
123
+ }
124
+ else {
125
+ this._player.volume = this.computeTargetVolume();
126
+ this._running = false;
127
+ }
128
+ };
129
+ this._startTime = new Date().getTime();
130
+ this._startVolume = this._player.volume;
131
+ if (!this._running) {
132
+ this._running = true;
133
+ this.scheduleAnimationFrame(adjustVolume);
134
+ }
135
+ }
136
+ scheduleAnimationFrame(callback) {
137
+ if (typeof requestAnimationFrame == "function") {
138
+ requestAnimationFrame(callback);
139
+ }
140
+ else {
141
+ setTimeout(callback, 20);
142
+ }
143
+ }
144
+ computeInterpolatedVolume() {
145
+ const volumeChangeMillis = this._volumeChangeDuration.milliseconds;
146
+ const volumeDifference = this.computeTargetVolume() - this._startVolume;
147
+ const adjustmentFromStart = (volumeDifference / volumeChangeMillis) *
148
+ this.millisSinceVolumeChangeStart();
149
+ return this._startVolume + adjustmentFromStart;
150
+ }
151
+ computeTargetVolume() {
152
+ if (this._limitLevelType == LimitLevelType.percentage) {
153
+ if (this._isLimiting) {
154
+ return this._volume * this._limitLevel;
155
+ }
156
+ else {
157
+ return this._volume;
158
+ }
159
+ }
160
+ else {
161
+ if (this._isLimiting && this._volume > this._limitLevel) {
162
+ return this._limitLevel;
163
+ }
164
+ else {
165
+ return this._volume;
166
+ }
167
+ }
168
+ }
169
+ millisSinceVolumeChangeStart() {
170
+ const now = new Date().getTime();
171
+ return now - this._startTime;
172
+ }
173
+ }
174
+ exports.VolumeManager = VolumeManager;
175
+ //# sourceMappingURL=VolumeManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VolumeManager.js","sourceRoot":"","sources":["../src/VolumeManager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,sDAAqD;AAGrD,IAAY,cAGX;AAHD,WAAY,cAAc;IACtB,qDAAK,CAAA;IACL,+DAAU,CAAA;AACd,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB;AAED;;GAEG;AACH,MAAa,aAAa;IAatB,YAAY,MAAoB;QAXf,0BAAqB,GAAG,IAAI,yBAAY,CAAC,GAAG,CAAC,CAAC;QAE/D,4BAA4B;QACpB,YAAO,GAAG,GAAG,CAAC;QACd,gBAAW,GAAG,KAAK,CAAC;QACpB,gBAAW,GAAG,GAAG,CAAC;QAClB,oBAAe,GAAmB,cAAc,CAAC,KAAK,CAAC;QACvD,eAAU,GAAG,CAAC,CAAC;QACf,iBAAY,GAAG,CAAC,CAAC;QACjB,aAAQ,GAAG,KAAK,CAAC;QAGrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;;;;;;;OAQG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,KAAa;QAC3B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE;YAC1B,MAAM,IAAI,KAAK,CACX,uCAAuC,KAAK,sCAAsC,CACrF,CAAC;SACL;QAED,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,CAAC,KAAa;QAC/B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE;YAC1B,MAAM,IAAI,KAAK,CACX,sCAAsC,KAAK,sCAAsC,CACpF,CAAC;SACL;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAW,cAAc,CAAC,KAAqB;QAC3C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACH,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;IAC9C,CAAC;IAED,IAAW,oBAAoB,CAAC,KAAa;QACzC,IAAI,CAAC,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,aAAa;QAChB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACI,YAAY;QACf,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,cAAc;QAClB,MAAM,YAAY,GAAG,GAAG,EAAE;YACtB,8DAA8D;YAC9D,IACI,IAAI,CAAC,4BAA4B,EAAE;gBACnC,IAAI,CAAC,qBAAqB,CAAC,YAAY,EACzC;gBACE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACvD,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;aAC7C;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;aACzB;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;SAC7C;IACL,CAAC;IAEO,sBAAsB,CAAC,QAA8B;QACzD,IAAI,OAAO,qBAAqB,IAAI,UAAU,EAAE;YAC5C,qBAAqB,CAAC,QAAQ,CAAC,CAAC;SACnC;aAAM;YACH,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;SAC5B;IACL,CAAC;IAEO,yBAAyB;QAC7B,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC;QACnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;QACxE,MAAM,mBAAmB,GACrB,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;YACvC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,YAAY,GAAG,mBAAmB,CAAC;IACnD,CAAC;IAEO,mBAAmB;QACvB,IAAI,IAAI,CAAC,eAAe,IAAI,cAAc,CAAC,UAAU,EAAE;YACnD,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;aAC1C;iBAAM;gBACH,OAAO,IAAI,CAAC,OAAO,CAAC;aACvB;SACJ;aAAM;YACH,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;gBACrD,OAAO,IAAI,CAAC,WAAW,CAAC;aAC3B;iBAAM;gBACH,OAAO,IAAI,CAAC,OAAO,CAAC;aACvB;SACJ;IACL,CAAC;IAEO,4BAA4B;QAChC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;IACjC,CAAC;CACJ;AApLD,sCAoLC"}
package/bin/index.d.ts CHANGED
@@ -2,13 +2,13 @@
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
- export * from './EphemeralMediaSession';
6
- export * from './EphemeralMediaSessionCoordinator';
7
- export * from './EphemeralMediaSessionCoordinatorSuspension';
8
- export * from './IMediaPlayer';
9
- export * from './MediaPlayerSynchronizer';
10
- export * from './MediaSessionActionThrottler';
11
- export * from './MediaSessionExtensions';
12
- export * from './RepeatedActionThrottler';
13
- export * from './VolumeLimiter';
5
+ export * from "./LiveMediaSession";
6
+ export * from "./LiveMediaSessionCoordinator";
7
+ export * from "./LiveMediaSessionCoordinatorSuspension";
8
+ export * from "./IMediaPlayer";
9
+ export * from "./MediaPlayerSynchronizer";
10
+ export * from "./MediaSessionActionThrottler";
11
+ export * from "./MediaSessionExtensions";
12
+ export * from "./RepeatedActionThrottler";
13
+ export * from "./VolumeManager";
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC"}
package/bin/index.js CHANGED
@@ -18,13 +18,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- __exportStar(require("./EphemeralMediaSession"), exports);
22
- __exportStar(require("./EphemeralMediaSessionCoordinator"), exports);
23
- __exportStar(require("./EphemeralMediaSessionCoordinatorSuspension"), exports);
21
+ __exportStar(require("./LiveMediaSession"), exports);
22
+ __exportStar(require("./LiveMediaSessionCoordinator"), exports);
23
+ __exportStar(require("./LiveMediaSessionCoordinatorSuspension"), exports);
24
24
  __exportStar(require("./IMediaPlayer"), exports);
25
25
  __exportStar(require("./MediaPlayerSynchronizer"), exports);
26
26
  __exportStar(require("./MediaSessionActionThrottler"), exports);
27
27
  __exportStar(require("./MediaSessionExtensions"), exports);
28
28
  __exportStar(require("./RepeatedActionThrottler"), exports);
29
- __exportStar(require("./VolumeLimiter"), exports);
29
+ __exportStar(require("./VolumeManager"), exports);
30
30
  //# sourceMappingURL=index.js.map
package/bin/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAGH,0DAAwC;AACxC,qEAAmD;AACnD,+EAA6D;AAC7D,iDAA+B;AAC/B,4DAA0C;AAC1C,gEAA8C;AAC9C,2DAAyC;AACzC,4DAA0C;AAC1C,kDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,qDAAmC;AACnC,gEAA8C;AAC9C,0EAAwD;AACxD,iDAA+B;AAC/B,4DAA0C;AAC1C,gEAA8C;AAC9C,2DAAyC;AACzC,4DAA0C;AAC1C,kDAAgC"}
@@ -3,18 +3,18 @@
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
5
  /// <reference types="node" />
6
- import { IEvent, IEphemeralEvent, TimeInterval, IRuntimeSignaler } 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 '../EphemeralMediaSessionCoordinator';
13
- import { GroupPlaybackTrackData, IPlaybackTrackData } from './GroupPlaybackTrackData';
6
+ import { IEvent, ILiveEvent, TimeInterval, IRuntimeSignaler } 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
14
  /**
15
15
  * @hidden
16
16
  */
17
- export interface IPositionUpdateEvent extends IEphemeralEvent {
17
+ export interface IPositionUpdateEvent extends ILiveEvent {
18
18
  track: IPlaybackTrack;
19
19
  trackData: IPlaybackTrackData;
20
20
  transport: ITransportState;
@@ -25,21 +25,21 @@ export interface IPositionUpdateEvent extends IEphemeralEvent {
25
25
  /**
26
26
  * @hidden
27
27
  */
28
- export interface ITransportCommandEvent extends IEphemeralEvent {
28
+ export interface ITransportCommandEvent extends ILiveEvent {
29
29
  track: IPlaybackTrack;
30
30
  position: number;
31
31
  }
32
32
  /**
33
33
  * @hidden
34
34
  */
35
- export interface ISetTrackEvent extends IEphemeralEvent {
35
+ export interface ISetTrackEvent extends ILiveEvent {
36
36
  metadata: ExtendedMediaMetadata | null;
37
37
  waitPoints: CoordinationWaitPoint[];
38
38
  }
39
39
  /**
40
40
  * @hidden
41
41
  */
42
- export interface ISetTrackDataEvent extends IEphemeralEvent {
42
+ export interface ISetTrackDataEvent extends ILiveEvent {
43
43
  data: object | null;
44
44
  }
45
45
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"GroupCoordinatorState.d.ts","sourceRoot":"","sources":["../../src/internals/GroupCoordinatorState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GroupCoordinatorState.d.ts","sourceRoot":"","sources":["../../src/internals/GroupCoordinatorState.ts"],"names":[],"mappings":"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"}
@@ -45,10 +45,10 @@ class GroupCoordinatorState extends events_1.default {
45
45
  // - Soft suspensions temporarily disconnect the local media session when transitioning between
46
46
  // paused, playing, and none states. This is to give the local client time to finish any inprogress
47
47
  // operations like sending a transport command or ending a suspension.
48
- this._lastStateChange = 'none';
48
+ this._lastStateChange = "none";
49
49
  this._lastStateChangeTime = 0;
50
50
  this._runtime = runtime;
51
- this._logger = new live_share_1.EphemeralTelemetryLogger(runtime);
51
+ this._logger = new live_share_1.LiveTelemetryLogger(runtime);
52
52
  this._maxPlaybackDrift = maxPlaybackDrift;
53
53
  this._playbackTrack = new GroupPlaybackTrack_1.GroupPlaybackTrack(getMediaPlayerState);
54
54
  this._playbackTrackData = new GroupPlaybackTrackData_1.GroupPlaybackTrackData(this._playbackTrack);
@@ -56,7 +56,7 @@ class GroupCoordinatorState extends events_1.default {
56
56
  this._playbackPosition = new GroupPlaybackPosition_1.GroupPlaybackPosition(this._transportState, this._runtime, positionUpdateInterval);
57
57
  this._getMediaPlayerState = getMediaPlayerState;
58
58
  // Listen track related events
59
- this._playbackTrack.on(GroupPlaybackTrack_1.GroupPlaybackTrackEvents.trackChange, evt => {
59
+ this._playbackTrack.on(GroupPlaybackTrack_1.GroupPlaybackTrackEvents.trackChange, (evt) => {
60
60
  if (!this.isSuspended) {
61
61
  this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackChanged);
62
62
  this.emitSetTrack(evt.metadata);
@@ -66,39 +66,52 @@ class GroupCoordinatorState extends events_1.default {
66
66
  }
67
67
  });
68
68
  // Listen for track data changes
69
- this._playbackTrackData.on(GroupPlaybackTrackData_1.PlaybackTrackDataEvents.dataChange, evt => {
69
+ this._playbackTrackData.on(GroupPlaybackTrackData_1.PlaybackTrackDataEvents.dataChange, (evt) => {
70
70
  if (!this.isSuspended && !this.isWaiting) {
71
71
  this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackDataChanged);
72
- this.emitTriggerAction({ action: 'datachange', data: evt.data });
72
+ this.emitTriggerAction({
73
+ action: "datachange",
74
+ data: evt.data,
75
+ });
73
76
  }
74
77
  else {
75
78
  this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackDataChangeDelayed);
76
79
  }
77
80
  });
78
81
  // Listen to transport related events
79
- this._transportState.on(GroupTransportState_2.GroupTransportStateEvents.transportStateChange, evt => {
82
+ this._transportState.on(GroupTransportState_2.GroupTransportStateEvents.transportStateChange, (evt) => {
80
83
  if (!this.isSuspended && !this.isWaiting) {
81
84
  this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TransportStateChanged, null, {
82
85
  action: evt.action,
83
- seekTime: evt.seekTime
86
+ seekTime: evt.seekTime,
84
87
  });
85
88
  // Trigger action
86
89
  switch (evt.action) {
87
- case 'play':
88
- this.emitTriggerAction({ action: 'play', seekTime: evt.seekTime });
90
+ case "play":
91
+ this.emitTriggerAction({
92
+ action: "play",
93
+ seekTime: evt.seekTime,
94
+ });
89
95
  break;
90
- case 'pause':
91
- this.emitTriggerAction({ action: 'pause', seekTime: evt.seekTime });
96
+ case "pause":
97
+ this.emitTriggerAction({
98
+ action: "pause",
99
+ seekTime: evt.seekTime,
100
+ });
92
101
  break;
93
- case 'seekto':
94
- this.emitTriggerAction({ action: 'seekto', seekTime: evt.seekTime });
102
+ case "seekto":
103
+ this.emitTriggerAction({
104
+ action: "seekto",
105
+ seekTime: evt.seekTime,
106
+ });
95
107
  break;
96
108
  }
97
109
  }
98
110
  else {
99
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TransportStateChangeDelayed, null, {
111
+ this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator
112
+ .TransportStateChangeDelayed, null, {
100
113
  action: evt.action,
101
- seekTime: evt.seekTime
114
+ seekTime: evt.seekTime,
102
115
  });
103
116
  }
104
117
  });
@@ -151,9 +164,9 @@ class GroupCoordinatorState extends events_1.default {
151
164
  track: this.playbackTrack.current,
152
165
  trackData: this.playbackTrackData.current,
153
166
  transport: this.transportState.current,
154
- playbackState: 'suspended',
167
+ playbackState: "suspended",
155
168
  position: (positionState === null || positionState === void 0 ? void 0 : positionState.position) || 0.0,
156
- waitPoint: this._waitPoint
169
+ waitPoint: this._waitPoint,
157
170
  };
158
171
  }
159
172
  else {
@@ -162,9 +175,9 @@ class GroupCoordinatorState extends events_1.default {
162
175
  track: this.playbackTrack.current,
163
176
  trackData: this.playbackTrackData.current,
164
177
  transport: this.transportState.current,
165
- playbackState: this._waitPoint ? 'waiting' : playbackState,
178
+ playbackState: this._waitPoint ? "waiting" : playbackState,
166
179
  position: (positionState === null || positionState === void 0 ? void 0 : positionState.position) || 0.0,
167
- waitPoint: this._waitPoint
180
+ waitPoint: this._waitPoint,
168
181
  };
169
182
  }
170
183
  }
@@ -175,10 +188,12 @@ class GroupCoordinatorState extends events_1.default {
175
188
  metadata: event.metadata,
176
189
  waitPoints: event.waitPoints,
177
190
  timestamp: event.timestamp,
178
- clientId: event.clientId || ''
191
+ clientId: event.clientId || "",
179
192
  });
180
193
  if (updated) {
181
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, { correlationId: live_share_1.EphemeralTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp) });
194
+ this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, {
195
+ correlationId: live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp),
196
+ });
182
197
  }
183
198
  }
184
199
  handleSetTrackData(event, local) {
@@ -187,10 +202,12 @@ class GroupCoordinatorState extends events_1.default {
187
202
  const updated = this.playbackTrackData.updateData({
188
203
  data: event.data,
189
204
  timestamp: event.timestamp,
190
- clientId: event.clientId || ''
205
+ clientId: event.clientId || "",
191
206
  });
192
207
  if (updated) {
193
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, { correlationId: live_share_1.EphemeralTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp) });
208
+ this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, {
209
+ correlationId: live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp),
210
+ });
194
211
  }
195
212
  }
196
213
  handleTransportCommand(event, local) {
@@ -201,11 +218,11 @@ class GroupCoordinatorState extends events_1.default {
201
218
  // Update playback state
202
219
  let playbackState = this.transportState.playbackState;
203
220
  switch (event.name) {
204
- case 'play':
205
- playbackState = 'playing';
221
+ case "play":
222
+ playbackState = "playing";
206
223
  break;
207
- case 'pause':
208
- playbackState = 'paused';
224
+ case "pause":
225
+ playbackState = "paused";
209
226
  break;
210
227
  }
211
228
  // Try to update playback state
@@ -213,20 +230,29 @@ class GroupCoordinatorState extends events_1.default {
213
230
  playbackState: playbackState,
214
231
  startPosition: event.position,
215
232
  timestamp: event.timestamp,
216
- clientId: event.clientId || ''
233
+ clientId: event.clientId || "",
217
234
  };
218
235
  const updated = this.transportState.updateState(newState);
219
236
  if (updated) {
220
- const correlationId = live_share_1.EphemeralTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp);
237
+ const correlationId = live_share_1.LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp);
221
238
  switch (event.name) {
222
- case 'play':
223
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemotePlayReceived, null, { correlationId: correlationId });
239
+ case "play":
240
+ this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator
241
+ .RemotePlayReceived, null, {
242
+ correlationId: correlationId,
243
+ });
224
244
  break;
225
- case 'pause':
226
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemotePauseReceived, null, { correlationId: correlationId });
245
+ case "pause":
246
+ this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator
247
+ .RemotePauseReceived, null, {
248
+ correlationId: correlationId,
249
+ });
227
250
  break;
228
- case 'seekTo':
229
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator.RemoteSeekToReceived, null, { correlationId: correlationId });
251
+ case "seekTo":
252
+ this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.SessionCoordinator
253
+ .RemoteSeekToReceived, null, {
254
+ correlationId: correlationId,
255
+ });
230
256
  break;
231
257
  }
232
258
  }
@@ -242,7 +268,7 @@ class GroupCoordinatorState extends events_1.default {
242
268
  // Update transport state if needed
243
269
  // - Ignore transport state changes if the client has ended as this will cause the local
244
270
  // player to start playback even though the video may have ended for everyone.
245
- if (event.playbackState != 'ended') {
271
+ if (event.playbackState != "ended") {
246
272
  this.transportState.updateState(event.transport);
247
273
  }
248
274
  // Ensure change is for current transport state
@@ -253,7 +279,7 @@ class GroupCoordinatorState extends events_1.default {
253
279
  waitPoint: event.waitPoint,
254
280
  position: event.position,
255
281
  timestamp: event.timestamp,
256
- clientId: event.clientId || ''
282
+ clientId: event.clientId || "",
257
283
  };
258
284
  this.playbackPosition.UpdatePlaybackPosition(position);
259
285
  // Ensure local media session is in sync with group
@@ -263,13 +289,15 @@ class GroupCoordinatorState extends events_1.default {
263
289
  // the rest of the group while the local player is trying to to seek to a
264
290
  // new position.
265
291
  switch (event.playbackState) {
266
- case 'none':
267
- case 'paused':
268
- case 'playing':
292
+ case "none":
293
+ case "paused":
294
+ case "playing":
269
295
  if (event.playbackState != this._lastStateChange) {
270
- this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.BeginSoftSuspension, null, { playbackState: event.playbackState });
296
+ this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator
297
+ .BeginSoftSuspension, null, { playbackState: event.playbackState });
271
298
  this._lastStateChange = event.playbackState;
272
- this._lastStateChangeTime = live_share_1.EphemeralEvent.getTimestamp();
299
+ this._lastStateChangeTime =
300
+ live_share_1.LiveEvent.getTimestamp();
273
301
  }
274
302
  break;
275
303
  }
@@ -293,7 +321,7 @@ class GroupCoordinatorState extends events_1.default {
293
321
  syncLocalMediaSession() {
294
322
  return __awaiter(this, void 0, void 0, function* () {
295
323
  // Skip further syncs if we're waiting or in a "soft suspension".
296
- const softSuspensionDelta = live_share_1.EphemeralEvent.getTimestamp() - this._lastStateChangeTime;
324
+ const softSuspensionDelta = live_share_1.LiveEvent.getTimestamp() - this._lastStateChangeTime;
297
325
  if (!this.isWaiting && softSuspensionDelta >= 1000) {
298
326
  let { metadata, trackData, positionState, playbackState } = this._getMediaPlayerState();
299
327
  this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.CheckingForSyncIssues);
@@ -309,7 +337,8 @@ class GroupCoordinatorState extends events_1.default {
309
337
  // else has finished the video.
310
338
  // - Should another user seek or press play after the video has ended that will cause
311
339
  // a transport action to trigger which will take the player out of the ended state.
312
- if (playbackState != "ended" && !this._playbackPosition.trackEnded) {
340
+ if (playbackState != "ended" &&
341
+ !this._playbackPosition.trackEnded) {
313
342
  // Ensure we have a position
314
343
  let position = positionState === null || positionState === void 0 ? void 0 : positionState.position;
315
344
  if (position == undefined) {
@@ -318,32 +347,41 @@ class GroupCoordinatorState extends events_1.default {
318
347
  // Check for catchup
319
348
  // - Target can return -1 in cases where there is no position tracking data
320
349
  const target = this.playbackPosition.targetPosition;
321
- if (target >= 0.0 && Math.abs(target - position) >= this._maxPlaybackDrift.seconds) {
350
+ if (target >= 0.0 &&
351
+ Math.abs(target - position) >=
352
+ this._maxPlaybackDrift.seconds) {
322
353
  this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.PositionOutOfSync, null, {
323
354
  current: position,
324
- target: target
355
+ target: target,
356
+ });
357
+ yield this.emitTriggerAction({
358
+ action: "catchup",
359
+ seekTime: target,
325
360
  });
326
- yield this.emitTriggerAction({ action: 'catchup', seekTime: target });
327
361
  }
328
362
  // Sync transport state
329
363
  if (this.transportState.playbackState != playbackState) {
330
364
  this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TransportOutOfSync, null, {
331
365
  current: playbackState,
332
- target: this.transportState.playbackState
366
+ target: this.transportState.playbackState,
333
367
  });
334
368
  switch (this.transportState.playbackState) {
335
- case 'playing':
336
- yield this.emitTriggerAction({ action: 'play' });
369
+ case "playing":
370
+ yield this.emitTriggerAction({ action: "play" });
337
371
  break;
338
- case 'paused':
339
- yield this.emitTriggerAction({ action: 'pause' });
372
+ case "paused":
373
+ yield this.emitTriggerAction({ action: "pause" });
340
374
  break;
341
375
  }
342
376
  }
343
377
  // Sync track data
344
- if (JSON.stringify(this.playbackTrackData.data) != JSON.stringify(trackData)) {
378
+ if (JSON.stringify(this.playbackTrackData.data) !=
379
+ JSON.stringify(trackData)) {
345
380
  this._logger.sendTelemetryEvent(consts_1.TelemetryEvents.GroupCoordinator.TrackDataOutOfSync);
346
- yield this.emitTriggerAction({ action: 'datachange', data: this.playbackTrackData.data });
381
+ yield this.emitTriggerAction({
382
+ action: "datachange",
383
+ data: this.playbackTrackData.data,
384
+ });
347
385
  }
348
386
  }
349
387
  }
@@ -353,12 +391,12 @@ class GroupCoordinatorState extends events_1.default {
353
391
  // Reset tracking states
354
392
  this._waitPoint = undefined;
355
393
  // Trigger settrack action
356
- this.emitTriggerAction({ action: 'settrack', metadata: metadata });
394
+ this.emitTriggerAction({ action: "settrack", metadata: metadata });
357
395
  }
358
396
  emitTriggerAction(details) {
359
397
  const evt = {
360
398
  name: GroupCoordinatorStateEvents.triggeraction,
361
- details: details
399
+ details: details,
362
400
  };
363
401
  this.emit(GroupCoordinatorStateEvents.triggeraction, evt);
364
402
  }