@microsoft/live-share-media 1.3.1 → 1.4.0

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 (65) hide show
  1. package/bin/LiveMediaSession.d.ts.map +1 -1
  2. package/bin/LiveMediaSession.js +8 -0
  3. package/bin/LiveMediaSession.js.map +1 -1
  4. package/bin/LiveMediaSessionCoordinator.d.ts +15 -0
  5. package/bin/LiveMediaSessionCoordinator.d.ts.map +1 -1
  6. package/bin/LiveMediaSessionCoordinator.js +25 -0
  7. package/bin/LiveMediaSessionCoordinator.js.map +1 -1
  8. package/bin/MediaPlayerSynchronizer.d.ts +6 -4
  9. package/bin/MediaPlayerSynchronizer.d.ts.map +1 -1
  10. package/bin/MediaPlayerSynchronizer.js +41 -12
  11. package/bin/MediaPlayerSynchronizer.js.map +1 -1
  12. package/bin/MediaSessionExtensions.d.ts +17 -4
  13. package/bin/MediaSessionExtensions.d.ts.map +1 -1
  14. package/bin/MediaSessionExtensions.js +4 -0
  15. package/bin/MediaSessionExtensions.js.map +1 -1
  16. package/bin/internals/GroupCoordinatorState.d.ts +15 -1
  17. package/bin/internals/GroupCoordinatorState.d.ts.map +1 -1
  18. package/bin/internals/GroupCoordinatorState.js +123 -57
  19. package/bin/internals/GroupCoordinatorState.js.map +1 -1
  20. package/bin/internals/GroupPlaybackPosition.d.ts +3 -1
  21. package/bin/internals/GroupPlaybackPosition.d.ts.map +1 -1
  22. package/bin/internals/GroupPlaybackPosition.js +7 -3
  23. package/bin/internals/GroupPlaybackPosition.js.map +1 -1
  24. package/bin/internals/GroupPlaybackRate.d.ts +39 -0
  25. package/bin/internals/GroupPlaybackRate.d.ts.map +1 -0
  26. package/bin/internals/GroupPlaybackRate.js +62 -0
  27. package/bin/internals/GroupPlaybackRate.js.map +1 -0
  28. package/bin/internals/GroupPlaybackTrack.d.ts +2 -2
  29. package/bin/internals/GroupPlaybackTrack.d.ts.map +1 -1
  30. package/bin/internals/GroupPlaybackTrack.js +3 -2
  31. package/bin/internals/GroupPlaybackTrack.js.map +1 -1
  32. package/bin/internals/GroupPlaybackTrackData.d.ts +3 -3
  33. package/bin/internals/GroupPlaybackTrackData.d.ts.map +1 -1
  34. package/bin/internals/GroupPlaybackTrackData.js +12 -11
  35. package/bin/internals/GroupPlaybackTrackData.js.map +1 -1
  36. package/bin/internals/GroupTransportState.d.ts +6 -3
  37. package/bin/internals/GroupTransportState.d.ts.map +1 -1
  38. package/bin/internals/GroupTransportState.js +16 -11
  39. package/bin/internals/GroupTransportState.js.map +1 -1
  40. package/bin/internals/consts.d.ts +8 -1
  41. package/bin/internals/consts.d.ts.map +1 -1
  42. package/bin/internals/consts.js +8 -1
  43. package/bin/internals/consts.js.map +1 -1
  44. package/bin/internals/index.d.ts +1 -0
  45. package/bin/internals/index.d.ts.map +1 -1
  46. package/bin/internals/index.js +1 -0
  47. package/bin/internals/index.js.map +1 -1
  48. package/bin/internals/interfaces.d.ts +10 -0
  49. package/bin/internals/interfaces.d.ts.map +1 -0
  50. package/bin/internals/interfaces.js +3 -0
  51. package/bin/internals/interfaces.js.map +1 -0
  52. package/package.json +3 -3
  53. package/src/LiveMediaSession.ts +12 -0
  54. package/src/LiveMediaSessionCoordinator.ts +49 -0
  55. package/src/MediaPlayerSynchronizer.ts +55 -15
  56. package/src/MediaSessionExtensions.ts +18 -2
  57. package/src/internals/GroupCoordinatorState.ts +196 -79
  58. package/src/internals/GroupPlaybackPosition.ts +9 -2
  59. package/src/internals/GroupPlaybackRate.ts +90 -0
  60. package/src/internals/GroupPlaybackTrack.ts +5 -4
  61. package/src/internals/GroupPlaybackTrackData.ts +14 -13
  62. package/src/internals/GroupTransportState.ts +21 -12
  63. package/src/internals/consts.ts +14 -2
  64. package/src/internals/index.ts +1 -0
  65. package/src/internals/interfaces.ts +10 -0
@@ -3,10 +3,10 @@
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
5
  /// <reference types="node" />
6
- import { ILiveEvent } from "@microsoft/live-share";
7
6
  import EventEmitter from "events";
8
7
  import { GroupPlaybackTrack } from "./GroupPlaybackTrack";
