@microsoft/live-share-media 1.4.0 → 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.
Files changed (228) hide show
  1. package/README.md +30 -31
  2. package/bin/cjs/IMediaPlayer.d.ts.map +1 -0
  3. package/bin/cjs/IMediaPlayer.js.map +1 -0
  4. package/bin/{LiveMediaSession.d.ts → cjs/LiveMediaSession.d.ts} +16 -9
  5. package/bin/cjs/LiveMediaSession.d.ts.map +1 -0
  6. package/bin/{LiveMediaSession.js → cjs/LiveMediaSession.js} +31 -25
  7. package/bin/cjs/LiveMediaSession.js.map +1 -0
  8. package/bin/{LiveMediaSessionCoordinator.d.ts → cjs/LiveMediaSessionCoordinator.d.ts} +57 -13
  9. package/bin/cjs/LiveMediaSessionCoordinator.d.ts.map +1 -0
  10. package/bin/{LiveMediaSessionCoordinator.js → cjs/LiveMediaSessionCoordinator.js} +152 -64
  11. package/bin/cjs/LiveMediaSessionCoordinator.js.map +1 -0
  12. package/bin/{LiveMediaSessionCoordinatorSuspension.d.ts → cjs/LiveMediaSessionCoordinatorSuspension.d.ts} +1 -1
  13. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  14. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  15. package/bin/{MediaPlayerSynchronizer.d.ts → cjs/MediaPlayerSynchronizer.d.ts} +22 -8
  16. package/bin/cjs/MediaPlayerSynchronizer.d.ts.map +1 -0
  17. package/bin/{MediaPlayerSynchronizer.js → cjs/MediaPlayerSynchronizer.js} +40 -43
  18. package/bin/cjs/MediaPlayerSynchronizer.js.map +1 -0
  19. package/bin/{MediaSessionActionThrottler.d.ts → cjs/MediaSessionActionThrottler.d.ts} +1 -1
  20. package/bin/cjs/MediaSessionActionThrottler.d.ts.map +1 -0
  21. package/bin/cjs/MediaSessionActionThrottler.js.map +1 -0
  22. package/bin/cjs/MediaSessionExtensions.d.ts.map +1 -0
  23. package/bin/{MediaSessionExtensions.js → cjs/MediaSessionExtensions.js} +1 -1
  24. package/bin/cjs/MediaSessionExtensions.js.map +1 -0
  25. package/bin/{RepeatedActionThrottler.d.ts → cjs/RepeatedActionThrottler.d.ts} +2 -2
  26. package/bin/cjs/RepeatedActionThrottler.d.ts.map +1 -0
  27. package/bin/{RepeatedActionThrottler.js → cjs/RepeatedActionThrottler.js} +3 -3
  28. package/bin/cjs/RepeatedActionThrottler.js.map +1 -0
  29. package/bin/{VolumeManager.d.ts → cjs/VolumeManager.d.ts} +6 -6
  30. package/bin/cjs/VolumeManager.d.ts.map +1 -0
  31. package/bin/{VolumeManager.js → cjs/VolumeManager.js} +6 -6
  32. package/bin/cjs/VolumeManager.js.map +1 -0
  33. package/bin/cjs/index.d.ts +14 -0
  34. package/bin/cjs/index.d.ts.map +1 -0
  35. package/bin/{internals → cjs}/index.js +9 -8
  36. package/bin/cjs/index.js.map +1 -0
  37. package/bin/{internals → cjs/internals}/GroupCoordinatorState.d.ts +14 -12
  38. package/bin/cjs/internals/GroupCoordinatorState.d.ts.map +1 -0
  39. package/bin/{internals → cjs/internals}/GroupCoordinatorState.js +47 -50
  40. package/bin/cjs/internals/GroupCoordinatorState.js.map +1 -0
  41. package/bin/{internals → cjs/internals}/GroupPlaybackPosition.d.ts +6 -5
  42. package/bin/cjs/internals/GroupPlaybackPosition.d.ts.map +1 -0
  43. package/bin/{internals → cjs/internals}/GroupPlaybackPosition.js +3 -3
  44. package/bin/cjs/internals/GroupPlaybackPosition.js.map +1 -0
  45. package/bin/{internals → cjs/internals}/GroupPlaybackRate.d.ts +4 -5
  46. package/bin/cjs/internals/GroupPlaybackRate.d.ts.map +1 -0
  47. package/bin/{internals → cjs/internals}/GroupPlaybackRate.js +3 -6
  48. package/bin/cjs/internals/GroupPlaybackRate.js.map +1 -0
  49. package/bin/{internals → cjs/internals}/GroupPlaybackTrack.d.ts +5 -6
  50. package/bin/cjs/internals/GroupPlaybackTrack.d.ts.map +1 -0
  51. package/bin/{internals → cjs/internals}/GroupPlaybackTrack.js +3 -6
  52. package/bin/cjs/internals/GroupPlaybackTrack.js.map +1 -0
  53. package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.d.ts +5 -6
  54. package/bin/cjs/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  55. package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.js +5 -8
  56. package/bin/cjs/internals/GroupPlaybackTrackData.js.map +1 -0
  57. package/bin/{internals → cjs/internals}/GroupTransportState.d.ts +8 -9
  58. package/bin/cjs/internals/GroupTransportState.d.ts.map +1 -0
  59. package/bin/{internals → cjs/internals}/GroupTransportState.js +5 -8
  60. package/bin/cjs/internals/GroupTransportState.js.map +1 -0
  61. package/bin/cjs/internals/PriorityTimeInterval.d.ts +33 -0
  62. package/bin/cjs/internals/PriorityTimeInterval.d.ts.map +1 -0
  63. package/bin/cjs/internals/PriorityTimeInterval.js +45 -0
  64. package/bin/cjs/internals/PriorityTimeInterval.js.map +1 -0
  65. package/bin/cjs/internals/consts.d.ts.map +1 -0
  66. package/bin/cjs/internals/consts.js.map +1 -0
  67. package/bin/cjs/internals/errors.d.ts.map +1 -0
  68. package/bin/cjs/internals/errors.js.map +1 -0
  69. package/bin/cjs/internals/interfaces.d.ts +23 -0
  70. package/bin/cjs/internals/interfaces.d.ts.map +1 -0
  71. package/bin/{internals → cjs/internals}/interfaces.js.map +1 -1
  72. package/bin/cjs/package.json +1 -0
  73. package/bin/esm/IMediaPlayer.d.ts +21 -0
  74. package/bin/esm/IMediaPlayer.d.ts.map +1 -0
  75. package/bin/esm/IMediaPlayer.js +6 -0
  76. package/bin/esm/IMediaPlayer.js.map +1 -0
  77. package/bin/esm/LiveMediaSession.d.ts +97 -0
  78. package/bin/esm/LiveMediaSession.d.ts.map +1 -0
  79. package/bin/esm/LiveMediaSession.js +257 -0
  80. package/bin/esm/LiveMediaSession.js.map +1 -0
  81. package/bin/esm/LiveMediaSessionCoordinator.d.ts +304 -0
  82. package/bin/esm/LiveMediaSessionCoordinator.d.ts.map +1 -0
  83. package/bin/esm/LiveMediaSessionCoordinator.js +556 -0
  84. package/bin/esm/LiveMediaSessionCoordinator.js.map +1 -0
  85. package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts +20 -0
  86. package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  87. package/bin/esm/LiveMediaSessionCoordinatorSuspension.js +24 -0
  88. package/bin/esm/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  89. package/bin/esm/MediaPlayerSynchronizer.d.ts +204 -0
  90. package/bin/esm/MediaPlayerSynchronizer.d.ts.map +1 -0
  91. package/bin/esm/MediaPlayerSynchronizer.js +570 -0
  92. package/bin/esm/MediaPlayerSynchronizer.js.map +1 -0
  93. package/bin/esm/MediaSessionActionThrottler.d.ts +12 -0
  94. package/bin/esm/MediaSessionActionThrottler.d.ts.map +1 -0
  95. package/bin/esm/MediaSessionActionThrottler.js +10 -0
  96. package/bin/esm/MediaSessionActionThrottler.js.map +1 -0
  97. package/bin/esm/MediaSessionExtensions.d.ts +177 -0
  98. package/bin/esm/MediaSessionExtensions.d.ts.map +1 -0
  99. package/bin/esm/MediaSessionExtensions.js +23 -0
  100. package/bin/esm/MediaSessionExtensions.js.map +1 -0
  101. package/bin/esm/RepeatedActionThrottler.d.ts +20 -0
  102. package/bin/esm/RepeatedActionThrottler.d.ts.map +1 -0
  103. package/bin/esm/RepeatedActionThrottler.js +59 -0
  104. package/bin/esm/RepeatedActionThrottler.js.map +1 -0
  105. package/bin/esm/VolumeManager.d.ts +84 -0
  106. package/bin/esm/VolumeManager.d.ts.map +1 -0
  107. package/bin/esm/VolumeManager.js +171 -0
  108. package/bin/esm/VolumeManager.js.map +1 -0
  109. package/bin/esm/index.d.ts +14 -0
  110. package/bin/esm/index.d.ts.map +1 -0
  111. package/bin/esm/index.js +14 -0
  112. package/bin/esm/index.js.map +1 -0
  113. package/bin/esm/internals/GroupCoordinatorState.d.ts +110 -0
  114. package/bin/esm/internals/GroupCoordinatorState.d.ts.map +1 -0
  115. package/bin/esm/internals/GroupCoordinatorState.js +512 -0
  116. package/bin/esm/internals/GroupCoordinatorState.js.map +1 -0
  117. package/bin/esm/internals/GroupPlaybackPosition.d.ts +71 -0
  118. package/bin/esm/internals/GroupPlaybackPosition.d.ts.map +1 -0
  119. package/bin/esm/internals/GroupPlaybackPosition.js +166 -0
  120. package/bin/esm/internals/GroupPlaybackPosition.js.map +1 -0
  121. package/bin/esm/internals/GroupPlaybackRate.d.ts +38 -0
  122. package/bin/esm/internals/GroupPlaybackRate.d.ts.map +1 -0
  123. package/bin/esm/internals/GroupPlaybackRate.js +55 -0
  124. package/bin/esm/internals/GroupPlaybackRate.js.map +1 -0
  125. package/bin/esm/internals/GroupPlaybackTrack.d.ts +45 -0
  126. package/bin/esm/internals/GroupPlaybackTrack.d.ts.map +1 -0
  127. package/bin/esm/internals/GroupPlaybackTrack.js +118 -0
  128. package/bin/esm/internals/GroupPlaybackTrack.js.map +1 -0
  129. package/bin/esm/internals/GroupPlaybackTrackData.d.ts +40 -0
  130. package/bin/esm/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  131. package/bin/esm/internals/GroupPlaybackTrackData.js +66 -0
  132. package/bin/esm/internals/GroupPlaybackTrackData.js.map +1 -0
  133. package/bin/esm/internals/GroupTransportState.d.ts +52 -0
  134. package/bin/esm/internals/GroupTransportState.d.ts.map +1 -0
  135. package/bin/esm/internals/GroupTransportState.js +116 -0
  136. package/bin/esm/internals/GroupTransportState.js.map +1 -0
  137. package/bin/esm/internals/PriorityTimeInterval.d.ts +33 -0
  138. package/bin/esm/internals/PriorityTimeInterval.d.ts.map +1 -0
  139. package/bin/esm/internals/PriorityTimeInterval.js +41 -0
  140. package/bin/esm/internals/PriorityTimeInterval.js.map +1 -0
  141. package/bin/esm/internals/consts.d.ts +83 -0
  142. package/bin/esm/internals/consts.d.ts.map +1 -0
  143. package/bin/esm/internals/consts.js +89 -0
  144. package/bin/esm/internals/consts.js.map +1 -0
  145. package/bin/esm/internals/errors.d.ts +17 -0
  146. package/bin/esm/internals/errors.d.ts.map +1 -0
  147. package/bin/esm/internals/errors.js +29 -0
  148. package/bin/esm/internals/errors.js.map +1 -0
  149. package/bin/esm/internals/interfaces.d.ts +23 -0
  150. package/bin/esm/internals/interfaces.d.ts.map +1 -0
  151. package/bin/esm/internals/interfaces.js +2 -0
  152. package/bin/esm/internals/interfaces.js.map +1 -0
  153. package/package.json +31 -15
  154. package/src/LiveMediaSession.ts +29 -14
  155. package/src/LiveMediaSessionCoordinator.ts +149 -37
  156. package/src/LiveMediaSessionCoordinatorSuspension.ts +1 -1
  157. package/src/MediaPlayerSynchronizer.ts +26 -11
  158. package/src/MediaSessionActionThrottler.ts +1 -1
  159. package/src/RepeatedActionThrottler.ts +2 -2
  160. package/src/VolumeManager.ts +6 -6
  161. package/src/index.ts +9 -9
  162. package/src/internals/GroupCoordinatorState.ts +19 -15
  163. package/src/internals/GroupPlaybackPosition.ts +9 -9
  164. package/src/internals/GroupPlaybackRate.ts +4 -4
  165. package/src/internals/GroupPlaybackTrack.ts +5 -5
  166. package/src/internals/GroupPlaybackTrackData.ts +5 -5
  167. package/src/internals/GroupTransportState.ts +8 -8
  168. package/src/internals/PriorityTimeInterval.ts +76 -0
  169. package/src/internals/interfaces.ts +15 -1
  170. package/tsconfig.cjs.json +14 -0
  171. package/tsconfig.json +65 -74
  172. package/.nycrc.json +0 -11
  173. package/bin/IMediaPlayer.d.ts.map +0 -1
  174. package/bin/IMediaPlayer.js.map +0 -1
  175. package/bin/LiveMediaSession.d.ts.map +0 -1
  176. package/bin/LiveMediaSession.js.map +0 -1
  177. package/bin/LiveMediaSessionCoordinator.d.ts.map +0 -1
  178. package/bin/LiveMediaSessionCoordinator.js.map +0 -1
  179. package/bin/LiveMediaSessionCoordinatorSuspension.d.ts.map +0 -1
  180. package/bin/LiveMediaSessionCoordinatorSuspension.js.map +0 -1
  181. package/bin/MediaPlayerSynchronizer.d.ts.map +0 -1
  182. package/bin/MediaPlayerSynchronizer.js.map +0 -1
  183. package/bin/MediaSessionActionThrottler.d.ts.map +0 -1
  184. package/bin/MediaSessionActionThrottler.js.map +0 -1
  185. package/bin/MediaSessionExtensions.d.ts.map +0 -1
  186. package/bin/MediaSessionExtensions.js.map +0 -1
  187. package/bin/RepeatedActionThrottler.d.ts.map +0 -1
  188. package/bin/RepeatedActionThrottler.js.map +0 -1
  189. package/bin/VolumeManager.d.ts.map +0 -1
  190. package/bin/VolumeManager.js.map +0 -1
  191. package/bin/index.d.ts +0 -14
  192. package/bin/index.d.ts.map +0 -1
  193. package/bin/index.js +0 -30
  194. package/bin/index.js.map +0 -1
  195. package/bin/internals/GroupCoordinatorState.d.ts.map +0 -1
  196. package/bin/internals/GroupCoordinatorState.js.map +0 -1
  197. package/bin/internals/GroupPlaybackPosition.d.ts.map +0 -1
  198. package/bin/internals/GroupPlaybackPosition.js.map +0 -1
  199. package/bin/internals/GroupPlaybackRate.d.ts.map +0 -1
  200. package/bin/internals/GroupPlaybackRate.js.map +0 -1
  201. package/bin/internals/GroupPlaybackTrack.d.ts.map +0 -1
  202. package/bin/internals/GroupPlaybackTrack.js.map +0 -1
  203. package/bin/internals/GroupPlaybackTrackData.d.ts.map +0 -1
  204. package/bin/internals/GroupPlaybackTrackData.js.map +0 -1
  205. package/bin/internals/GroupTransportState.d.ts.map +0 -1
  206. package/bin/internals/GroupTransportState.js.map +0 -1
  207. package/bin/internals/consts.d.ts.map +0 -1
  208. package/bin/internals/consts.js.map +0 -1
  209. package/bin/internals/errors.d.ts.map +0 -1
  210. package/bin/internals/errors.js.map +0 -1
  211. package/bin/internals/index.d.ts +0 -13
  212. package/bin/internals/index.d.ts.map +0 -1
  213. package/bin/internals/index.js.map +0 -1
  214. package/bin/internals/interfaces.d.ts +0 -10
  215. package/bin/internals/interfaces.d.ts.map +0 -1
  216. package/src/internals/index.ts +0 -13
  217. package/tsconfig.build.json +0 -9
  218. package/typedoc.json +0 -10
  219. /package/bin/{IMediaPlayer.d.ts → cjs/IMediaPlayer.d.ts} +0 -0
  220. /package/bin/{IMediaPlayer.js → cjs/IMediaPlayer.js} +0 -0
  221. /package/bin/{LiveMediaSessionCoordinatorSuspension.js → cjs/LiveMediaSessionCoordinatorSuspension.js} +0 -0
  222. /package/bin/{MediaSessionActionThrottler.js → cjs/MediaSessionActionThrottler.js} +0 -0
  223. /package/bin/{MediaSessionExtensions.d.ts → cjs/MediaSessionExtensions.d.ts} +0 -0
  224. /package/bin/{internals → cjs/internals}/consts.d.ts +0 -0
  225. /package/bin/{internals → cjs/internals}/consts.js +0 -0
  226. /package/bin/{internals → cjs/internals}/errors.d.ts +0 -0
  227. /package/bin/{internals → cjs/internals}/errors.js +0 -0
  228. /package/bin/{internals → cjs/internals}/interfaces.js +0 -0
