@jwplayer/jwplayer-react-native 1.0.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 (61) hide show
  1. package/.github/CODEOWNERS +2 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  4. package/.github/ISSUE_TEMPLATE/question.md +11 -0
  5. package/.github/PULL_REQUEST_TEMPLATE.md +15 -0
  6. package/CODE_OF_CONDUCT.md +128 -0
  7. package/LICENSE +21 -0
  8. package/README.md +425 -0
  9. package/RNJWPlayer.podspec +44 -0
  10. package/android/.gradle/8.1.1/checksums/checksums.lock +0 -0
  11. package/android/.gradle/8.1.1/dependencies-accessors/dependencies-accessors.lock +0 -0
  12. package/android/.gradle/8.1.1/dependencies-accessors/gc.properties +0 -0
  13. package/android/.gradle/8.1.1/fileChanges/last-build.bin +0 -0
  14. package/android/.gradle/8.1.1/fileHashes/fileHashes.lock +0 -0
  15. package/android/.gradle/8.1.1/gc.properties +0 -0
  16. package/android/.gradle/8.2/checksums/checksums.lock +0 -0
  17. package/android/.gradle/8.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  18. package/android/.gradle/8.2/dependencies-accessors/gc.properties +0 -0
  19. package/android/.gradle/8.2/fileChanges/last-build.bin +0 -0
  20. package/android/.gradle/8.2/fileHashes/fileHashes.lock +0 -0
  21. package/android/.gradle/8.2/gc.properties +0 -0
  22. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  23. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  24. package/android/.gradle/config.properties +2 -0
  25. package/android/.gradle/vcs-1/gc.properties +0 -0
  26. package/android/.idea/gradle.xml +12 -0
  27. package/android/.idea/migrations.xml +10 -0
  28. package/android/.idea/misc.xml +10 -0
  29. package/android/.idea/vcs.xml +6 -0
  30. package/android/.idea/workspace.xml +54 -0
  31. package/android/build.gradle +110 -0
  32. package/android/local.properties +8 -0
  33. package/android/src/main/AndroidManifest.xml +25 -0
  34. package/android/src/main/java/com/jwplayer/rnjwplayer/ArrayUtil.java +129 -0
  35. package/android/src/main/java/com/jwplayer/rnjwplayer/CastOptionsProvider.java +55 -0
  36. package/android/src/main/java/com/jwplayer/rnjwplayer/MapUtil.java +136 -0
  37. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayer.java +76 -0
  38. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerAds.java +239 -0
  39. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerModule.java +526 -0
  40. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerPackage.java +30 -0
  41. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerView.java +1499 -0
  42. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerViewManager.java +171 -0
  43. package/android/src/main/java/com/jwplayer/rnjwplayer/Util.java +219 -0
  44. package/android/src/main/java/com/jwplayer/rnjwplayer/WidevineCallback.java +62 -0
  45. package/badges/license.svg +1 -0
  46. package/badges/version.svg +1 -0
  47. package/docs/legacy_readme.md +634 -0
  48. package/docs/props.md +43 -0
  49. package/docs/types.md +254 -0
  50. package/index.d.ts +564 -0
  51. package/index.js +699 -0
  52. package/ios/RNJWPlayer/RCTConvert+RNJWPlayer.swift +119 -0
  53. package/ios/RNJWPlayer/RNJWPlayer-Bridging-Header.h +5 -0
  54. package/ios/RNJWPlayer/RNJWPlayerAds.swift +260 -0
  55. package/ios/RNJWPlayer/RNJWPlayerModels.swift +149 -0
  56. package/ios/RNJWPlayer/RNJWPlayerView.swift +1837 -0
  57. package/ios/RNJWPlayer/RNJWPlayerViewController.swift +616 -0
  58. package/ios/RNJWPlayer/RNJWPlayerViewManager.m +132 -0
  59. package/ios/RNJWPlayer/RNJWPlayerViewManager.swift +500 -0
  60. package/ios/RNJWPlayer.xcodeproj/project.pbxproj +323 -0
  61. package/package.json +45 -0