9
8
  import { ExtendedMediaSessionActionSource } from "../MediaSessionExtensions";
9
+ import { IGroupStateEvent } from "./interfaces";
10
10
  /**
11
11
  * @hidden
12
12
  */
@@ -24,7 +24,7 @@ export declare enum PlaybackTrackDataEvents {
24
24
  /**
25
25
  * @hidden
26
26
  */
27
- export interface IPlaybackTrackDataChangeEvent extends ILiveEvent {
27
+ export interface IPlaybackTrackDataChangeEvent extends IGroupStateEvent {
28
28
  data: object | null;
29
29
  }
30
30
  /**
@@ -36,6 +36,6 @@ export declare class GroupPlaybackTrackData extends EventEmitter {
36
36
  constructor(track: GroupPlaybackTrack);
37
37
  get current(): Readonly<IPlaybackTrackData>;
38
38
  get data(): object | null;
39
- updateData(event: IPlaybackTrackData, source: ExtendedMediaSessionActionSource): boolean;
39
+ updateData(trackData: IPlaybackTrackData, source: ExtendedMediaSessionActionSource): boolean;
40
40
  }
41
41
  //# sourceMappingURL=GroupPlaybackTrackData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupPlaybackTrackData.d.ts","sourceRoot":"","sources":["../../src/internals/GroupPlaybackTrackData.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EACH,kBAAkB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,uBAAuB;IAC/B,UAAU,eAAe;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,UAAU;IAC7D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACpD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,KAAK,EAAE,kBAAkB;IAgBrC,IAAW,OAAO,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAEjD;IAED,IAAW,IAAI,IAAI,MAAM,GAAG,IAAI,CAE/B;IAEM,UAAU,CACb,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,gCAAgC,GACzC,OAAO;CAiCb"}
1
+ {"version":3,"file":"GroupPlaybackTrackData.d.ts","sourceRoot":"","sources":["../../src/internals/GroupPlaybackTrackData.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EACH,kBAAkB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,uBAAuB;IAC/B,UAAU,eAAe;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,gBAAgB;IACnE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACpD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,KAAK,EAAE,kBAAkB;IAgBrC,IAAW,OAAO,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAEjD;IAED,IAAW,IAAI,IAAI,MAAM,GAAG,IAAI,CAE/B;IAEM,UAAU,CACb,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,gCAAgC,GACzC,OAAO;CAkCb"}
@@ -41,30 +41,31 @@ class GroupPlaybackTrackData extends events_1.default {
41
41
  get data() {
42
42
  return this.current.data;
43
43
  }
44
- updateData(event, source) {
44
+ updateData(trackData, source) {
45
45
  // Ignore state changes that are older
46
46
  const current = this.current;
47
- if (event.timestamp < current.timestamp) {
47
+ if (trackData.timestamp < current.timestamp) {
48
48
  return false;
49
49
  }
50
50
  // Ignore state changes that have the same timestamp and the clientId sorts higher.
51
- if (event.timestamp == current.timestamp &&
52
- event.clientId.localeCompare(current.clientId) > 0) {
51
+ if (trackData.timestamp == current.timestamp &&
52
+ trackData.clientId.localeCompare(current.clientId) > 0) {
53
53
  return false;
54
54
  }
55
55
  // Ignore state changes for same data object
56
- if (JSON.stringify(current.data) == JSON.stringify(event.data)) {
56
+ if (JSON.stringify(current.data) == JSON.stringify(trackData.data)) {
57
57
  return false;
58
58
  }
59
59
  // Update current data
60
- this._current = event;
60
+ this._current = trackData;
61
61
  // Notify listeners
62
- this.emit(PlaybackTrackDataEvents.dataChange, {
63
- type: PlaybackTrackDataEvents.dataChange,
64
- clientId: event.clientId,
65
- data: event.data,
62
+ const event = {
63
+ name: PlaybackTrackDataEvents.dataChange,
64
+ clientId: trackData.clientId,
65
+ data: trackData.data,
66
66
  source,
67
- });
67
+ };
68
+ this.emit(PlaybackTrackDataEvents.dataChange, event);
68
69
  return true;
69
70
  }
70
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GroupPlaybackTrackData.js","sourceRoot":"","sources":["../../src/internals/GroupPlaybackTrackData.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAGH,oDAAkC;AAClC,6DAG8B;AAY9B;;GAEG;AACH,IAAY,uBAEX;AAFD,WAAY,uBAAuB;IAC/B,oDAAyB,CAAA;AAC7B,CAAC,EAFW,uBAAuB,GAAvB,+BAAuB,KAAvB,+BAAuB,QAElC;AASD;;GAEG;AACH,MAAa,sBAAuB,SAAQ,gBAAY;IAIpD,YAAY,KAAyB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAE3D,2BAA2B;QAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,6CAAwB,CAAC,WAAW,EAAE,GAAG,EAAE;YACtD,+CAA+C;YAC/C,IAAI,CAAC,QAAQ,GAAG;gBACZ,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS;gBACxC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ;aACzC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAEM,UAAU,CACb,KAAyB,EACzB,MAAwC;QAExC,sCAAsC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE;YACrC,OAAO,KAAK,CAAC;SAChB;QAED,mFAAmF;QACnF,IACI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;YACpC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EACpD;YACE,OAAO,KAAK,CAAC;SAChB;QAED,4CAA4C;QAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC5D,OAAO,KAAK,CAAC;SAChB;QAED,sBAAsB;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,mBAAmB;QACnB,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE;YAC1C,IAAI,EAAE,uBAAuB,CAAC,UAAU;YACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM;SACT,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAhED,wDAgEC"}
1
+ {"version":3,"file":"GroupPlaybackTrackData.js","sourceRoot":"","sources":["../../src/internals/GroupPlaybackTrackData.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,oDAAkC;AAClC,6DAG8B;AAa9B;;GAEG;AACH,IAAY,uBAEX;AAFD,WAAY,uBAAuB;IAC/B,oDAAyB,CAAA;AAC7B,CAAC,EAFW,uBAAuB,GAAvB,+BAAuB,KAAvB,+BAAuB,QAElC;AASD;;GAEG;AACH,MAAa,sBAAuB,SAAQ,gBAAY;IAIpD,YAAY,KAAyB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAE3D,2BAA2B;QAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,6CAAwB,CAAC,WAAW,EAAE,GAAG,EAAE;YACtD,+CAA+C;YAC/C,IAAI,CAAC,QAAQ,GAAG;gBACZ,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS;gBACxC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ;aACzC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAEM,UAAU,CACb,SAA6B,EAC7B,MAAwC;QAExC,sCAAsC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE;YACzC,OAAO,KAAK,CAAC;SAChB;QAED,mFAAmF;QACnF,IACI,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;YACxC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EACxD;YACE,OAAO,KAAK,CAAC;SAChB;QAED,4CAA4C;QAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAChE,OAAO,KAAK,CAAC;SAChB;QAED,sBAAsB;QACtB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAE1B,mBAAmB;QACnB,MAAM,KAAK,GAAkC;YACzC,IAAI,EAAE,uBAAuB,CAAC,UAAU;YACxC,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,MAAM;SACT,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAjED,wDAiEC"}
@@ -3,11 +3,13 @@
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
5
  /// <reference types="node" />
6
- import { ILiveEvent, LiveShareRuntime } from "@microsoft/live-share";
6
+ import { LiveShareRuntime } from "@microsoft/live-share";
7
7
  import EventEmitter from "events";
8
8
  import { IMediaPlayerState } from "../LiveMediaSessionCoordinator";
9
9
  import { ExtendedMediaSessionPlaybackState, ExtendedMediaSessionAction, ExtendedMediaSessionActionSource } from "../MediaSessionExtensions";
10
10
  import { GroupPlaybackTrack } from "./GroupPlaybackTrack";
11
+ import { IGroupStateEvent } from "./interfaces";
12
+ import { GroupPlaybackRate } from "./GroupPlaybackRate";
11
13
  /**
12
14
  * @hidden
13
15
  */
@@ -26,7 +28,7 @@ export declare enum GroupTransportStateEvents {
26
28
  /**
27
29
  * @hidden
28
30
  */
29
- export interface ITransportStateChangeEvent extends ILiveEvent {
31
+ export interface ITransportStateChangeEvent extends IGroupStateEvent {
30
32
  action: ExtendedMediaSessionAction;
31
33
  seekTime?: number;
32
34
  }
@@ -36,9 +38,10 @@ export interface ITransportStateChangeEvent extends ILiveEvent {
36
38
  export declare class GroupTransportState extends EventEmitter {
37
39
  private readonly _getMediaPlayerState;
38
40
  private _track;
41
+ private _playbackRate;
39
42
  private readonly _liveRuntime;
40
43
  private _current;
41
- constructor(track: GroupPlaybackTrack, getMediaPlayerState: () => IMediaPlayerState, liveRuntime: LiveShareRuntime);
44
+ constructor(track: GroupPlaybackTrack, playbackRate: GroupPlaybackRate, getMediaPlayerState: () => IMediaPlayerState, liveRuntime: LiveShareRuntime);
42
45
  get current(): Readonly<ITransportState>;
43
46
  get playbackState(): ExtendedMediaSessionPlaybackState;
44
47
  get startPosition(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"GroupTransportState.d.ts","sourceRoot":"","sources":["../../src/internals/GroupTransportState.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACH,iCAAiC,EACjC,0BAA0B,EAC1B,gCAAgC,EACnC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,kBAAkB,EAErB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,aAAa,EAAE,iCAAiC,CAAC;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,yBAAyB;IACjC,oBAAoB,yBAAyB;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,UAAU;IAC1D,MAAM,EAAE,0BAA0B,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA0B;IAC/D,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAkB;gBAG9B,KAAK,EAAE,kBAAkB,EACzB,mBAAmB,EAAE,MAAM,iBAAiB,EAC5C,WAAW,EAAE,gBAAgB;IAyBjC,IAAW,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,CAE9C;IAED,IAAW,aAAa,IAAI,iCAAiC,CAE5D;IAED,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,KAAK,IAAI,kBAAkB,CAErC;IAEM,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAOxC,WAAW,CACd,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,gCAAgC,GACzC,OAAO;CA2Db"}
1
+ {"version":3,"file":"GroupTransportState.d.ts","sourceRoot":"","sources":["../../src/internals/GroupTransportState.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACH,iCAAiC,EACjC,0BAA0B,EAC1B,gCAAgC,EACnC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,kBAAkB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,aAAa,EAAE,iCAAiC,CAAC;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,oBAAY,yBAAyB;IACjC,oBAAoB,yBAAyB;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAChE,MAAM,EAAE,0BAA0B,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA0B;IAC/D,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAkB;gBAG9B,KAAK,EAAE,kBAAkB,EACzB,YAAY,EAAE,iBAAiB,EAC/B,mBAAmB,EAAE,MAAM,iBAAiB,EAC5C,WAAW,EAAE,gBAAgB;IA0BjC,IAAW,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,CAE9C;IAED,IAAW,aAAa,IAAI,iCAAiC,CAE5D;IAED,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,KAAK,IAAI,kBAAkB,CAErC;IAEM,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAOxC,WAAW,CACd,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,gCAAgC,GACzC,OAAO;CA+Db"}
@@ -21,11 +21,12 @@ var GroupTransportStateEvents;
21
21
  * @hidden
22
22
  */
23
23
  class GroupTransportState extends events_1.default {
24
- constructor(track, getMediaPlayerState, liveRuntime) {
24
+ constructor(track, playbackRate, getMediaPlayerState, liveRuntime) {
25
25
  super();
26
26
  this._liveRuntime = liveRuntime;
27
27
  this._getMediaPlayerState = getMediaPlayerState;
28
28
  this._track = track;
29
+ this._playbackRate = playbackRate;
29
30
  this._current = {
30
31
  playbackState: "none",
31
32
  startPosition: 0.0,
@@ -83,33 +84,37 @@ class GroupTransportState extends events_1.default {
83
84
  const playerState = this._getMediaPlayerState().playbackState;
84
85
  if (originalState.playbackState == state.playbackState &&
85
86
  playerState != "ended") {
86
- this.emit(GroupTransportStateEvents.transportStateChange, {
87
- type: GroupTransportStateEvents.transportStateChange,
87
+ const event = {
88
+ name: GroupTransportStateEvents.transportStateChange,
88
89
  action: "seekto",
89
90
  clientId: state.clientId,
90
91
  seekTime: state.startPosition,
91
92
  source,
92
- });
93
+ };
94
+ this.emit(GroupTransportStateEvents.transportStateChange, event);
93
95
  }
94
96
  else if (state.playbackState == "playing") {
95
97
  const now = this._liveRuntime.getTimestamp();
96
- const projectedPosition = state.startPosition + (now - state.timestamp) / 1000;
97
- this.emit(GroupTransportStateEvents.transportStateChange, {
98
- type: GroupTransportStateEvents.transportStateChange,
98
+ const projectedPosition = state.startPosition +
99
+ ((now - state.timestamp) / 1000) * this._playbackRate.rate;
100
+ const event = {
101
+ name: GroupTransportStateEvents.transportStateChange,
99
102
  action: "play",
100
103
  clientId: state.clientId,
101
104
  seekTime: projectedPosition,
102
105
  source,
103
- });
106
+ };
107
+ this.emit(GroupTransportStateEvents.transportStateChange, event);
104
108
  }
105
109
  else {
106
- this.emit(GroupTransportStateEvents.transportStateChange, {
107
- type: GroupTransportStateEvents.transportStateChange,
110
+ const event = {
111
+ name: GroupTransportStateEvents.transportStateChange,
108
112
  action: "pause",
109
113
  clientId: state.clientId,
110
114
  seekTime: state.startPosition,
111
115
  source,
112
- });
116
+ };
117
+ this.emit(GroupTransportStateEvents.transportStateChange, event);
113
118
  }
114
119
  return true;
115
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GroupTransportState.js","sourceRoot":"","sources":["../../src/internals/GroupTransportState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GroupTransportState.js","sourceRoot":"","sources":["../../src/internals/GroupTransportState.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,12 @@ export declare const TelemetryEvents: {
14
14
  PlayAction: string;
15
15
  PauseAction: string;
16
16
  SeekToAction: string;
17
+ RateChangeAction: string;
17
18
  CatchupAction: string;
18
19
  SetTrackAction: string;
19
20
  DataChangeAction: string;
20
21
  UserTappedVideoToPlay: string;
21
22
  UserTappedVideoToPlayError: string;
22
- PlaybackRateChangeBlocked: string;
23
23
  PlayerBlockedOperation: string;
24
24
  SeekingPlayerToStartPosition: string;
25
25
  BeginSeekCalled: string;
@@ -27,6 +27,7 @@ export declare const TelemetryEvents: {
27
27
  PlayCalled: string;
28
28
  PauseCalled: string;
29
29
  SeekToCalled: string;
30
+ RateChangeCalled: string;
30
31
  SetTrackCalled: string;
31
32
  SetTrackDataCalled: string;
32
33
  };
@@ -34,6 +35,7 @@ export declare const TelemetryEvents: {
34
35
  PlayAction: string;
35
36
  PauseAction: string;
36
37
  SeekToAction: string;
38
+ RateChangeAction: string;
37
39
  CatchUpAction: string;
38
40
  SetTrackAction: string;
39
41
  DataChangeAction: string;
@@ -43,6 +45,7 @@ export declare const TelemetryEvents: {
43
45
  PlayCalled: string;
44
46
  PauseCalled: string;
45
47
  SeekToCalled: string;
48
+ SetPlaybackRateCalled: string;
46
49
  SetTrackCalled: string;
47
50
  SetTrackDataCalled: string;
48
51
  BeginSuspension: string;
@@ -55,6 +58,7 @@ export declare const TelemetryEvents: {
55
58
  RemotePlayReceived: string;
56
59
  RemotePauseReceived: string;
57
60
  RemoteSeekToReceived: string;
61
+ RemoteRateChangeReceived: string;
58
62
  PositionUpdateEventError: string;
59
63
  LiveObjectSynchronizerStartError: string;
60
64
  };
@@ -65,12 +69,15 @@ export declare const TelemetryEvents: {
65
69
  TrackDataChangeDelayed: string;
66
70
  TransportStateChanged: string;
67
71
  TransportStateChangeDelayed: string;
72
+ PlaybackRateChanged: string;
73
+ PlaybackRateChangedDelayed: string;
68
74
  BeginSoftSuspension: string;
69
75
  CheckingForSyncIssues: string;
70
76
  TrackOutOfSync: string;
71
77
  TrackDataOutOfSync: string;
72
78
  TransportOutOfSync: string;
73
79
  PositionOutOfSync: string;
80
+ PlaybackRateOutOfSync: string;
74
81
  };
75
82
  };
76
83
  //# sourceMappingURL=consts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/internals/consts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqF3B,CAAC"}
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/internals/consts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiG3B,CAAC"}
@@ -17,12 +17,12 @@ exports.TelemetryEvents = {
17
17
  PlayAction: "MediaPlayerSynchronizer:PlayAction",
18
18
  PauseAction: "MediaPlayerSynchronizer:PauseAction",
19
19
  SeekToAction: "MediaPlayerSynchronizer:SeekToAction",
20
+ RateChangeAction: "MediaPlayerSynchronizer:RateChangeAction",
20
21
  CatchupAction: "MediaPlayerSynchronizer:CatchupAction",
21
22
  SetTrackAction: "MediaPlayerSynchronizer:SetTrackAction",
22
23
  DataChangeAction: "MediaPlayerSynchronizer:DataChangeAction",
23
24
  UserTappedVideoToPlay: transmit("MediaPlayerSynchronizer:UserTappedVideoToPlay"),
24
25
  UserTappedVideoToPlayError: "MediaPlayerSynchronizer:UserTappedVideoToPlayError",
25
- PlaybackRateChangeBlocked: "MediaPlayerSynchronizer:PlaybackRateChangeBlocked",
26
26
  PlayerBlockedOperation: transmit("MediaPlayerSynchronizer:PlayerBlockedOperation"),
27
27
  SeekingPlayerToStartPosition: "MediaPlayerSynchronizer:SeekingPlayerToStartPosition",
28
28
  BeginSeekCalled: "MediaPlayerSynchronizer:BeginSeekCalled",
@@ -30,6 +30,7 @@ exports.TelemetryEvents = {
30
30
  PlayCalled: "MediaPlayerSynchronizer:PlayCalled",
31
31
  PauseCalled: "MediaPlayerSynchronizer:PauseCalled",
32
32
  SeekToCalled: "MediaPlayerSynchronizer:SeekToCalled",
33
+ RateChangeCalled: "MediaSession:RateChangeCalled",
33
34
  SetTrackCalled: "MediaPlayerSynchronizer:SetTrackCalled",
34
35
  SetTrackDataCalled: "MediaPlayerSynchronizer:SetTrackDataCalled",
35
36
  },
@@ -37,6 +38,7 @@ exports.TelemetryEvents = {
37
38
  PlayAction: transmit("MediaSession:PlayAction"),
38
39
  PauseAction: transmit("MediaSession:PauseAction"),
39
40
  SeekToAction: transmit("MediaSession:SeekToAction"),
41
+ RateChangeAction: transmit("MediaSession:RateChangeAction"),
40
42
  CatchUpAction: transmit("MediaSession:CatchUpAction"),
41
43
  SetTrackAction: transmit("MediaSession:SetTrackAction"),
42
44
  DataChangeAction: "MediaSession:DataChangeAction",
@@ -46,6 +48,7 @@ exports.TelemetryEvents = {
46
48
  PlayCalled: transmit("SessionCoordinator:PlayCalled"),
47
49
  PauseCalled: transmit("SessionCoordinator:PauseCalled"),
48
50
  SeekToCalled: transmit("SessionCoordinator:SeekToCalled"),
51
+ SetPlaybackRateCalled: transmit("SessionCoordinator:SetPlaybackRateCalled"),
49
52
  SetTrackCalled: transmit("SessionCoordinator:SetTrackCalled"),
50
53
  SetTrackDataCalled: "SessionCoordinator:SetTrackDataCalled",
51
54
  BeginSuspension: "SessionCoordinator:BeginSuspension",
@@ -58,6 +61,7 @@ exports.TelemetryEvents = {
58
61
  RemotePlayReceived: transmit("SessionCoordinator:RemotePlayReceived"),
59
62
  RemotePauseReceived: transmit("SessionCoordinator:RemotePauseReceived"),
60
63
  RemoteSeekToReceived: transmit("SessionCoordinator:RemoteSeekToReceived"),
64
+ RemoteRateChangeReceived: transmit("SessionCoordinator:RemoteRateChangeReceived"),
61
65
  PositionUpdateEventError: "SessionCoordinator:PositionUpdateEventError",
62
66
  LiveObjectSynchronizerStartError: "SessionCoordinator:LiveObjectSynchronizerStartError",
63
67
  },
@@ -68,12 +72,15 @@ exports.TelemetryEvents = {
68
72
  TrackDataChangeDelayed: "GroupCoordinator:TrackDataChangeDelayed",
69
73
  TransportStateChanged: "GroupCoordinator:TransportStateChanged",
70
74
  TransportStateChangeDelayed: "GroupCoordinator:TransportStateChangeDelayed",
75
+ PlaybackRateChanged: "GroupCoordinator:PlaybackRateChanged",
76
+ PlaybackRateChangedDelayed: "GroupCoordinator:PlaybackRateChanged",
71
77
  BeginSoftSuspension: "GroupCoordinator:BeginSoftSuspension",
72
78
  CheckingForSyncIssues: "GroupCoordinator:CheckingForSyncIssues",
73
79
  TrackOutOfSync: transmit("GroupCoordinator:TrackOutOfSync"),
74
80
  TrackDataOutOfSync: transmit("GroupCoordinator:TrackDataOutOfSync"),
75
81
  TransportOutOfSync: transmit("GroupCoordinator:TransportOutOfSync"),
76
82
  PositionOutOfSync: transmit("GroupCoordinator:PositionOutOfSync"),
83
+ PlaybackRateOutOfSync: transmit("GroupCoordinator:PlaybackRateOutOfSync"),
77
84
  },
78
85
  };
79
86
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/internals/consts.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;GAIG;AACU,QAAA,eAAe,GAAG;IAC3B,uBAAuB,EAAE;QACrB,sBAAsB,EAClB,gDAAgD;QACpD,WAAW,EAAE,qCAAqC;QAClD,UAAU,EAAE,oCAAoC;QAChD,WAAW,EAAE,qCAAqC;QAClD,YAAY,EAAE,sCAAsC;QACpD,aAAa,EAAE,uCAAuC;QACtD,cAAc,EAAE,wCAAwC;QACxD,gBAAgB,EAAE,0CAA0C;QAC5D,qBAAqB,EAAE,QAAQ,CAC3B,+CAA+C,CAClD;QACD,0BAA0B,EACtB,oDAAoD;QACxD,yBAAyB,EACrB,mDAAmD;QACvD,sBAAsB,EAAE,QAAQ,CAC5B,gDAAgD,CACnD;QACD,4BAA4B,EACxB,sDAAsD;QAC1D,eAAe,EAAE,yCAAyC;QAC1D,aAAa,EAAE,uCAAuC;QACtD,UAAU,EAAE,oCAAoC;QAChD,WAAW,EAAE,qCAAqC;QAClD,YAAY,EAAE,sCAAsC;QACpD,cAAc,EAAE,wCAAwC;QACxD,kBAAkB,EAAE,4CAA4C;KACnE;IACD,YAAY,EAAE;QACV,UAAU,EAAE,QAAQ,CAAC,yBAAyB,CAAC;QAC/C,WAAW,EAAE,QAAQ,CAAC,0BAA0B,CAAC;QACjD,YAAY,EAAE,QAAQ,CAAC,2BAA2B,CAAC;QACnD,aAAa,EAAE,QAAQ,CAAC,4BAA4B,CAAC;QACrD,cAAc,EAAE,QAAQ,CAAC,6BAA6B,CAAC;QACvD,gBAAgB,EAAE,+BAA+B;QACjD,wBAAwB,EAAE,uCAAuC;KACpE;IACD,kBAAkB,EAAE;QAChB,UAAU,EAAE,QAAQ,CAAC,+BAA+B,CAAC;QACrD,WAAW,EAAE,QAAQ,CAAC,gCAAgC,CAAC;QACvD,YAAY,EAAE,QAAQ,CAAC,iCAAiC,CAAC;QACzD,cAAc,EAAE,QAAQ,CAAC,mCAAmC,CAAC;QAC7D,kBAAkB,EAAE,uCAAuC;QAC3D,eAAe,EAAE,oCAAoC;QACrD,sBAAsB,EAAE,QAAQ,CAC5B,2CAA2C,CAC9C;QACD,aAAa,EAAE,kCAAkC;QACjD,oBAAoB,EAAE,QAAQ,CAC1B,yCAAyC,CAC5C;QACD,qBAAqB,EAAE,0CAA0C;QACjE,sBAAsB,EAAE,QAAQ,CAC5B,2CAA2C,CAC9C;QACD,0BAA0B,EAAE,QAAQ,CAChC,+CAA+C,CAClD;QACD,kBAAkB,EAAE,QAAQ,CAAC,uCAAuC,CAAC;QACrE,mBAAmB,EAAE,QAAQ,CAAC,wCAAwC,CAAC;QACvE,oBAAoB,EAAE,QAAQ,CAC1B,yCAAyC,CAC5C;QACD,wBAAwB,EAAE,6CAA6C;QACvE,gCAAgC,EAC5B,qDAAqD;KAC5D;IACD,gBAAgB,EAAE;QACd,YAAY,EAAE,+BAA+B;QAC7C,kBAAkB,EAAE,qCAAqC;QACzD,gBAAgB,EAAE,mCAAmC;QACrD,sBAAsB,EAAE,yCAAyC;QACjE,qBAAqB,EAAE,wCAAwC;QAC/D,2BAA2B,EACvB,8CAA8C;QAClD,mBAAmB,EAAE,sCAAsC;QAC3D,qBAAqB,EAAE,wCAAwC;QAC/D,cAAc,EAAE,QAAQ,CAAC,iCAAiC,CAAC;QAC3D,kBAAkB,EAAE,QAAQ,CAAC,qCAAqC,CAAC;QACnE,kBAAkB,EAAE,QAAQ,CAAC,qCAAqC,CAAC;QACnE,iBAAiB,EAAE,QAAQ,CAAC,oCAAoC,CAAC;KACpE;CACJ,CAAC;AAEF;;GAEG;AACH,SAAS,QAAQ,CAAC,SAAiB;IAC/B,OAAO,GAAG,SAAS,WAAW,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/internals/consts.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,6 @@ export * from "./GroupPlaybackPosition";
8
8
  export * from "./GroupPlaybackTrack";
9
9
  export * from "./GroupPlaybackTrackData";
10
10
  export * from "./GroupTransportState";
11
+ export * from "./GroupPlaybackRate";
11
12
  export * from "./errors";
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internals/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internals/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC"}
@@ -24,5 +24,6 @@ __exportStar(require("./GroupPlaybackPosition"), exports);
24
24
  __exportStar(require("./GroupPlaybackTrack"), exports);
25
25
  __exportStar(require("./GroupPlaybackTrackData"), exports);
26
26
  __exportStar(require("./GroupTransportState"), exports);
27
+ __exportStar(require("./GroupPlaybackRate"), exports);
27
28
  __exportStar(require("./errors"), exports);
28
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/internals/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,0DAAwC;AACxC,0DAAwC;AACxC,uDAAqC;AACrC,2DAAyC;AACzC,wDAAsC;AACtC,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/internals/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,2CAAyB;AACzB,0DAAwC;AACxC,0DAAwC;AACxC,uDAAqC;AACrC,2DAAyC;AACzC,wDAAsC;AACtC,sDAAoC;AACpC,2CAAyB"}
@@ -0,0 +1,10 @@
1
+ import { IEvent } from "@microsoft/live-share";
2
+ import { ExtendedMediaSessionActionSource } from "../MediaSessionExtensions";
3
+ /**
4
+ * @hidden
5
+ */
6
+ export interface IGroupStateEvent extends IEvent {
7
+ clientId: string;
8
+ source: ExtendedMediaSessionActionSource;
9
+ }
10
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/internals/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,MAAM;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gCAAgC,CAAC;CAC5C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/internals/interfaces.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microsoft/live-share-media",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "Live Share classes that synchronize media playback across clients.",
5
5
  "author": "Microsoft",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -15,7 +15,7 @@
15
15
  "test:race": "node ./../live-share/test-for-race-conditions.js"
16
16
  },
17
17
  "devDependencies": {
18
- "@microsoft/live-share": "1.3.1",
18
+ "@microsoft/live-share": "1.4.0",
19
19
  "@fluidframework/test-client-utils": "^1.3.6",
20
20
  "@fluidframework/test-runtime-utils": "^1.3.6",
21
21
  "@fluidframework/test-utils": "^1.3.6",
@@ -30,7 +30,7 @@
30
30
  "typescript": "^5.0.4"
31
31
  },
32
32
  "peerDependencies": {
33
- "@microsoft/live-share": "1.3.1",
33
+ "@microsoft/live-share": "1.4.0",
34
34
  "fluid-framework": "^1.2.3"
35
35
  },
36
36
  "repository": {
@@ -236,6 +236,18 @@ export class LiveMediaSession extends LiveDataObject {
236
236
  }
237
237
  );
238
238
  break;
239
+ case "ratechange":
240
+ if (!details.playbackRate) {
241
+ break;
242
+ }
243
+ this.logger.sendTelemetryEvent(
244
+ TelemetryEvents.MediaSession.RateChangeAction,
245
+ null,
246
+ {
247
+ playbackRate: details.playbackRate,
248
+ }
249
+ );
250
+ break;
239
251
  case "seekto":
240
252
  this.logger.sendTelemetryEvent(
241
253
  TelemetryEvents.MediaSession.SeekToAction,
@@ -33,6 +33,7 @@ import {
33
33
  ISetTrackDataEvent,
34
34
  TrackMetadataNotSetError,
35
35
  ActionBlockedError,
36
+ IRateChangeCommandEvent,
36
37
  } from "./internals";
37
38
  import { LiveMediaSessionCoordinatorSuspension } from "./LiveMediaSessionCoordinatorSuspension";
38
39
  import EventEmitter from "events";
@@ -87,6 +88,7 @@ export class LiveMediaSessionCoordinator extends EventEmitter {
87
88
  private _playEvent?: LiveEventTarget<ITransportCommandEvent>;
88
89
  private _pauseEvent?: LiveEventTarget<ITransportCommandEvent>;
89
90
  private _seekToEvent?: LiveEventTarget<ITransportCommandEvent>;
91
+ private _rateChangeEvent?: LiveEventTarget<IRateChangeCommandEvent>;
90
92
  private _setTrackEvent?: LiveEventTarget<ISetTrackEvent>;
91
93
  private _setTrackDataEvent?: LiveEventTarget<ISetTrackDataEvent>;
92
94
  private _positionUpdateEvent?: LiveEventTarget<IPositionUpdateEvent>;
@@ -170,6 +172,20 @@ export class LiveMediaSessionCoordinator extends EventEmitter {
170
172
  */
171
173
  public canSetTrackData: boolean = true;
172
174
 
175
+ /**
176
+ * Controls whether or not the local client is allowed to change the playback rate.
177
+ *
178
+ * @remarks
179
+ * This flag largely meant to influence decisions made by the coordinator and can be used by
180
+ * the UI to determine what controls should be shown to the user. It does not provide any
181
+ * security in itself.
182
+ *
183
+ * If your app is running in a semi-trusted environment where only some clients are allowed
184
+ * to change the tracks data object, you should use "role based verification" to enforce those
185
+ * policies.
186
+ */
187
+ public canSetPlaybackRate: boolean = true;
188
+
173
189
  /**
174
190
  * Controls whether or not the local client is allowed to send position updates to the group.
175
191
  *
@@ -346,6 +362,27 @@ export class LiveMediaSessionCoordinator extends EventEmitter {
346
362
  }
347
363
  }
348
364
 
365
+ public async setPlaybackRate(playbackRate: number): Promise<void> {
366
+ LiveDataObjectNotInitializedError.assert(
367
+ "LiveMediaSessionCoordinator:setPlaybackRate",
368
+ "setPlaybackRate",
369
+ this.initializeState
370
+ );
371
+ ActionBlockedError.assert(
372
+ this.canSetPlaybackRate,
373
+ "LiveMediaSessionCoordinator:setPlaybackRate",
374
+ "setPlaybackRate",
375
+ "canSetPlaybackRate"
376
+ );
377
+
378
+ this._logger.sendTelemetryEvent(
379
+ TelemetryEvents.SessionCoordinator.SetPlaybackRateCalled,
380
+ null,
381
+ { playbackRate }
382
+ );
383
+ await this._rateChangeEvent!.sendEvent({ playbackRate });
384
+ }
385
+
349
386
  /**
350
387
  * Instructs the group to load a new track.
351
388
  *
@@ -624,6 +661,11 @@ export class LiveMediaSessionCoordinator extends EventEmitter {
624
661
  this.emit(evt.name, evt)
625
662
  );
626
663
 
664
+ this._groupState.on(
665
+ GroupCoordinatorStateEvents.triggeractionignored,
666
+ (evt) => this.emit(evt.name, evt)
667
+ );
668
+
627
669
  // Listen for track changes
628
670
  this._setTrackEvent = new LiveEventTarget<ISetTrackEvent>(
629
671
  scope,
@@ -649,6 +691,13 @@ export class LiveMediaSessionCoordinator extends EventEmitter {
649
691
  (event, local) =>
650
692
  this._groupState!.handleTransportCommand(event, local)
651
693
  );
694
+ this._rateChangeEvent = new LiveEventTarget(
695
+ scope,
696
+ "rateChange",
697
+ (event: ILiveEvent<IRateChangeCommandEvent>, local) => {
698
+ this._groupState!.handleRateChangeCommand(event, local);
699
+ }
700
+ );
652
701
 
653
702
  // Listen for position updates
654
703
  this._positionUpdateEvent = new LiveEventTarget(