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.
Files changed (38) hide show
  1. package/android/src/main/java/com/theoplayer/VideoEventEmitter.java +148 -12
  2. package/android/src/main/java/com/theoplayer/track/MediaTrackEventType.java +11 -0
  3. package/android/src/main/java/com/theoplayer/track/MediaTrackType.java +11 -0
  4. package/android/src/main/java/com/theoplayer/track/TrackEventType.java +2 -1
  5. package/android/src/main/java/com/theoplayer/track/TrackListInfo.java +123 -101
  6. package/ios/THEOplayerRCTAdAggregator.swift +3 -0
  7. package/ios/THEOplayerRCTBridge.m +2 -0
  8. package/ios/THEOplayerRCTMetadataAggregator.swift +59 -45
  9. package/ios/THEOplayerRCTTrackEventTypes.swift +17 -0
  10. package/ios/THEOplayerRCTView.swift +27 -3
  11. package/ios/THEOplayerRCTViewAdEventHandler.swift +7 -5
  12. package/ios/THEOplayerRCTViewMediaTrackEventHandler.swift +185 -0
  13. package/ios/THEOplayerRCTViewTextTrackEventHandler.swift +26 -9
  14. package/lib/commonjs/api/THEOplayerView.js.map +1 -1
  15. package/lib/commonjs/api/event/TrackEvent.js +17 -1
  16. package/lib/commonjs/api/event/TrackEvent.js.map +1 -1
  17. package/lib/commonjs/internal/THEOplayerView.js +14 -0
  18. package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
  19. package/lib/commonjs/internal/THEOplayerView.web.js +71 -20
  20. package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
  21. package/lib/module/api/THEOplayerView.js.map +1 -1
  22. package/lib/module/api/event/TrackEvent.js +14 -0
  23. package/lib/module/api/event/TrackEvent.js.map +1 -1
  24. package/lib/module/internal/THEOplayerView.js +14 -0
  25. package/lib/module/internal/THEOplayerView.js.map +1 -1
  26. package/lib/module/internal/THEOplayerView.web.js +72 -21
  27. package/lib/module/internal/THEOplayerView.web.js.map +1 -1
  28. package/lib/typescript/lib/commonjs/api/event/TrackEvent.d.ts +4 -0
  29. package/lib/typescript/lib/module/api/event/TrackEvent.d.ts +2 -0
  30. package/lib/typescript/src/api/THEOplayerView.d.ts +11 -3
  31. package/lib/typescript/src/api/event/TrackEvent.d.ts +49 -3
  32. package/lib/typescript/src/internal/THEOplayerView.d.ts +5 -1
  33. package/lib/typescript/src/internal/THEOplayerView.web.d.ts +4 -1
  34. package/package.json +1 -1
  35. package/src/api/THEOplayerView.ts +13 -3
  36. package/src/api/event/TrackEvent.ts +58 -2
  37. package/src/internal/THEOplayerView.tsx +18 -0
  38. package/src/internal/THEOplayerView.web.tsx +80 -19
@@ -1,7 +1,7 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
2
 
3
3
  import React, { PureComponent } from 'react';
4
- import { AdEventNames, TextTrackEventType, TrackListEventType } from 'react-native-theoplayer';
4
+ import { AdEventNames, MediaTrackEventType, MediaTrackType, TextTrackEventType, TrackListEventType } from 'react-native-theoplayer';
5
5
  import * as THEOplayer from 'theoplayer';
6
6
  import { findNativeQualitiesByUid, fromNativeCue, fromNativeMediaTrack, fromNativeTextTrack } from './web/TrackUtils';
7
7
  import { THEOplayerWebAdsAPI } from './ads/THEOplayerWebAdsAPI';
@@ -53,6 +53,49 @@ export class THEOplayerView extends PureComponent {
53
53
  }
54
54
  });
55
55
 
56
+ _defineProperty(this, "onActiveQualityChanged", (trackType, track) => () => {
57
+ const {
58
+ onMediaTrackEvent
59
+ } = this.props;
60
+
61
+ if (onMediaTrackEvent) {
62
+ const quality = track.activeQuality;
63
+ onMediaTrackEvent({
64
+ type: MediaTrackEventType.ActiveQualityChanged,
65
+ trackType,
66
+ trackUid: track.uid,
67
+ qualities: quality ? [quality] : undefined
68
+ });
69
+ }
70
+ });
71
+
72
+ _defineProperty(this, "dispatchTextTrackListEvent", (type, track) => {
73
+ const {
74
+ onTextTrackListEvent
75
+ } = this.props;
76
+
77
+ if (onTextTrackListEvent) {
78
+ onTextTrackListEvent({
79
+ type,
80
+ track
81
+ });
82
+ }
83
+ });
84
+
85
+ _defineProperty(this, "dispatchMediaTrackListEvent", (type, trackType, track) => {
86
+ const {
87
+ onMediaTrackListEvent
88
+ } = this.props;
89
+
90
+ if (onMediaTrackListEvent) {
91
+ onMediaTrackListEvent({
92
+ type,
93
+ trackType,
94
+ track: track
95
+ });
96
+ }
97
+ });
98
+
56
99
  this.state = THEOplayerView.initialState;
57
100
  this._adsApi = new THEOplayerWebAdsAPI(this);
58
101
  }
@@ -472,34 +515,42 @@ export class THEOplayerView extends PureComponent {
472
515
  }
473
516
  });
474
517
  player.textTracks.addEventListener('addtrack', event => {
475
- const {
476
- onTextTrackListEvent
477
- } = this.props;
478
518
  const track = event.track;
479
519
  track.addEventListener('addcue', this.onAddTextTrackCue(track));
480
520
  track.addEventListener('removecue', this.onRemoveTextTrackCue(track));
481
-
482
- if (onTextTrackListEvent) {
483
- onTextTrackListEvent({
484
- type: TrackListEventType.AddTrack,
485
- track: track
486
- });
487
- }
521
+ this.dispatchTextTrackListEvent(TrackListEventType.AddTrack, track);
488
522
  });
489
523
  player.textTracks.addEventListener('removetrack', event => {
490
- const {
491
- onTextTrackListEvent
492
- } = this.props;
493
524
  const track = event.track;
494
525
  track.removeEventListener('addcue', this.onAddTextTrackCue(track));
495
526
  track.removeEventListener('removecue', this.onRemoveTextTrackCue(track));
496
-
497
- if (onTextTrackListEvent) {
498
- onTextTrackListEvent({
499
- type: TrackListEventType.RemoveTrack,
500
- track: event.track
501
- });
502
- }
527
+ this.dispatchTextTrackListEvent(TrackListEventType.RemoveTrack, track);
528
+ });
529
+ player.textTracks.addEventListener('change', event => {
530
+ this.dispatchTextTrackListEvent(TrackListEventType.ChangeTrack, event.track);
531
+ });
532
+ [MediaTrackType.Audio, MediaTrackType.Video].forEach(trackType => {
533
+ const mediaTracks = trackType === MediaTrackType.Audio ? player.audioTracks : player.videoTracks;
534
+ mediaTracks.addEventListener('addtrack', event => {
535
+ const track = event.track;
536
+ track.addEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track));
537
+ this.dispatchMediaTrackListEvent(TrackListEventType.AddTrack, trackType, track);
538
+ });
539
+ });
540
+ [MediaTrackType.Audio, MediaTrackType.Video].forEach(trackType => {
541
+ const mediaTracks = trackType === MediaTrackType.Audio ? player.audioTracks : player.videoTracks;
542
+ mediaTracks.addEventListener('removetrack', event => {
543
+ const track = event.track;
544
+ track.removeEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track));
545
+ this.dispatchMediaTrackListEvent(TrackListEventType.RemoveTrack, trackType, track);
546
+ });
547
+ });
548
+ [MediaTrackType.Audio, MediaTrackType.Video].forEach(trackType => {
549
+ const mediaTracks = trackType === MediaTrackType.Audio ? player.audioTracks : player.videoTracks;
550
+ mediaTracks.addEventListener('change', event => {
551
+ const track = event.track;
552
+ this.dispatchMediaTrackListEvent(TrackListEventType.ChangeTrack, trackType, track);
553
+ });
503
554
  });