package/index.d.ts ADDED
@@ -0,0 +1,564 @@
1
+ declare module "jwplayer-react-native" {
2
+ import React from "react";
3
+ import { ViewStyle } from "react-native";
4
+
5
+ interface JwConfig {
6
+ pid?: string;
7
+ mute?: boolean;
8
+ forceLegacyConfig?: boolean;
9
+ useTextureView?: boolean;
10
+ autostart?: boolean;
11
+ nextupoffset?: string | number; // String with % or number
12
+ repeat?: boolean;
13
+ allowCrossProtocolRedirectsSupport?: boolean; // maybe android only?
14
+ displaytitle?: boolean;
15
+ displaydescription?: boolean;
16
+ stretching?: JwStretching;
17
+ thumbnailPreview?: JwThumbnailPreview;
18
+ preload?: boolean;
19
+ playlist?: JwPlaylistItem[] | string;
20
+ sources?: JwSource[]; // Can be used in place of `playlist` to build a playlist, but not recommended (cannot be used for DRM)
21
+ file?: string; // Can be used in place of `playlist` to build a playlist, but not recommended (cannot be used for DRM)
22
+ playlistIndex?: number;
23
+ related?: JwRelatedConfig;
24
+ uiConfig?: JwUiConfig;
25
+ logoView?: JwLogoView;
26
+ advertising?: JwAdvertisingConfig;
27
+ playbackRates?: number[];
28
+ playbackRateControls?: boolean;
29
+ license: string;
30
+ }
31
+
32
+ type JwThumbnailPreview = 101 | 102 | 103;
33
+
34
+ type JwStretching = "uniform" | "fill" | "exactfit" | "none";
35
+
36
+ type JwAdvertisingConfig = VmapAdvertisingConfig | VastAdvertisingConfig | ImaVmapAdvertisingConfig
37
+ | ImaAdvertisingConfig | ImaDaiAdvertisingConfig;
38
+
39
+ interface JwAdRules {
40
+ startOn?: number;
41
+ frequency?: number;
42
+ timeBetweenAds?: number;
43
+ startOnSeek?: JwStartOnSeek;
44
+ }
45
+
46
+ type JwStartOnSeek = "pre" | "none";
47
+ interface VmapAdvertisingConfig {
48
+ cuetext?: string;
49
+ adpodmessage?: string;
50
+ vpaidcontrols?: boolean;
51
+ requestTimeout?: number;
52
+ creativeTimeout?: number;
53
+ conditionaladoptout?: boolean;
54
+ schedule: string; // Must bestring for VMAP
55
+ rules?: JwAdRules;
56
+ allowedOmidVendors?: string[];
57
+ omidSupport?: JwOmidSupport;
58
+ admessage?: string;
59
+ skipmessage?: string;
60
+ skiptext?: string;
61
+ skipoffset?: number;
62
+ }
63
+
64
+ interface VastAdvertisingConfig {
65
+ cuetext?: string;
66
+ adpodmessage?: string;
67
+ vpaidcontrols?: boolean;
68
+ requestTimeout?: number;
69
+ creativeTimeout?: number;
70
+ conditionaladoptout?: boolean;
71
+ schedule?: JwAdBreak[]; // Array of breaks or object of breaks
72
+ rules: JwAdRules;
73
+ allowedOmidVendors?: string[];
74
+ omidSupport?: JwOmidSupport;
75
+ admessage?: string;
76
+ skipmessage?: string;
77
+ skiptext?: string;
78
+ skipoffset?: number;
79
+ }
80
+
81
+ type JwOmidSupport = "auto" | "enabled" | "disabled";
82
+
83
+ interface ImaVmapAdvertisingConfig {
84
+ imaSdkSettings?: JwImaSdkSettings;
85
+ tag?: string;
86
+ }
87
+
88
+ interface ImaAdvertisingConfig {
89
+ imaSdkSettings?: JwImaSdkSettings;
90
+ schedule?: JwAdBreak[] | JwAdBreak; // Array of breaks or object of breaks
91
+ }
92
+
93
+ interface ImaDaiAdvertisingConfig {
94
+ imaDaiSettings?: JwImaDaiSettings;
95
+ imaSdkSettings?: JwImaSdkSettings;
96
+ }
97
+
98
+ interface JwImaSdkSettings {
99
+ sessionId?: string;
100
+ ppid?: string;
101
+ autoPlayAdBreaks?: boolean;
102
+ language?: string;
103
+ maxRedirects?: number; //int
104
+ playerType?: string;
105
+ playerVersion?: string;
106
+ isDebugMode?: boolean;
107
+ doesRestrictToCustomPlayer?: boolean;
108
+ }
109
+
110
+ interface JwLogoView {
111
+ imageFile: string;
112
+ fades: boolean; // margin required for fade on Android
113
+ margin?: number;
114
+ position?: JwLogoPosition;
115
+ webLink: string;
116
+ }
117
+
118
+ type JwLogoPosition = "topLeft" | "topRight" | "bottomLeft" | "bottomRight";
119
+
120
+ interface JwUiConfig { // all default to false. When using this, it's specify all or they are assumed false
121
+ hasOverlay?: boolean;
122
+ hasControlbar?: boolean;
123
+ hasCenterControls?: boolean;
124
+ hasNextUp?: boolean;
125
+ hasSideSeek?: boolean;
126
+ hasLogoView?: boolean;
127
+ hasError?: boolean;
128
+ hasPlaylist?: boolean;
129
+ hasQualitySubMenu?: boolean;
130
+ hasCaptionsSubMenu?: boolean;
131
+ hasPlaybackRatesSubMenu?: boolean;
132
+ hasAudiotracksSubMenu?: boolean;
133
+ hasMenu?: boolean;
134
+ hasPlayerControlsContainer?: boolean;
135
+ hasCastingMenu?: boolean;
136
+ hasChapters?: boolean;
137
+ hasAds?: boolean;
138
+ }
139
+
140
+ interface JwRelatedConfig {
141
+ file?: string;
142
+ oncomplete?: JwRelatedOnComplete;
143
+ onclick?: JwOnRelatedClick;
144
+ // autoplaymessage: string; // deprecated
145
+ autoplaytimer: number;
146
+ }
147
+
148
+ interface JwPlaylistItem {
149
+ title?: string;
150
+ description?: string;
151
+ file?: string;
152
+ image?: string;
153
+ mediaid?: string;
154
+ feedid?: string;
155
+ recommendations?: string;
156
+ starttime?: number; // double -- default 0.0
157
+ duration: number; // int -- default 0
158
+ tracks?: JwTrack[];
159
+ sources?: JwSource[];
160
+ externalMetadata?: JwExternalMetadata[];
161
+ adschedule?: JwAdBreak[]; // array of schedules
162
+ schedule?: { [key: string]: JwAdBreak };
163
+ imaDaiSettings?: JwImaDaiSettings;
164
+ httpheaders?: { [key: string]: string };
165
+ }
166
+
167
+ interface JwImaDaiSettings {
168
+ videoID?: string;
169
+ cmsID?: string;
170
+ assetKey?: string;
171
+ apiKey?: string;
172
+ streamType?: string;
173
+ adTagParameters?: { [key: string]: string };
174
+ }
175
+
176
+ interface JwAdBreak {
177
+ ad?: string | string[];
178
+ offset?: string;
179
+ skipoffset?: number;
180
+ type?: JwAdType;
181
+ custParams?: { [key: string]: string };
182
+ }
183
+
184
+ type JwAdType = "LINEAR" | "NONLINEAR";
185
+
186
+ interface JwExternalMetadata {
187
+ startTime?: number; // double
188
+ endTime?: number; // double
189
+ id: number; // int
190
+ }
191
+
192
+ interface JwSource {
193
+ drm?: JwDrm;
194
+ file?: string;
195
+ label?: string;
196
+ default?: string;
197
+ type?: string;
198
+ httpheaders?: { [key: string]: string };
199
+ }
200
+
201
+ interface JwDrm {
202
+ widevine?: JwWidevine;
203
+ fairplay?: JwFairplay;
204
+ }
205
+
206
+ interface JwFairplay {
207
+ processSpcUrl?: string;
208
+ certificateUrl?: string;
209
+ }
210
+
211
+ interface JwWidevine {
212
+ url?: string;
213
+ keySetId?: string;
214
+ }
215
+
216
+ interface JwTrack {
217
+ id?: string;
218
+ file?: string;
219
+ kind: string;
220
+ label?: string;
221
+ default?: boolean;
222
+ }
223
+
224
+ type JwRelatedOnComplete = "hide" | "show" | "none" | "autoplay";
225
+
226
+ type JwOnRelatedClick = "play" | "link";
227
+
228
+ interface AudioTrack {
229
+ autoSelect: boolean;
230
+ defaultTrack: boolean;
231
+ groupId: string;
232
+ language: string;
233
+ name: string;
234
+ }
235
+
236
+ export interface QualityLevel {
237
+ playListPosition: number;
238
+ bitRate: number;
239
+ label: string;
240
+ height: number;
241
+ width: number;
242
+ index: number;
243
+ }
244
+
245
+ interface CastingDevice {
246
+ name?: string;
247
+ identifier?: string;
248
+ }
249
+ interface Source {
250
+ file: string;
251
+ label: string;
252
+ default?: boolean;
253
+ }
254
+ interface Track {
255
+ file: string;
256
+ label: string;
257
+ default?: boolean;
258
+ }
259
+ interface JWAdSettings {
260
+ allowsBackgroundPlayback?: boolean;
261
+ // Add other ad settings properties as needed
262
+ }
263
+ interface IMASettings {
264
+ locale?: string;
265
+ ppid?: string;
266
+ maxRedirects?: number;
267
+ sessionID?: string;
268
+ debugMode?: boolean;
269
+ }
270
+ interface AdSchedule {
271
+ tag: string;
272
+ offset: string;
273
+ }
274
+ // interface CompanionAdSlot {
275
+ // viewId: string; // Reference to a UIView in the application
276
+ // size?: { width: number; height: number };
277
+ // }
278
+ interface GoogleDAIStream {
279
+ videoID?: string;
280
+ cmsID?: string;
281
+ assetKey?: string;
282
+ apiKey?: string;
283
+ adTagParameters?: { [key: string]: string };
284
+ }
285
+ interface AdRule {
286
+ startOn: number;
287
+ frequency: number;
288
+ timeBetweenAds: number;
289
+ startOnSeek: 'none' | 'pre'; // Mapped from JWAdShownOnSeek
290
+ }
291
+ // interface FriendlyObstruction {
292
+ // viewId: string;
293
+ // purpose: 'mediaControls' | 'closeAd' | 'notVisible' | 'other'; // Mapped from JWFriendlyObstructionPurpose
294
+ // reason?: string;
295
+ // }
296
+ type ClientTypes = "vast" | "ima" | "ima_dai";
297
+ interface VASTAdvertising {
298
+ adSchedule?: AdSchedule[];
299
+ adVmap?: string;
300
+ tag?: string; // Vast xml url
301
+ openBrowserOnAdClick?: boolean;
302
+ adClient: "vast";
303
+ adRules?: AdRule;
304
+ adSettings?: JWAdSettings;
305
+ }
306
+ interface IMAAdvertising {
307
+ adSchedule?: AdSchedule[];
308
+ adVmap?: string;
309
+ tag?: string; // Vast xml url
310
+ adClient: "ima";
311
+ adRules?: AdRule;
312
+ imaSettings?: IMASettings;
313
+ // companionAdSlots?: CompanionAdSlot[];
314
+ // friendlyObstructions?: FriendlyObstruction[];
315
+ }
316
+ interface IMA_DAIAdvertising {
317
+ adClient: "ima_dai";
318
+ imaSettings?: IMASettings;
319
+ // friendlyObstructions?: FriendlyObstruction[];
320
+ googleDAIStream?: GoogleDAIStream;
321
+ }
322
+ type Advertising = VASTAdvertising | IMAAdvertising | IMA_DAIAdvertising;
323
+ interface PlaylistItem {
324
+ file: string;
325
+ sources?: Source[];
326
+ image?: string;
327
+ title?: string;
328
+ description?: string;
329
+ mediaId?: string;
330
+ adSchedule?: AdSchedule[];
331
+ adVmap?: string;
332
+ tracks?: Track[];
333
+ recommendations?: string;
334
+ startTime?: number;
335
+ autostart?: boolean;
336
+ }
337
+ type RelatedOnClicks = "play" | "link";
338
+ type RelatedOnCompletes = "show" | "hide" | "autoplay";
339
+ interface Related {
340
+ onClick?: RelatedOnClicks;
341
+ onComplete?: RelatedOnCompletes;
342
+ heading?: string;
343
+ url?: string;
344
+ autoplayMessage?: string;
345
+ autoplayTimer?: number;
346
+ }
347
+ interface Font {
348
+ name?: string;
349
+ size?: number;
350
+ }
351
+ type EdgeStyles = "none" | "dropshadow" | "raised" | "depressed" | "uniform";
352
+ interface Styling {
353
+ colors?: {
354
+ buttons?: string;
355
+ backgroundColor?: string;
356
+ fontColor?: string;
357
+ timeslider?: { progress?: string; rail?: string; thumb?: string };
358
+ };
359
+ font?: Font;
360
+ displayTitle?: boolean;
361
+ displayDescription?: boolean;
362
+ captionsStyle?: {
363
+ font?: Font;
364
+ fontColor?: string;
365
+ backgroundColor?: string;
366
+ highlightColor?: string;
367
+ edgeStyle?: EdgeStyles;
368
+ };
369
+ menuStyle: {
370
+ font?: Font;
371
+ fontColor?: string;
372
+ backgroundColor?: string;
373
+ };
374
+ }
375
+ type Preloads = "auto" | "none";
376
+ type InterfaceBehaviors = "normal" | "hidden" | "onscreen";
377
+ type UIGroups =
378
+ | "overlay"
379
+ | "control_bar"
380
+ | "center_controls"
381
+ | "next_up"
382
+ | "error"
383
+ | "playlist"
384
+ | "controls_container"
385
+ | "settings_menu"
386
+ | "quality_submenu"
387
+ | "captions_submenu"
388
+ | "playback_submenu"
389
+ | "audiotracks_submenu"
390
+ | "casting_menu";
391
+ type AudioSessionCategory =
392
+ | "Ambient"
393
+ | "SoloAmbient"
394
+ | "Playback"
395
+ | "Record"
396
+ | "PlayAndRecord"
397
+ | "MultiRoute";
398
+ type AudioSessionCategoryOptions =
399
+ | "MixWithOthers"
400
+ | "DuckOthers"
401
+ | "AllowBluetooth"
402
+ | "DefaultToSpeaker"
403
+ | "InterruptSpokenAudioAndMix"
404
+ | "AllowBluetoothA2DP"
405
+ | "AllowAirPlay"
406
+ | "OverrideMutedMicrophone";
407
+ type AudioSessionMode =
408
+ | "Default"
409
+ | "VoiceChat"
410
+ | "VideoChat"
411
+ | "GameChat"
412
+ | "VideoRecording"
413
+ | "Measurement"
414
+ | "MoviePlayback"
415
+ | "SpokenAudio"
416
+ | "VoicePrompt";
417
+ type JWControlType =
418
+ | "forward"
419
+ | "rewind"
420
+ | "pip"
421
+ | "airplay"
422
+ | "chromecast"
423
+ | "next"
424
+ | "previous"
425
+ | "settings"
426
+ | "languages"
427
+ | "fullscreen";
428
+ interface Config {
429
+ license: string;
430
+ advertising?: Advertising;
431
+ autostart?: boolean;
432
+ controls?: boolean;
433
+ repeat?: boolean;
434
+ nextUpStyle?: { offsetSeconds: number; offsetPercentage: number };
435
+ styling?: Styling;
436
+ backgroundAudioEnabled?: boolean;
437
+ category?: AudioSessionCategory;
438
+ categoryOptions?: Array<AudioSessionCategoryOptions>;
439
+ mode?: AudioSessionMode;
440
+ fullScreenOnLandscape?: boolean;
441
+ landscapeOnFullScreen?: boolean;
442
+ portraitOnExitFullScreen?: boolean;
443
+ exitFullScreenOnPortrait?: boolean;
444
+ playlist?: PlaylistItem[];
445
+ stretching?: string;
446
+ related?: Related;
447
+ preload?: Preloads;
448
+ interfaceBehavior?: InterfaceBehaviors;
449
+ interfaceFadeDelay?: number;
450
+ hideUIGroups?: UIGroups[];
451
+ processSpcUrl?: string;
452
+ fairplayCertUrl?: string;
453
+ contentUUID?: string;
454
+ viewOnly?: boolean;
455
+ enableLockScreenControls: boolean;
456
+ pipEnabled: boolean;
457
+ }
458
+ interface BaseEvent<T> {
459
+ nativeEvent: T;
460
+ }
461
+ interface SeekEventProps {
462
+ position: number;
463
+ offset: number;
464
+ }
465
+ interface SeekedEventProps {
466
+ position: number;
467
+ }
468
+ interface RateChangedEventProps {
469
+ rate: number;
470
+ at: number;
471
+ }
472
+ interface TimeEventProps {
473
+ position: number;
474
+ duration: number;
475
+ }
476
+ interface ControlBarVisibleEventProps {
477
+ visible: boolean;
478
+ }
479
+ interface PlaylistEventProps {
480
+ playlist: PlaylistItem[]
481
+ }
482
+ interface PlaylistItemEventProps {
483
+ playlistItem: PlaylistItem
484
+ }
485
+ interface PlayerErrorEventProps {
486
+ code: string;
487
+ error: string;
488
+ }
489
+ interface PlayerWarningEventProps {
490
+ code: string;
491
+ warning: string;
492
+ }
493
+ interface AdEventProps {
494
+ client?: string;
495
+ reason?: string;
496
+ type: number;
497
+ }
498
+ type NativeError = (event: BaseEvent<PlayerErrorEventProps>) => void;
499
+ type NativeWarning = (event: BaseEvent<PlayerWarningEventProps>) => void;
500
+ interface PropsType {
501
+ config: Config | JwConfig;
502
+ style?: ViewStyle;
503
+ controls?: boolean;
504
+ forceLegacyConfig?: boolean;
505
+ onPlayerReady?: () => void;
506
+ onPlaylist?: (event: BaseEvent<PlaylistEventProps>) => void;
507
+ onBeforePlay?: () => void;
508
+ onBeforeComplete?: () => void;
509
+ onComplete?: () => void;
510
+ onPlay?: () => void;
511
+ onPause?: () => void;
512
+ onSeek?: (event: BaseEvent<SeekEventProps>) => void;
513
+ onSeeked?: (event?: BaseEvent<SeekedEventProps>) => void;
514
+ onRateChanged?: (event?: BaseEvent<RateChangedEventProps>) => void;
515
+ onSetupPlayerError?: NativeError;
516
+ onPlayerError?: NativeError;
517
+ onPlayerWarning?: NativeWarning;
518
+ onPlayerAdError?: NativeError;
519
+ onPlayerAdWarning?: NativeWarning;
520
+ onAdEvent?: (event: BaseEvent<AdEventProps>) => void;
521
+ onAdTime?: (event: BaseEvent<TimeEventProps>) => void;
522
+ onBuffer?: () => void;
523
+ onTime?: (event: BaseEvent<TimeEventProps>) => void;
524
+ onFullScreenRequested?: () => void;
525
+ onFullScreen?: () => void;
526
+ onFullScreenExitRequested?: () => void;
527
+ onFullScreenExit?: () => void;
528
+ onControlBarVisible?: (event: BaseEvent<ControlBarVisibleEventProps>) => void;
529
+ onPlaylistComplete?: () => void;
530
+ onPlaylistItem?: (event: BaseEvent<PlaylistItemEventProps>) => void;
531
+ onAudioTracks?: () => void;
532
+ shouldComponentUpdate?: (nextProps: any, nextState: any) => boolean;
533
+ }
534
+
535
+ export default class JWPlayer extends React.Component<PropsType> {
536
+ pause(): void;
537
+ play(): void;
538
+ stop(): void;
539
+ toggleSpeed(): void;
540
+ setSpeed(speed: number): void;
541
+ setCurrentQuality(index: number): void;
542
+ currentQuality(): number;
543
+ getQualityLevels(): Promise<QualityLevel[] | null>;
544
+ setVolume(volume: number): void;
545
+ setPlaylistIndex(index: number): void;
546
+ setControls(show: boolean): void;
547
+ setLockScreenControls(show: boolean): void;
548
+ seekTo(time: number): void;
549
+ loadPlaylist(playlistItems: PlaylistItem[]): void;
550
+ setFullscreen(fullScreen: boolean): void;
551
+ position(): Promise<number>;
552
+ setUpCastController(): void;
553
+ presentCastDialog(): void;
554
+ connectedDevice(): Promise<CastingDevice | null>;
555
+ availableDevices(): Promise<CastingDevice[] | null>;
556
+ castState(): Promise<number | null>;
557
+ playerState(): Promise<number | null>;
558
+ getAudioTracks(): Promise<AudioTrack[] | null>;
559
+ getCurrentAudioTrack(): Promise<number | null>;
560
+ setCurrentAudioTrack(index: number): void;
561
+ setCurrentCaptions(index: number): void;
562
+ setVisibility(visibility: boolean, controls: JWControlType[]): void;
563
+ }
564
+ }