@amazon-devices/kepler-player-server 2.2.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.
- package/LICENSE +7 -0
- package/SystemBundles/1ec2db48db4ef1b38507a6710528f56ecd29852766bb462b44556dd0c9057b71.bundle +1801 -0
- package/SystemBundles/1ec2db48db4ef1b38507a6710528f56ecd29852766bb462b44556dd0c9057b71.bundle.map +1 -0
- package/SystemModules/amzn__kepler-player-server-2.modules.txt +6 -0
- package/SystemModules/amzn__kepler-player-server-2.private.modules.txt +22 -0
- package/SystemModules/keplerscript-system-bundle-config.json +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +3 -0
- package/dist/kepler/tm-manifest.json +1 -0
- package/dist/turbo-modules/IPlayerServer.d.ts +393 -0
- package/dist/turbo-modules/IPlayerServer.js +14 -0
- package/dist/turbo-modules/KeplerPlayerServerTurboModule.d.ts +18 -0
- package/dist/turbo-modules/KeplerPlayerServerTurboModule.js +3 -0
- package/dist/turbo-modules/PlayerServer.d.ts +42 -0
- package/dist/turbo-modules/PlayerServer.js +642 -0
- package/dist/turbo-modules/PlayerServerDataTypes/PlayerServerDataTypes.d.ts +319 -0
- package/dist/turbo-modules/PlayerServerDataTypes/PlayerServerDataTypes.js +67 -0
- package/dist/turbo-modules/PlayerServerDataTypes/PlayerServerDataTypesInternal.d.ts +17 -0
- package/dist/turbo-modules/PlayerServerDataTypes/PlayerServerDataTypesInternal.js +14 -0
- package/dist/turbo-modules/PlayerServerDataTypes/PlayerSessionError.d.ts +22 -0
- package/dist/turbo-modules/PlayerServerDataTypes/PlayerSessionError.js +37 -0
- package/dist/turbo-modules/PlayerServerFactory.d.ts +38 -0
- package/dist/turbo-modules/PlayerServerFactory.js +28 -0
- package/dist/turbo-modules/PlayerServerHandler.d.ts +374 -0
- package/dist/turbo-modules/PlayerServerHandler.js +1 -0
- package/dist/turbo-modules/__mocks__/KeplerPlayerServerTurboModule.d.ts +22 -0
- package/dist/turbo-modules/__mocks__/KeplerPlayerServerTurboModule.js +32 -0
- package/kepler-compatibility.json +14 -0
- package/kepler-transformed-package-info.json +3 -0
- package/package.json +1 -0
- package/react-native.config.js +17 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
import { IPlayerServerHandler } from './PlayerServerHandler';
|
|
2
|
+
import { IPlayerSessionError, IPlayerSessionStatus, IPlayerSessionId, ITimeRange, ITrackInfo } from './PlayerServerDataTypes/PlayerServerDataTypes';
|
|
3
|
+
/**
|
|
4
|
+
* Represent Kepler player server operations.
|
|
5
|
+
* This interface provides methods for managing Kepler player server handlers and updating
|
|
6
|
+
* Kepler player session status.
|
|
7
|
+
*
|
|
8
|
+
* For runtime errors, apps are expected to reject the promise with `Error` object, and if
|
|
9
|
+
* possible send the error code and message received from media player using `IPlayerSessionError`
|
|
10
|
+
*/
|
|
11
|
+
export interface IPlayerServer {
|
|
12
|
+
/**
|
|
13
|
+
* Assigns a handler to process requests for Kepler player actions associated with the given component ID.
|
|
14
|
+
*
|
|
15
|
+
* @details Assigning a handler is essential for processing Kepler player requests and
|
|
16
|
+
* implementing custom Kepler player logic.
|
|
17
|
+
* This call allows one handler per component. The active handler is the one set by the last invocation to setHandler.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { PackageInfo, PackageManager } from '@amazon-devices/package-manager-lib';
|
|
22
|
+
*
|
|
23
|
+
* const parseClientPackageManifest = async (): Promise<string> => {
|
|
24
|
+
* try {
|
|
25
|
+
* const selfPackageInfo: PackageInfo = await PackageManager.getSelfPackageInfo();
|
|
26
|
+
* for (const component of selfPackageInfo.components) {
|
|
27
|
+
* if(component.type === 'service') {
|
|
28
|
+
* return component.id;
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* return '';
|
|
32
|
+
* } catch (error) {
|
|
33
|
+
* console.warn(`Interactive: Unable to retrieve info from Package manager, ${error.message}`);
|
|
34
|
+
* return '';
|
|
35
|
+
* }
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* let serviceComponentId: string | undefined = await this.parseClientPackageManifest();
|
|
39
|
+
* playerServerRef.current?.setHandler(handler, serviceComponentId);
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
setHandler: (
|
|
43
|
+
/**
|
|
44
|
+
* An instance of the `IPlayerServerHandler` interface to invoke
|
|
45
|
+
* when Kepler player requests arrive.
|
|
46
|
+
*/
|
|
47
|
+
handler: IPlayerServerHandler,
|
|
48
|
+
/**
|
|
49
|
+
* An id of the `service component` interface representing the component for which the handler is being set.
|
|
50
|
+
* This MUST match the service ID declared in the application manifest.
|
|
51
|
+
*/
|
|
52
|
+
componentId: string) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Notifies interested clients about Kepler player buffered ranges.
|
|
55
|
+
*
|
|
56
|
+
* @details Updating the server session playback buffered ranges is crucial for reflecting changes in media playback
|
|
57
|
+
* status, currently selected media, and other related information.
|
|
58
|
+
* ```typescript
|
|
59
|
+
* let sessionId1: IPlayerSessionId = { id: 1 };
|
|
60
|
+
* let mediaPlayer1: HtmlMediaElement | VideoPlayer | AudioPlayer; // say associated with sessionId 1.
|
|
61
|
+
* let sessionId2: IPlayerSessionId = { id: 2 };
|
|
62
|
+
* let mediaPlayer2: HtmlMediaElement | VideoPlayer | AudioPlayer; // say associated with sessionId 2.
|
|
63
|
+
*
|
|
64
|
+
* private getBufferedRanges(mediaPlayer: HtmlMediaElement | VideoPlayer | AudioPlayer): Array<ITimeRange> {
|
|
65
|
+
* const result: Array<ITimeRange> = [];
|
|
66
|
+
* const bufferedTimeRanges = mediaPlayer.buffered;
|
|
67
|
+
* for (let i = 0; i < bufferedTimeRanges.length; ++i) {
|
|
68
|
+
* result.push({
|
|
69
|
+
* start: bufferedTimeRanges.start(i),
|
|
70
|
+
* end: bufferedTimeRanges.end(i)
|
|
71
|
+
* });
|
|
72
|
+
* }
|
|
73
|
+
* return result;
|
|
74
|
+
* }
|
|
75
|
+
*
|
|
76
|
+
* playerServerRef.current?.updateBufferedRanges(getBufferedRanges(mediaPlayer1), sessionId1);
|
|
77
|
+
* playerServerRef.current?.updateBufferedRanges(getBufferedRanges(mediaPlayer2), sessionId2);
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @returns Promise that resolves when the update is complete.
|
|
81
|
+
*/
|
|
82
|
+
updateBufferedRanges: (
|
|
83
|
+
/**
|
|
84
|
+
* Updated buffered ranges for player session.
|
|
85
|
+
*/
|
|
86
|
+
bufferedRanges: Array<ITimeRange>,
|
|
87
|
+
/**
|
|
88
|
+
* session id for which the buffered ranges are being updated.
|
|
89
|
+
*/
|
|
90
|
+
sessionId?: IPlayerSessionId) => Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Notifies interested clients about Kepler player session status updates.
|
|
93
|
+
*
|
|
94
|
+
* @details Updating the kepler player server session status is crucial for reflecting changes in media playback
|
|
95
|
+
* status, currently selected media, and other related information.
|
|
96
|
+
* For instance, apps will register media related EventListener on `AudioPlayer` or `VideoPlayer`
|
|
97
|
+
* (https://html.spec.whatwg.org/#event-handlers-on-elements,-document-objects,-and-window-objects)
|
|
98
|
+
* and then update the parameters of `IPlayerSessionStatus` accordingly and call
|
|
99
|
+
* updateStatus.
|
|
100
|
+
* When applicable, a Kepler player server is expected to issue session status updates upon acting on a
|
|
101
|
+
* Kepler player request received through the installed `IPlayerServerHandler` instance.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* let mediaPlayer1: HtmlMediaElement | VideoPlayer | AudioPlayer; // say associated with sessionId 1.
|
|
106
|
+
* let mediaPlayer2: HtmlMediaElement | VideoPlayer | AudioPlayer; // say associated with sessionId 2.
|
|
107
|
+
*
|
|
108
|
+
* let sampleData_1: IPlayerSessionStatus = {
|
|
109
|
+
* sessionID: { id: 1 },
|
|
110
|
+
* playbackSpeed: 1.0,
|
|
111
|
+
* playbackStatus: IPlaybackStatus.PAUSED,
|
|
112
|
+
* isMuted: true,
|
|
113
|
+
* volume: 0.0,
|
|
114
|
+
* seekable: false,
|
|
115
|
+
* duration: mediaPlayer1.duration || 0
|
|
116
|
+
* };
|
|
117
|
+
*
|
|
118
|
+
* let sampleData_2: IPlayerSessionStatus = {
|
|
119
|
+
* sessionID: { id: 2 },
|
|
120
|
+
* playbackSpeed: 2.0,
|
|
121
|
+
* playbackStatus: IPlaybackStatus.PLAYING,
|
|
122
|
+
* isMuted: false,
|
|
123
|
+
* volume: 0.75,
|
|
124
|
+
* seekable: true,
|
|
125
|
+
* duration: mediaPlayer2.duration || 0
|
|
126
|
+
* };
|
|
127
|
+
*
|
|
128
|
+
* playerServerRef.current?.updateStatus(
|
|
129
|
+
* [sampleData_1, sampleData_2]
|
|
130
|
+
* );
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* @returns Promise that resolves when the update is complete.
|
|
134
|
+
*/
|
|
135
|
+
updateStatus: (
|
|
136
|
+
/**
|
|
137
|
+
* Array of IPlayerSessionStatus containing updated session status.
|
|
138
|
+
*/
|
|
139
|
+
status: Array<IPlayerSessionStatus>) => Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Notifies interested clients about Kepler player new track.
|
|
142
|
+
* {Audio,Video}Player must register to "addtrack" EventListener in AudioTrackList | VideoTrackList | TextTrackList,
|
|
143
|
+
* and then call this API.
|
|
144
|
+
*
|
|
145
|
+
* @details Updating the server session new track is crucial for reflecting changes in media playback
|
|
146
|
+
* status, currently selected media, and other related information.
|
|
147
|
+
* Apps can register to "addtrack" EventListener on HtmlMediaElement.{audioTracks,videoTracks,textTracks}
|
|
148
|
+
* attributes and then call `IPlayerServer.addTrack` if the event is emitted.
|
|
149
|
+
*
|
|
150
|
+
* Example:
|
|
151
|
+
* ```typescript
|
|
152
|
+
* let media = useRef<VideoPlayer | AudioPlayer | null>(...);
|
|
153
|
+
* let sessionId = useRef<IPlayerSessionId | undefined>(...);
|
|
154
|
+
*
|
|
155
|
+
* const onAudioTrackAdded = (event: Event): void => {
|
|
156
|
+
* if (event instanceof TrackEvent) {
|
|
157
|
+
* let track = (event as TrackEvent).track;
|
|
158
|
+
* if (track !== undefined) {
|
|
159
|
+
* playerServerRef.current?.addTrack({
|
|
160
|
+
* id: track.id,
|
|
161
|
+
* type: "AUDIO",
|
|
162
|
+
* kind: track.kind,
|
|
163
|
+
* label: track.label,
|
|
164
|
+
* language: track.language,
|
|
165
|
+
* enabled: (track as AudioTrack).enabled
|
|
166
|
+
* }, sessionId.current);
|
|
167
|
+
* // Do other operations if needed.
|
|
168
|
+
* } else {
|
|
169
|
+
* console.error("Undefined audio track.");
|
|
170
|
+
* }
|
|
171
|
+
* }
|
|
172
|
+
* }
|
|
173
|
+
*
|
|
174
|
+
* const onVideoTrackAdded = (event: Event): void => {
|
|
175
|
+
* if (event instanceof TrackEvent) {
|
|
176
|
+
* let track = (event as TrackEvent).track;
|
|
177
|
+
* if (track !== undefined) {
|
|
178
|
+
* playerServerRef.current?.addTrack({
|
|
179
|
+
* id: track.id,
|
|
180
|
+
* type: "VIDEO",
|
|
181
|
+
* kind: track.kind,
|
|
182
|
+
* label: track.label,
|
|
183
|
+
* language: track.language,
|
|
184
|
+
* enabled: (track as VideoTrack).selected
|
|
185
|
+
* }, sessionId.current);
|
|
186
|
+
* // Do other operations if needed.
|
|
187
|
+
* } else {
|
|
188
|
+
* console.error("Undefined video track.");
|
|
189
|
+
* }
|
|
190
|
+
* }
|
|
191
|
+
* }
|
|
192
|
+
*
|
|
193
|
+
* const onTextTrackAdded = (event: Event): void => {
|
|
194
|
+
* if (event instanceof TrackEvent) {
|
|
195
|
+
* let track = (event as TrackEvent).track;
|
|
196
|
+
* if (track !== undefined) {
|
|
197
|
+
* playerServerRef.current?.addTrack({
|
|
198
|
+
* id: track.id,
|
|
199
|
+
* type: "TEXT",
|
|
200
|
+
* kind: track.kind,
|
|
201
|
+
* label: track.label,
|
|
202
|
+
* language: track.language,
|
|
203
|
+
* mode: (track as TextTrack).mode
|
|
204
|
+
* }, sessionId.current);
|
|
205
|
+
* // Do other operations if needed.
|
|
206
|
+
* } else {
|
|
207
|
+
* console.error("Undefined text track.");
|
|
208
|
+
* }
|
|
209
|
+
* }
|
|
210
|
+
* }
|
|
211
|
+
*
|
|
212
|
+
* media.current?.audioTracks.addEventListener("addtrack", onAudioTrackAdded);
|
|
213
|
+
* media.current?.videoTracks.addEventListener("addtrack", onVideoTrackAdded);
|
|
214
|
+
* media.current?.textTracks.addEventListener("addtrack", onTextTrackAdded);
|
|
215
|
+
* ```
|
|
216
|
+
*
|
|
217
|
+
* @returns Promise that resolves when the update is complete.
|
|
218
|
+
*/
|
|
219
|
+
addTrack: (
|
|
220
|
+
/**
|
|
221
|
+
* Read-only details of new track added.
|
|
222
|
+
*/
|
|
223
|
+
newTrack: ITrackInfo,
|
|
224
|
+
/**
|
|
225
|
+
* Optional. The session ID of the session whose new track has been added.
|
|
226
|
+
* If not provided, treat as a request for data on all sessions.
|
|
227
|
+
*/
|
|
228
|
+
sessionId?: IPlayerSessionId) => Promise<void>;
|
|
229
|
+
/**
|
|
230
|
+
* Notifies interested clients about Kepler player existing track removed.
|
|
231
|
+
* {Audio,Video}Player must register to "removetrack" EventListener in AudioTrackList | VideoTrackList | TextTrackList,
|
|
232
|
+
* and then call this API.
|
|
233
|
+
*
|
|
234
|
+
* @details Updating the server session removed track is crucial for reflecting changes in media playback
|
|
235
|
+
* status, currently selected media, and other related information.
|
|
236
|
+
* Apps can register to "removetrack" EventListener on HtmlMediaElement.{audioTracks,videoTracks,textTracks}
|
|
237
|
+
* attributes and then call `IPlayerServer.removeTrack` if the event is emitted.
|
|
238
|
+
*
|
|
239
|
+
* Example:
|
|
240
|
+
* ```typescript
|
|
241
|
+
* let media = useRef<VideoPlayer | AudioPlayer | null>(...);
|
|
242
|
+
* let sessionId = useRef<IPlayerSessionId | undefined>(...);
|
|
243
|
+
*
|
|
244
|
+
* const onAudioTrackRemoved = (event: Event): void => {
|
|
245
|
+
* if (event instanceof TrackEvent) {
|
|
246
|
+
* let track = (event as TrackEvent).track;
|
|
247
|
+
* if (track !== undefined) {
|
|
248
|
+
* playerServerRef.current?.removeTrack({
|
|
249
|
+
* id: track.id,
|
|
250
|
+
* type: "AUDIO",
|
|
251
|
+
* kind: track.kind,
|
|
252
|
+
* label: track.label,
|
|
253
|
+
* language: track.language,
|
|
254
|
+
* enabled: (track as AudioTrack).enabled
|
|
255
|
+
* }, sessionId.current);
|
|
256
|
+
* // Do other operations if needed.
|
|
257
|
+
* } else {
|
|
258
|
+
* console.error("Undefined audio track.");
|
|
259
|
+
* }
|
|
260
|
+
* }
|
|
261
|
+
* }
|
|
262
|
+
*
|
|
263
|
+
* const onVideoTrackRemoved = (event: Event): void => {
|
|
264
|
+
* if (event instanceof TrackEvent) {
|
|
265
|
+
* let track = (event as TrackEvent).track;
|
|
266
|
+
* if (track !== undefined) {
|
|
267
|
+
* playerServerRef.current?.removeTrack({
|
|
268
|
+
* id: track.id,
|
|
269
|
+
* type: "VIDEO",
|
|
270
|
+
* kind: track.kind,
|
|
271
|
+
* label: track.label,
|
|
272
|
+
* language: track.language,
|
|
273
|
+
* enabled: (track as VideoTrack).selected
|
|
274
|
+
* }, sessionId.current);
|
|
275
|
+
* // Do other operations if needed.
|
|
276
|
+
* } else {
|
|
277
|
+
* console.error("Undefined video track.");
|
|
278
|
+
* }
|
|
279
|
+
* }
|
|
280
|
+
* }
|
|
281
|
+
*
|
|
282
|
+
* const onTextTrackRemoved = (event: Event): void => {
|
|
283
|
+
* if (event instanceof TrackEvent) {
|
|
284
|
+
* let track = (event as TrackEvent).track;
|
|
285
|
+
* if (track !== undefined) {
|
|
286
|
+
* playerServerRef.current?.removeTrack({
|
|
287
|
+
* id: track.id,
|
|
288
|
+
* type: "TEXT",
|
|
289
|
+
* kind: track.kind,
|
|
290
|
+
* label: track.label,
|
|
291
|
+
* language: track.language,
|
|
292
|
+
* mode: (track as TextTrack).mode
|
|
293
|
+
* }, sessionId.current);
|
|
294
|
+
* // Do other operations if needed.
|
|
295
|
+
* } else {
|
|
296
|
+
* console.error("Undefined text track.");
|
|
297
|
+
* }
|
|
298
|
+
* }
|
|
299
|
+
* }
|
|
300
|
+
*
|
|
301
|
+
* media.current?.audioTracks.addEventListener("removetrack", onAudioTrackRemoved);
|
|
302
|
+
* media.current?.videoTracks.addEventListener("removetrack", onVideoTrackRemoved);
|
|
303
|
+
* media.current?.textTracks.addEventListener("removetrack", onTextTrackRemoved);
|
|
304
|
+
* ```
|
|
305
|
+
*
|
|
306
|
+
* @returns Promise that resolves when the update is complete.
|
|
307
|
+
*/
|
|
308
|
+
removeTrack: (
|
|
309
|
+
/**
|
|
310
|
+
* Readonly details of existing track removed.
|
|
311
|
+
*/
|
|
312
|
+
removedTrack: ITrackInfo,
|
|
313
|
+
/**
|
|
314
|
+
* Optional. The session ID of the session whose existing track has been removed.
|
|
315
|
+
* If not provided, treat as a request for data on all sessions.
|
|
316
|
+
*/
|
|
317
|
+
sessionId?: IPlayerSessionId) => Promise<void>;
|
|
318
|
+
/**
|
|
319
|
+
* Provides a way to send custom message to interactive component.
|
|
320
|
+
* Any JSON type can be sent as a message (except `undefined`).
|
|
321
|
+
*
|
|
322
|
+
* @details This is particularly useful in providing custom messages which can be used to by client to update UI.
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ```typescript
|
|
326
|
+
* // Create any object.
|
|
327
|
+
* const customMessage = {
|
|
328
|
+
* video: {
|
|
329
|
+
* title: "Video 1",
|
|
330
|
+
* myVideoId: 34
|
|
331
|
+
* }
|
|
332
|
+
* };
|
|
333
|
+
* let sessionId = useRef<IPlayerSessionId | undefined>(...);
|
|
334
|
+
*
|
|
335
|
+
* try {
|
|
336
|
+
* playerServerRef.current?.sendMessage(customMessage, sessionId);
|
|
337
|
+
* } catch (error) {
|
|
338
|
+
* console.error('Error while calling sendMessage: ', error);
|
|
339
|
+
* }
|
|
340
|
+
* ```
|
|
341
|
+
*
|
|
342
|
+
* @returns Promise that resolves when the message is sent or rejects with an error
|
|
343
|
+
* if the request fails, or `message` is undefined.
|
|
344
|
+
*/
|
|
345
|
+
sendMessage: (
|
|
346
|
+
/**
|
|
347
|
+
* Custom message to be sent. send JSON value (except `undefined`) as message.
|
|
348
|
+
*/
|
|
349
|
+
message: any,
|
|
350
|
+
/**
|
|
351
|
+
* Optional. The session ID of the session for which custom message needs to be handled.
|
|
352
|
+
*/
|
|
353
|
+
sessionId?: IPlayerSessionId) => Promise<void>;
|
|
354
|
+
/**
|
|
355
|
+
* Provides the way to send the error from service component to interactive component.
|
|
356
|
+
*
|
|
357
|
+
* Apps can register to "error" EventListener on HtmlMediaElement instance
|
|
358
|
+
* and then call `IPlayerServer.addTrack` if the event is emitted.
|
|
359
|
+
*
|
|
360
|
+
* @example
|
|
361
|
+
* ```typescript
|
|
362
|
+
* let media = useRef<VideoPlayer | AudioPlayer | null>(...);
|
|
363
|
+
* let sessionId = useRef<IPlayerSessionId | undefined>(...);
|
|
364
|
+
*
|
|
365
|
+
* const onError = (error: MediaError) => {
|
|
366
|
+
* let errorObj: IPlayerSessionError = {
|
|
367
|
+
* code: error.code,
|
|
368
|
+
* message: error.message
|
|
369
|
+
* }
|
|
370
|
+
*
|
|
371
|
+
* try {
|
|
372
|
+
* playerServerRef.current?.sendError(errorObj, sessionId);
|
|
373
|
+
* } catch (error) {
|
|
374
|
+
* console.error('Error while calling sendError: ', error);
|
|
375
|
+
* }
|
|
376
|
+
* };
|
|
377
|
+
*
|
|
378
|
+
*
|
|
379
|
+
* media.current?.addEventListener("error", onError);
|
|
380
|
+
* ```
|
|
381
|
+
*
|
|
382
|
+
* @returns Promise that resolves when the error is sent.
|
|
383
|
+
*/
|
|
384
|
+
sendError: (
|
|
385
|
+
/**
|
|
386
|
+
* Error object to be sent.
|
|
387
|
+
*/
|
|
388
|
+
error: IPlayerSessionError,
|
|
389
|
+
/**
|
|
390
|
+
* Optional. The session ID of the session for which custom message needs to be handled.
|
|
391
|
+
*/
|
|
392
|
+
sessionId?: IPlayerSessionId) => Promise<void>;
|
|
393
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Amazon.com, Inc. or its affiliates. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* AMAZON PROPRIETARY/CONFIDENTIAL
|
|
5
|
+
*
|
|
6
|
+
* You may not use this file except in compliance with the terms and
|
|
7
|
+
* conditions set forth in the accompanying LICENSE.TXT file.
|
|
8
|
+
*
|
|
9
|
+
* THESE MATERIALS ARE PROVIDED ON AN "AS IS" BASIS. AMAZON SPECIFICALLY
|
|
10
|
+
* DISCLAIMS, WITH RESPECT TO THESE MATERIALS, ALL WARRANTIES, EXPRESS,
|
|
11
|
+
* IMPLIED, OR STATUTORY, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
|
12
|
+
* FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { KeplerTurboModule } from '@amazon-devices/keplerscript-turbomodule-api';
|
|
2
|
+
import { IPlayerSessionError, IPlayerSessionPosition, IPlayerSessionStatus, IPlayerSessionId, ITimeRange, ITrackInfo } from './PlayerServerDataTypes/PlayerServerDataTypes';
|
|
3
|
+
import { PlayerEventHandlerParams } from './PlayerServerDataTypes/PlayerServerDataTypesInternal';
|
|
4
|
+
export interface KeplerPlayerServerTurboModule extends KeplerTurboModule {
|
|
5
|
+
setHandler: (handleCall: (result: PlayerEventHandlerParams, transactionId: number) => void, componentId: string) => void;
|
|
6
|
+
updateBufferedRanges: (bufferedRanges: Array<ITimeRange>, sessionId: IPlayerSessionId) => void;
|
|
7
|
+
updateStatus: (statusArray: Array<IPlayerSessionStatus>) => void;
|
|
8
|
+
addTrack: (newTrack: ITrackInfo, sessionId: IPlayerSessionId) => void;
|
|
9
|
+
removeTrack: (removedTrack: ITrackInfo, sessionId: IPlayerSessionId) => void;
|
|
10
|
+
sendMessage: (message: string, sessionId: IPlayerSessionId) => void;
|
|
11
|
+
sendError: (error: IPlayerSessionError, sessionId: IPlayerSessionId) => void;
|
|
12
|
+
updatePlaybackPosition: (listenerId: number, sessionPositions: Array<IPlayerSessionPosition>) => void;
|
|
13
|
+
transactionSuccess: (transactionId: number) => void;
|
|
14
|
+
transactionSuccessWithValue: (transactionId: number, returnValue: any) => void;
|
|
15
|
+
transactionError: (transactionId: number, error: string) => void;
|
|
16
|
+
}
|
|
17
|
+
declare const _default: KeplerPlayerServerTurboModule;
|
|
18
|
+
export default _default;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { IPlayerServer } from './IPlayerServer';
|
|
2
|
+
import { IPlayerServerHandler } from './PlayerServerHandler';
|
|
3
|
+
import { IPlayerSessionError, IPlayerSessionStatus, IPlayerSessionId, ITimeRange, ITrackInfo } from './PlayerServerDataTypes/PlayerServerDataTypes';
|
|
4
|
+
import { PlayerEventHandlerParams } from './PlayerServerDataTypes/PlayerServerDataTypesInternal';
|
|
5
|
+
/**
|
|
6
|
+
* @ignore
|
|
7
|
+
* The implementation of IPlayerServer.
|
|
8
|
+
*/
|
|
9
|
+
export declare class PlayerServer implements IPlayerServer {
|
|
10
|
+
private mServerHandler;
|
|
11
|
+
private mPositionListenerMap;
|
|
12
|
+
clearPositionListeners(sessionId?: IPlayerSessionId, listenerId?: number): boolean;
|
|
13
|
+
handleEvent(result: PlayerEventHandlerParams, transactionId: number): void;
|
|
14
|
+
/**
|
|
15
|
+
* {@inheritDoc}
|
|
16
|
+
*/
|
|
17
|
+
setHandler(_handler: IPlayerServerHandler, _componentId: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* {@inheritDoc}
|
|
20
|
+
*/
|
|
21
|
+
updateBufferedRanges(_bufferedRanges: Array<ITimeRange>, _sessionId?: IPlayerSessionId): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* {@inheritDoc}
|
|
24
|
+
*/
|
|
25
|
+
updateStatus(_states: Array<IPlayerSessionStatus>): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* {@inheritDoc}
|
|
28
|
+
*/
|
|
29
|
+
addTrack(_newTrack: ITrackInfo, _sessionId?: IPlayerSessionId): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* {@inheritDoc}
|
|
32
|
+
*/
|
|
33
|
+
removeTrack(_removedTrack: ITrackInfo, _sessionId?: IPlayerSessionId): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* {@inheritDoc}
|
|
36
|
+
*/
|
|
37
|
+
sendMessage(_message: any, _sessionId?: IPlayerSessionId): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* {@inheritDoc}
|
|
40
|
+
*/
|
|
41
|
+
sendError(_error: IPlayerSessionError, _sessionId?: IPlayerSessionId): Promise<void>;
|
|
42
|
+
}
|