react-native-theoplayer 3.2.1 → 3.3.1
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/CHANGELOG.md +13 -0
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerPackage.kt +3 -1
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerView.kt +2 -1
- package/android/src/main/java/com/theoplayer/ads/AdAdapter.kt +295 -4
- package/android/src/main/java/com/theoplayer/ads/AdEventAdapter.kt +63 -15
- package/android/src/main/java/com/theoplayer/broadcast/DefaultEventDispatcher.kt +27 -0
- package/android/src/main/java/com/theoplayer/broadcast/EventAdapter.kt +23 -0
- package/android/src/main/java/com/theoplayer/broadcast/EventBroadcastAdapter.kt +15 -0
- package/android/src/main/java/com/theoplayer/broadcast/EventBroadcastModule.kt +36 -0
- package/ios/THEOplayerRCTBridge.m +10 -0
- package/ios/THEOplayerRCTTypeUtils.swift +17 -0
- package/ios/THEOplayerRCTView.swift +2 -0
- package/ios/ads/{THEOplayerRCTAdAggregator.swift → THEOplayerRCTAdAdapter.swift} +92 -20
- package/ios/ads/THEOplayerRCTAdEventAdapter.swift +27 -0
- package/ios/ads/THEOplayerRCTAdsAPI.swift +3 -3
- package/ios/ads/THEOplayerRCTAdsEventHandler.swift +9 -9
- package/ios/ads/THEOplayerRCTAdsNative.swift +159 -0
- package/ios/eventBroadcasting/THEOplayerRCTBroadcastEventHandler.swift +99 -0
- package/ios/eventBroadcasting/THEOplayerRCTEventBroadcastAPI.swift +33 -0
- package/lib/commonjs/api/barrel.js +42 -20
- package/lib/commonjs/api/barrel.js.map +1 -1
- package/lib/commonjs/api/broadcast/EventBroadcastAPI.js +6 -0
- package/lib/commonjs/api/broadcast/EventBroadcastAPI.js.map +1 -0
- package/lib/commonjs/api/broadcast/barrel.js +17 -0
- package/lib/commonjs/api/broadcast/barrel.js.map +1 -0
- package/lib/commonjs/api/player/THEOplayer.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +9 -0
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js +5 -0
- package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.js +24 -0
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -0
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.web.js +44 -0
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.web.js.map +1 -0
- package/lib/commonjs/internal/adapter/broadcast/web/DefaultWebEventDispatcher.js +72 -0
- package/lib/commonjs/internal/adapter/broadcast/web/DefaultWebEventDispatcher.js.map +1 -0
- package/lib/module/api/barrel.js +2 -0
- package/lib/module/api/barrel.js.map +1 -1
- package/lib/module/api/broadcast/EventBroadcastAPI.js +2 -0
- package/lib/module/api/broadcast/EventBroadcastAPI.js.map +1 -0
- package/lib/module/api/broadcast/barrel.js +2 -0
- package/lib/module/api/broadcast/barrel.js.map +1 -0
- package/lib/module/api/player/THEOplayer.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerAdapter.js +9 -0
- package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerWebAdapter.js +5 -0
- package/lib/module/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.js +17 -0
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -0
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.web.js +37 -0
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.web.js.map +1 -0
- package/lib/module/internal/adapter/broadcast/web/DefaultWebEventDispatcher.js +63 -0
- package/lib/module/internal/adapter/broadcast/web/DefaultWebEventDispatcher.js.map +1 -0
- package/lib/typescript/api/barrel.d.ts +2 -0
- package/lib/typescript/api/broadcast/EventBroadcastAPI.d.ts +12 -0
- package/lib/typescript/api/broadcast/barrel.d.ts +1 -0
- package/lib/typescript/api/player/THEOplayer.d.ts +5 -0
- package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +4 -3
- package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts +4 -2
- package/lib/typescript/internal/adapter/broadcast/EventBroadcastAdapter.d.ts +7 -0
- package/lib/typescript/internal/adapter/broadcast/EventBroadcastAdapter.web.d.ts +11 -0
- package/lib/typescript/internal/adapter/broadcast/web/DefaultWebEventDispatcher.d.ts +12 -0
- package/package.json +2 -2
- package/react-native-theoplayer.podspec +1 -1
- package/src/api/barrel.ts +2 -0
- package/src/api/broadcast/EventBroadcastAPI.ts +13 -0
- package/src/api/broadcast/barrel.ts +1 -0
- package/src/api/player/THEOplayer.ts +6 -0
- package/src/internal/adapter/THEOplayerAdapter.ts +10 -2
- package/src/internal/adapter/THEOplayerWebAdapter.ts +11 -5
- package/src/internal/adapter/broadcast/EventBroadcastAdapter.ts +20 -0
- package/src/internal/adapter/broadcast/EventBroadcastAdapter.web.ts +44 -0
- package/src/internal/adapter/broadcast/web/DefaultWebEventDispatcher.ts +66 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DefaultEventDispatcher","AspectRatio","PlayerEventType","PresentationMode","THEOplayerWebAdsAdapter","THEOplayerWebCastAdapter","version","nativeVersion","findNativeQualitiesByUid","fromNativeMediaTrackList","fromNativeTextTrackList","WebEventForwarder","WebPresentationModeManager","WebMediaSession","BaseEvent","defaultBackgroundAudioConfiguration","enabled","defaultPipConfiguration","startsAutomatically","THEOplayerWebAdapter","constructor","player","config","_config$mediaControl","_defineProperty","undefined","_this$_mediaSession","_player","document","visibilityState","presentationMode","pip","backgroundAudioConfiguration","pause","_mediaSession","updateActionHandlers","_adsAdapter","_castAdapter","_eventForwarder","_presentationModeManager","addEventListener","onVisibilityChange","mediaControl","mediaSessionEnabled","abr","_this$_player","source","_this$_player2","_targetVideoQuality","play","_this$_player3","_this$_player4","paused","autoplay","preload","type","_this$_player5","seekable","nativeRange","Array","length","map","_","index","start","end","buffered","playbackRate","pipConfiguration","_pipConfiguration","_backgroundAudioConfiguration","_this$_mediaSession2","volume","muted","seeking","audioTracks","videoTracks","textTracks","selectedTextTrack","_this$_player$textTra","find","textTrack","mode","uid","forEach","textTrackStyle","_this$_player6","selectedVideoTrack","_this$_player$videoTr","videoTrack","selectedAudioTrack","_this$_player$audioTr","audioTrack","targetVideoQuality","enabledVideoTrack","targetQuality","currentTime","NaN","isNaN","aspectRatio","FIT","_ratio","duration","ads","cast","playerSuiteVersion","destroy","_this$_eventForwarder","_this$_mediaSession3","_this$_player7","dispatchEvent","DESTROY","unload","removeEventListener","nativeHandle"],"sources":["THEOplayerWebAdapter.ts"],"sourcesContent":["import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';\nimport type {\n AdsAPI,\n CastAPI,\n MediaTrack,\n NativeHandleType,\n PlayerConfiguration,\n PlayerEventMap,\n PlayerVersion,\n PreloadType,\n TextTrack,\n TextTrackStyle,\n THEOplayer,\n} from 'react-native-theoplayer';\nimport { AspectRatio, PlayerEventType, PresentationMode } from 'react-native-theoplayer';\nimport { THEOplayerWebAdsAdapter } from './ads/THEOplayerWebAdsAdapter';\nimport { THEOplayerWebCastAdapter } from './cast/THEOplayerWebCastAdapter';\nimport { ChromelessPlayer as NativeChromelessPlayer, SourceDescription as NativeSourceDescription, version as nativeVersion } from 'theoplayer';\nimport type { MediaTrack as NativeMediaTrack, TextTrack as NativeTextTrack } from 'theoplayer';\nimport { findNativeQualitiesByUid, fromNativeMediaTrackList, fromNativeTextTrackList } from './web/TrackUtils';\nimport type { ABRConfiguration, SourceDescription } from 'src/api/barrel';\nimport { WebEventForwarder } from './WebEventForwarder';\nimport type { PiPConfiguration } from 'src/api/pip/PiPConfiguration';\nimport type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/BackgroundAudioConfiguration';\nimport { WebPresentationModeManager } from './web/WebPresentationModeManager';\nimport { WebMediaSession } from './web/WebMediaSession';\nimport { BaseEvent } from './event/BaseEvent';\n\nconst defaultBackgroundAudioConfiguration: BackgroundAudioConfiguration = {\n enabled: false,\n};\n\nconst defaultPipConfiguration: PiPConfiguration = {\n startsAutomatically: false,\n};\n\nexport class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap> implements THEOplayer {\n private readonly _adsAdapter: THEOplayerWebAdsAdapter;\n private readonly _castAdapter: THEOplayerWebCastAdapter;\n private readonly _presentationModeManager: WebPresentationModeManager;\n private _player: NativeChromelessPlayer | undefined;\n private _eventForwarder: WebEventForwarder | undefined;\n private _mediaSession: WebMediaSession | undefined = undefined;\n private _targetVideoQuality: number | number[] | undefined = undefined;\n private _backgroundAudioConfiguration: BackgroundAudioConfiguration = defaultBackgroundAudioConfiguration;\n private _pipConfiguration: PiPConfiguration = defaultPipConfiguration;\n\n constructor(player: NativeChromelessPlayer, config?: PlayerConfiguration) {\n super();\n this._player = player;\n this._adsAdapter = new THEOplayerWebAdsAdapter(this._player);\n this._castAdapter = new THEOplayerWebCastAdapter(this._player);\n this._eventForwarder = new WebEventForwarder(this._player, this);\n this._presentationModeManager = new WebPresentationModeManager(this._player, this);\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n\n // Optionally create a media session connector\n if (config?.mediaControl?.mediaSessionEnabled !== false) {\n this._mediaSession = new WebMediaSession(this, player);\n }\n }\n\n get abr(): ABRConfiguration | undefined {\n return this._player?.abr as ABRConfiguration | undefined;\n }\n\n get source(): SourceDescription | undefined {\n return this._player?.source as SourceDescription;\n }\n\n set source(source: SourceDescription | undefined) {\n this._targetVideoQuality = undefined;\n if (this._player) {\n this._player.source = source as NativeSourceDescription;\n }\n }\n\n play(): void {\n this._player?.play();\n }\n\n pause(): void {\n this._player?.pause();\n }\n\n get paused(): boolean {\n return this._player ? this._player.paused : true;\n }\n\n get autoplay(): boolean {\n return this._player ? this._player.autoplay : false;\n }\n\n set autoplay(autoplay: boolean) {\n if (this._player) {\n this._player.autoplay = autoplay;\n }\n }\n\n set preload(type: PreloadType) {\n if (this._player) {\n this._player.preload = type;\n }\n }\n\n get preload(): PreloadType {\n return this._player?.preload || 'none';\n }\n\n get seekable() {\n if (!this._player) {\n return [];\n }\n const nativeRange = this._player.seekable;\n return [...Array(nativeRange.length)].map((_, index) => ({ start: 1e3 * nativeRange.start(index), end: 1e3 * nativeRange.end(index) }));\n }\n\n get buffered() {\n if (!this._player) {\n return [];\n }\n const nativeRange = this._player.buffered;\n return [...Array(nativeRange.length)].map((_, index) => ({ start: 1e3 * nativeRange.start(index), end: 1e3 * nativeRange.end(index) }));\n }\n\n get playbackRate(): number {\n return this._player ? this._player.playbackRate : 1;\n }\n\n set playbackRate(playbackRate: number) {\n if (this._player) {\n this._player.playbackRate = playbackRate;\n }\n }\n\n get pipConfiguration(): PiPConfiguration {\n return this._pipConfiguration;\n }\n\n set pipConfiguration(config: PiPConfiguration) {\n this._pipConfiguration = config;\n }\n\n get backgroundAudioConfiguration(): BackgroundAudioConfiguration {\n return this._backgroundAudioConfiguration;\n }\n\n set backgroundAudioConfiguration(config: BackgroundAudioConfiguration) {\n this._backgroundAudioConfiguration = config;\n\n // Notify media session\n this._mediaSession?.updateActionHandlers();\n }\n\n get volume(): number {\n return this._player ? this._player.volume : 1;\n }\n\n set volume(volume: number) {\n if (this._player) {\n this._player.volume = volume;\n }\n }\n\n get muted(): boolean {\n return this._player ? this._player.muted : false;\n }\n\n set muted(muted: boolean) {\n if (this._player) {\n this._player.muted = muted;\n }\n }\n\n get seeking(): boolean {\n return this._player ? this._player.seeking : false;\n }\n\n get presentationMode(): PresentationMode {\n return this._presentationModeManager.presentationMode;\n }\n\n set presentationMode(presentationMode: PresentationMode) {\n this._presentationModeManager.presentationMode = presentationMode;\n }\n\n get audioTracks(): MediaTrack[] {\n return this._player ? fromNativeMediaTrackList(this._player.audioTracks) : [];\n }\n\n get videoTracks(): MediaTrack[] {\n return this._player ? fromNativeMediaTrackList(this._player.videoTracks) : [];\n }\n\n get textTracks(): TextTrack[] {\n return this._player ? fromNativeTextTrackList(this._player.textTracks) : [];\n }\n\n get selectedTextTrack(): number | undefined {\n if (this._player) {\n return this._player.textTracks.find((textTrack: NativeTextTrack) => {\n return textTrack.mode === 'showing';\n })?.uid;\n }\n return undefined;\n }\n\n set selectedTextTrack(selectedTextTrack: number | undefined) {\n if (this._player) {\n this._player.textTracks.forEach((textTrack: NativeTextTrack) => {\n textTrack.mode = textTrack.uid === selectedTextTrack ? 'showing' : 'disabled';\n });\n }\n }\n\n get textTrackStyle(): TextTrackStyle {\n return this._player?.textTrackStyle as TextTrackStyle;\n }\n\n get selectedVideoTrack(): number | undefined {\n if (this._player) {\n return this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.enabled)?.uid;\n }\n return undefined;\n }\n\n set selectedVideoTrack(selectedVideoTrack: number | undefined) {\n if (this._player) {\n this._targetVideoQuality = undefined;\n this._player.videoTracks.forEach((videoTrack: NativeMediaTrack) => {\n videoTrack.enabled = videoTrack.uid === selectedVideoTrack;\n });\n }\n }\n\n get selectedAudioTrack(): number | undefined {\n if (this._player) {\n return this._player.audioTracks.find((audioTrack: NativeMediaTrack) => {\n return audioTrack.enabled;\n })?.uid;\n }\n return undefined;\n }\n\n set selectedAudioTrack(selectedAudioTrack: number | undefined) {\n if (this._player) {\n this._player.audioTracks.forEach((audioTrack: NativeMediaTrack) => {\n audioTrack.enabled = audioTrack.uid === selectedAudioTrack;\n });\n }\n }\n\n get targetVideoQuality(): number | number[] | undefined {\n if (this._player) {\n return this._targetVideoQuality;\n }\n return undefined;\n }\n\n set targetVideoQuality(targetVideoQuality: number | number[] | undefined) {\n if (this._player) {\n const enabledVideoTrack = this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.enabled);\n if (enabledVideoTrack) {\n enabledVideoTrack.targetQuality = findNativeQualitiesByUid(enabledVideoTrack, targetVideoQuality);\n }\n this._targetVideoQuality = targetVideoQuality;\n }\n }\n\n get currentTime(): number {\n return this._player ? 1e3 * this._player.currentTime : NaN;\n }\n\n set currentTime(currentTime: number) {\n if (isNaN(currentTime)) {\n return;\n }\n if (this._player) {\n this._player.currentTime = currentTime / 1e3;\n }\n }\n\n get aspectRatio(): AspectRatio {\n return AspectRatio.FIT;\n }\n\n set aspectRatio(_ratio: AspectRatio) {\n // unused\n }\n\n get duration(): number {\n return this._player ? this._player.duration * 1e3 : NaN;\n }\n\n public get ads(): AdsAPI {\n return this._adsAdapter;\n }\n\n public get cast(): CastAPI {\n return this._castAdapter;\n }\n\n public get version(): PlayerVersion {\n return {\n version: nativeVersion,\n playerSuiteVersion: '', // deprecated\n };\n }\n\n destroy(): void {\n this.dispatchEvent(new BaseEvent(PlayerEventType.DESTROY));\n this._eventForwarder?.unload();\n this._mediaSession?.destroy();\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n this._eventForwarder = undefined;\n this._mediaSession = undefined;\n this._player?.destroy();\n this._player = undefined;\n }\n\n get nativeHandle(): NativeHandleType {\n return this._player;\n }\n\n private readonly onVisibilityChange = () => {\n if (!this._player) {\n return;\n }\n if (document.visibilityState !== 'visible') {\n // Apply background configuration: by default, pause when going to background, unless in pip\n if (this.presentationMode !== PresentationMode.pip && !this.backgroundAudioConfiguration.enabled) {\n this._player.pause();\n }\n }\n // Apply media session controls\n this._mediaSession?.updateActionHandlers();\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["DefaultEventDispatcher","AspectRatio","PlayerEventType","PresentationMode","THEOplayerWebAdsAdapter","THEOplayerWebCastAdapter","version","nativeVersion","findNativeQualitiesByUid","fromNativeMediaTrackList","fromNativeTextTrackList","WebEventForwarder","WebPresentationModeManager","WebMediaSession","BaseEvent","EventBroadcastAdapter","defaultBackgroundAudioConfiguration","enabled","defaultPipConfiguration","startsAutomatically","THEOplayerWebAdapter","constructor","player","config","_config$mediaControl","_defineProperty","undefined","_this$_mediaSession","_player","document","visibilityState","presentationMode","pip","backgroundAudioConfiguration","pause","_mediaSession","updateActionHandlers","_adsAdapter","_castAdapter","_eventForwarder","_presentationModeManager","addEventListener","onVisibilityChange","mediaControl","mediaSessionEnabled","abr","_this$_player","source","_this$_player2","_targetVideoQuality","play","_this$_player3","_this$_player4","paused","autoplay","preload","type","_this$_player5","seekable","nativeRange","Array","length","map","_","index","start","end","buffered","playbackRate","pipConfiguration","_pipConfiguration","_backgroundAudioConfiguration","_this$_mediaSession2","volume","muted","seeking","audioTracks","videoTracks","textTracks","selectedTextTrack","_this$_player$textTra","find","textTrack","mode","uid","forEach","textTrackStyle","_this$_player6","selectedVideoTrack","_this$_player$videoTr","videoTrack","selectedAudioTrack","_this$_player$audioTr","audioTrack","targetVideoQuality","enabledVideoTrack","targetQuality","currentTime","NaN","isNaN","aspectRatio","FIT","_ratio","duration","ads","cast","playerSuiteVersion","destroy","_this$_eventForwarder","_this$_mediaSession3","_this$_player7","dispatchEvent","DESTROY","unload","removeEventListener","nativeHandle","broadcast","_externalEventRouter"],"sources":["THEOplayerWebAdapter.ts"],"sourcesContent":["import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';\nimport type {\n AdsAPI,\n CastAPI,\n MediaTrack,\n NativeHandleType,\n PlayerConfiguration,\n PlayerEventMap,\n PlayerVersion,\n PreloadType,\n TextTrack,\n TextTrackStyle,\n THEOplayer,\n} from 'react-native-theoplayer';\nimport { AspectRatio, EventBroadcastAPI, PlayerEventType, PresentationMode } from 'react-native-theoplayer';\nimport { THEOplayerWebAdsAdapter } from './ads/THEOplayerWebAdsAdapter';\nimport { THEOplayerWebCastAdapter } from './cast/THEOplayerWebCastAdapter';\nimport { ChromelessPlayer as NativeChromelessPlayer, SourceDescription as NativeSourceDescription, version as nativeVersion } from 'theoplayer';\nimport type { MediaTrack as NativeMediaTrack, TextTrack as NativeTextTrack } from 'theoplayer';\nimport { findNativeQualitiesByUid, fromNativeMediaTrackList, fromNativeTextTrackList } from './web/TrackUtils';\nimport type { ABRConfiguration, SourceDescription } from 'src/api/barrel';\nimport { WebEventForwarder } from './WebEventForwarder';\nimport type { PiPConfiguration } from 'src/api/pip/PiPConfiguration';\nimport type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/BackgroundAudioConfiguration';\nimport { WebPresentationModeManager } from './web/WebPresentationModeManager';\nimport { WebMediaSession } from './web/WebMediaSession';\nimport { BaseEvent } from './event/BaseEvent';\nimport { EventBroadcastAdapter } from \"./broadcast/EventBroadcastAdapter\";\n\nconst defaultBackgroundAudioConfiguration: BackgroundAudioConfiguration = {\n enabled: false,\n};\n\nconst defaultPipConfiguration: PiPConfiguration = {\n startsAutomatically: false,\n};\n\nexport class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap> implements THEOplayer {\n private readonly _adsAdapter: THEOplayerWebAdsAdapter;\n private readonly _castAdapter: THEOplayerWebCastAdapter;\n private readonly _presentationModeManager: WebPresentationModeManager;\n private _player: NativeChromelessPlayer | undefined;\n private _eventForwarder: WebEventForwarder | undefined;\n private _mediaSession: WebMediaSession | undefined = undefined;\n private _targetVideoQuality: number | number[] | undefined = undefined;\n private _backgroundAudioConfiguration: BackgroundAudioConfiguration = defaultBackgroundAudioConfiguration;\n private _pipConfiguration: PiPConfiguration = defaultPipConfiguration;\n private _externalEventRouter: EventBroadcastAPI | undefined = undefined;\n\n constructor(player: NativeChromelessPlayer, config?: PlayerConfiguration) {\n super();\n this._player = player;\n this._adsAdapter = new THEOplayerWebAdsAdapter(this._player);\n this._castAdapter = new THEOplayerWebCastAdapter(this._player);\n this._eventForwarder = new WebEventForwarder(this._player, this);\n this._presentationModeManager = new WebPresentationModeManager(this._player, this);\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n\n // Optionally create a media session connector\n if (config?.mediaControl?.mediaSessionEnabled !== false) {\n this._mediaSession = new WebMediaSession(this, player);\n }\n }\n\n get abr(): ABRConfiguration | undefined {\n return this._player?.abr as ABRConfiguration | undefined;\n }\n\n get source(): SourceDescription | undefined {\n return this._player?.source as SourceDescription;\n }\n\n set source(source: SourceDescription | undefined) {\n this._targetVideoQuality = undefined;\n if (this._player) {\n this._player.source = source as NativeSourceDescription;\n }\n }\n\n play(): void {\n this._player?.play();\n }\n\n pause(): void {\n this._player?.pause();\n }\n\n get paused(): boolean {\n return this._player ? this._player.paused : true;\n }\n\n get autoplay(): boolean {\n return this._player ? this._player.autoplay : false;\n }\n\n set autoplay(autoplay: boolean) {\n if (this._player) {\n this._player.autoplay = autoplay;\n }\n }\n\n set preload(type: PreloadType) {\n if (this._player) {\n this._player.preload = type;\n }\n }\n\n get preload(): PreloadType {\n return this._player?.preload || 'none';\n }\n\n get seekable() {\n if (!this._player) {\n return [];\n }\n const nativeRange = this._player.seekable;\n return [...Array(nativeRange.length)].map((_, index) => ({ start: 1e3 * nativeRange.start(index), end: 1e3 * nativeRange.end(index) }));\n }\n\n get buffered() {\n if (!this._player) {\n return [];\n }\n const nativeRange = this._player.buffered;\n return [...Array(nativeRange.length)].map((_, index) => ({ start: 1e3 * nativeRange.start(index), end: 1e3 * nativeRange.end(index) }));\n }\n\n get playbackRate(): number {\n return this._player ? this._player.playbackRate : 1;\n }\n\n set playbackRate(playbackRate: number) {\n if (this._player) {\n this._player.playbackRate = playbackRate;\n }\n }\n\n get pipConfiguration(): PiPConfiguration {\n return this._pipConfiguration;\n }\n\n set pipConfiguration(config: PiPConfiguration) {\n this._pipConfiguration = config;\n }\n\n get backgroundAudioConfiguration(): BackgroundAudioConfiguration {\n return this._backgroundAudioConfiguration;\n }\n\n set backgroundAudioConfiguration(config: BackgroundAudioConfiguration) {\n this._backgroundAudioConfiguration = config;\n\n // Notify media session\n this._mediaSession?.updateActionHandlers();\n }\n\n get volume(): number {\n return this._player ? this._player.volume : 1;\n }\n\n set volume(volume: number) {\n if (this._player) {\n this._player.volume = volume;\n }\n }\n\n get muted(): boolean {\n return this._player ? this._player.muted : false;\n }\n\n set muted(muted: boolean) {\n if (this._player) {\n this._player.muted = muted;\n }\n }\n\n get seeking(): boolean {\n return this._player ? this._player.seeking : false;\n }\n\n get presentationMode(): PresentationMode {\n return this._presentationModeManager.presentationMode;\n }\n\n set presentationMode(presentationMode: PresentationMode) {\n this._presentationModeManager.presentationMode = presentationMode;\n }\n\n get audioTracks(): MediaTrack[] {\n return this._player ? fromNativeMediaTrackList(this._player.audioTracks) : [];\n }\n\n get videoTracks(): MediaTrack[] {\n return this._player ? fromNativeMediaTrackList(this._player.videoTracks) : [];\n }\n\n get textTracks(): TextTrack[] {\n return this._player ? fromNativeTextTrackList(this._player.textTracks) : [];\n }\n\n get selectedTextTrack(): number | undefined {\n if (this._player) {\n return this._player.textTracks.find((textTrack: NativeTextTrack) => {\n return textTrack.mode === 'showing';\n })?.uid;\n }\n return undefined;\n }\n\n set selectedTextTrack(selectedTextTrack: number | undefined) {\n if (this._player) {\n this._player.textTracks.forEach((textTrack: NativeTextTrack) => {\n textTrack.mode = textTrack.uid === selectedTextTrack ? 'showing' : 'disabled';\n });\n }\n }\n\n get textTrackStyle(): TextTrackStyle {\n return this._player?.textTrackStyle as TextTrackStyle;\n }\n\n get selectedVideoTrack(): number | undefined {\n if (this._player) {\n return this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.enabled)?.uid;\n }\n return undefined;\n }\n\n set selectedVideoTrack(selectedVideoTrack: number | undefined) {\n if (this._player) {\n this._targetVideoQuality = undefined;\n this._player.videoTracks.forEach((videoTrack: NativeMediaTrack) => {\n videoTrack.enabled = videoTrack.uid === selectedVideoTrack;\n });\n }\n }\n\n get selectedAudioTrack(): number | undefined {\n if (this._player) {\n return this._player.audioTracks.find((audioTrack: NativeMediaTrack) => {\n return audioTrack.enabled;\n })?.uid;\n }\n return undefined;\n }\n\n set selectedAudioTrack(selectedAudioTrack: number | undefined) {\n if (this._player) {\n this._player.audioTracks.forEach((audioTrack: NativeMediaTrack) => {\n audioTrack.enabled = audioTrack.uid === selectedAudioTrack;\n });\n }\n }\n\n get targetVideoQuality(): number | number[] | undefined {\n if (this._player) {\n return this._targetVideoQuality;\n }\n return undefined;\n }\n\n set targetVideoQuality(targetVideoQuality: number | number[] | undefined) {\n if (this._player) {\n const enabledVideoTrack = this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.enabled);\n if (enabledVideoTrack) {\n enabledVideoTrack.targetQuality = findNativeQualitiesByUid(enabledVideoTrack, targetVideoQuality);\n }\n this._targetVideoQuality = targetVideoQuality;\n }\n }\n\n get currentTime(): number {\n return this._player ? 1e3 * this._player.currentTime : NaN;\n }\n\n set currentTime(currentTime: number) {\n if (isNaN(currentTime)) {\n return;\n }\n if (this._player) {\n this._player.currentTime = currentTime / 1e3;\n }\n }\n\n get aspectRatio(): AspectRatio {\n return AspectRatio.FIT;\n }\n\n set aspectRatio(_ratio: AspectRatio) {\n // unused\n }\n\n get duration(): number {\n return this._player ? this._player.duration * 1e3 : NaN;\n }\n\n public get ads(): AdsAPI {\n return this._adsAdapter;\n }\n\n public get cast(): CastAPI {\n return this._castAdapter;\n }\n\n public get version(): PlayerVersion {\n return {\n version: nativeVersion,\n playerSuiteVersion: '', // deprecated\n };\n }\n\n destroy(): void {\n this.dispatchEvent(new BaseEvent(PlayerEventType.DESTROY));\n this._eventForwarder?.unload();\n this._mediaSession?.destroy();\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n this._eventForwarder = undefined;\n this._mediaSession = undefined;\n this._player?.destroy();\n this._player = undefined;\n }\n\n private readonly onVisibilityChange = () => {\n if (!this._player) {\n return;\n }\n if (document.visibilityState !== 'visible') {\n // Apply background configuration: by default, pause when going to background, unless in pip\n if (this.presentationMode !== PresentationMode.pip && !this.backgroundAudioConfiguration.enabled) {\n this._player.pause();\n }\n }\n // Apply media session controls\n this._mediaSession?.updateActionHandlers();\n };\n\n get nativeHandle(): NativeHandleType {\n return this._player;\n }\n\n get broadcast(): EventBroadcastAPI {\n return this._externalEventRouter ?? (this._externalEventRouter = new EventBroadcastAdapter(this));\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { NativeModules } from 'react-native';
|
|
2
|
+
export class EventBroadcastAdapter {
|
|
3
|
+
constructor(_player) {
|
|
4
|
+
this._player = _player;
|
|
5
|
+
}
|
|
6
|
+
broadcastEvent(event) {
|
|
7
|
+
// Broadcast ReactNative event.
|
|
8
|
+
this._player.dispatchEvent(event);
|
|
9
|
+
try {
|
|
10
|
+
// Broadcast native event.
|
|
11
|
+
NativeModules.EventBroadcastModule.broadcastEvent(this._player.nativeHandle, Object.freeze(event));
|
|
12
|
+
} catch (e) {
|
|
13
|
+
console.warn(`EventBroadcastModule not available: ${e}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=EventBroadcastAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeModules","EventBroadcastAdapter","constructor","_player","broadcastEvent","event","dispatchEvent","EventBroadcastModule","nativeHandle","Object","freeze","e","console","warn"],"sources":["EventBroadcastAdapter.ts"],"sourcesContent":["import type { EventBroadcastAPI, PlayerEventMap, THEOplayer } from 'react-native-theoplayer';\nimport { NativeModules } from 'react-native';\nimport type { THEOplayerAdapter } from '../THEOplayerAdapter';\nimport type { StringKeyOf } from '../../../api/event/EventDispatcher';\n\nexport class EventBroadcastAdapter implements EventBroadcastAPI {\n constructor(private _player: THEOplayer) {}\n\n broadcastEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): void {\n // Broadcast ReactNative event.\n (this._player as THEOplayerAdapter).dispatchEvent(event);\n\n try {\n // Broadcast native event.\n NativeModules.EventBroadcastModule.broadcastEvent(this._player.nativeHandle, Object.freeze(event));\n } catch (e) {\n console.warn(`EventBroadcastModule not available: ${e}`);\n }\n }\n}\n"],"mappings":"AACA,SAASA,aAAa,QAAQ,cAAc;AAI5C,OAAO,MAAMC,qBAAqB,CAA8B;EAC9DC,WAAWA,CAASC,OAAmB,EAAE;IAAA,KAArBA,OAAmB,GAAnBA,OAAmB;EAAG;EAE1CC,cAAcA,CAAwCC,KAAwB,EAAQ;IACpF;IACC,IAAI,CAACF,OAAO,CAAuBG,aAAa,CAACD,KAAK,CAAC;IAExD,IAAI;MACF;MACAL,aAAa,CAACO,oBAAoB,CAACH,cAAc,CAAC,IAAI,CAACD,OAAO,CAACK,YAAY,EAAEC,MAAM,CAACC,MAAM,CAACL,KAAK,CAAC,CAAC;IACpG,CAAC,CAAC,OAAOM,CAAC,EAAE;MACVC,OAAO,CAACC,IAAI,CAAE,uCAAsCF,CAAE,EAAC,CAAC;IAC1D;EACF;AACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { PlayerEventType } from "react-native-theoplayer";
|
|
2
|
+
import { DefaultWebEventDispatcher } from "./web/DefaultWebEventDispatcher";
|
|
3
|
+
export class EventBroadcastAdapter extends DefaultWebEventDispatcher {
|
|
4
|
+
constructor(_player) {
|
|
5
|
+
super();
|
|
6
|
+
this._player = _player;
|
|
7
|
+
}
|
|
8
|
+
broadcastEvent(event) {
|
|
9
|
+
// Broadcast ReactNative event.
|
|
10
|
+
this._player.dispatchEvent(event);
|
|
11
|
+
|
|
12
|
+
// Broadcast native event.
|
|
13
|
+
const nativeEvent = toNativeEvent(event);
|
|
14
|
+
if (nativeEvent) {
|
|
15
|
+
this.dispatchEvent(nativeEvent);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function toNativeEvent(event) {
|
|
20
|
+
switch (event.type) {
|
|
21
|
+
case PlayerEventType.AD_EVENT:
|
|
22
|
+
return toNativeAdEvent(event);
|
|
23
|
+
default:
|
|
24
|
+
{
|
|
25
|
+
console.warn(`EventBroadcastAdapter: native event of type ${event === null || event === void 0 ? void 0 : event.type}} not supported`);
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function toNativeAdEvent(event) {
|
|
31
|
+
return {
|
|
32
|
+
type: event.subType,
|
|
33
|
+
ad: event.ad,
|
|
34
|
+
date: event.date
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=EventBroadcastAdapter.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PlayerEventType","DefaultWebEventDispatcher","EventBroadcastAdapter","constructor","_player","broadcastEvent","event","dispatchEvent","nativeEvent","toNativeEvent","type","AD_EVENT","toNativeAdEvent","console","warn","undefined","subType","ad","date"],"sources":["EventBroadcastAdapter.web.ts"],"sourcesContent":["import type { EventBroadcastAPI } from \"react-native-theoplayer\";\nimport type { THEOplayer } from \"react-native-theoplayer\";\nimport type { THEOplayerWebAdapter } from \"../THEOplayerWebAdapter\";\nimport type { StringKeyOf } from \"../../../api/event/EventDispatcher\";\nimport type { PlayerEventMap } from \"react-native-theoplayer\";\nimport type { Event as WebEvent, EventMap } from 'theoplayer';\nimport { AdEvent, PlayerEventType } from \"react-native-theoplayer\";\nimport { DefaultWebEventDispatcher } from \"./web/DefaultWebEventDispatcher\";\n\nexport class EventBroadcastAdapter extends DefaultWebEventDispatcher<EventMap<string>> implements EventBroadcastAPI {\n\n constructor(private _player: THEOplayer) {\n super();\n }\n\n broadcastEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): void {\n // Broadcast ReactNative event.\n (this._player as THEOplayerWebAdapter).dispatchEvent(event);\n\n // Broadcast native event.\n const nativeEvent = toNativeEvent(event);\n if (nativeEvent) {\n this.dispatchEvent(nativeEvent);\n }\n }\n}\n\nfunction toNativeEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): WebEvent | undefined {\n switch (event.type) {\n case PlayerEventType.AD_EVENT: return toNativeAdEvent(event);\n default: {\n console.warn(`EventBroadcastAdapter: native event of type ${event?.type}} not supported`)\n return undefined\n }\n }\n}\n\nfunction toNativeAdEvent(event: AdEvent): WebEvent | undefined {\n return {\n type: event.subType,\n ad: event.ad,\n date: event.date\n } as WebEvent;\n}\n"],"mappings":"AAMA,SAAkBA,eAAe,QAAQ,yBAAyB;AAClE,SAASC,yBAAyB,QAAQ,iCAAiC;AAE3E,OAAO,MAAMC,qBAAqB,SAASD,yBAAyB,CAAgD;EAElHE,WAAWA,CAASC,OAAmB,EAAE;IACvC,KAAK,CAAC,CAAC;IAAC,KADUA,OAAmB,GAAnBA,OAAmB;EAEvC;EAEAC,cAAcA,CAAwCC,KAAwB,EAAQ;IACpF;IACC,IAAI,CAACF,OAAO,CAA0BG,aAAa,CAACD,KAAK,CAAC;;IAE3D;IACA,MAAME,WAAW,GAAGC,aAAa,CAACH,KAAK,CAAC;IACxC,IAAIE,WAAW,EAAE;MACf,IAAI,CAACD,aAAa,CAACC,WAAW,CAAC;IACjC;EACF;AACF;AAEA,SAASC,aAAaA,CAAwCH,KAAwB,EAAwB;EAC5G,QAAQA,KAAK,CAACI,IAAI;IAChB,KAAKV,eAAe,CAACW,QAAQ;MAAE,OAAOC,eAAe,CAACN,KAAK,CAAC;IAC5D;MAAS;QACPO,OAAO,CAACC,IAAI,CAAE,+CAA8CR,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEI,IAAK,iBAAgB,CAAC;QACzF,OAAOK,SAAS;MAClB;EACF;AACF;AAEA,SAASH,eAAeA,CAACN,KAAc,EAAwB;EAC7D,OAAO;IACLI,IAAI,EAAEJ,KAAK,CAACU,OAAO;IACnBC,EAAE,EAAEX,KAAK,CAACW,EAAE;IACZC,IAAI,EAAEZ,KAAK,CAACY;EACd,CAAC;AACH"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
4
|
+
export function arrayRemoveElement(array, element) {
|
|
5
|
+
const index = array.indexOf(element);
|
|
6
|
+
if (index === -1) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
arrayRemoveAt(array, index);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
export function arrayRemoveAt(array, index) {
|
|
13
|
+
array.splice(index, 1);
|
|
14
|
+
}
|
|
15
|
+
export class DefaultWebEventDispatcher {
|
|
16
|
+
constructor() {
|
|
17
|
+
_defineProperty(this, "_eventListeners", new Map());
|
|
18
|
+
_defineProperty(this, "dispatchEvent", event => {
|
|
19
|
+
const listeners = (this._eventListeners.get(event.type) ?? []).slice();
|
|
20
|
+
for (const listener of listeners) {
|
|
21
|
+
listener.call(this, event);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
addEventListener(types, listener) {
|
|
26
|
+
if (typeof types === 'string') {
|
|
27
|
+
this.addSingleEventListener_(types, listener);
|
|
28
|
+
} else {
|
|
29
|
+
types.forEach(type => {
|
|
30
|
+
this.addSingleEventListener_(type, listener);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
addSingleEventListener_(type, listener) {
|
|
35
|
+
if (!this._eventListeners.has(type)) {
|
|
36
|
+
// @ts-ignore
|
|
37
|
+
this._eventListeners.set(type, [listener]);
|
|
38
|
+
} else {
|
|
39
|
+
var _this$_eventListeners;
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
(_this$_eventListeners = this._eventListeners.get(type)) === null || _this$_eventListeners === void 0 || _this$_eventListeners.push(listener);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
clearEventListeners() {
|
|
45
|
+
this._eventListeners.clear();
|
|
46
|
+
}
|
|
47
|
+
removeEventListener(types, listener) {
|
|
48
|
+
if (typeof types === 'string') {
|
|
49
|
+
this.removeSingleEventListener(types, listener);
|
|
50
|
+
} else {
|
|
51
|
+
types.forEach(type => {
|
|
52
|
+
this.removeSingleEventListener(type, listener);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
removeSingleEventListener(type, listener) {
|
|
57
|
+
const listeners = this._eventListeners.get(type);
|
|
58
|
+
if (listeners) {
|
|
59
|
+
arrayRemoveElement(listeners, listener);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=DefaultWebEventDispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["arrayRemoveElement","array","element","index","indexOf","arrayRemoveAt","splice","DefaultWebEventDispatcher","constructor","_defineProperty","Map","event","listeners","_eventListeners","get","type","slice","listener","call","addEventListener","types","addSingleEventListener_","forEach","has","set","_this$_eventListeners","push","clearEventListeners","clear","removeEventListener","removeSingleEventListener"],"sources":["DefaultWebEventDispatcher.ts"],"sourcesContent":["import type { EventDispatcher, EventMap, StringKeyOf, EventListener } from \"theoplayer\";\n\nexport function arrayRemoveElement<T>(array: T[], element: T): boolean {\n const index = array.indexOf(element);\n if (index === -1) {\n return false;\n }\n arrayRemoveAt(array, index);\n return true;\n}\n\nexport function arrayRemoveAt<T>(array: T[], index: number): void {\n array.splice(index, 1);\n}\n\nexport class DefaultWebEventDispatcher<TMap extends EventMap<StringKeyOf<TMap>>> implements EventDispatcher<TMap> {\n readonly _eventListeners: Map<StringKeyOf<TMap>, EventListener<TMap[StringKeyOf<TMap>]>[]> = new Map();\n\n addEventListener<K extends StringKeyOf<TMap>>(types: K | K[], listener: EventListener<TMap[K]>): void {\n if (typeof types === 'string') {\n this.addSingleEventListener_(types, listener);\n } else {\n types.forEach(type => {\n this.addSingleEventListener_(type, listener);\n })\n }\n }\n\n private addSingleEventListener_<K extends StringKeyOf<TMap>>(type: K, listener: EventListener<TMap[K]>): void {\n if (!this._eventListeners.has(type)) {\n // @ts-ignore\n this._eventListeners.set(type, [listener]);\n } else {\n // @ts-ignore\n this._eventListeners.get(type)?.push(listener);\n }\n }\n\n clearEventListeners(): void {\n this._eventListeners.clear();\n }\n\n dispatchEvent = <K extends StringKeyOf<TMap>>(event: TMap[K]): void => {\n const listeners = (this._eventListeners.get(event.type as K) ?? []).slice();\n for (const listener of listeners) {\n listener.call(this, event);\n }\n };\n\n removeEventListener<K extends StringKeyOf<TMap>>(types: K | K[], listener: EventListener<TMap[K]>): void {\n if (typeof types === 'string') {\n this.removeSingleEventListener(types, listener);\n } else {\n types.forEach(type => {\n this.removeSingleEventListener(type, listener);\n });\n }\n }\n\n removeSingleEventListener<K extends StringKeyOf<TMap>>(type: K, listener: EventListener<TMap[K]>): void {\n const listeners = this._eventListeners.get(type);\n if (listeners) {\n arrayRemoveElement(listeners, listener);\n }\n }\n}\n"],"mappings":";;;AAEA,OAAO,SAASA,kBAAkBA,CAAIC,KAAU,EAAEC,OAAU,EAAW;EACnE,MAAMC,KAAK,GAAGF,KAAK,CAACG,OAAO,CAACF,OAAO,CAAC;EACpC,IAAIC,KAAK,KAAK,CAAC,CAAC,EAAE;IACd,OAAO,KAAK;EAChB;EACAE,aAAa,CAACJ,KAAK,EAAEE,KAAK,CAAC;EAC3B,OAAO,IAAI;AACf;AAEA,OAAO,SAASE,aAAaA,CAAIJ,KAAU,EAAEE,KAAa,EAAQ;EAC9DF,KAAK,CAACK,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;AAC1B;AAEA,OAAO,MAAMI,yBAAyB,CAA4E;EAAAC,YAAA;IAAAC,eAAA,0BACjB,IAAIC,GAAG,CAAC,CAAC;IAAAD,eAAA,wBA0BxDE,KAAc,IAAW;MACnE,MAAMC,SAAS,GAAG,CAAC,IAAI,CAACC,eAAe,CAACC,GAAG,CAACH,KAAK,CAACI,IAAS,CAAC,IAAI,EAAE,EAAEC,KAAK,CAAC,CAAC;MAC3E,KAAK,MAAMC,QAAQ,IAAIL,SAAS,EAAE;QAC9BK,QAAQ,CAACC,IAAI,CAAC,IAAI,EAAEP,KAAK,CAAC;MAC9B;IACJ,CAAC;EAAA;EA7BDQ,gBAAgBA,CAA8BC,KAAc,EAAEH,QAAgC,EAAQ;IAClG,IAAI,OAAOG,KAAK,KAAK,QAAQ,EAAE;MAC3B,IAAI,CAACC,uBAAuB,CAACD,KAAK,EAAEH,QAAQ,CAAC;IACjD,CAAC,MAAM;MACHG,KAAK,CAACE,OAAO,CAACP,IAAI,IAAI;QAClB,IAAI,CAACM,uBAAuB,CAACN,IAAI,EAAEE,QAAQ,CAAC;MAChD,CAAC,CAAC;IACN;EACJ;EAEQI,uBAAuBA,CAA8BN,IAAO,EAAEE,QAAgC,EAAQ;IAC1G,IAAI,CAAC,IAAI,CAACJ,eAAe,CAACU,GAAG,CAACR,IAAI,CAAC,EAAE;MACjC;MACA,IAAI,CAACF,eAAe,CAACW,GAAG,CAACT,IAAI,EAAE,CAACE,QAAQ,CAAC,CAAC;IAC9C,CAAC,MAAM;MAAA,IAAAQ,qBAAA;MACH;MACA,CAAAA,qBAAA,OAAI,CAACZ,eAAe,CAACC,GAAG,CAACC,IAAI,CAAC,cAAAU,qBAAA,eAA9BA,qBAAA,CAAgCC,IAAI,CAACT,QAAQ,CAAC;IAClD;EACJ;EAEAU,mBAAmBA,CAAA,EAAS;IACxB,IAAI,CAACd,eAAe,CAACe,KAAK,CAAC,CAAC;EAChC;EASAC,mBAAmBA,CAA8BT,KAAc,EAAEH,QAAgC,EAAQ;IACrG,IAAI,OAAOG,KAAK,KAAK,QAAQ,EAAE;MAC3B,IAAI,CAACU,yBAAyB,CAACV,KAAK,EAAEH,QAAQ,CAAC;IACnD,CAAC,MAAM;MACHG,KAAK,CAACE,OAAO,CAACP,IAAI,IAAI;QAClB,IAAI,CAACe,yBAAyB,CAACf,IAAI,EAAEE,QAAQ,CAAC;MAClD,CAAC,CAAC;IACN;EACJ;EAEAa,yBAAyBA,CAA8Bf,IAAO,EAAEE,QAAgC,EAAQ;IACpG,MAAML,SAAS,GAAG,IAAI,CAACC,eAAe,CAACC,GAAG,CAACC,IAAI,CAAC;IAChD,IAAIH,SAAS,EAAE;MACXZ,kBAAkB,CAACY,SAAS,EAAEK,QAAQ,CAAC;IAC3C;EACJ;AACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Event } from '../event/Event';
|
|
2
|
+
/**
|
|
3
|
+
* The EventBroadcastAPI allows dispatching extra player events to both ReactNative and native listeners.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export interface EventBroadcastAPI {
|
|
8
|
+
/**
|
|
9
|
+
* Broadcast an event.
|
|
10
|
+
*/
|
|
11
|
+
broadcastEvent(event: Event): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './EventBroadcastAPI';
|
|
@@ -12,6 +12,7 @@ import type { PresentationMode } from '../presentation/PresentationMode';
|
|
|
12
12
|
import type { PiPConfiguration } from '../pip/PiPConfiguration';
|
|
13
13
|
import type { BackgroundAudioConfiguration } from '../backgroundAudio/BackgroundAudioConfiguration';
|
|
14
14
|
import type { PlayerVersion } from './PlayerVersion';
|
|
15
|
+
import type { EventBroadcastAPI } from "../broadcast/EventBroadcastAPI";
|
|
15
16
|
export type PreloadType = 'none' | 'metadata' | 'auto' | '';
|
|
16
17
|
/**
|
|
17
18
|
* Specifies an aspect ratio for the player.
|
|
@@ -178,4 +179,8 @@ export interface THEOplayer extends EventDispatcher<PlayerEventMap> {
|
|
|
178
179
|
* Native player handle.
|
|
179
180
|
*/
|
|
180
181
|
readonly nativeHandle: NativeHandleType;
|
|
182
|
+
/**
|
|
183
|
+
* Event Broadcast API.
|
|
184
|
+
*/
|
|
185
|
+
readonly broadcast: EventBroadcastAPI;
|
|
181
186
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';
|
|
2
|
-
import type { ABRConfiguration, AdsAPI, CastAPI, MediaTrack, NativeHandleType, PiPConfiguration, PlayerEventMap, SourceDescription, TextTrack, THEOplayer, THEOplayerView } from 'react-native-theoplayer';
|
|
3
|
-
import { AspectRatio, PlayerVersion, PreloadType, PresentationMode, TextTrackStyle } from 'react-native-theoplayer';
|
|
4
|
-
import type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/BackgroundAudioConfiguration';
|
|
2
|
+
import type { ABRConfiguration, AdsAPI, CastAPI, EventBroadcastAPI, MediaTrack, NativeHandleType, PiPConfiguration, PlayerEventMap, SourceDescription, TextTrack, THEOplayer, THEOplayerView } from 'react-native-theoplayer';
|
|
3
|
+
import { AspectRatio, BackgroundAudioConfiguration, PlayerVersion, PreloadType, PresentationMode, TextTrackStyle } from 'react-native-theoplayer';
|
|
5
4
|
import type { NativePlayerState } from './NativePlayerState';
|
|
6
5
|
export declare class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> implements THEOplayer {
|
|
7
6
|
private readonly _view;
|
|
@@ -10,6 +9,7 @@ export declare class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEven
|
|
|
10
9
|
private readonly _castAdapter;
|
|
11
10
|
private readonly _abrAdapter;
|
|
12
11
|
private readonly _textTrackStyleAdapter;
|
|
12
|
+
private _externalEventRouter;
|
|
13
13
|
private _playerVersion;
|
|
14
14
|
constructor(view: THEOplayerView, initialState?: NativePlayerState);
|
|
15
15
|
private onSourceChange;
|
|
@@ -76,5 +76,6 @@ export declare class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEven
|
|
|
76
76
|
play(): void;
|
|
77
77
|
get version(): PlayerVersion;
|
|
78
78
|
get nativeHandle(): NativeHandleType;
|
|
79
|
+
get broadcast(): EventBroadcastAPI;
|
|
79
80
|
initializeFromNativePlayer_(version: PlayerVersion, state: NativePlayerState | undefined): void;
|
|
80
81
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';
|
|
2
2
|
import type { AdsAPI, CastAPI, MediaTrack, NativeHandleType, PlayerConfiguration, PlayerEventMap, PlayerVersion, PreloadType, TextTrack, TextTrackStyle, THEOplayer } from 'react-native-theoplayer';
|
|
3
|
-
import { AspectRatio, PresentationMode } from 'react-native-theoplayer';
|
|
3
|
+
import { AspectRatio, EventBroadcastAPI, PresentationMode } from 'react-native-theoplayer';
|
|
4
4
|
import { ChromelessPlayer as NativeChromelessPlayer } from 'theoplayer';
|
|
5
5
|
import type { ABRConfiguration, SourceDescription } from 'src/api/barrel';
|
|
6
6
|
import type { PiPConfiguration } from 'src/api/pip/PiPConfiguration';
|
|
@@ -15,6 +15,7 @@ export declare class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerE
|
|
|
15
15
|
private _targetVideoQuality;
|
|
16
16
|
private _backgroundAudioConfiguration;
|
|
17
17
|
private _pipConfiguration;
|
|
18
|
+
private _externalEventRouter;
|
|
18
19
|
constructor(player: NativeChromelessPlayer, config?: PlayerConfiguration);
|
|
19
20
|
get abr(): ABRConfiguration | undefined;
|
|
20
21
|
get source(): SourceDescription | undefined;
|
|
@@ -68,6 +69,7 @@ export declare class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerE
|
|
|
68
69
|
get cast(): CastAPI;
|
|
69
70
|
get version(): PlayerVersion;
|
|
70
71
|
destroy(): void;
|
|
71
|
-
get nativeHandle(): NativeHandleType;
|
|
72
72
|
private readonly onVisibilityChange;
|
|
73
|
+
get nativeHandle(): NativeHandleType;
|
|
74
|
+
get broadcast(): EventBroadcastAPI;
|
|
73
75
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EventBroadcastAPI, PlayerEventMap, THEOplayer } from 'react-native-theoplayer';
|
|
2
|
+
import type { StringKeyOf } from '../../../api/event/EventDispatcher';
|
|
3
|
+
export declare class EventBroadcastAdapter implements EventBroadcastAPI {
|
|
4
|
+
private _player;
|
|
5
|
+
constructor(_player: THEOplayer);
|
|
6
|
+
broadcastEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EventBroadcastAPI } from "react-native-theoplayer";
|
|
2
|
+
import type { THEOplayer } from "react-native-theoplayer";
|
|
3
|
+
import type { StringKeyOf } from "../../../api/event/EventDispatcher";
|
|
4
|
+
import type { PlayerEventMap } from "react-native-theoplayer";
|
|
5
|
+
import type { EventMap } from 'theoplayer';
|
|
6
|
+
import { DefaultWebEventDispatcher } from "./web/DefaultWebEventDispatcher";
|
|
7
|
+
export declare class EventBroadcastAdapter extends DefaultWebEventDispatcher<EventMap<string>> implements EventBroadcastAPI {
|
|
8
|
+
private _player;
|
|
9
|
+
constructor(_player: THEOplayer);
|
|
10
|
+
broadcastEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EventDispatcher, EventMap, StringKeyOf, EventListener } from "theoplayer";
|
|
2
|
+
export declare function arrayRemoveElement<T>(array: T[], element: T): boolean;
|
|
3
|
+
export declare function arrayRemoveAt<T>(array: T[], index: number): void;
|
|
4
|
+
export declare class DefaultWebEventDispatcher<TMap extends EventMap<StringKeyOf<TMap>>> implements EventDispatcher<TMap> {
|
|
5
|
+
readonly _eventListeners: Map<StringKeyOf<TMap>, EventListener<TMap[StringKeyOf<TMap>]>[]>;
|
|
6
|
+
addEventListener<K extends StringKeyOf<TMap>>(types: K | K[], listener: EventListener<TMap[K]>): void;
|
|
7
|
+
private addSingleEventListener_;
|
|
8
|
+
clearEventListeners(): void;
|
|
9
|
+
dispatchEvent: <K extends Extract<keyof TMap, string>>(event: TMap[K]) => void;
|
|
10
|
+
removeEventListener<K extends StringKeyOf<TMap>>(types: K | K[], listener: EventListener<TMap[K]>): void;
|
|
11
|
+
removeSingleEventListener<K extends StringKeyOf<TMap>>(type: K, listener: EventListener<TMap[K]>): void;
|
|
12
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-theoplayer",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"description": "A THEOplayer video component for react-native.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"react-native": "^0.72.5",
|
|
64
64
|
"react-native-builder-bob": "^0.18.3",
|
|
65
65
|
"release-it": "^16.2.1",
|
|
66
|
-
"theoplayer": "^6.
|
|
66
|
+
"theoplayer": "^6.5.0",
|
|
67
67
|
"typescript": "^4.9.5"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
@@ -20,7 +20,7 @@ Pod::Spec.new do |s|
|
|
|
20
20
|
s.platforms = { :ios => "12.0", :tvos => "12.0" }
|
|
21
21
|
s.source = { :git => "https://www.theoplayer.com/.git", :tag => "#{s.version}" }
|
|
22
22
|
|
|
23
|
-
s.source_files = 'ios/*.{h,m,swift}', 'ios/ads/*.swift', 'ios/casting/*.swift', 'ios/contentprotection/*.swift', 'ios/pip/*.swift', 'ios/backgroundAudio/*.swift', 'ios/cache/*.swift'
|
|
23
|
+
s.source_files = 'ios/*.{h,m,swift}', 'ios/ads/*.swift', 'ios/casting/*.swift', 'ios/contentprotection/*.swift', 'ios/pip/*.swift', 'ios/backgroundAudio/*.swift', 'ios/cache/*.swift', 'ios/eventBroadcasting/*.swift'
|
|
24
24
|
s.resources = ['ios/*.css']
|
|
25
25
|
|
|
26
26
|
# ReactNative Dependency
|
package/src/api/barrel.ts
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Event } from '../event/Event';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The EventBroadcastAPI allows dispatching extra player events to both ReactNative and native listeners.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export interface EventBroadcastAPI {
|
|
9
|
+
/**
|
|
10
|
+
* Broadcast an event.
|
|
11
|
+
*/
|
|
12
|
+
broadcastEvent(event: Event) : void;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './EventBroadcastAPI';
|
|
@@ -12,6 +12,7 @@ import type { PresentationMode } from '../presentation/PresentationMode';
|
|
|
12
12
|
import type { PiPConfiguration } from '../pip/PiPConfiguration';
|
|
13
13
|
import type { BackgroundAudioConfiguration } from '../backgroundAudio/BackgroundAudioConfiguration';
|
|
14
14
|
import type { PlayerVersion } from './PlayerVersion';
|
|
15
|
+
import type { EventBroadcastAPI } from "../broadcast/EventBroadcastAPI";
|
|
15
16
|
|
|
16
17
|
export type PreloadType = 'none' | 'metadata' | 'auto' | '';
|
|
17
18
|
|
|
@@ -212,4 +213,9 @@ export interface THEOplayer extends EventDispatcher<PlayerEventMap> {
|
|
|
212
213
|
* Native player handle.
|
|
213
214
|
*/
|
|
214
215
|
readonly nativeHandle: NativeHandleType;
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Event Broadcast API.
|
|
219
|
+
*/
|
|
220
|
+
readonly broadcast: EventBroadcastAPI;
|
|
215
221
|
}
|
|
@@ -3,7 +3,7 @@ import type {
|
|
|
3
3
|
ABRConfiguration,
|
|
4
4
|
AdsAPI,
|
|
5
5
|
CastAPI,
|
|
6
|
-
DurationChangeEvent,
|
|
6
|
+
DurationChangeEvent, EventBroadcastAPI,
|
|
7
7
|
LoadedMetadataEvent,
|
|
8
8
|
MediaTrack,
|
|
9
9
|
MediaTrackEvent,
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
addTextTrackCue,
|
|
27
27
|
addTrack,
|
|
28
28
|
AspectRatio,
|
|
29
|
+
BackgroundAudioConfiguration,
|
|
29
30
|
findMediaTrackByUid,
|
|
30
31
|
findTextTrackByUid,
|
|
31
32
|
MediaTrackEventType,
|
|
@@ -46,8 +47,8 @@ import { THEOplayerNativeCastAdapter } from './cast/THEOplayerNativeCastAdapter'
|
|
|
46
47
|
import { AbrAdapter } from './abr/AbrAdapter';
|
|
47
48
|
import { NativeModules, Platform } from 'react-native';
|
|
48
49
|
import { TextTrackStyleAdapter } from './track/TextTrackStyleAdapter';
|
|
49
|
-
import type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/BackgroundAudioConfiguration';
|
|
50
50
|
import type { NativePlayerState } from './NativePlayerState';
|
|
51
|
+
import { EventBroadcastAdapter } from "./broadcast/EventBroadcastAdapter";
|
|
51
52
|
|
|
52
53
|
const defaultPlayerState: NativePlayerState = {
|
|
53
54
|
source: undefined,
|
|
@@ -82,6 +83,7 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
|
|
|
82
83
|
private readonly _castAdapter: THEOplayerNativeCastAdapter;
|
|
83
84
|
private readonly _abrAdapter: AbrAdapter;
|
|
84
85
|
private readonly _textTrackStyleAdapter: TextTrackStyleAdapter;
|
|
86
|
+
private _externalEventRouter: EventBroadcastAPI | undefined = undefined;
|
|
85
87
|
private _playerVersion!: PlayerVersion;
|
|
86
88
|
|
|
87
89
|
constructor(view: THEOplayerView, initialState: NativePlayerState = defaultPlayerState) {
|
|
@@ -518,10 +520,16 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
|
|
|
518
520
|
return this._playerVersion;
|
|
519
521
|
}
|
|
520
522
|
|
|
523
|
+
// @internal
|
|
521
524
|
get nativeHandle(): NativeHandleType {
|
|
522
525
|
return this._view.nativeHandle;
|
|
523
526
|
}
|
|
524
527
|
|
|
528
|
+
// @internal
|
|
529
|
+
get broadcast(): EventBroadcastAPI {
|
|
530
|
+
return this._externalEventRouter ?? (this._externalEventRouter = new EventBroadcastAdapter(this));
|
|
531
|
+
}
|
|
532
|
+
|
|
525
533
|
initializeFromNativePlayer_(version: PlayerVersion, state: NativePlayerState | undefined) {
|
|
526
534
|
this._playerVersion = version;
|
|
527
535
|
if (state) {
|
|
@@ -12,7 +12,7 @@ import type {
|
|
|
12
12
|
TextTrackStyle,
|
|
13
13
|
THEOplayer,
|
|
14
14
|
} from 'react-native-theoplayer';
|
|
15
|
-
import { AspectRatio, PlayerEventType, PresentationMode } from 'react-native-theoplayer';
|
|
15
|
+
import { AspectRatio, EventBroadcastAPI, PlayerEventType, PresentationMode } from 'react-native-theoplayer';
|
|
16
16
|
import { THEOplayerWebAdsAdapter } from './ads/THEOplayerWebAdsAdapter';
|
|
17
17
|
import { THEOplayerWebCastAdapter } from './cast/THEOplayerWebCastAdapter';
|
|
18
18
|
import { ChromelessPlayer as NativeChromelessPlayer, SourceDescription as NativeSourceDescription, version as nativeVersion } from 'theoplayer';
|
|
@@ -25,6 +25,7 @@ import type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/Backg
|
|
|
25
25
|
import { WebPresentationModeManager } from './web/WebPresentationModeManager';
|
|
26
26
|
import { WebMediaSession } from './web/WebMediaSession';
|
|
27
27
|
import { BaseEvent } from './event/BaseEvent';
|
|
28
|
+
import { EventBroadcastAdapter } from "./broadcast/EventBroadcastAdapter";
|
|
28
29
|
|
|
29
30
|
const defaultBackgroundAudioConfiguration: BackgroundAudioConfiguration = {
|
|
30
31
|
enabled: false,
|
|
@@ -44,6 +45,7 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
44
45
|
private _targetVideoQuality: number | number[] | undefined = undefined;
|
|
45
46
|
private _backgroundAudioConfiguration: BackgroundAudioConfiguration = defaultBackgroundAudioConfiguration;
|
|
46
47
|
private _pipConfiguration: PiPConfiguration = defaultPipConfiguration;
|
|
48
|
+
private _externalEventRouter: EventBroadcastAPI | undefined = undefined;
|
|
47
49
|
|
|
48
50
|
constructor(player: NativeChromelessPlayer, config?: PlayerConfiguration) {
|
|
49
51
|
super();
|
|
@@ -318,10 +320,6 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
318
320
|
this._player = undefined;
|
|
319
321
|
}
|
|
320
322
|
|
|
321
|
-
get nativeHandle(): NativeHandleType {
|
|
322
|
-
return this._player;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
323
|
private readonly onVisibilityChange = () => {
|
|
326
324
|
if (!this._player) {
|
|
327
325
|
return;
|
|
@@ -335,4 +333,12 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
335
333
|
// Apply media session controls
|
|
336
334
|
this._mediaSession?.updateActionHandlers();
|
|
337
335
|
};
|
|
336
|
+
|
|
337
|
+
get nativeHandle(): NativeHandleType {
|
|
338
|
+
return this._player;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
get broadcast(): EventBroadcastAPI {
|
|
342
|
+
return this._externalEventRouter ?? (this._externalEventRouter = new EventBroadcastAdapter(this));
|
|
343
|
+
}
|
|
338
344
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { EventBroadcastAPI, PlayerEventMap, THEOplayer } from 'react-native-theoplayer';
|
|
2
|
+
import { NativeModules } from 'react-native';
|
|
3
|
+
import type { THEOplayerAdapter } from '../THEOplayerAdapter';
|
|
4
|
+
import type { StringKeyOf } from '../../../api/event/EventDispatcher';
|
|
5
|
+
|
|
6
|
+
export class EventBroadcastAdapter implements EventBroadcastAPI {
|
|
7
|
+
constructor(private _player: THEOplayer) {}
|
|
8
|
+
|
|
9
|
+
broadcastEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): void {
|
|
10
|
+
// Broadcast ReactNative event.
|
|
11
|
+
(this._player as THEOplayerAdapter).dispatchEvent(event);
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
// Broadcast native event.
|
|
15
|
+
NativeModules.EventBroadcastModule.broadcastEvent(this._player.nativeHandle, Object.freeze(event));
|
|
16
|
+
} catch (e) {
|
|
17
|
+
console.warn(`EventBroadcastModule not available: ${e}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { EventBroadcastAPI } from "react-native-theoplayer";
|
|
2
|
+
import type { THEOplayer } from "react-native-theoplayer";
|
|
3
|
+
import type { THEOplayerWebAdapter } from "../THEOplayerWebAdapter";
|
|
4
|
+
import type { StringKeyOf } from "../../../api/event/EventDispatcher";
|
|
5
|
+
import type { PlayerEventMap } from "react-native-theoplayer";
|
|
6
|
+
import type { Event as WebEvent, EventMap } from 'theoplayer';
|
|
7
|
+
import { AdEvent, PlayerEventType } from "react-native-theoplayer";
|
|
8
|
+
import { DefaultWebEventDispatcher } from "./web/DefaultWebEventDispatcher";
|
|
9
|
+
|
|
10
|
+
export class EventBroadcastAdapter extends DefaultWebEventDispatcher<EventMap<string>> implements EventBroadcastAPI {
|
|
11
|
+
|
|
12
|
+
constructor(private _player: THEOplayer) {
|
|
13
|
+
super();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
broadcastEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): void {
|
|
17
|
+
// Broadcast ReactNative event.
|
|
18
|
+
(this._player as THEOplayerWebAdapter).dispatchEvent(event);
|
|
19
|
+
|
|
20
|
+
// Broadcast native event.
|
|
21
|
+
const nativeEvent = toNativeEvent(event);
|
|
22
|
+
if (nativeEvent) {
|
|
23
|
+
this.dispatchEvent(nativeEvent);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function toNativeEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): WebEvent | undefined {
|
|
29
|
+
switch (event.type) {
|
|
30
|
+
case PlayerEventType.AD_EVENT: return toNativeAdEvent(event);
|
|
31
|
+
default: {
|
|
32
|
+
console.warn(`EventBroadcastAdapter: native event of type ${event?.type}} not supported`)
|
|
33
|
+
return undefined
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function toNativeAdEvent(event: AdEvent): WebEvent | undefined {
|
|
39
|
+
return {
|
|
40
|
+
type: event.subType,
|
|
41
|
+
ad: event.ad,
|
|
42
|
+
date: event.date
|
|
43
|
+
} as WebEvent;
|
|
44
|
+
}
|