package/README.md CHANGED
@@ -35,15 +35,15 @@ This will use npm workspaces to hoist and build all dependencies.
35
35
 
36
36
  ```html
37
37
  <body>
38
- <video id="player">
39
- <source src="YOUR_VIDEO_SRC" type="video/mp4" />
40
- </video>
41
- <div class="player-controls">
42
- <button id="play-button">Play</button>
43
- <button id="pause-button">Pause</button>
44
- <button id="restart-button">Restart</button>
45
- <button id="change-track-button">Change track</button>
46
- </div>
38
+ <video id="player">
39
+ <source src="YOUR_VIDEO_SRC" type="video/mp4" />
40
+ </video>
41
+ <div class="player-controls">
42
+ <button id="play-button">Play</button>
43
+ <button id="pause-button">Pause</button>
44
+ <button id="restart-button">Restart</button>
45
+ <button id="change-track-button">Change track</button>
46
+ </div>
47
47
  </body>
48
48
  ```
49
49
 
@@ -58,14 +58,12 @@ await microsoftTeams.app.initialize();
58
58
  // Setup the Fluid container
59
59
  const host = LiveShareHost.create();
60
60
  const client = new LiveShareClient(host);
61
- const schema = {
62
- initialObjects: {
63
- mediaSession: LiveMediaSession,
64
- ...,
65
- },
66
- };
67
- const { container } = await client.joinContainer(schema);
68
- const { mediaSession } = container.initialObjects;
61
+ await client.join();
62
+
63
+ const mediaSession =
64
+ (await client.getDDS) <
65
+ LiveMediaSession >
66
+ ("media-session-id", LiveMediaSession);
69
67
 