504
555
  (_player$ads = player.ads) === null || _player$ads === void 0 ? void 0 : _player$ads.addEventListener(AdEventNames, event => {
505
556
  const {
@@ -1 +1 @@
1
- {"version":3,"names":["React","PureComponent","AdEventNames","TextTrackEventType","TrackListEventType","THEOplayer","findNativeQualitiesByUid","fromNativeCue","fromNativeMediaTrack","fromNativeTextTrack","THEOplayerWebAdsAPI","THEOplayerView","constructor","props","track","event","onTextTrackEvent","cue","type","AddCue","trackUid","uid","RemoveCue","state","initialState","_adsApi","componentDidMount","config","source","abrConfig","element","document","querySelector","chromeless","undefined","_player","ChromelessPlayer","libraryLocation","Player","ui","fluid","Object","assign","abr","prepareWithUserAction","addEventListeners","componentWillUnmount","destroy","seek","time","isNaN","Error","currentTime","ads","nativePlayer","reset","setState","componentDidUpdate","prevProps","paused","volume","selectedTextTrack","selectedAudioTrack","selectedVideoTrack","targetVideoQuality","muted","playbackRate","fullscreen","wasPaused","prevSelectedTextTrack","prevSelectedAudioTrack","prevSelectedVideoTrack","prevTargetVideoQuality","prevSource","wasMuted","prevPlaybackRate","wasFullscreen","prevVolume","pause","play","Boolean","Number","onFullscreenPlayerWillPresent","onFullscreenPlayerWillDismiss","appContainer","getElementById","requestFullscreen","then","exitFullscreen","textTracks","forEach","textTrack","mode","audioTracks","audioTrack","enabled","videoTracks","videoTrack","find","targetQuality","maybeChangeBufferingState","isBuffering","wasBuffering","error","newIsBuffering","onBufferingStateChange","player","addEventListener","onSourceChange","onLoadStart","onLoadedData","onLoadedMetadata","map","duration","errorObject","errorCode","code","toString","errorMessage","message","onError","onProgress","seekable","i","length","push","start","end","onPlay","onPlaying","onPause","onSeeking","onSeeked","onEnded","readyState","onReadyStateChange","onTimeUpdate","currentProgramDateTime","getTime","onDurationChange","onSegmentNotFound","segmentStartTime","retryCount","presentation","presentationMode","onFullscreenPlayerDidPresent","onFullscreenPlayerDidDismiss","onTextTrackListEvent","onAddTextTrackCue","onRemoveTextTrackCue","AddTrack","removeEventListener","RemoveTrack","onAdEvent","render"],"sources":["THEOplayerView.web.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\n\nimport type { AdEvent, AdsAPI, PlayerError, TextTrack, THEOplayerViewProps, TimeRange } from 'react-native-theoplayer';\nimport { AdEventNames, TextTrackEventType, THEOplayerViewComponent, TrackListEventType } from 'react-native-theoplayer';\nimport type { Event, TextTrackCue as NativeTextTrackCue } from 'theoplayer';\n\nimport type {\n AddTrackEvent,\n MediaTrack as NativeMediaTrack,\n PresentationModeChangeEvent,\n ReadyStateChangeEvent as NativeReadyStateChangeEvent,\n RemoveTrackEvent,\n TextTrack as NativeTextTrack,\n} from 'theoplayer';\nimport * as THEOplayer from 'theoplayer';\nimport { findNativeQualitiesByUid, fromNativeCue, fromNativeMediaTrack, fromNativeTextTrack } from './web/TrackUtils';\nimport { THEOplayerWebAdsAPI } from './ads/THEOplayerWebAdsAPI';\n\ninterface THEOplayerRCTViewState {\n isBuffering: boolean;\n error?: PlayerError;\n}\n\nexport class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplayerRCTViewState> implements THEOplayerViewComponent {\n private _player: THEOplayer.ChromelessPlayer | null = null;\n private _adsApi: THEOplayerWebAdsAPI;\n\n private static initialState: THEOplayerRCTViewState = {\n isBuffering: false,\n error: undefined,\n };\n\n constructor(props: THEOplayerViewProps) {\n super(props);\n this.state = THEOplayerView.initialState;\n this._adsApi = new THEOplayerWebAdsAPI(this);\n }\n\n componentDidMount() {\n const { config, source, abrConfig } = this.props;\n const element = document.querySelector('.theoplayer-container') as HTMLElement;\n if (config?.chromeless === true || config?.chromeless === undefined) {\n this._player = new THEOplayer.ChromelessPlayer(element, {\n libraryLocation: 'node_modules/theoplayer',\n ...config,\n });\n } else {\n this._player = new THEOplayer.Player(element, {\n libraryLocation: 'node_modules/theoplayer',\n ...config,\n ui: {\n fluid: true,\n },\n });\n }\n\n Object.assign(this._player.abr, abrConfig);\n this._player.prepareWithUserAction();\n this._player.source = source;\n this.addEventListeners();\n }\n\n componentWillUnmount() {\n if (this._player) {\n this._player.destroy();\n }\n }\n\n public seek(time: number): void {\n if (isNaN(time)) {\n throw new Error('Specified time is not a number');\n }\n if (this._player) {\n this._player.currentTime = time / 1e3;\n }\n }\n\n public get ads(): AdsAPI {\n return this._adsApi;\n }\n\n public get nativePlayer(): THEOplayer.ChromelessPlayer | null {\n return this._player;\n }\n\n private reset() {\n this.setState(THEOplayerView.initialState);\n }\n\n componentDidUpdate(prevProps: Readonly<THEOplayerViewProps>) {\n if (!this._player) {\n return;\n }\n // track property changes\n const { paused, volume, selectedTextTrack, selectedAudioTrack, selectedVideoTrack, targetVideoQuality, source, muted, playbackRate, fullscreen } =\n this.props;\n const {\n paused: wasPaused,\n selectedTextTrack: prevSelectedTextTrack,\n selectedAudioTrack: prevSelectedAudioTrack,\n selectedVideoTrack: prevSelectedVideoTrack,\n targetVideoQuality: prevTargetVideoQuality,\n source: prevSource,\n muted: wasMuted,\n playbackRate: prevPlaybackRate,\n fullscreen: wasFullscreen,\n volume: prevVolume,\n } = prevProps;\n\n if (source !== prevSource) {\n this._player.source = source;\n }\n if (paused !== wasPaused) {\n if (paused) {\n this._player.pause();\n } else {\n this._player.play();\n }\n }\n if (muted !== wasMuted) {\n this._player.muted = Boolean(muted);\n }\n if (volume !== prevVolume) {\n this._player.volume = Number(volume);\n }\n if (fullscreen !== wasFullscreen) {\n const { onFullscreenPlayerWillPresent, onFullscreenPlayerWillDismiss } = this.props;\n const appContainer = document.getElementById('app');\n if (fullscreen) {\n if (onFullscreenPlayerWillPresent) {\n onFullscreenPlayerWillPresent();\n }\n appContainer?.requestFullscreen().then();\n } else {\n if (onFullscreenPlayerWillDismiss) {\n onFullscreenPlayerWillDismiss();\n }\n document.exitFullscreen().then();\n }\n }\n if (playbackRate && playbackRate !== prevPlaybackRate) {\n this._player.playbackRate = playbackRate;\n }\n if (selectedTextTrack !== prevSelectedTextTrack) {\n this._player.textTracks.forEach((textTrack: NativeTextTrack) => {\n textTrack.mode = textTrack.uid === selectedTextTrack ? 'showing' : 'disabled';\n });\n }\n if (selectedAudioTrack !== prevSelectedAudioTrack) {\n this._player.audioTracks.forEach((audioTrack: NativeMediaTrack) => {\n audioTrack.enabled = audioTrack.uid === selectedAudioTrack;\n });\n }\n if (selectedVideoTrack !== prevSelectedVideoTrack) {\n this._player.videoTracks.forEach((videoTrack: NativeMediaTrack) => {\n videoTrack.enabled = videoTrack.uid === selectedVideoTrack;\n });\n }\n if (targetVideoQuality != prevTargetVideoQuality) {\n const videoTrack = this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.uid === selectedVideoTrack);\n if (videoTrack) {\n videoTrack.targetQuality = findNativeQualitiesByUid(videoTrack, targetVideoQuality);\n }\n }\n }\n\n private maybeChangeBufferingState(isBuffering: boolean) {\n const { isBuffering: wasBuffering, error } = this.state;\n const { paused } = this.props;\n\n // do not change state to buffering in case of an error or if the player is paused\n const newIsBuffering = isBuffering && !error && !paused;\n this.setState({ isBuffering: newIsBuffering });\n\n // notify change in buffering state\n if (newIsBuffering !== wasBuffering && this.props.onBufferingStateChange) {\n this.props.onBufferingStateChange(newIsBuffering);\n }\n }\n\n private onAddTextTrackCue = (track: NativeTextTrack) => (event: Event<'addcue'>) => {\n const { onTextTrackEvent } = this.props;\n if (onTextTrackEvent) {\n const { cue } = event as unknown as { cue: NativeTextTrackCue };\n if (cue) {\n onTextTrackEvent({\n type: TextTrackEventType.AddCue,\n trackUid: track.uid,\n cue: fromNativeCue(cue),\n });\n }\n }\n };\n\n private onRemoveTextTrackCue = (track: NativeTextTrack) => (event: Event<'removecue'>) => {\n const { onTextTrackEvent } = this.props;\n if (onTextTrackEvent) {\n const { cue } = event as unknown as { cue: NativeTextTrackCue };\n if (cue) {\n onTextTrackEvent({\n type: TextTrackEventType.RemoveCue,\n trackUid: track.uid,\n cue: fromNativeCue(cue),\n });\n }\n }\n };\n\n private addEventListeners() {\n const player = this._player;\n if (!player) {\n return;\n }\n\n player.addEventListener('sourcechange', () => {\n const { onSourceChange, paused } = this.props;\n\n this.reset();\n if (!paused) {\n player.play();\n }\n if (onSourceChange) {\n onSourceChange();\n }\n });\n\n player.addEventListener('loadstart', () => {\n // potentially notify change in buffering state\n this.maybeChangeBufferingState(true);\n\n const { onLoadStart } = this.props;\n if (onLoadStart) {\n onLoadStart();\n }\n });\n\n player.addEventListener('loadeddata', () => {\n const { onLoadedData } = this.props;\n if (onLoadedData) {\n onLoadedData();\n }\n });\n\n player.addEventListener('loadedmetadata', () => {\n const { onLoadedMetadata } = this.props;\n if (onLoadedMetadata) {\n onLoadedMetadata({\n textTracks: player.textTracks.map((textTrack: NativeTextTrack) => fromNativeTextTrack(textTrack)),\n audioTracks: player.audioTracks.map((audioTrack: NativeMediaTrack) => fromNativeMediaTrack(audioTrack)),\n videoTracks: player.videoTracks.map((videoTrack: NativeMediaTrack) => fromNativeMediaTrack(videoTrack)),\n duration: 1e3 * player.duration,\n selectedTextTrack: player.textTracks.find((track: NativeTextTrack) => track.mode === 'showing')?.uid,\n selectedVideoTrack: player.videoTracks.find((track: NativeMediaTrack) => track.enabled)?.uid,\n selectedAudioTrack: player.audioTracks.find((track: NativeMediaTrack) => track.enabled)?.uid,\n });\n }\n });\n\n player.addEventListener('error', (event) => {\n const { errorObject } = event;\n const error = {\n errorCode: errorObject.code.toString(),\n errorMessage: errorObject.message,\n };\n this.setState({ error });\n\n // potentially notify change in buffering state\n this.maybeChangeBufferingState(false);\n\n const { onError } = this.props;\n if (onError) {\n onError({ error });\n }\n });\n\n player.addEventListener('progress', () => {\n const { onProgress } = this.props;\n if (onProgress) {\n const seekable: TimeRange[] = [];\n for (let i = 0; i < player.seekable.length; i++) {\n seekable.push({\n start: player.seekable.start(i) * 1e3,\n end: player.seekable.end(i) * 1e3,\n });\n }\n onProgress({ seekable });\n }\n });\n\n player.addEventListener('play', () => {\n const { onPlay } = this.props;\n if (onPlay) {\n onPlay();\n }\n });\n\n player.addEventListener('playing', () => {\n // potentially notify change in buffering state\n this.maybeChangeBufferingState(false);\n\n const { onPlaying } = this.props;\n if (onPlaying) {\n onPlaying();\n }\n });\n\n player.addEventListener('pause', () => {\n const { onPause } = this.props;\n if (onPause) {\n onPause();\n }\n });\n\n player.addEventListener('seeking', () => {\n const { onSeeking } = this.props;\n if (onSeeking) {\n onSeeking();\n }\n });\n\n player.addEventListener('seeked', () => {\n const { onSeeked } = this.props;\n if (onSeeked) {\n onSeeked();\n }\n });\n\n player.addEventListener('ended', () => {\n const { onEnded } = this.props;\n if (onEnded) {\n onEnded();\n }\n });\n\n player.addEventListener('readystatechange', (event: NativeReadyStateChangeEvent) => {\n // potentially notify change in buffering state\n this.maybeChangeBufferingState(event.readyState < 3);\n\n const { onReadyStateChange } = this.props;\n if (onReadyStateChange) {\n onReadyStateChange({ readyState: event.readyState });\n }\n });\n\n player.addEventListener('timeupdate', () => {\n const { onTimeUpdate } = this.props;\n if (onTimeUpdate) {\n onTimeUpdate({\n currentTime: player.currentTime * 1e3,\n currentProgramDateTime: player.currentProgramDateTime?.getTime(),\n });\n }\n });\n player.addEventListener('durationchange', (event) => {\n const { onDurationChange } = this.props;\n if (onDurationChange) {\n onDurationChange({\n duration: event.duration * 1e3,\n });\n }\n });\n player.addEventListener('segmentnotfound', () => {\n const { onSegmentNotFound } = this.props;\n if (onSegmentNotFound) {\n onSegmentNotFound({\n segmentStartTime: 0,\n error: 'Segment not found',\n retryCount: -1,\n });\n }\n });\n player.presentation.addEventListener('presentationmodechange', (event: PresentationModeChangeEvent) => {\n const { presentationMode } = event;\n const { onFullscreenPlayerDidPresent, onFullscreenPlayerDidDismiss } = this.props;\n if (presentationMode === 'fullscreen') {\n if (onFullscreenPlayerDidPresent) {\n onFullscreenPlayerDidPresent();\n }\n } else if (presentationMode === 'inline') {\n if (onFullscreenPlayerDidDismiss) {\n onFullscreenPlayerDidDismiss();\n }\n }\n });\n player.textTracks.addEventListener('addtrack', (event: AddTrackEvent) => {\n const { onTextTrackListEvent } = this.props;\n const track = event.track as NativeTextTrack;\n track.addEventListener('addcue', this.onAddTextTrackCue(track));\n track.addEventListener('removecue', this.onRemoveTextTrackCue(track));\n\n if (onTextTrackListEvent) {\n onTextTrackListEvent({\n type: TrackListEventType.AddTrack,\n track: track as TextTrack,\n });\n }\n });\n player.textTracks.addEventListener('removetrack', (event: RemoveTrackEvent) => {\n const { onTextTrackListEvent } = this.props;\n const track = event.track as NativeTextTrack;\n track.removeEventListener('addcue', this.onAddTextTrackCue(track));\n track.removeEventListener('removecue', this.onRemoveTextTrackCue(track));\n\n if (onTextTrackListEvent) {\n onTextTrackListEvent({\n type: TrackListEventType.RemoveTrack,\n track: event.track as unknown as TextTrack,\n });\n }\n });\n player.ads?.addEventListener(AdEventNames, (event) => {\n const { onAdEvent } = this.props;\n if (onAdEvent) {\n onAdEvent(event as AdEvent);\n }\n });\n }\n\n public render(): JSX.Element {\n const { config } = this.props;\n const chromeless = config?.chromeless === undefined || config?.chromeless === true;\n\n return (\n <div id={'theoplayer-wrapper'}>\n <div className={chromeless ? 'theoplayer-container' : 'theoplayer-container video-js theoplayer-skin'} />\n </div>\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","PureComponent","AdEventNames","MediaTrackEventType","MediaTrackType","TextTrackEventType","TrackListEventType","THEOplayer","findNativeQualitiesByUid","fromNativeCue","fromNativeMediaTrack","fromNativeTextTrack","THEOplayerWebAdsAPI","THEOplayerView","constructor","props","track","event","onTextTrackEvent","cue","type","AddCue","trackUid","uid","RemoveCue","trackType","onMediaTrackEvent","quality","activeQuality","ActiveQualityChanged","qualities","undefined","onTextTrackListEvent","onMediaTrackListEvent","state","initialState","_adsApi","componentDidMount","config","source","abrConfig","element","document","querySelector","chromeless","_player","ChromelessPlayer","libraryLocation","Player","ui","fluid","Object","assign","abr","prepareWithUserAction","addEventListeners","componentWillUnmount","destroy","seek","time","isNaN","Error","currentTime","ads","nativePlayer","reset","setState","componentDidUpdate","prevProps","paused","volume","selectedTextTrack","selectedAudioTrack","selectedVideoTrack","targetVideoQuality","muted","playbackRate","fullscreen","wasPaused","prevSelectedTextTrack","prevSelectedAudioTrack","prevSelectedVideoTrack","prevTargetVideoQuality","prevSource","wasMuted","prevPlaybackRate","wasFullscreen","prevVolume","pause","play","Boolean","Number","onFullscreenPlayerWillPresent","onFullscreenPlayerWillDismiss","appContainer","getElementById","requestFullscreen","then","exitFullscreen","textTracks","forEach","textTrack","mode","audioTracks","audioTrack","enabled","videoTracks","videoTrack","find","targetQuality","maybeChangeBufferingState","isBuffering","wasBuffering","error","newIsBuffering","onBufferingStateChange","player","addEventListener","onSourceChange","onLoadStart","onLoadedData","onLoadedMetadata","map","duration","errorObject","errorCode","code","toString","errorMessage","message","onError","onProgress","seekable","i","length","push","start","end","onPlay","onPlaying","onPause","onSeeking","onSeeked","onEnded","readyState","onReadyStateChange","onTimeUpdate","currentProgramDateTime","getTime","onDurationChange","onSegmentNotFound","segmentStartTime","retryCount","presentation","presentationMode","onFullscreenPlayerDidPresent","onFullscreenPlayerDidDismiss","onAddTextTrackCue","onRemoveTextTrackCue","dispatchTextTrackListEvent","AddTrack","removeEventListener","RemoveTrack","ChangeTrack","Audio","Video","mediaTracks","onActiveQualityChanged","dispatchMediaTrackListEvent","onAdEvent","render"],"sources":["THEOplayerView.web.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\n\nimport type { AdEvent, AdsAPI, MediaTrack, PlayerError, TextTrack, THEOplayerViewProps, TimeRange } from 'react-native-theoplayer';\nimport {\n AdEventNames,\n MediaTrackEventType,\n MediaTrackType,\n TextTrackEventType,\n THEOplayerViewComponent,\n TrackListEventType,\n} from 'react-native-theoplayer';\nimport type { Event, TextTrackCue as NativeTextTrackCue, TrackChangeEvent } from 'theoplayer';\n\nimport type {\n AddTrackEvent,\n MediaTrack as NativeMediaTrack,\n PresentationModeChangeEvent,\n ReadyStateChangeEvent as NativeReadyStateChangeEvent,\n RemoveTrackEvent,\n TextTrack as NativeTextTrack,\n} from 'theoplayer';\nimport * as THEOplayer from 'theoplayer';\nimport { findNativeQualitiesByUid, fromNativeCue, fromNativeMediaTrack, fromNativeTextTrack } from './web/TrackUtils';\nimport { THEOplayerWebAdsAPI } from './ads/THEOplayerWebAdsAPI';\n\ninterface THEOplayerRCTViewState {\n isBuffering: boolean;\n error?: PlayerError;\n}\n\nexport class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplayerRCTViewState> implements THEOplayerViewComponent {\n private _player: THEOplayer.ChromelessPlayer | null = null;\n private readonly _adsApi: THEOplayerWebAdsAPI;\n\n private static initialState: THEOplayerRCTViewState = {\n isBuffering: false,\n error: undefined,\n };\n\n constructor(props: THEOplayerViewProps) {\n super(props);\n this.state = THEOplayerView.initialState;\n this._adsApi = new THEOplayerWebAdsAPI(this);\n }\n\n componentDidMount() {\n const { config, source, abrConfig } = this.props;\n const element = document.querySelector('.theoplayer-container') as HTMLElement;\n if (config?.chromeless === true || config?.chromeless === undefined) {\n this._player = new THEOplayer.ChromelessPlayer(element, {\n libraryLocation: 'node_modules/theoplayer',\n ...config,\n });\n } else {\n this._player = new THEOplayer.Player(element, {\n libraryLocation: 'node_modules/theoplayer',\n ...config,\n ui: {\n fluid: true,\n },\n });\n }\n\n Object.assign(this._player.abr, abrConfig);\n this._player.prepareWithUserAction();\n this._player.source = source;\n this.addEventListeners();\n }\n\n componentWillUnmount() {\n if (this._player) {\n this._player.destroy();\n }\n }\n\n public seek(time: number): void {\n if (isNaN(time)) {\n throw new Error('Specified time is not a number');\n }\n if (this._player) {\n this._player.currentTime = time / 1e3;\n }\n }\n\n public get ads(): AdsAPI {\n return this._adsApi;\n }\n\n public get nativePlayer(): THEOplayer.ChromelessPlayer | null {\n return this._player;\n }\n\n private reset() {\n this.setState(THEOplayerView.initialState);\n }\n\n componentDidUpdate(prevProps: Readonly<THEOplayerViewProps>) {\n if (!this._player) {\n return;\n }\n // track property changes\n const { paused, volume, selectedTextTrack, selectedAudioTrack, selectedVideoTrack, targetVideoQuality, source, muted, playbackRate, fullscreen } =\n this.props;\n const {\n paused: wasPaused,\n selectedTextTrack: prevSelectedTextTrack,\n selectedAudioTrack: prevSelectedAudioTrack,\n selectedVideoTrack: prevSelectedVideoTrack,\n targetVideoQuality: prevTargetVideoQuality,\n source: prevSource,\n muted: wasMuted,\n playbackRate: prevPlaybackRate,\n fullscreen: wasFullscreen,\n volume: prevVolume,\n } = prevProps;\n\n if (source !== prevSource) {\n this._player.source = source;\n }\n if (paused !== wasPaused) {\n if (paused) {\n this._player.pause();\n } else {\n this._player.play();\n }\n }\n if (muted !== wasMuted) {\n this._player.muted = Boolean(muted);\n }\n if (volume !== prevVolume) {\n this._player.volume = Number(volume);\n }\n if (fullscreen !== wasFullscreen) {\n const { onFullscreenPlayerWillPresent, onFullscreenPlayerWillDismiss } = this.props;\n const appContainer = document.getElementById('app');\n if (fullscreen) {\n if (onFullscreenPlayerWillPresent) {\n onFullscreenPlayerWillPresent();\n }\n appContainer?.requestFullscreen().then();\n } else {\n if (onFullscreenPlayerWillDismiss) {\n onFullscreenPlayerWillDismiss();\n }\n document.exitFullscreen().then();\n }\n }\n if (playbackRate && playbackRate !== prevPlaybackRate) {\n this._player.playbackRate = playbackRate;\n }\n if (selectedTextTrack !== prevSelectedTextTrack) {\n this._player.textTracks.forEach((textTrack: NativeTextTrack) => {\n textTrack.mode = textTrack.uid === selectedTextTrack ? 'showing' : 'disabled';\n });\n }\n if (selectedAudioTrack !== prevSelectedAudioTrack) {\n this._player.audioTracks.forEach((audioTrack: NativeMediaTrack) => {\n audioTrack.enabled = audioTrack.uid === selectedAudioTrack;\n });\n }\n if (selectedVideoTrack !== prevSelectedVideoTrack) {\n this._player.videoTracks.forEach((videoTrack: NativeMediaTrack) => {\n videoTrack.enabled = videoTrack.uid === selectedVideoTrack;\n });\n }\n if (targetVideoQuality != prevTargetVideoQuality) {\n const videoTrack = this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.uid === selectedVideoTrack);\n if (videoTrack) {\n videoTrack.targetQuality = findNativeQualitiesByUid(videoTrack, targetVideoQuality);\n }\n }\n }\n\n private maybeChangeBufferingState(isBuffering: boolean) {\n const { isBuffering: wasBuffering, error } = this.state;\n const { paused } = this.props;\n\n // do not change state to buffering in case of an error or if the player is paused\n const newIsBuffering = isBuffering && !error && !paused;\n this.setState({ isBuffering: newIsBuffering });\n\n // notify change in buffering state\n if (newIsBuffering !== wasBuffering && this.props.onBufferingStateChange) {\n this.props.onBufferingStateChange(newIsBuffering);\n }\n }\n\n private onAddTextTrackCue = (track: NativeTextTrack) => (event: Event<'addcue'>) => {\n const { onTextTrackEvent } = this.props;\n if (onTextTrackEvent) {\n const { cue } = event as unknown as { cue: NativeTextTrackCue };\n if (cue) {\n onTextTrackEvent({\n type: TextTrackEventType.AddCue,\n trackUid: track.uid,\n cue: fromNativeCue(cue),\n });\n }\n }\n };\n\n private onRemoveTextTrackCue = (track: NativeTextTrack) => (event: Event<'removecue'>) => {\n const { onTextTrackEvent } = this.props;\n if (onTextTrackEvent) {\n const { cue } = event as unknown as { cue: NativeTextTrackCue };\n if (cue) {\n onTextTrackEvent({\n type: TextTrackEventType.RemoveCue,\n trackUid: track.uid,\n cue: fromNativeCue(cue),\n });\n }\n }\n };\n\n private onActiveQualityChanged = (trackType: MediaTrackType, track: NativeMediaTrack) => () => {\n const { onMediaTrackEvent } = this.props;\n if (onMediaTrackEvent) {\n const quality = track.activeQuality;\n onMediaTrackEvent({\n type: MediaTrackEventType.ActiveQualityChanged,\n trackType,\n trackUid: track.uid,\n qualities: quality ? [quality] : undefined,\n });\n }\n };\n\n private addEventListeners() {\n const player = this._player;\n if (!player) {\n return;\n }\n\n player.addEventListener('sourcechange', () => {\n const { onSourceChange, paused } = this.props;\n\n this.reset();\n if (!paused) {\n player.play();\n }\n if (onSourceChange) {\n onSourceChange();\n }\n });\n\n player.addEventListener('loadstart', () => {\n // potentially notify change in buffering state\n this.maybeChangeBufferingState(true);\n\n const { onLoadStart } = this.props;\n if (onLoadStart) {\n onLoadStart();\n }\n });\n\n player.addEventListener('loadeddata', () => {\n const { onLoadedData } = this.props;\n if (onLoadedData) {\n onLoadedData();\n }\n });\n\n player.addEventListener('loadedmetadata', () => {\n const { onLoadedMetadata } = this.props;\n if (onLoadedMetadata) {\n onLoadedMetadata({\n textTracks: player.textTracks.map((textTrack: NativeTextTrack) => fromNativeTextTrack(textTrack)),\n audioTracks: player.audioTracks.map((audioTrack: NativeMediaTrack) => fromNativeMediaTrack(audioTrack)),\n videoTracks: player.videoTracks.map((videoTrack: NativeMediaTrack) => fromNativeMediaTrack(videoTrack)),\n duration: 1e3 * player.duration,\n selectedTextTrack: player.textTracks.find((track: NativeTextTrack) => track.mode === 'showing')?.uid,\n selectedVideoTrack: player.videoTracks.find((track: NativeMediaTrack) => track.enabled)?.uid,\n selectedAudioTrack: player.audioTracks.find((track: NativeMediaTrack) => track.enabled)?.uid,\n });\n }\n });\n\n player.addEventListener('error', (event) => {\n const { errorObject } = event;\n const error = {\n errorCode: errorObject.code.toString(),\n errorMessage: errorObject.message,\n };\n this.setState({ error });\n\n // potentially notify change in buffering state\n this.maybeChangeBufferingState(false);\n\n const { onError } = this.props;\n if (onError) {\n onError({ error });\n }\n });\n\n player.addEventListener('progress', () => {\n const { onProgress } = this.props;\n if (onProgress) {\n const seekable: TimeRange[] = [];\n for (let i = 0; i < player.seekable.length; i++) {\n seekable.push({\n start: player.seekable.start(i) * 1e3,\n end: player.seekable.end(i) * 1e3,\n });\n }\n onProgress({ seekable });\n }\n });\n\n player.addEventListener('play', () => {\n const { onPlay } = this.props;\n if (onPlay) {\n onPlay();\n }\n });\n\n player.addEventListener('playing', () => {\n // potentially notify change in buffering state\n this.maybeChangeBufferingState(false);\n\n const { onPlaying } = this.props;\n if (onPlaying) {\n onPlaying();\n }\n });\n\n player.addEventListener('pause', () => {\n const { onPause } = this.props;\n if (onPause) {\n onPause();\n }\n });\n\n player.addEventListener('seeking', () => {\n const { onSeeking } = this.props;\n if (onSeeking) {\n onSeeking();\n }\n });\n\n player.addEventListener('seeked', () => {\n const { onSeeked } = this.props;\n if (onSeeked) {\n onSeeked();\n }\n });\n\n player.addEventListener('ended', () => {\n const { onEnded } = this.props;\n if (onEnded) {\n onEnded();\n }\n });\n\n player.addEventListener('readystatechange', (event: NativeReadyStateChangeEvent) => {\n // potentially notify change in buffering state\n this.maybeChangeBufferingState(event.readyState < 3);\n\n const { onReadyStateChange } = this.props;\n if (onReadyStateChange) {\n onReadyStateChange({ readyState: event.readyState });\n }\n });\n\n player.addEventListener('timeupdate', () => {\n const { onTimeUpdate } = this.props;\n if (onTimeUpdate) {\n onTimeUpdate({\n currentTime: player.currentTime * 1e3,\n currentProgramDateTime: player.currentProgramDateTime?.getTime(),\n });\n }\n });\n player.addEventListener('durationchange', (event) => {\n const { onDurationChange } = this.props;\n if (onDurationChange) {\n onDurationChange({\n duration: event.duration * 1e3,\n });\n }\n });\n player.addEventListener('segmentnotfound', () => {\n const { onSegmentNotFound } = this.props;\n if (onSegmentNotFound) {\n onSegmentNotFound({\n segmentStartTime: 0,\n error: 'Segment not found',\n retryCount: -1,\n });\n }\n });\n\n player.presentation.addEventListener('presentationmodechange', (event: PresentationModeChangeEvent) => {\n const { presentationMode } = event;\n const { onFullscreenPlayerDidPresent, onFullscreenPlayerDidDismiss } = this.props;\n if (presentationMode === 'fullscreen') {\n if (onFullscreenPlayerDidPresent) {\n onFullscreenPlayerDidPresent();\n }\n } else if (presentationMode === 'inline') {\n if (onFullscreenPlayerDidDismiss) {\n onFullscreenPlayerDidDismiss();\n }\n }\n });\n\n player.textTracks.addEventListener('addtrack', (event: AddTrackEvent) => {\n const track = event.track as NativeTextTrack;\n track.addEventListener('addcue', this.onAddTextTrackCue(track));\n track.addEventListener('removecue', this.onRemoveTextTrackCue(track));\n this.dispatchTextTrackListEvent(TrackListEventType.AddTrack, track as TextTrack);\n });\n\n player.textTracks.addEventListener('removetrack', (event: RemoveTrackEvent) => {\n const track = event.track as NativeTextTrack;\n track.removeEventListener('addcue', this.onAddTextTrackCue(track));\n track.removeEventListener('removecue', this.onRemoveTextTrackCue(track));\n this.dispatchTextTrackListEvent(TrackListEventType.RemoveTrack, track as NativeTextTrack as TextTrack);\n });\n\n player.textTracks.addEventListener('change', (event: TrackChangeEvent) => {\n this.dispatchTextTrackListEvent(TrackListEventType.ChangeTrack, event.track as NativeTextTrack as TextTrack);\n });\n\n [MediaTrackType.Audio, MediaTrackType.Video].forEach((trackType) => {\n const mediaTracks = trackType === MediaTrackType.Audio ? player.audioTracks : player.videoTracks;\n mediaTracks.addEventListener('addtrack', (event: AddTrackEvent) => {\n const track = event.track as NativeMediaTrack;\n track.addEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track));\n this.dispatchMediaTrackListEvent(TrackListEventType.AddTrack, trackType, track as MediaTrack);\n });\n });\n\n [MediaTrackType.Audio, MediaTrackType.Video].forEach((trackType) => {\n const mediaTracks = trackType === MediaTrackType.Audio ? player.audioTracks : player.videoTracks;\n mediaTracks.addEventListener('removetrack', (event: RemoveTrackEvent) => {\n const track = event.track as NativeMediaTrack;\n track.removeEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track));\n this.dispatchMediaTrackListEvent(TrackListEventType.RemoveTrack, trackType, track as MediaTrack);\n });\n });\n\n [MediaTrackType.Audio, MediaTrackType.Video].forEach((trackType) => {\n const mediaTracks = trackType === MediaTrackType.Audio ? player.audioTracks : player.videoTracks;\n mediaTracks.addEventListener('change', (event: TrackChangeEvent) => {\n const track = event.track as NativeMediaTrack;\n this.dispatchMediaTrackListEvent(TrackListEventType.ChangeTrack, trackType, track as MediaTrack);\n });\n });\n\n player.ads?.addEventListener(AdEventNames, (event) => {\n const { onAdEvent } = this.props;\n if (onAdEvent) {\n onAdEvent(event as AdEvent);\n }\n });\n }\n\n private dispatchTextTrackListEvent = (type: TrackListEventType, track: TextTrack) => {\n const { onTextTrackListEvent } = this.props;\n if (onTextTrackListEvent) {\n onTextTrackListEvent({\n type,\n track,\n });\n }\n };\n\n private dispatchMediaTrackListEvent = (type: TrackListEventType, trackType: MediaTrackType, track: MediaTrack) => {\n const { onMediaTrackListEvent } = this.props;\n if (onMediaTrackListEvent) {\n onMediaTrackListEvent({\n type,\n trackType,\n track: track as MediaTrack,\n });\n }\n };\n\n public render(): JSX.Element {\n const { config } = this.props;\n const chromeless = config?.chromeless === undefined || config?.chromeless === true;\n\n return (\n <div id={'theoplayer-wrapper'}>\n <div className={chromeless ? 'theoplayer-container' : 'theoplayer-container video-js theoplayer-skin'} />\n </div>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,9 @@
1
1
  export const __esModule: boolean;
2
2
  export const TrackListEventType: {} | undefined;
3
3
  export const TextTrackEventType: {} | undefined;
4
+ export const MediaTrackType: {} | undefined;
5
+ export const MediaTrackEventType: {} | undefined;
4
6
  export let TrackListEventType: any;
5
7
  export let TextTrackEventType: any;
8
+ export let MediaTrackType: any;
9
+ export let MediaTrackEventType: any;
@@ -1,2 +1,4 @@
1
1
  export let TrackListEventType: any;
2
2
  export let TextTrackEventType: any;
3
+ export let MediaTrackType: any;
4
+ export let MediaTrackEventType: any;
@@ -1,11 +1,11 @@
1
1
  import type { SourceDescription } from './source/SourceDescription';
2
2
  import type { StyleProp, ViewStyle } from 'react-native';
3
3
  import type { DurationChangeEvent, ErrorEvent, LoadedMetadataEvent, ReadyStateChangeEvent, TimeUpdateEvent, ProgressEvent, SegmentNotFoundEvent } from './event/PlayerEvent';
4
- import type { TextTrackEvent, TextTrackListEvent } from './event/TrackEvent';
4
+ import type { MediaTrackEvent, MediaTrackListEvent, TextTrackEvent, TextTrackListEvent } from './event/TrackEvent';
5
5
  import type { PlayerConfiguration } from './config/PlayerConfiguration';
6
6
  import type { ABRConfiguration } from './abr/ABRConfiguration';
7
- import type { AdEvent } from "./event/AdEvent";
8
- import type { AdsAPI } from "./ads/AdsAPI";
7
+ import type { AdEvent } from './event/AdEvent';
8
+ import type { AdsAPI } from './ads/AdsAPI';
9
9
  export interface THEOplayerViewProps {
10
10
  /**
11
11
  * The player configuration with THEOplayer license.
@@ -180,6 +180,14 @@ export interface THEOplayerViewProps {
180
180
  * Invoked when a text track event occurs.
181
181
  */
182
182
  onTextTrackEvent?: (event: TextTrackEvent) => void;
183
+ /**
184
+ * Invoked when a media track list event occurs.
185
+ */
186
+ onMediaTrackListEvent?: (event: MediaTrackListEvent) => void;
187
+ /**
188
+ * Invoked when a media track event occurs.
189
+ */
190
+ onMediaTrackEvent?: (event: MediaTrackEvent) => void;
183
191
  /**
184
192
  * Invoked when an ad event occurs.
185
193
  */
@@ -1,5 +1,7 @@
1
1
  import type { TextTrack } from '../track/TextTrack';
2
2
  import type { TextTrackCue } from '../track/TextTrackCue';
3
+ import type { MediaTrack } from '../track/MediaTrack';
4
+ import type { Quality } from '../track/Quality';
3
5
  export declare enum TrackListEventType {
4
6
  /**
5
7
  * Dispatched when track has been added to the track list.
@@ -8,13 +10,19 @@ export declare enum TrackListEventType {
8
10
  /**
9
11
  * Dispatched when track has been removed from the track list.
10
12
  */
11
- RemoveTrack = 1
13
+ RemoveTrack = 1,
14
+ /**
15
+ * Fired when a track has been changed.
16
+ */
17
+ ChangeTrack = 2
12
18
  }
13
- export interface TextTrackListEvent {
19
+ export interface TrackListEvent {
14
20
  /**
15
- * The type of text track list event.
21
+ * The type of track list event.
16
22
  */
17
23
  readonly type: TrackListEventType;
24
+ }
25
+ export interface TextTrackListEvent extends TrackListEvent {
18
26
  /**
19
27
  * The relevant text track.
20
28
  */
@@ -44,3 +52,41 @@ export interface TextTrackEvent {
44
52
  */
45
53
  readonly cue: TextTrackCue;
46
54
  }
55
+ export declare enum MediaTrackType {
56
+ Audio = 0,
57
+ Video = 1
58
+ }
59
+ export interface MediaTrackListEvent extends TrackListEvent {
60
+ /**
61
+ * The relevant media track type, either {@link MediaTrackType.Audio} or {@link MediaTrackType.Video}.
62
+ */
63
+ readonly trackType: MediaTrackType;
64
+ /**
65
+ * The relevant media track.
66
+ */
67
+ readonly track: MediaTrack;
68
+ }
69
+ export declare enum MediaTrackEventType {
70
+ /**
71
+ * Dispatched when the media track's active quality changes.
72
+ */
73
+ ActiveQualityChanged = 0
74
+ }
75
+ export interface MediaTrackEvent {
76
+ /**
77
+ * The type of media track event.
78
+ */
79
+ readonly type: MediaTrackEventType;
80
+ /**
81
+ * The media track's type to which event belongs, either {@link MediaTrackType.Audio} or {@link MediaTrackType.Video}.
82
+ */
83
+ readonly trackType: MediaTrackType;
84
+ /**
85
+ * The media track's uid to which event belongs.
86
+ */
87
+ readonly trackUid: number;
88
+ /**
89
+ * The affected media track's qualities.
90
+ */
91
+ readonly qualities?: Quality | Quality[];
92
+ }
@@ -1,6 +1,6 @@
1
1
  import React, { PureComponent } from 'react';
2
2
  import { NativeSyntheticEvent, HostComponent } from 'react-native';
3
- import type { DurationChangeEvent, ErrorEvent, LoadedMetadataEvent, ReadyStateChangeEvent, THEOplayerViewComponent, THEOplayerViewProps, TimeUpdateEvent, ProgressEvent, PlayerError, SegmentNotFoundEvent, TextTrackListEvent, TextTrackEvent, AdEvent, AdsAPI } from 'react-native-theoplayer';
3
+ import type { DurationChangeEvent, ErrorEvent, LoadedMetadataEvent, ReadyStateChangeEvent, THEOplayerViewComponent, THEOplayerViewProps, TimeUpdateEvent, ProgressEvent, PlayerError, SegmentNotFoundEvent, TextTrackListEvent, TextTrackEvent, AdEvent, AdsAPI, MediaTrackEvent, MediaTrackListEvent } from 'react-native-theoplayer';
4
4
  import type { SourceDescription } from 'react-native-theoplayer';
5
5
  interface THEOplayerRCTViewProps extends THEOplayerViewProps {
6
6
  ref: React.RefObject<THEOplayerViewNativeComponent>;
@@ -24,6 +24,8 @@ interface THEOplayerRCTViewProps extends THEOplayerViewProps {
24
24
  onNativeSegmentNotFound: (event: NativeSyntheticEvent<SegmentNotFoundEvent>) => void;
25
25
  onNativeTextTrackListEvent: (event: NativeSyntheticEvent<TextTrackListEvent>) => void;
26
26
  onNativeTextTrackEvent: (event: NativeSyntheticEvent<TextTrackEvent>) => void;
27
+ onNativeMediaTrackListEvent: (event: NativeSyntheticEvent<MediaTrackListEvent>) => void;
28
+ onNativeMediaTrackEvent: (event: NativeSyntheticEvent<MediaTrackEvent>) => void;
27
29
  onNativeAdEvent: (event: NativeSyntheticEvent<AdEvent>) => void;
28
30
  onNativeFullscreenPlayerWillPresent?: () => void;
29
31
  onNativeFullscreenPlayerDidPresent?: () => void;
@@ -68,6 +70,8 @@ export declare class THEOplayerView extends PureComponent<THEOplayerViewProps, T
68
70
  private _onSegmentNotFound;
69
71
  private _onTextTrackListEvent;
70
72
  private _onTextTrackEvent;
73
+ private _onMediaTrackListEvent;
74
+ private _onMediaTrackEvent;
71
75
  private _onAdEvent;
72
76
  private _onFullscreenPlayerWillPresent;
73
77
  private _onFullscreenPlayerDidPresent;
@@ -8,7 +8,7 @@ interface THEOplayerRCTViewState {
8
8
  }
9
9
  export declare class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplayerRCTViewState> implements THEOplayerViewComponent {
10
10
  private _player;
11
- private _adsApi;
11
+ private readonly _adsApi;
12
12
  private static initialState;
13
13
  constructor(props: THEOplayerViewProps);
14
14
  componentDidMount(): void;
@@ -21,7 +21,10 @@ export declare class THEOplayerView extends PureComponent<THEOplayerViewProps, T
21
21
  private maybeChangeBufferingState;
22
22
  private onAddTextTrackCue;
23
23
  private onRemoveTextTrackCue;
24
+ private onActiveQualityChanged;
24
25
  private addEventListeners;
26
+ private dispatchTextTrackListEvent;
27
+ private dispatchMediaTrackListEvent;
25
28
  render(): JSX.Element;
26
29
  }
27
30
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-theoplayer",
3
- "version": "1.7.1",
3
+ "version": "1.7.2",
4
4
  "description": "A THEOplayer video component for react-native.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -9,11 +9,11 @@ import type {
9
9
  ProgressEvent,
10
10
  SegmentNotFoundEvent,
11
11
  } from './event/PlayerEvent';
12
- import type { TextTrackEvent, TextTrackListEvent } from './event/TrackEvent';
12
+ import type { MediaTrackEvent, MediaTrackListEvent, TextTrackEvent, TextTrackListEvent } from './event/TrackEvent';
13
13
  import type { PlayerConfiguration } from './config/PlayerConfiguration';
14
14
  import type { ABRConfiguration } from './abr/ABRConfiguration';
15
- import type { AdEvent } from "./event/AdEvent";
16
- import type { AdsAPI } from "./ads/AdsAPI";
15
+ import type { AdEvent } from './event/AdEvent';
16
+ import type { AdsAPI } from './ads/AdsAPI';
17
17
 
18
18
  export interface THEOplayerViewProps {
19
19
  /**
@@ -225,6 +225,16 @@ export interface THEOplayerViewProps {
225
225
  */
226
226
  onTextTrackEvent?: (event: TextTrackEvent) => void;
227
227
 
228
+ /**
229
+ * Invoked when a media track list event occurs.
230
+ */
231
+ onMediaTrackListEvent?: (event: MediaTrackListEvent) => void;
232
+
233
+ /**
234
+ * Invoked when a media track event occurs.
235
+ */
236
+ onMediaTrackEvent?: (event: MediaTrackEvent) => void;
237
+
228
238
  /**
229
239
  * Invoked when an ad event occurs.
230
240
  */
@@ -1,5 +1,7 @@
1
1
  import type { TextTrack } from '../track/TextTrack';
2
2
  import type { TextTrackCue } from '../track/TextTrackCue';
3
+ import type { MediaTrack } from '../track/MediaTrack';
4
+ import type { Quality } from '../track/Quality';
3
5
 
4
6
  export enum TrackListEventType {
5
7
  /**
@@ -11,14 +13,21 @@ export enum TrackListEventType {
11
13
  * Dispatched when track has been removed from the track list.
12
14
  */
13
15
  RemoveTrack,
16
+
17
+ /**
18
+ * Fired when a track has been changed.
19
+ */
20
+ ChangeTrack,
14
21
  }
15
22
 
16
- export interface TextTrackListEvent {
23
+ export interface TrackListEvent {
17
24
  /**
18
- * The type of text track list event.
25
+ * The type of track list event.
19
26
  */
20
27
  readonly type: TrackListEventType;
28
+ }
21
29
 
30
+ export interface TextTrackListEvent extends TrackListEvent {
22
31
  /**
23
32
  * The relevant text track.
24
33
  */
@@ -53,3 +62,50 @@ export interface TextTrackEvent {
53
62
  */
54
63
  readonly cue: TextTrackCue;
55
64
  }
65
+
66
+ export enum MediaTrackType {
67
+ Audio,
68
+
69
+ Video,
70
+ }
71
+
72
+ export interface MediaTrackListEvent extends TrackListEvent {
73
+ /**
74
+ * The relevant media track type, either {@link MediaTrackType.Audio} or {@link MediaTrackType.Video}.
75
+ */
76
+ readonly trackType: MediaTrackType;
77
+
78
+ /**
79
+ * The relevant media track.
80
+ */
81
+ readonly track: MediaTrack;
82
+ }
83
+
84
+ export enum MediaTrackEventType {
85
+ /**
86
+ * Dispatched when the media track's active quality changes.
87
+ */
88
+ ActiveQualityChanged,
89
+ }
90
+
91
+ export interface MediaTrackEvent {
92
+ /**
93
+ * The type of media track event.
94
+ */
95
+ readonly type: MediaTrackEventType;
96
+
97
+ /**
98
+ * The media track's type to which event belongs, either {@link MediaTrackType.Audio} or {@link MediaTrackType.Video}.
99
+ */
100
+ readonly trackType: MediaTrackType;
101
+
102
+ /**
103
+ * The media track's uid to which event belongs.
104
+ */
105
+ readonly trackUid: number;
106
+
107
+ /**
108
+ * The affected media track's qualities.
109
+ */
110
+ readonly qualities?: Quality | Quality[];
111
+ }
@@ -15,6 +15,8 @@ import type {
15
15
  TextTrackEvent,
16
16
  AdEvent,
17
17
  AdsAPI,
18
+ MediaTrackEvent,
19
+ MediaTrackListEvent,
18
20
  } from 'react-native-theoplayer';
19
21
 
20
22
  import styles from './THEOplayerView.style';
@@ -45,6 +47,8 @@ interface THEOplayerRCTViewProps extends THEOplayerViewProps {
45
47
  onNativeSegmentNotFound: (event: NativeSyntheticEvent<SegmentNotFoundEvent>) => void;
46
48
  onNativeTextTrackListEvent: (event: NativeSyntheticEvent<TextTrackListEvent>) => void;
47
49
  onNativeTextTrackEvent: (event: NativeSyntheticEvent<TextTrackEvent>) => void;
50
+ onNativeMediaTrackListEvent: (event: NativeSyntheticEvent<MediaTrackListEvent>) => void;
51
+ onNativeMediaTrackEvent: (event: NativeSyntheticEvent<MediaTrackEvent>) => void;
48
52
  onNativeAdEvent: (event: NativeSyntheticEvent<AdEvent>) => void;
49
53
  onNativeFullscreenPlayerWillPresent?: () => void;
50
54
  onNativeFullscreenPlayerDidPresent?: () => void;
@@ -260,6 +264,18 @@ export class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplaye
260
264
  }
261
265
  };
262
266
 
267
+ private _onMediaTrackListEvent = (event: NativeSyntheticEvent<MediaTrackListEvent>) => {
268
+ if (this.props.onMediaTrackListEvent) {
269
+ this.props.onMediaTrackListEvent(event.nativeEvent);
270
+ }
271
+ };
272
+
273
+ private _onMediaTrackEvent = (event: NativeSyntheticEvent<MediaTrackEvent>) => {
274
+ if (this.props.onMediaTrackEvent) {
275
+ this.props.onMediaTrackEvent(event.nativeEvent);
276
+ }
277
+ };
278
+
263
279
  private _onAdEvent = (event: NativeSyntheticEvent<AdEvent>) => {
264
280
  if (this.props.onAdEvent) {
265
281
  this.props.onAdEvent(event.nativeEvent);
@@ -327,6 +343,8 @@ export class THEOplayerView extends PureComponent<THEOplayerViewProps, THEOplaye
327
343
  onNativeSegmentNotFound={this._onSegmentNotFound}
328
344
  onNativeTextTrackListEvent={this._onTextTrackListEvent}
329
345
  onNativeTextTrackEvent={this._onTextTrackEvent}
346
+ onNativeMediaTrackListEvent={this._onMediaTrackListEvent}
347
+ onNativeMediaTrackEvent={this._onMediaTrackEvent}
330
348
  onNativeAdEvent={this._onAdEvent}
331
349
  onNativeFullscreenPlayerWillPresent={this._onFullscreenPlayerWillPresent}
332
350
  onNativeFullscreenPlayerDidPresent={this._onFullscreenPlayerDidPresent}