react-native-theoplayer 1.7.1 → 1.7.2
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/android/src/main/java/com/theoplayer/VideoEventEmitter.java +148 -12
- package/android/src/main/java/com/theoplayer/track/MediaTrackEventType.java +11 -0
- package/android/src/main/java/com/theoplayer/track/MediaTrackType.java +11 -0
- package/android/src/main/java/com/theoplayer/track/TrackEventType.java +2 -1
- package/android/src/main/java/com/theoplayer/track/TrackListInfo.java +123 -101
- package/ios/THEOplayerRCTAdAggregator.swift +3 -0
- package/ios/THEOplayerRCTBridge.m +2 -0
- package/ios/THEOplayerRCTMetadataAggregator.swift +59 -45
- package/ios/THEOplayerRCTTrackEventTypes.swift +17 -0
- package/ios/THEOplayerRCTView.swift +27 -3
- package/ios/THEOplayerRCTViewAdEventHandler.swift +7 -5
- package/ios/THEOplayerRCTViewMediaTrackEventHandler.swift +185 -0
- package/ios/THEOplayerRCTViewTextTrackEventHandler.swift +26 -9
- package/lib/commonjs/api/THEOplayerView.js.map +1 -1
- package/lib/commonjs/api/event/TrackEvent.js +17 -1
- package/lib/commonjs/api/event/TrackEvent.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.js +14 -0
- package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.web.js +71 -20
- package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
- package/lib/module/api/THEOplayerView.js.map +1 -1
- package/lib/module/api/event/TrackEvent.js +14 -0
- package/lib/module/api/event/TrackEvent.js.map +1 -1
- package/lib/module/internal/THEOplayerView.js +14 -0
- package/lib/module/internal/THEOplayerView.js.map +1 -1
- package/lib/module/internal/THEOplayerView.web.js +72 -21
- package/lib/module/internal/THEOplayerView.web.js.map +1 -1
- package/lib/typescript/lib/commonjs/api/event/TrackEvent.d.ts +4 -0
- package/lib/typescript/lib/module/api/event/TrackEvent.d.ts +2 -0
- package/lib/typescript/src/api/THEOplayerView.d.ts +11 -3
- package/lib/typescript/src/api/event/TrackEvent.d.ts +49 -3
- package/lib/typescript/src/internal/THEOplayerView.d.ts +5 -1
- package/lib/typescript/src/internal/THEOplayerView.web.d.ts +4 -1
- package/package.json +1 -1
- package/src/api/THEOplayerView.ts +13 -3
- package/src/api/event/TrackEvent.ts +58 -2
- package/src/internal/THEOplayerView.tsx +18 -0
- package/src/internal/THEOplayerView.web.tsx +80 -19
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import React, { PureComponent } from 'react';
|
|
2
2
|
|
|
3
|
-
import type { AdEvent, AdsAPI, PlayerError, TextTrack, THEOplayerViewProps, TimeRange } from 'react-native-theoplayer';
|
|
4
|
-
import {
|
|
5
|
-
|
|
3
|
+
import type { AdEvent, AdsAPI, MediaTrack, PlayerError, TextTrack, THEOplayerViewProps, TimeRange } from 'react-native-theoplayer';
|
|
4
|
+
import {
|
|
5
|
+
AdEventNames,
|
|
6
|
+
MediaTrackEventType,
|
|
7
|
+
MediaTrackType,
|
|
8
|
+
TextTrackEventType,
|
|
9
|
+
THEOplayerViewComponent,
|
|
10
|
+
TrackListEventType,
|
|
11
|
+
} from 'react-native-theoplayer';
|
|
12
|
+
import type { Event, TextTrackCue as NativeTextTrackCue, TrackChangeEvent } from 'theoplayer';
|
|
6
13
|
|
|
7
14
|
import type {
|
|
8
15
|
AddTrackEvent,
|
|
@@ -23,7 +30,7 @@ interface THEOplayerRCTViewState {
|
|
|
23
30
|
|
|
24
31
|
export class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplayerRCTViewState> implements THEOplayerViewComponent {
|
|
25
32
|
private _player: THEOplayer.ChromelessPlayer | null = null;
|
|
26
|
-
private _adsApi: THEOplayerWebAdsAPI;
|
|
33
|
+
private readonly _adsApi: THEOplayerWebAdsAPI;
|
|
27
34
|
|
|
28
35
|
private static initialState: THEOplayerRCTViewState = {
|
|
29
36
|
isBuffering: false,
|
|
@@ -206,6 +213,19 @@ export class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplaye
|
|
|
206
213
|
}
|
|
207
214
|
};
|
|
208
215
|
|
|
216
|
+
private onActiveQualityChanged = (trackType: MediaTrackType, track: NativeMediaTrack) => () => {
|
|
217
|
+
const { onMediaTrackEvent } = this.props;
|
|
218
|
+
if (onMediaTrackEvent) {
|
|
219
|
+
const quality = track.activeQuality;
|
|
220
|
+
onMediaTrackEvent({
|
|
221
|
+
type: MediaTrackEventType.ActiveQualityChanged,
|
|
222
|
+
trackType,
|
|
223
|
+
trackUid: track.uid,
|
|
224
|
+
qualities: quality ? [quality] : undefined,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
|
|
209
229
|
private addEventListeners() {
|
|
210
230
|
const player = this._player;
|
|
211
231
|
if (!player) {
|
|
@@ -369,6 +389,7 @@ export class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplaye
|
|
|
369
389
|
});
|
|
370
390
|
}
|
|
371
391
|
});
|
|
392
|
+
|
|
372
393
|
player.presentation.addEventListener('presentationmodechange', (event: PresentationModeChangeEvent) => {
|
|
373
394
|
const { presentationMode } = event;
|
|
374
395
|
const { onFullscreenPlayerDidPresent, onFullscreenPlayerDidDismiss } = this.props;
|
|
@@ -382,32 +403,51 @@ export class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplaye
|
|
|
382
403
|
}
|
|
383
404
|
}
|
|
384
405
|
});
|
|
406
|
+
|
|
385
407
|
player.textTracks.addEventListener('addtrack', (event: AddTrackEvent) => {
|
|
386
|
-
const { onTextTrackListEvent } = this.props;
|
|
387
408
|
const track = event.track as NativeTextTrack;
|
|
388
409
|
track.addEventListener('addcue', this.onAddTextTrackCue(track));
|
|
389
410
|
track.addEventListener('removecue', this.onRemoveTextTrackCue(track));
|
|
390
|
-
|
|
391
|
-
if (onTextTrackListEvent) {
|
|
392
|
-
onTextTrackListEvent({
|
|
393
|
-
type: TrackListEventType.AddTrack,
|
|
394
|
-
track: track as TextTrack,
|
|
395
|
-
});
|
|
396
|
-
}
|
|
411
|
+
this.dispatchTextTrackListEvent(TrackListEventType.AddTrack, track as TextTrack);
|
|
397
412
|
});
|
|
413
|
+
|
|
398
414
|
player.textTracks.addEventListener('removetrack', (event: RemoveTrackEvent) => {
|
|
399
|
-
const { onTextTrackListEvent } = this.props;
|
|
400
415
|
const track = event.track as NativeTextTrack;
|
|
401
416
|
track.removeEventListener('addcue', this.onAddTextTrackCue(track));
|
|
402
417
|
track.removeEventListener('removecue', this.onRemoveTextTrackCue(track));
|
|
418
|
+
this.dispatchTextTrackListEvent(TrackListEventType.RemoveTrack, track as NativeTextTrack as TextTrack);
|
|
419
|
+
});
|
|
403
420
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
421
|
+
player.textTracks.addEventListener('change', (event: TrackChangeEvent) => {
|
|
422
|
+
this.dispatchTextTrackListEvent(TrackListEventType.ChangeTrack, event.track as NativeTextTrack as TextTrack);
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
[MediaTrackType.Audio, MediaTrackType.Video].forEach((trackType) => {
|
|
426
|
+
const mediaTracks = trackType === MediaTrackType.Audio ? player.audioTracks : player.videoTracks;
|
|
427
|
+
mediaTracks.addEventListener('addtrack', (event: AddTrackEvent) => {
|
|
428
|
+
const track = event.track as NativeMediaTrack;
|
|
429
|
+
track.addEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track));
|
|
430
|
+
this.dispatchMediaTrackListEvent(TrackListEventType.AddTrack, trackType, track as MediaTrack);
|
|
431
|
+
});
|
|
410
432
|
});
|
|
433
|
+
|
|
434
|
+
[MediaTrackType.Audio, MediaTrackType.Video].forEach((trackType) => {
|
|
435
|
+
const mediaTracks = trackType === MediaTrackType.Audio ? player.audioTracks : player.videoTracks;
|
|
436
|
+
mediaTracks.addEventListener('removetrack', (event: RemoveTrackEvent) => {
|
|
437
|
+
const track = event.track as NativeMediaTrack;
|
|
438
|
+
track.removeEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track));
|
|
439
|
+
this.dispatchMediaTrackListEvent(TrackListEventType.RemoveTrack, trackType, track as MediaTrack);
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
[MediaTrackType.Audio, MediaTrackType.Video].forEach((trackType) => {
|
|
444
|
+
const mediaTracks = trackType === MediaTrackType.Audio ? player.audioTracks : player.videoTracks;
|
|
445
|
+
mediaTracks.addEventListener('change', (event: TrackChangeEvent) => {
|
|
446
|
+
const track = event.track as NativeMediaTrack;
|
|
447
|
+
this.dispatchMediaTrackListEvent(TrackListEventType.ChangeTrack, trackType, track as MediaTrack);
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
|
|
411
451
|
player.ads?.addEventListener(AdEventNames, (event) => {
|
|
412
452
|
const { onAdEvent } = this.props;
|
|
413
453
|
if (onAdEvent) {
|
|
@@ -416,6 +456,27 @@ export class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplaye
|
|
|
416
456
|
});
|
|
417
457
|
}
|
|
418
458
|
|
|
459
|
+
private dispatchTextTrackListEvent = (type: TrackListEventType, track: TextTrack) => {
|
|
460
|
+
const { onTextTrackListEvent } = this.props;
|
|
461
|
+
if (onTextTrackListEvent) {
|
|
462
|
+
onTextTrackListEvent({
|
|
463
|
+
type,
|
|
464
|
+
track,
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
private dispatchMediaTrackListEvent = (type: TrackListEventType, trackType: MediaTrackType, track: MediaTrack) => {
|
|
470
|
+
const { onMediaTrackListEvent } = this.props;
|
|
471
|
+
if (onMediaTrackListEvent) {
|
|
472
|
+
onMediaTrackListEvent({
|
|
473
|
+
type,
|
|
474
|
+
trackType,
|
|
475
|
+
track: track as MediaTrack,
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
};
|
|
479
|
+
|
|
419
480
|
public render(): JSX.Element {
|
|
420
481
|
const { config } = this.props;
|
|
421
482
|
const chromeless = config?.chromeless === undefined || config?.chromeless === true;
|