70
68
  // Get the player from your document and create synchronizer
71
69
  const player = document.getElementById("player");
@@ -78,21 +76,21 @@ await mediaSession.initialize(allowedRoles);
78
76
  // Intercept user play, pause, seek, and set track actions through synchronizer
79
77
 
80
78
  document.getElementById("play-button").onclick = () => {
81
- synchronizer.play();
79
+ synchronizer.play();
82
80
  };
83
81
 
84
82
  document.getElementById("pause-button").onclick = () => {
85
- synchronizer.pause();
83
+ synchronizer.pause();
86
84
  };
87
85
 
88
86
  document.getElementById("restart-button").onclick = () => {
89
- synchronizer.seekTo(0);
87
+ synchronizer.seekTo(0);
90
88
  };
91
89
 
92
90
  document.getElementById("change-track-button").onclick = () => {
93
- synchronizer.setTrack({
94
- trackIdentifier: "SOME_OTHER_VIDEO_SRC",
95
- });
91
+ synchronizer.setTrack({
92
+ trackIdentifier: "SOME_OTHER_VIDEO_SRC",
93
+ });
96
94
  };
97
95
  ```
98
96
 
@@ -102,7 +100,7 @@ There are several code samples that are hosted in a separate GitHub repository.
102
100
 
103
101
  | Sample name | Description | Javascript |
104
102
  | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
105
- | React Video | Basic example showing how the LiveMediaSession object works with HTML5 video. | [View](https://aka.ms/liveshare-reactvideo) |
103
+ | React Video | Basic example showing how the LiveMediaSession object works with HTML5 video. | [View](https://aka.ms/liveshare-reactvideo) |
106
104
  | React Media Template | Enable all connected clients to watch videos together, build a shared playlist, transfer whom is in control, and annotate over the video. | [View](https://aka.ms/liveshare-mediatemplate) |
107
105
 
108
106
  ## Package Compatibility
@@ -111,18 +109,19 @@ The Live Share SDK contains dependencies for [@microsoft/teams-js](https://www.n
111
109
 
112
110
  **It is critical that your app use the package dependencies listed in the table below.** Lookup the version of the `@microsoft/live-share` you're using and set any other dependencies in your package.json file to match:
113
111
 
114
- | @microsoft/live-share | @microsoft/teams-js | fluid-framework | @microsoft/live-share-\* | @fluidframework/azure-client | @microsoft/TeamsFx | @microsoft/TeamsFx-react |
115
- | --------------------- | -------------------- | --------------- | -------------------------- | ---------------------------- | ------------------------------- | ------------------------------- |
116
- | ^1.0.0 | ^2.11.0 | ^1.2.3 | ^1.0.0 | ^1.0.0 | ^2.5.0 | ^2.5.0 |
112
+ | @microsoft/live-share | @microsoft/teams-js | fluid-framework | @microsoft/live-share-\* | @fluidframework/azure-client | @microsoft/TeamsFx | @microsoft/TeamsFx-react |
113
+ | --------------------- | ------------------- | --------------- | ------------------------ | ---------------------------- | ------------------ | ------------------------ |
114
+ | ^2.0.0 | ^2.11.0 | ^2.0.0 | ^2.0.0 | ^2.0.0 | ^2.5.0 | ^2.5.0 |
115
+ | ^1.0.0 | ^2.11.0 | ^1.2.3 | ^1.0.0 | ^1.0.0 | ^2.5.0 | ^2.5.0 |
117
116
 
118
117
  ## Contributing
119
118
 
120
119
  There are several ways you can [contribute](../../CONTRIBUTING.md) to this project:
121
120
 
122
- - [Submit bugs](https://github.com/microsoft/live-share-sdk/issues) and help us verify fixes as they are checked in.
123
- - Review the source code changes.
124
- - Engage with other Live Share developers on [StackOverflow](https://stackoverflow.com/questions/tagged/live-share).
125
- - [Contribute bug fixes](../../CONTRIBUTING.md).
121
+ - [Submit bugs](https://github.com/microsoft/live-share-sdk/issues) and help us verify fixes as they are checked in.
122
+ - Review the source code changes.
123
+ - Engage with other Live Share developers on [StackOverflow](https://stackoverflow.com/questions/tagged/live-share).
124
+ - [Contribute bug fixes](../../CONTRIBUTING.md).
126
125
 
127
126
  This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact <opencode@microsoft.com> with any additional questions or comments.
128
127
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMediaPlayer.d.ts","sourceRoot":"","sources":["../../src/IMediaPlayer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,gBAAgB,CACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,EAC5C,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC5C,IAAI,CAAC;IACR,mBAAmB,CACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,EAC5C,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACzC,IAAI,CAAC;CACX"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMediaPlayer.js","sourceRoot":"","sources":["../../src/IMediaPlayer.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -2,17 +2,19 @@
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
- import { DataObjectFactory } from "@fluidframework/aqueduct";
6
- import { LiveDataObject, LiveTelemetryLogger, UserMeetingRole } from "@microsoft/live-share";
7
- import { MediaPlayerSynchronizer } from "./MediaPlayerSynchronizer";
8
- import { ExtendedMediaSessionAction, ExtendedMediaSessionActionHandler } from "./MediaSessionExtensions";
9
- import { LiveMediaSessionCoordinator, IMediaPlayerState } from "./LiveMediaSessionCoordinator";
10
- import { MediaSessionActionThrottler } from "./MediaSessionActionThrottler";
11
- import { IMediaPlayer } from "./IMediaPlayer";
5
+ import { DataObjectFactory } from "@fluidframework/aqueduct/legacy";
6
+ import { LiveTelemetryLogger, UserMeetingRole } from "@microsoft/live-share";
7
+ import { LiveDataObject } from "@microsoft/live-share/internal";
8
+ import { MediaPlayerSynchronizer } from "./MediaPlayerSynchronizer.js";
9
+ import { ExtendedMediaSessionAction, ExtendedMediaSessionActionHandler } from "./MediaSessionExtensions.js";
10
+ import { LiveMediaSessionCoordinator, IMediaPlayerState } from "./LiveMediaSessionCoordinator.js";
11
+ import { MediaSessionActionThrottler } from "./MediaSessionActionThrottler.js";
12
+ import { IMediaPlayer } from "./IMediaPlayer.js";
13
+ import { SharedObjectKind } from "fluid-framework";
12
14
  /**
13
15
  * Live fluid object that synchronizes media playback across multiple clients.
14
16
  */
15
- export declare class LiveMediaSession extends LiveDataObject {
17
+ export declare class LiveMediaSessionClass extends LiveDataObject {
16
18
  private _actionThrottler;
17
19
  private _logger?;
18
20
  private _requestPlayerStateHandler?;
@@ -28,7 +30,7 @@ export declare class LiveMediaSession extends LiveDataObject {
28
30
  /**
29
31
  * The objects fluid type factory.
30
32
  */
31
- static readonly factory: DataObjectFactory<LiveMediaSession, import("@fluidframework/aqueduct").DataObjectTypes>;
33
+ static readonly factory: DataObjectFactory<LiveMediaSessionClass, import("@fluidframework/aqueduct/legacy").DataObjectTypes>;
32
34
  /**
33
35
  * Extension point that lets applications replace the default logic for throttling the sessions
34
36
  * local sync behavior.
@@ -87,4 +89,9 @@ export declare class LiveMediaSession extends LiveDataObject {
87
89
  private getCurrentPlayerState;
88
90
  private dispatchAction;
89
91
  }
92
+ /**
93
+ * Live fluid object that synchronizes media playback across multiple clients.
94
+ */
95
+ export type LiveMediaSession = LiveMediaSessionClass;
96
+ export declare const LiveMediaSession: typeof LiveMediaSessionClass & SharedObjectKind<LiveMediaSessionClass>;
90
97
  //# sourceMappingURL=LiveMediaSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveMediaSession.d.ts","sourceRoot":"","sources":["../../src/LiveMediaSession.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAGH,mBAAmB,EACnB,eAAe,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEH,cAAc,EACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAEH,0BAA0B,EAE1B,iCAAiC,EACpC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,2BAA2B,EAC3B,iBAAiB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;IACrD,OAAO,CAAC,gBAAgB,CACU;IAClC,OAAO,CAAC,OAAO,CAAC,CAAsB;IACtC,OAAO,CAAC,0BAA0B,CAAC,CAA0B;IAC7D,OAAO,CAAC,YAAY,CAAC,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAGlB;IACd,OAAO,CAAC,cAAc,CAAC,CAA0B;IAGjD,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,eAAe,CAAa;IAEpC;;OAEG;IACH,gBAAuB,QAAQ,+CAA+C;IAE9E;;OAEG;IACH,gBAAuB,OAAO,sGAK5B;IAEF;;;;;;;;;;;;OAYG;IACH,IAAW,eAAe,IAAI,2BAA2B,CAExD;IAED,IAAW,eAAe,CAAC,KAAK,EAAE,2BAA2B,EAE5D;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,2BAA2B,CAEpD;IAED;;;;;OAKG;IACH,IAAW,MAAM,IAAI,mBAAmB,CAEvC;IAED;;;;;;;;OAQG;IACU,UAAU,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxE;;;;OAIG;IACI,gBAAgB,CACnB,MAAM,EAAE,0BAA0B,EAClC,OAAO,EACD,iCAAiC,GACjC,yBAAyB,GACzB,IAAI,GACX,IAAI;IAUP;;;OAGG;IACI,4BAA4B,CAAC,OAAO,EAAE,MAAM,iBAAiB;IAIpE;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,uBAAuB;cAoCjD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAwF/C,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,cAAc;CAQzB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAGrD,eAAO,MAAM,gBAAgB,wEAGzB,CAAC"}
@@ -13,21 +13,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  });
14
14
  };
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.LiveMediaSession = void 0;
17
- const aqueduct_1 = require("@fluidframework/aqueduct");
16
+ exports.LiveMediaSession = exports.LiveMediaSessionClass = void 0;
17
+ const legacy_1 = require("@fluidframework/aqueduct/legacy");
18
18
  const live_share_1 = require("@microsoft/live-share");
19
- const MediaPlayerSynchronizer_1 = require("./MediaPlayerSynchronizer");
20
- const internals_1 = require("./internals");
21
- const MediaSessionExtensions_1 = require("./MediaSessionExtensions");
22
- const LiveMediaSessionCoordinator_1 = require("./LiveMediaSessionCoordinator");
23
- const RepeatedActionThrottler_1 = require("./RepeatedActionThrottler");
19
+ const internal_1 = require("@microsoft/live-share/internal");
20
+ const MediaPlayerSynchronizer_js_1 = require("./MediaPlayerSynchronizer.js");
21
+ const MediaSessionExtensions_js_1 = require("./MediaSessionExtensions.js");
22
+ const LiveMediaSessionCoordinator_js_1 = require("./LiveMediaSessionCoordinator.js");
23
+ const RepeatedActionThrottler_js_1 = require("./RepeatedActionThrottler.js");
24
+ const consts_js_1 = require("./internals/consts.js");
24
25
  /**
25
26
  * Live fluid object that synchronizes media playback across multiple clients.
26
27
  */
27
- class LiveMediaSession extends live_share_1.LiveDataObject {
28
+ class LiveMediaSessionClass extends internal_1.LiveDataObject {
28
29
  constructor() {
29
30
  super(...arguments);
30
- this._actionThrottler = new RepeatedActionThrottler_1.RepeatedActionThrottler();
31
+ this._actionThrottler = new RepeatedActionThrottler_js_1.RepeatedActionThrottler();
31
32
  this._actionHandlers = new Map();
32
33
  this._lastUpdateTime = 0;
33
34
  }
@@ -127,7 +128,7 @@ class LiveMediaSession extends live_share_1.LiveDataObject {
127
128
  }
128
129
  // Start position update timer
129
130
  if (!this._updateTimer) {
130
- this.logger.sendTelemetryEvent(internals_1.TelemetryEvents.MediaSession.BeginPositionUpdateTimer);
131
+ this.logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.MediaSession.BeginPositionUpdateTimer);
131
132
  this._updateTimer = setInterval(() => {
132
133
  // Get current state
133
134
  const state = this.getCurrentPlayerState();
@@ -143,7 +144,7 @@ class LiveMediaSession extends live_share_1.LiveDataObject {
143
144
  }
144
145
  }, 500);
145
146
  }
146
- return new MediaPlayerSynchronizer_1.MediaPlayerSynchronizer(player, this, this.runtime, () => {
147
+ return new MediaPlayerSynchronizer_js_1.MediaPlayerSynchronizer(player, this, this.runtime, () => {
147
148
  this._synchronizing = undefined;
148
149
  });
149
150
  }
@@ -151,19 +152,19 @@ class LiveMediaSession extends live_share_1.LiveDataObject {
151
152
  return __awaiter(this, void 0, void 0, function* () {
152
153
  this._logger = new live_share_1.LiveTelemetryLogger(this.runtime, this.liveRuntime);
153
154
  // Create coordinator and listen for triggered actions
154
- this._coordinator = new LiveMediaSessionCoordinator_1.LiveMediaSessionCoordinator(this.id, this.runtime, this.liveRuntime, () => this.getCurrentPlayerState());
155
- this._coordinator.on(MediaSessionExtensions_1.MediaSessionCoordinatorEvents.triggeraction, (event) => {
155
+ this._coordinator = new LiveMediaSessionCoordinator_js_1.LiveMediaSessionCoordinator(this.id, this.runtime, this.liveRuntime, () => this.getCurrentPlayerState());
156
+ this._coordinator.on(MediaSessionExtensions_js_1.MediaSessionCoordinatorEvents.triggeraction, (event) => {
156
157
  // Pre-process actions
157
158
  const details = event.details;
158
159
  const seekTime = typeof details.seekTime == "number" ? details.seekTime : -1;
159
160
  switch (details.action) {
160
161
  case "play":
161
- this.logger.sendTelemetryEvent(internals_1.TelemetryEvents.MediaSession.PlayAction, null, {
162
+ this.logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.MediaSession.PlayAction, null, {
162
163
  position: seekTime,
163
164
  });
164
165
  break;
165
166
  case "pause":
166
- this.logger.sendTelemetryEvent(internals_1.TelemetryEvents.MediaSession.PauseAction, null, {
167
+ this.logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.MediaSession.PauseAction, null, {
167
168
  position: seekTime,
168
169
  });
169
170
  break;
@@ -171,24 +172,24 @@ class LiveMediaSession extends live_share_1.LiveDataObject {
171
172
  if (!details.playbackRate) {
172
173
  break;
173
174
  }
174
- this.logger.sendTelemetryEvent(internals_1.TelemetryEvents.MediaSession.RateChangeAction, null, {
175
+ this.logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.MediaSession.RateChangeAction, null, {
175
176
  playbackRate: details.playbackRate,
176
177
  });
177
178
  break;
178
179
  case "seekto":
179
- this.logger.sendTelemetryEvent(internals_1.TelemetryEvents.MediaSession.SeekToAction, null, {
180
+ this.logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.MediaSession.SeekToAction, null, {
180
181
  position: seekTime,
181
182
  });
182
183
  break;
183
184
  case "settrack":
184
- this.logger.sendTelemetryEvent(internals_1.TelemetryEvents.MediaSession.SetTrackAction);
185
+ this.logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.MediaSession.SetTrackAction);
185
186
  break;
186
187
  case "datachange":
187
- this.logger.sendTelemetryEvent(internals_1.TelemetryEvents.MediaSession.DataChangeAction);
188
+ this.logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.MediaSession.DataChangeAction);
188
189
  break;
189
190
  case "catchup":
190
191
  // Default to seekto if catchup not implemented
191
- this.logger.sendTelemetryEvent(internals_1.TelemetryEvents.MediaSession.CatchUpAction, null, {
192
+ this.logger.sendTelemetryEvent(consts_js_1.TelemetryEvents.MediaSession.CatchUpAction, null, {
192
193
  position: seekTime,
193
194
  });
194
195
  if (!this._actionHandlers.has("catchup")) {
@@ -239,17 +240,22 @@ class LiveMediaSession extends live_share_1.LiveDataObject {
239
240
  }
240
241
  }
241
242
  }
243
+ exports.LiveMediaSessionClass = LiveMediaSessionClass;
242
244
  /**
243
245
  * The objects fluid type name.
244
246
  */
245
- LiveMediaSession.TypeName = `@microsoft/fluid-media:SharedMediaSession`;
247
+ LiveMediaSessionClass.TypeName = `@microsoft/fluid-media:SharedMediaSession`;
246
248
  /**
247
249
  * The objects fluid type factory.
248
250
  */
249
- LiveMediaSession.factory = new aqueduct_1.DataObjectFactory(LiveMediaSession.TypeName, LiveMediaSession, [], {});
250
- exports.LiveMediaSession = LiveMediaSession;
251
+ LiveMediaSessionClass.factory = new legacy_1.DataObjectFactory(LiveMediaSessionClass.TypeName, LiveMediaSessionClass, [], {});
252
+ // eslint-disable-next-line no-redeclare
253
+ exports.LiveMediaSession = (() => {
254
+ const kind = LiveMediaSessionClass;
255
+ return kind;
256
+ })();
251
257
  /**
252
- * Register `LiveMediaSession` as an available `LoadableObjectClass` for use in packages that support dynamic object loading, such as `@microsoft/live-share-turbo`.
258
+ * Register `LiveMediaSession` as an available `SharedObjectKind` for use in dynamic object loading.
253
259
  */
254
- live_share_1.DynamicObjectRegistry.registerObjectClass(LiveMediaSession, LiveMediaSession.TypeName);
260
+ internal_1.DynamicObjectRegistry.registerObjectClass(exports.LiveMediaSession, exports.LiveMediaSession.TypeName);
255
261
  //# sourceMappingURL=LiveMediaSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveMediaSession.js","sourceRoot":"","sources":["../../src/LiveMediaSession.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
- /// <reference types="node" />
6
- import { IRuntimeSignaler, UserMeetingRole, LiveShareRuntime } from "@microsoft/live-share";
7
- import { CoordinationWaitPoint, ExtendedMediaMetadata, ExtendedMediaSessionPlaybackState, MediaSessionCoordinatorSuspension } from "./MediaSessionExtensions";
8
- import EventEmitter from "events";
5
+ import { UserMeetingRole } from "@microsoft/live-share";
6
+ import { IRuntimeSignaler, LiveShareRuntime } from "@microsoft/live-share/internal";
7
+ import { CoordinationWaitPoint, ExtendedMediaMetadata, ExtendedMediaSessionPlaybackState, MediaSessionCoordinatorSuspension } from "./MediaSessionExtensions.js";
8
+ import { TypedEventEmitter } from "@fluid-internal/client-utils";
9
+ import { IEvent } from "@fluidframework/core-interfaces";
9
10
  /**
10
11
  * Most recent state of the media session.
11
12
  */
@@ -30,12 +31,24 @@ export interface IMediaPlayerState {
30
31
  */
31
32
  positionState?: MediaPositionState;
32
33
  }
34
+ /**
35
+ * @hidden
36
+ */
37
+ export interface ILiveMediaSessionCoordinatorEvents extends IEvent {
38
+ /**
39
+ * Event listener for events emitted
40
+ * @param event update
41
+ * @param listener listener function
42
+ * @param listener.event the event instance
43
+ */
44
+ (event: string, listener: (event: any) => void): void;
45
+ }
33
46
  /**
34
47
  * The `LiveMediaSessionCoordinator` tracks the playback & position state of all other
35
48
  * clients being synchronized with. It is responsible for keeping the local media player
36
49
  * in sync with the group.
37
50
  */
38
- export declare class LiveMediaSessionCoordinator extends EventEmitter {
51
+ export declare class LiveMediaSessionCoordinator extends TypedEventEmitter<ILiveMediaSessionCoordinatorEvents> {
39
52
  private readonly _id;
40
53
  private readonly _runtime;
41
54
  private readonly _liveRuntime;
@@ -135,22 +148,45 @@ export declare class LiveMediaSessionCoordinator extends EventEmitter {
135
148
  */
136
149
  get isSuspended(): boolean;
137
150
  /**
138
- * Max amount of playback drift allowed in seconds.
151
+ * Controls whether or not to scale {@link maxPlaybackDrift} by the number of users in the session.
139
152
  *
140
153
  * @remarks
141
- * Should the local clients playback position lag by more than the specified value, the
142
- * coordinator will trigger a `catchup` action.
154
+ * As more clients join a session, it is more likely that some users will fall behind the presenter.
155
+ * It is also less likely that users will notice drift as more clients are added.
156
+ * It is usually helpful to be more lenient as more clients are added so everyone can watch all the content.
157
+ * Default value is true.
158
+ */
159
+ get shouldScaleMaxPlaybackDrift(): boolean;
160
+ set shouldScaleMaxPlaybackDrift(value: boolean);
161
+ /**
162
+ * Max amount of playback drift allowed in seconds.
163
+ * This will scale automatically according to the number of participants in the session when {@link shouldScaleMaxPlaybackDrift} is true.
143
164
  *
144
- * Defaults to a value of `1` second.
165
+ * @remarks
166
+ * Should the local clients playback position lag by more than the specified value, the coordinator will trigger a `catchup` action.
167
+ * Default value is `1.5` seconds.
145
168
  */
146
169
  get maxPlaybackDrift(): number;
147
170
  set maxPlaybackDrift(value: number);
148
171
  /**
149
- * Frequency with which position updates are broadcast to the rest of the group in
150
- * seconds.
172
+ * Controls whether or not to compute {@link positionUpdateInterval} based on whether user has initiated a playback command.
173
+ * Default value is true.
174
+ *
175
+ * @remarks
176
+ * When true, users that are simply watching but not controlling playback will report their positions less frequently.
177
+ * When a user has sent a transport command, they will begin sending position updates more frequently.
178
+ * Most Live Share apps have a concept of a primary presenter, and don't allow anyone to pause/play for the group.
179
+ * By ensuring only one/few users broadcast updates frequently, the server load is reduced considerably.
180
+ */
181
+ get shouldScalePositionUpdateInterval(): boolean;
182
+ set shouldScalePositionUpdateInterval(value: boolean);
183
+ /**
184
+ * Frequency with which position updates are broadcast to the rest of the group in seconds.
185
+ * When {@link shouldScalePositionUpdateInterval} is set to `true`, the value set is the minimum value.
186
+ * The value returned is the actual value used to send updates by the local user, which may be larger than the value set.
151
187
  *
152
188
  * @remarks
153
- * Defaults to a value of `2` seconds.
189
+ * Defaults to a minimum value of `2` seconds.
154
190
  */
155
191
  get positionUpdateInterval(): number;
156
192
  set positionUpdateInterval(value: number);
@@ -184,6 +220,14 @@ export declare class LiveMediaSessionCoordinator extends EventEmitter {
184
220
  * @returns a void promise that resolves once complete, throws if user does not have proper roles
185
221
  */
186
222
  seekTo(time: number): Promise<void>;
223
+ /**
224
+ * Sets the playback rate for everyone in the session.
225
+ *
226
+ * @param playbackRate the playback rate to set.
227
+ *
228
+ * @throws
229
+ * Throws an exception if the session/coordinator hasn't been initialized or {@link canSetPlaybackRate} is false.
230
+ */
187
231
  setPlaybackRate(playbackRate: number): Promise<void>;
188
232
  /**
189
233
  * Instructs the group to load a new track.
@@ -253,7 +297,7 @@ export declare class LiveMediaSessionCoordinator extends EventEmitter {
253
297
  * @hidden
254
298
  * Called by MediaSession to trigger the sending of a position update.
255
299
  */
256
- sendPositionUpdate(state: IMediaPlayerState): void;
300
+ sendPositionUpdate(state: IMediaPlayerState, targetClientId?: string): void;
257
301
  protected createChildren(acceptTransportChangesFrom?: UserMeetingRole[]): Promise<void>;
258
302
  private getPlayerPosition;
259
303
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveMediaSessionCoordinator.d.ts","sourceRoot":"","sources":["../../src/LiveMediaSessionCoordinator.ts"],"names":[],"mappings":"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"}