bitmovin-player-react-native 1.18.0 → 1.20.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 +33 -0
- package/android/build.gradle +2 -2
- package/android/src/main/java/com/bitmovin/player/reactnative/PlayerModule.kt +34 -1
- package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerView.kt +43 -6
- package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewManager.kt +2 -0
- package/android/src/main/java/com/bitmovin/player/reactnative/ui/RNPictureInPictureHandler.kt +81 -1
- package/build/advertising.d.ts +20 -0
- package/build/advertising.d.ts.map +1 -1
- package/build/advertising.js.map +1 -1
- package/build/components/PlayerView/events.d.ts +0 -4
- package/build/components/PlayerView/events.d.ts.map +1 -1
- package/build/components/PlayerView/events.js.map +1 -1
- package/build/components/PlayerView/nativeEvents.d.ts +0 -4
- package/build/components/PlayerView/nativeEvents.d.ts.map +1 -1
- package/build/components/PlayerView/nativeEvents.js.map +1 -1
- package/build/events.d.ts +2 -2
- package/build/events.js.map +1 -1
- package/build/modules/PlayerModule.d.ts +10 -1
- package/build/modules/PlayerModule.d.ts.map +1 -1
- package/build/modules/PlayerModule.js.map +1 -1
- package/build/player.d.ts +2 -0
- package/build/player.d.ts.map +1 -1
- package/build/player.js +38 -0
- package/build/player.js.map +1 -1
- package/ios/RNBitmovinPlayer.podspec +1 -1
- package/package.json +2 -2
- package/plugin/build/withBitmovinIosConfig.js +3 -2
- package/plugin/src/withBitmovinIosConfig.ts +4 -2
- package/src/advertising.ts +20 -0
- package/src/components/PlayerView/events.ts +0 -4
- package/src/components/PlayerView/nativeEvents.ts +0 -4
- package/src/events.ts +2 -2
- package/src/modules/PlayerModule.ts +15 -1
- package/src/player.ts +42 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeEvents.js","sourceRoot":"","sources":["../../../src/components/PlayerView/nativeEvents.ts"],"names":[],"mappings":"","sourcesContent":["import {\n AdBreakFinishedEvent,\n AdBreakStartedEvent,\n AdClickedEvent,\n AdErrorEvent,\n AdFinishedEvent,\n AdManifestLoadedEvent,\n AdManifestLoadEvent,\n AdQuartileEvent,\n AdScheduledEvent,\n AdSkippedEvent,\n AdStartedEvent,\n CastAvailableEvent,\n CastPausedEvent,\n CastPlaybackFinishedEvent,\n CastPlayingEvent,\n CastStartedEvent,\n CastStartEvent,\n CastStoppedEvent,\n CastTimeUpdatedEvent,\n CastWaitingForDeviceEvent,\n DestroyEvent,\n Event,\n FullscreenEnabledEvent,\n FullscreenDisabledEvent,\n FullscreenEnterEvent,\n FullscreenExitEvent,\n MutedEvent,\n PausedEvent,\n PictureInPictureAvailabilityChangedEvent,\n PictureInPictureEnterEvent,\n PictureInPictureEnteredEvent,\n PictureInPictureExitEvent,\n PictureInPictureExitedEvent,\n PlaybackFinishedEvent,\n PlayerActiveEvent,\n PlayerErrorEvent,\n PlayerWarningEvent,\n PlayEvent,\n PlayingEvent,\n ReadyEvent,\n SeekedEvent,\n SeekEvent,\n TimeShiftEvent,\n TimeShiftedEvent,\n StallStartedEvent,\n StallEndedEvent,\n SourceErrorEvent,\n SourceLoadedEvent,\n SourceLoadEvent,\n SourceUnloadedEvent,\n SourceWarningEvent,\n AudioAddedEvent,\n AudioChangedEvent,\n AudioRemovedEvent,\n SubtitleAddedEvent,\n SubtitleChangedEvent,\n SubtitleRemovedEvent,\n TimeChangedEvent,\n UnmutedEvent,\n VideoPlaybackQualityChangedEvent,\n DownloadFinishedEvent,\n VideoDownloadQualityChangedEvent,\n PlaybackSpeedChangedEvent,\n CueEnterEvent,\n CueExitEvent,\n MetadataEvent,\n MetadataParsedEvent,\n FairplayLicenseAcquiredEvent,\n} from '../../events';\n\n/**\n * Event props for `NativePlayerView`.\n */\nexport type NativePlayerViewEvents = {\n /**\n * Event emitted when an ad break has finished.\n */\n onBmpAdBreakFinished?: (event: { nativeEvent: AdBreakFinishedEvent }) => void;\n /**\n * Event emitted when an ad break has started.\n */\n onBmpAdBreakStarted?: (event: { nativeEvent: AdBreakStartedEvent }) => void;\n /**\n * Event emitted when an ad has been clicked.\n */\n onBmpAdClicked?: (event: { nativeEvent: AdClickedEvent }) => void;\n /**\n * Event emitted when an ad error has occurred.\n */\n onBmpAdError?: (event: { nativeEvent: AdErrorEvent }) => void;\n /**\n * Event emitted when an ad has finished.\n */\n onBmpAdFinished?: (event: { nativeEvent: AdFinishedEvent }) => void;\n /**\n * Event emitted when an ad manifest starts loading.\n */\n onBmpAdManifestLoad?: (event: { nativeEvent: AdManifestLoadEvent }) => void;\n /**\n * Event emitted when an ad manifest has been loaded.\n */\n onBmpAdManifestLoaded?: (event: {\n nativeEvent: AdManifestLoadedEvent;\n }) => void;\n /**\n * Event emitted when an ad quartile has been reached.\n */\n onBmpAdQuartile?: (event: { nativeEvent: AdQuartileEvent }) => void;\n /**\n * Event emitted when an ad has been scheduled.\n */\n onBmpAdScheduled?: (event: { nativeEvent: AdScheduledEvent }) => void;\n /**\n * Event emitted when an ad has been skipped.\n */\n onBmpAdSkipped?: (event: { nativeEvent: AdSkippedEvent }) => void;\n /**\n * Event emitted when an ad has started.\n */\n onBmpAdStarted?: (event: { nativeEvent: AdStartedEvent }) => void;\n /**\n * Event emitted when casting to a cast-compatible device is available.\n *\n * @platform iOS, Android\n */\n onBmpCastAvailable?: (event: { nativeEvent: CastAvailableEvent }) => void;\n /**\n * Event emitted when the playback on a cast-compatible device was paused.\n *\n * @platform iOS, Android\n */\n onBmpCastPaused?: (event: { nativeEvent: CastPausedEvent }) => void;\n /**\n * Event emitted when the playback on a cast-compatible device has finished.\n *\n * @platform iOS, Android\n */\n onBmpCastPlaybackFinished?: (event: {\n nativeEvent: CastPlaybackFinishedEvent;\n }) => void;\n /**\n * Event emitted when playback on a cast-compatible device has started.\n *\n * @platform iOS, Android\n */\n onBmpCastPlaying?: (event: { nativeEvent: CastPlayingEvent }) => void;\n /**\n * Event emitted when the cast app is launched successfully.\n *\n * @platform iOS, Android\n */\n onBmpCastStarted?: (event: { nativeEvent: CastStartedEvent }) => void;\n /**\n * Event emitted when casting is initiated, but the user still needs to choose which device should be used.\n *\n * @platform iOS, Android\n */\n onBmpCastStart?: (event: { nativeEvent: CastStartEvent }) => void;\n /**\n * Event emitted when casting to a cast-compatible device is stopped.\n *\n * @platform iOS, Android\n */\n onBmpCastStopped?: (event: { nativeEvent: CastStoppedEvent }) => void;\n /**\n * Event emitted when the time update from the currently used cast-compatible device is received.\n *\n * @platform iOS, Android\n */\n onBmpCastTimeUpdated?: (event: { nativeEvent: CastTimeUpdatedEvent }) => void;\n /**\n * Event emitted when a cast-compatible device has been chosen and the player is waiting for the device to get ready for\n * playback.\n *\n * @platform iOS, Android\n */\n onBmpCastWaitingForDevice?: (event: {\n nativeEvent: CastWaitingForDeviceEvent;\n }) => void;\n /**\n * Event emitted when a subtitle entry transitions into the active status.\n */\n onBmpCueEnter?: (event: { nativeEvent: CueEnterEvent }) => void;\n /**\n * Event emitted when an active subtitle entry transitions into the inactive status.\n */\n onBmpCueExit?: (event: { nativeEvent: CueExitEvent }) => void;\n /**\n * Event emitted when the player is destroyed.\n */\n onBmpDestroy?: (event: { nativeEvent: DestroyEvent }) => void;\n /**\n * Emitted when a download was finished.\n */\n onBmpDownloadFinished?: (event: {\n nativeEvent: DownloadFinishedEvent;\n }) => void;\n /**\n * All events emitted by the player.\n */\n onBmpEvent?: (event: { nativeEvent: Event }) => void;\n /**\n * Event emitted when fullscreen mode has been enabled.\n *\n * @platform iOS, Android\n */\n onBmpFullscreenEnabled?: (event: {\n nativeEvent: FullscreenEnabledEvent;\n }) => void;\n /**\n * Event emitted when fullscreen mode has been disabled.\n *\n * @platform iOS, Android\n */\n onBmpFullscreenDisabled?: (event: {\n nativeEvent: FullscreenDisabledEvent;\n }) => void;\n /**\n * Event emitted when fullscreen mode has been entered.\n *\n * @platform iOS, Android\n */\n onBmpFullscreenEnter?: (event: { nativeEvent: FullscreenEnterEvent }) => void;\n /**\n * Event emitted when fullscreen mode has been exited.\n *\n * @platform iOS, Android\n */\n onBmpFullscreenExit?: (event: { nativeEvent: FullscreenExitEvent }) => void;\n /**\n * Event emitted when metadata is encountered during playback.\n *\n * @platform iOS, Android\n */\n onBmpMetadata?: (event: { nativeEvent: MetadataEvent }) => void;\n /**\n * Event emitted when metadata is first seen and parsed.\n *\n * @platform iOS, Android\n */\n onBmpMetadataParsed?: (event: { nativeEvent: MetadataParsedEvent }) => void;\n /**\n * Event emitted when the player has been muted.\n */\n onBmpMuted?: (event: { nativeEvent: MutedEvent }) => void;\n /**\n * Event emitted when the player has been paused.\n */\n onBmpPaused?: (event: { nativeEvent: PausedEvent }) => void;\n /**\n * Event mitted when the availability of the Picture in Picture mode changed.\n */\n onBmpPictureInPictureAvailabilityChanged?: (event: {\n nativeEvent: PictureInPictureAvailabilityChangedEvent;\n }) => void;\n /**\n * Event emitted when the player enters Picture in Picture mode.\n */\n onBmpPictureInPictureEnter?: (event: {\n nativeEvent: PictureInPictureEnterEvent;\n }) => void;\n /**\n * Event emitted when the player entered Picture in Picture mode.\n *\n * @platform iOS\n */\n onBmpPictureInPictureEntered?: (event: {\n nativeEvent: PictureInPictureEnteredEvent;\n }) => void;\n /**\n * Event emitted when the player exits Picture in Picture mode.\n */\n onBmpPictureInPictureExit?: (event: {\n nativeEvent: PictureInPictureExitEvent;\n }) => void;\n /**\n * Event emitted when the player exited Picture in Picture mode.\n *\n * @platform iOS\n */\n onBmpPictureInPictureExited?: (event: {\n nativeEvent: PictureInPictureExitedEvent;\n }) => void;\n /**\n * Event emitted when the player received an intention to start/resume playback.\n */\n onBmpPlay?: (event: { nativeEvent: PlayEvent }) => void;\n /**\n * Event emitted when the playback of the current media has finished.\n */\n onBmpPlaybackFinished?: (event: {\n nativeEvent: PlaybackFinishedEvent;\n }) => void;\n /**\n * Emitted when the player transitions from one playback speed to another.\n * @platform iOS, tvOS\n */\n onBmpPlaybackSpeedChanged?: (event: {\n nativeEvent: PlaybackSpeedChangedEvent;\n }) => void;\n /**\n * Event emitted when a source is loaded into the player.\n * Seeking and time shifting are allowed as soon as this event is seen.\n */\n onBmpPlayerActive?: (event: { nativeEvent: PlayerActiveEvent }) => void;\n /**\n * Event Emitted when a player error occurred.\n */\n onBmpPlayerError?: (event: { nativeEvent: PlayerErrorEvent }) => void;\n /**\n * Event emitted when a player warning occurred.\n */\n onBmpPlayerWarning?: (event: { nativeEvent: PlayerWarningEvent }) => void;\n /**\n * Emitted when playback has started.\n */\n onBmpPlaying?: (event: { nativeEvent: PlayingEvent }) => void;\n /**\n * Emitted when the player is ready for immediate playback, because initial audio/video\n * has been downloaded.\n */\n onBmpReady?: (event: { nativeEvent: ReadyEvent }) => void;\n /**\n * Event emitted when the player is about to seek to a new position.\n * Only applies to VoD streams.\n */\n onBmpSeek?: (event: { nativeEvent: SeekEvent }) => void;\n /**\n * Event emitted when seeking has finished and data to continue playback is available.\n * Only applies to VoD streams.\n */\n onBmpSeeked?: (event: { nativeEvent: SeekedEvent }) => void;\n /**\n * Event mitted when the player starts time shifting.\n * Only applies to live streams.\n */\n onBmpTimeShift?: (event: { nativeEvent: TimeShiftEvent }) => void;\n /**\n * Event emitted when time shifting has finished and data is available to continue playback.\n * Only applies to live streams.\n */\n onBmpTimeShifted?: (event: { nativeEvent: TimeShiftedEvent }) => void;\n /**\n * Event emitted when the player begins to stall and to buffer due to an empty buffer.\n */\n onBmpStallStarted?: (event: { nativeEvent: StallStartedEvent }) => void;\n /**\n * Event emitted when the player ends stalling, due to enough data in the buffer.\n */\n onBmpStallEnded?: (event: { nativeEvent: StallEndedEvent }) => void;\n /**\n * Event emitted when a source error occurred.\n */\n onBmpSourceError?: (event: { nativeEvent: SourceErrorEvent }) => void;\n /**\n * Event emitted when a new source loading has started.\n */\n onBmpSourceLoad?: (event: { nativeEvent: SourceLoadEvent }) => void;\n /**\n * Event emitted when a new source is loaded.\n * This does not mean that the source is immediately ready for playback.\n * `ReadyEvent` indicates the player is ready for immediate playback.\n */\n onBmpSourceLoaded?: (event: { nativeEvent: SourceLoadedEvent }) => void;\n /**\n * Event emitted when the current source has been unloaded.\n */\n onBmpSourceUnloaded?: (event: { nativeEvent: SourceUnloadedEvent }) => void;\n /**\n * Event emitted when a source warning occurred.\n */\n onBmpSourceWarning?: (event: { nativeEvent: SourceWarningEvent }) => void;\n /**\n * Event emitted when a new audio track is added to the player.\n */\n onBmpAudioAdded?: (event: { nativeEvent: AudioAddedEvent }) => void;\n /**\n * Event emitted when the player's selected audio track has changed.\n */\n onBmpAudioChanged?: (event: { nativeEvent: AudioChangedEvent }) => void;\n /**\n * Event emitted when an audio track is removed from the player.\n */\n onBmpAudioRemoved?: (event: { nativeEvent: AudioRemovedEvent }) => void;\n /**\n * Event emitted when a new subtitle track is added to the player.\n */\n onBmpSubtitleAdded?: (event: { nativeEvent: SubtitleAddedEvent }) => void;\n /**\n * Event emitted when the player's selected subtitle track has changed.\n */\n onBmpSubtitleChanged?: (event: { nativeEvent: SubtitleChangedEvent }) => void;\n /**\n * Event emitted when a subtitle track is removed from the player.\n */\n onBmpSubtitleRemoved?: (event: { nativeEvent: SubtitleRemovedEvent }) => void;\n /**\n * Event emitted when the current playback time has changed.\n */\n onBmpTimeChanged?: (event: { nativeEvent: TimeChangedEvent }) => void;\n /**\n * Emitted when the player is unmuted.\n */\n onBmpUnmuted?: (event: { nativeEvent: UnmutedEvent }) => void;\n /**\n * Emitted when current video download quality has changed.\n */\n onBmpVideoDownloadQualityChanged?: (event: {\n nativeEvent: VideoDownloadQualityChangedEvent;\n }) => void;\n /**\n * Emitted when the current video playback quality has changed.\n */\n onBmpVideoPlaybackQualityChanged?: (event: {\n nativeEvent: VideoPlaybackQualityChangedEvent;\n }) => void;\n /**\n * Event emitted when a FairPlay license has been acquired successfully.\n *\n * @platform iOS, tvOS\n */\n onBmpFairplayLicenseAcquired?: (event: {\n nativeEvent: FairplayLicenseAcquiredEvent;\n }) => void;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"nativeEvents.js","sourceRoot":"","sources":["../../../src/components/PlayerView/nativeEvents.ts"],"names":[],"mappings":"","sourcesContent":["import {\n AdBreakFinishedEvent,\n AdBreakStartedEvent,\n AdClickedEvent,\n AdErrorEvent,\n AdFinishedEvent,\n AdManifestLoadedEvent,\n AdManifestLoadEvent,\n AdQuartileEvent,\n AdScheduledEvent,\n AdSkippedEvent,\n AdStartedEvent,\n CastAvailableEvent,\n CastPausedEvent,\n CastPlaybackFinishedEvent,\n CastPlayingEvent,\n CastStartedEvent,\n CastStartEvent,\n CastStoppedEvent,\n CastTimeUpdatedEvent,\n CastWaitingForDeviceEvent,\n DestroyEvent,\n Event,\n FullscreenEnabledEvent,\n FullscreenDisabledEvent,\n FullscreenEnterEvent,\n FullscreenExitEvent,\n MutedEvent,\n PausedEvent,\n PictureInPictureAvailabilityChangedEvent,\n PictureInPictureEnterEvent,\n PictureInPictureEnteredEvent,\n PictureInPictureExitEvent,\n PictureInPictureExitedEvent,\n PlaybackFinishedEvent,\n PlayerActiveEvent,\n PlayerErrorEvent,\n PlayerWarningEvent,\n PlayEvent,\n PlayingEvent,\n ReadyEvent,\n SeekedEvent,\n SeekEvent,\n TimeShiftEvent,\n TimeShiftedEvent,\n StallStartedEvent,\n StallEndedEvent,\n SourceErrorEvent,\n SourceLoadedEvent,\n SourceLoadEvent,\n SourceUnloadedEvent,\n SourceWarningEvent,\n AudioAddedEvent,\n AudioChangedEvent,\n AudioRemovedEvent,\n SubtitleAddedEvent,\n SubtitleChangedEvent,\n SubtitleRemovedEvent,\n TimeChangedEvent,\n UnmutedEvent,\n VideoPlaybackQualityChangedEvent,\n DownloadFinishedEvent,\n VideoDownloadQualityChangedEvent,\n PlaybackSpeedChangedEvent,\n CueEnterEvent,\n CueExitEvent,\n MetadataEvent,\n MetadataParsedEvent,\n FairplayLicenseAcquiredEvent,\n} from '../../events';\n\n/**\n * Event props for `NativePlayerView`.\n */\nexport type NativePlayerViewEvents = {\n /**\n * Event emitted when an ad break has finished.\n */\n onBmpAdBreakFinished?: (event: { nativeEvent: AdBreakFinishedEvent }) => void;\n /**\n * Event emitted when an ad break has started.\n */\n onBmpAdBreakStarted?: (event: { nativeEvent: AdBreakStartedEvent }) => void;\n /**\n * Event emitted when an ad has been clicked.\n */\n onBmpAdClicked?: (event: { nativeEvent: AdClickedEvent }) => void;\n /**\n * Event emitted when an ad error has occurred.\n */\n onBmpAdError?: (event: { nativeEvent: AdErrorEvent }) => void;\n /**\n * Event emitted when an ad has finished.\n */\n onBmpAdFinished?: (event: { nativeEvent: AdFinishedEvent }) => void;\n /**\n * Event emitted when an ad manifest starts loading.\n */\n onBmpAdManifestLoad?: (event: { nativeEvent: AdManifestLoadEvent }) => void;\n /**\n * Event emitted when an ad manifest has been loaded.\n */\n onBmpAdManifestLoaded?: (event: {\n nativeEvent: AdManifestLoadedEvent;\n }) => void;\n /**\n * Event emitted when an ad quartile has been reached.\n */\n onBmpAdQuartile?: (event: { nativeEvent: AdQuartileEvent }) => void;\n /**\n * Event emitted when an ad has been scheduled.\n */\n onBmpAdScheduled?: (event: { nativeEvent: AdScheduledEvent }) => void;\n /**\n * Event emitted when an ad has been skipped.\n */\n onBmpAdSkipped?: (event: { nativeEvent: AdSkippedEvent }) => void;\n /**\n * Event emitted when an ad has started.\n */\n onBmpAdStarted?: (event: { nativeEvent: AdStartedEvent }) => void;\n /**\n * Event emitted when casting to a cast-compatible device is available.\n *\n * @platform iOS, Android\n */\n onBmpCastAvailable?: (event: { nativeEvent: CastAvailableEvent }) => void;\n /**\n * Event emitted when the playback on a cast-compatible device was paused.\n *\n * @platform iOS, Android\n */\n onBmpCastPaused?: (event: { nativeEvent: CastPausedEvent }) => void;\n /**\n * Event emitted when the playback on a cast-compatible device has finished.\n *\n * @platform iOS, Android\n */\n onBmpCastPlaybackFinished?: (event: {\n nativeEvent: CastPlaybackFinishedEvent;\n }) => void;\n /**\n * Event emitted when playback on a cast-compatible device has started.\n *\n * @platform iOS, Android\n */\n onBmpCastPlaying?: (event: { nativeEvent: CastPlayingEvent }) => void;\n /**\n * Event emitted when the cast app is launched successfully.\n *\n * @platform iOS, Android\n */\n onBmpCastStarted?: (event: { nativeEvent: CastStartedEvent }) => void;\n /**\n * Event emitted when casting is initiated, but the user still needs to choose which device should be used.\n *\n * @platform iOS, Android\n */\n onBmpCastStart?: (event: { nativeEvent: CastStartEvent }) => void;\n /**\n * Event emitted when casting to a cast-compatible device is stopped.\n *\n * @platform iOS, Android\n */\n onBmpCastStopped?: (event: { nativeEvent: CastStoppedEvent }) => void;\n /**\n * Event emitted when the time update from the currently used cast-compatible device is received.\n *\n * @platform iOS, Android\n */\n onBmpCastTimeUpdated?: (event: { nativeEvent: CastTimeUpdatedEvent }) => void;\n /**\n * Event emitted when a cast-compatible device has been chosen and the player is waiting for the device to get ready for\n * playback.\n *\n * @platform iOS, Android\n */\n onBmpCastWaitingForDevice?: (event: {\n nativeEvent: CastWaitingForDeviceEvent;\n }) => void;\n /**\n * Event emitted when a subtitle entry transitions into the active status.\n */\n onBmpCueEnter?: (event: { nativeEvent: CueEnterEvent }) => void;\n /**\n * Event emitted when an active subtitle entry transitions into the inactive status.\n */\n onBmpCueExit?: (event: { nativeEvent: CueExitEvent }) => void;\n /**\n * Event emitted when the player is destroyed.\n */\n onBmpDestroy?: (event: { nativeEvent: DestroyEvent }) => void;\n /**\n * Emitted when a download was finished.\n */\n onBmpDownloadFinished?: (event: {\n nativeEvent: DownloadFinishedEvent;\n }) => void;\n /**\n * All events emitted by the player.\n */\n onBmpEvent?: (event: { nativeEvent: Event }) => void;\n /**\n * Event emitted when fullscreen mode has been enabled.\n *\n * @platform iOS, Android\n */\n onBmpFullscreenEnabled?: (event: {\n nativeEvent: FullscreenEnabledEvent;\n }) => void;\n /**\n * Event emitted when fullscreen mode has been disabled.\n *\n * @platform iOS, Android\n */\n onBmpFullscreenDisabled?: (event: {\n nativeEvent: FullscreenDisabledEvent;\n }) => void;\n /**\n * Event emitted when fullscreen mode has been entered.\n *\n * @platform iOS, Android\n */\n onBmpFullscreenEnter?: (event: { nativeEvent: FullscreenEnterEvent }) => void;\n /**\n * Event emitted when fullscreen mode has been exited.\n *\n * @platform iOS, Android\n */\n onBmpFullscreenExit?: (event: { nativeEvent: FullscreenExitEvent }) => void;\n /**\n * Event emitted when metadata is encountered during playback.\n *\n * @platform iOS, Android\n */\n onBmpMetadata?: (event: { nativeEvent: MetadataEvent }) => void;\n /**\n * Event emitted when metadata is first seen and parsed.\n *\n * @platform iOS, Android\n */\n onBmpMetadataParsed?: (event: { nativeEvent: MetadataParsedEvent }) => void;\n /**\n * Event emitted when the player has been muted.\n */\n onBmpMuted?: (event: { nativeEvent: MutedEvent }) => void;\n /**\n * Event emitted when the player has been paused.\n */\n onBmpPaused?: (event: { nativeEvent: PausedEvent }) => void;\n /**\n * Event mitted when the availability of the Picture in Picture mode changed.\n */\n onBmpPictureInPictureAvailabilityChanged?: (event: {\n nativeEvent: PictureInPictureAvailabilityChangedEvent;\n }) => void;\n /**\n * Event emitted when the player enters Picture in Picture mode.\n */\n onBmpPictureInPictureEnter?: (event: {\n nativeEvent: PictureInPictureEnterEvent;\n }) => void;\n /**\n * Event emitted when the player entered Picture in Picture mode.\n */\n onBmpPictureInPictureEntered?: (event: {\n nativeEvent: PictureInPictureEnteredEvent;\n }) => void;\n /**\n * Event emitted when the player exits Picture in Picture mode.\n */\n onBmpPictureInPictureExit?: (event: {\n nativeEvent: PictureInPictureExitEvent;\n }) => void;\n /**\n * Event emitted when the player exited Picture in Picture mode.\n */\n onBmpPictureInPictureExited?: (event: {\n nativeEvent: PictureInPictureExitedEvent;\n }) => void;\n /**\n * Event emitted when the player received an intention to start/resume playback.\n */\n onBmpPlay?: (event: { nativeEvent: PlayEvent }) => void;\n /**\n * Event emitted when the playback of the current media has finished.\n */\n onBmpPlaybackFinished?: (event: {\n nativeEvent: PlaybackFinishedEvent;\n }) => void;\n /**\n * Emitted when the player transitions from one playback speed to another.\n * @platform iOS, tvOS\n */\n onBmpPlaybackSpeedChanged?: (event: {\n nativeEvent: PlaybackSpeedChangedEvent;\n }) => void;\n /**\n * Event emitted when a source is loaded into the player.\n * Seeking and time shifting are allowed as soon as this event is seen.\n */\n onBmpPlayerActive?: (event: { nativeEvent: PlayerActiveEvent }) => void;\n /**\n * Event Emitted when a player error occurred.\n */\n onBmpPlayerError?: (event: { nativeEvent: PlayerErrorEvent }) => void;\n /**\n * Event emitted when a player warning occurred.\n */\n onBmpPlayerWarning?: (event: { nativeEvent: PlayerWarningEvent }) => void;\n /**\n * Emitted when playback has started.\n */\n onBmpPlaying?: (event: { nativeEvent: PlayingEvent }) => void;\n /**\n * Emitted when the player is ready for immediate playback, because initial audio/video\n * has been downloaded.\n */\n onBmpReady?: (event: { nativeEvent: ReadyEvent }) => void;\n /**\n * Event emitted when the player is about to seek to a new position.\n * Only applies to VoD streams.\n */\n onBmpSeek?: (event: { nativeEvent: SeekEvent }) => void;\n /**\n * Event emitted when seeking has finished and data to continue playback is available.\n * Only applies to VoD streams.\n */\n onBmpSeeked?: (event: { nativeEvent: SeekedEvent }) => void;\n /**\n * Event mitted when the player starts time shifting.\n * Only applies to live streams.\n */\n onBmpTimeShift?: (event: { nativeEvent: TimeShiftEvent }) => void;\n /**\n * Event emitted when time shifting has finished and data is available to continue playback.\n * Only applies to live streams.\n */\n onBmpTimeShifted?: (event: { nativeEvent: TimeShiftedEvent }) => void;\n /**\n * Event emitted when the player begins to stall and to buffer due to an empty buffer.\n */\n onBmpStallStarted?: (event: { nativeEvent: StallStartedEvent }) => void;\n /**\n * Event emitted when the player ends stalling, due to enough data in the buffer.\n */\n onBmpStallEnded?: (event: { nativeEvent: StallEndedEvent }) => void;\n /**\n * Event emitted when a source error occurred.\n */\n onBmpSourceError?: (event: { nativeEvent: SourceErrorEvent }) => void;\n /**\n * Event emitted when a new source loading has started.\n */\n onBmpSourceLoad?: (event: { nativeEvent: SourceLoadEvent }) => void;\n /**\n * Event emitted when a new source is loaded.\n * This does not mean that the source is immediately ready for playback.\n * `ReadyEvent` indicates the player is ready for immediate playback.\n */\n onBmpSourceLoaded?: (event: { nativeEvent: SourceLoadedEvent }) => void;\n /**\n * Event emitted when the current source has been unloaded.\n */\n onBmpSourceUnloaded?: (event: { nativeEvent: SourceUnloadedEvent }) => void;\n /**\n * Event emitted when a source warning occurred.\n */\n onBmpSourceWarning?: (event: { nativeEvent: SourceWarningEvent }) => void;\n /**\n * Event emitted when a new audio track is added to the player.\n */\n onBmpAudioAdded?: (event: { nativeEvent: AudioAddedEvent }) => void;\n /**\n * Event emitted when the player's selected audio track has changed.\n */\n onBmpAudioChanged?: (event: { nativeEvent: AudioChangedEvent }) => void;\n /**\n * Event emitted when an audio track is removed from the player.\n */\n onBmpAudioRemoved?: (event: { nativeEvent: AudioRemovedEvent }) => void;\n /**\n * Event emitted when a new subtitle track is added to the player.\n */\n onBmpSubtitleAdded?: (event: { nativeEvent: SubtitleAddedEvent }) => void;\n /**\n * Event emitted when the player's selected subtitle track has changed.\n */\n onBmpSubtitleChanged?: (event: { nativeEvent: SubtitleChangedEvent }) => void;\n /**\n * Event emitted when a subtitle track is removed from the player.\n */\n onBmpSubtitleRemoved?: (event: { nativeEvent: SubtitleRemovedEvent }) => void;\n /**\n * Event emitted when the current playback time has changed.\n */\n onBmpTimeChanged?: (event: { nativeEvent: TimeChangedEvent }) => void;\n /**\n * Emitted when the player is unmuted.\n */\n onBmpUnmuted?: (event: { nativeEvent: UnmutedEvent }) => void;\n /**\n * Emitted when current video download quality has changed.\n */\n onBmpVideoDownloadQualityChanged?: (event: {\n nativeEvent: VideoDownloadQualityChangedEvent;\n }) => void;\n /**\n * Emitted when the current video playback quality has changed.\n */\n onBmpVideoPlaybackQualityChanged?: (event: {\n nativeEvent: VideoPlaybackQualityChangedEvent;\n }) => void;\n /**\n * Event emitted when a FairPlay license has been acquired successfully.\n *\n * @platform iOS, tvOS\n */\n onBmpFairplayLicenseAcquired?: (event: {\n nativeEvent: FairplayLicenseAcquiredEvent;\n }) => void;\n};\n"]}
|
package/build/events.d.ts
CHANGED
|
@@ -329,13 +329,13 @@ export type PictureInPictureExitEvent = Event;
|
|
|
329
329
|
/**
|
|
330
330
|
* Emitted when the player has finished entering Picture in Picture mode on iOS.
|
|
331
331
|
*
|
|
332
|
-
* @platform iOS
|
|
332
|
+
* @platform iOS, Android
|
|
333
333
|
*/
|
|
334
334
|
export type PictureInPictureEnteredEvent = Event;
|
|
335
335
|
/**
|
|
336
336
|
* Emitted when the player has finished exiting Picture in Picture mode on iOS.
|
|
337
337
|
*
|
|
338
|
-
* @platform iOS
|
|
338
|
+
* @platform iOS, Android
|
|
339
339
|
*/
|
|
340
340
|
export type PictureInPictureExitedEvent = Event;
|
|
341
341
|
/**
|
package/build/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"","sourcesContent":["import {\n Ad,\n AdBreak,\n AdConfig,\n AdItem,\n AdQuartile,\n AdSourceType,\n} from './advertising';\nimport { SubtitleTrack } from './subtitleTrack';\nimport { VideoQuality } from './media';\nimport { AudioTrack } from './audioTrack';\nimport { LoadingState } from './source';\nimport { HttpRequestType, HttpResponse } from './network/networkConfig';\nimport {\n DateRangeMetadataEntry,\n EventMessageMetadataEntry,\n Id3MetadataEntry,\n MetadataCollection,\n MetadataEntry,\n MetadataType,\n ScteMetadataEntry,\n UnsupportedMetadataEntry,\n} from './metadata';\n\n/**\n * Base event type for all events.\n */\nexport interface Event {\n /**\n * This event name as it is on the native side.\n */\n name: string;\n /**\n * The UNIX timestamp in which this event happened.\n */\n timestamp: number;\n}\n\n/**\n * Additional diagnostic information related to an error or warning.\n */\nexport interface DeficiencyData {\n /**\n * The HTTP response associated with the error, when the root cause is a network request\n * (e.g. a DRM license or certificate request resulting in a non-2xx status code).\n */\n httpResponse?: HttpResponse;\n}\n\n/**\n * Base event type for error and warning events.\n */\nexport interface ErrorEvent extends Event {\n /**\n * Error/Warning's code number.\n */\n code?: number;\n /**\n * Error/Warning's localized message.\n */\n message: string;\n /**\n * Additional diagnostic information related to the error or warning.\n * Contains details such as an {@link DeficiencyData.httpResponse | HTTP response} when\n * the error is caused by a failed network request.\n */\n data?: DeficiencyData & Record<string, any>;\n}\n\n/**\n * Emitted when a source is loaded into the player.\n * Seeking and time shifting are allowed as soon as this event is seen.\n */\nexport type PlayerActiveEvent = Event;\n\n/**\n * Emitted when a source is unloaded from the player.\n * Seeking and time shifting are not allowed anymore after this event.\n */\nexport type PlayerInactiveEvent = Event;\n\n/**\n * Emitted when a player error occurred.\n */\nexport type PlayerErrorEvent = ErrorEvent;\n\n/**\n * Emitted when a player warning occurred.\n */\nexport type PlayerWarningEvent = ErrorEvent;\n\n/**\n * Emitted when the player is destroyed.\n */\nexport type DestroyEvent = Event;\n\n/**\n * Emitted when the player is muted.\n */\nexport type MutedEvent = Event;\n\n/**\n * Emitted when the player is unmuted.\n */\nexport type UnmutedEvent = Event;\n\n/**\n * Emitted when the player is ready for immediate playback, because initial audio/video\n * has been downloaded.\n */\nexport type ReadyEvent = Event;\n\n/**\n * Emitted when the player is paused.\n */\nexport interface PausedEvent extends Event {\n /**\n * The player's playback time from when this event happened.\n */\n time: number;\n}\n\n/**\n * Emitted when the player received an intention to start/resume playback.\n */\nexport interface PlayEvent extends Event {\n /**\n * The player's playback time from when this event happened.\n */\n time: number;\n}\n\n/**\n * Emitted when playback has started.\n */\nexport interface PlayingEvent extends Event {\n /**\n * The player's playback time from when this event happened.\n */\n time: number;\n}\n\n/**\n * Emitted when the playback of the current media has finished.\n */\nexport type PlaybackFinishedEvent = Event;\n\n/**\n * Source object representation the way it appears on event's payloads such as `SeekEvent`, for example.\n *\n * This interface only type hints what should be the shape of a {@link Source} object inside an event's\n * payload during runtime so it has no direct relation with the `Source` class present in `src/source.ts`.\n *\n * Do not mistake it for a `NativeInstance` type.\n */\nexport interface EventSource {\n /**\n * Event's source duration in seconds.\n */\n duration: number;\n /**\n * Whether this event's source is currently active in a player.\n */\n isActive: boolean;\n /**\n * Whether this event's source is currently attached to a player instance.\n */\n isAttachedToPlayer: boolean;\n /**\n * Metadata for this event's source.\n */\n metadata?: Record<string, any>;\n /**\n * The current {@link LoadingState} of the source.\n */\n loadingState: LoadingState;\n}\n\n/**\n * Represents a seeking position.\n */\nexport interface SeekPosition {\n /**\n * The relevant {@link Source}.\n */\n source: EventSource;\n /**\n * The position within the {@link Source} in seconds.\n */\n time: number;\n}\n\n/**\n * Emitted when the player is about to seek to a new position.\n * This event only applies to VoD streams.\n * When looking for an equivalent for live streams, the {@link TimeShiftEvent} is relevant.\n */\nexport interface SeekEvent extends Event {\n /**\n * Origin source metadata.\n */\n from: SeekPosition;\n /**\n * Target source metadata.\n */\n to: SeekPosition;\n}\n\n/**\n * Emitted when seeking has finished and data to continue playback is available.\n * This event only applies to VoD streams.\n * When looking for an equivalent for live streams, the {@link TimeShiftedEvent} is relevant.\n */\nexport type SeekedEvent = Event;\n\n/**\n * Emitted when the player starts time shifting.\n * This event only applies to live streams.\n * When looking for an equivalent for VoD streams, the {@link SeekEvent} is relevant.\n */\nexport interface TimeShiftEvent extends Event {\n /**\n * The position from which we start the time shift\n */\n position: number;\n /**\n * The position to which we want to jump for the time shift\n */\n targetPosition: number;\n}\n\n/**\n * Emitted when time shifting has finished and data is available to continue playback.\n * This event only applies to live streams.\n * When looking for an equivalent for VoD streams, the {@link SeekedEvent} is relevant.\n */\nexport type TimeShiftedEvent = Event;\n\n/**\n * Emitted when the player begins to stall and to buffer due to an empty buffer.\n */\nexport type StallStartedEvent = Event;\n\n/**\n * Emitted when the player ends stalling, due to enough data in the buffer.\n */\nexport type StallEndedEvent = Event;\n\n/**\n * Emitted when the current playback time has changed.\n */\nexport interface TimeChangedEvent extends Event {\n /**\n * The player's playback time from when this event happened.\n */\n currentTime: number;\n}\n\n/**\n * Emitted when a new source loading has started.\n */\nexport interface SourceLoadEvent extends Event {\n /**\n * Source that is about to load.\n */\n source: EventSource;\n}\n\n/**\n * Emitted when a new source is loaded.\n * This does not mean that the source is immediately ready for playback.\n * {@link ReadyEvent} indicates the player is ready for immediate playback.\n */\nexport interface SourceLoadedEvent extends Event {\n /**\n * Source that was loaded into player.\n */\n source: EventSource;\n}\n\n/**\n * Emitted when the current source has been unloaded.\n */\nexport interface SourceUnloadedEvent extends Event {\n /**\n * Source that was unloaded from player.\n */\n source: EventSource;\n}\n\n/**\n * Emitted when a source error occurred.\n */\nexport type SourceErrorEvent = ErrorEvent;\n\n/**\n * Emitted when a source warning occurred.\n */\nexport type SourceWarningEvent = ErrorEvent;\n\n/**\n * Emitted when a new audio track is added to the player.\n */\nexport interface AudioAddedEvent extends Event {\n /**\n * Audio track that has been added.\n */\n audioTrack: AudioTrack;\n}\n\n/**\n * Emitted when the player's selected audio track has changed.\n */\nexport interface AudioChangedEvent extends Event {\n /**\n * Audio track that was previously selected.\n */\n oldAudioTrack: AudioTrack;\n /**\n * Audio track that is selected now.\n */\n newAudioTrack: AudioTrack;\n}\n\n/**\n * Emitted when an audio track is removed from the player.\n */\nexport interface AudioRemovedEvent extends Event {\n /**\n * Audio track that has been removed.\n */\n audioTrack: AudioTrack;\n}\n\n/**\n * Emitted when a new subtitle track is added to the player.\n */\nexport interface SubtitleAddedEvent extends Event {\n /**\n * Subtitle track that has been added.\n */\n subtitleTrack: SubtitleTrack;\n}\n\n/**\n * Emitted when a subtitle track is removed from the player.\n */\nexport interface SubtitleRemovedEvent extends Event {\n /**\n * Subtitle track that has been removed.\n */\n subtitleTrack: SubtitleTrack;\n}\n\n/**\n * Emitted when the player's selected subtitle track has changed.\n */\nexport interface SubtitleChangedEvent extends Event {\n /**\n * Subtitle track that was previously selected.\n */\n oldSubtitleTrack?: SubtitleTrack;\n /**\n * Subtitle track that is selected now.\n */\n newSubtitleTrack?: SubtitleTrack;\n}\n\n/**\n * Emitted when the player enters Picture in Picture mode.\n *\n * @platform iOS, Android\n */\nexport type PictureInPictureEnterEvent = Event;\n\n/**\n * Emitted when the player exits Picture in Picture mode.\n *\n * @platform iOS, Android\n */\nexport type PictureInPictureExitEvent = Event;\n\n/**\n * Emitted when the player has finished entering Picture in Picture mode on iOS.\n *\n * @platform iOS\n */\nexport type PictureInPictureEnteredEvent = Event;\n\n/**\n * Emitted when the player has finished exiting Picture in Picture mode on iOS.\n *\n * @platform iOS\n */\nexport type PictureInPictureExitedEvent = Event;\n\n/**\n * Emitted when the fullscreen functionality has been enabled.\n *\n * @platform iOS, Android\n */\nexport type FullscreenEnabledEvent = Event;\n\n/**\n * Emitted when the fullscreen functionality has been disabled.\n *\n * @platform iOS, Android\n */\nexport type FullscreenDisabledEvent = Event;\n\n/**\n * Emitted when the player enters fullscreen mode.\n *\n * @platform iOS, Android\n */\nexport type FullscreenEnterEvent = Event;\n\n/**\n * Emitted when the player exits fullscreen mode.\n *\n * @platform iOS, Android\n */\nexport type FullscreenExitEvent = Event;\n\n/**\n * Emitted when the availability of the Picture in Picture mode changed on Android.\n *\n * @platform Android\n */\nexport interface PictureInPictureAvailabilityChangedEvent extends Event {\n /**\n * Whether Picture in Picture is available.\n */\n isPictureInPictureAvailable: boolean;\n}\n\n/**\n * Emitted when an ad break has started.\n */\nexport interface AdBreakStartedEvent extends Event {\n /**\n * The {@link AdBreak} that has started.\n */\n adBreak?: AdBreak;\n}\n\n/**\n * Emitted when an ad break has finished.\n */\nexport interface AdBreakFinishedEvent extends Event {\n /**\n * The {@link AdBreak} that has finished.\n */\n adBreak?: AdBreak;\n}\n\n/**\n * Emitted when the playback of an ad has started.\n */\nexport interface AdStartedEvent extends Event {\n /**\n * The {@link Ad} this event is related to.\n */\n ad?: Ad;\n /**\n * The target URL to open once the user clicks on the ad.\n */\n clickThroughUrl?: string;\n /**\n * The {@link AdSourceType} of the started ad.\n */\n clientType?: AdSourceType;\n /**\n * The duration of the ad in seconds.\n */\n duration: number;\n /**\n * The index of the ad in the queue.\n */\n indexInQueue: number;\n /**\n * The position of the corresponding ad.\n */\n position?: string;\n /**\n * The skip offset of the ad in seconds.\n */\n skipOffset: number;\n /**\n * The main content time at which the ad is played.\n */\n timeOffset: number;\n}\n\n/**\n * Emitted when an ad has finished playback.\n */\nexport interface AdFinishedEvent extends Event {\n /**\n * The {@link Ad} that finished playback.\n */\n ad?: Ad;\n}\n\n/**\n * Emitted when an error with the ad playback occurs.\n */\nexport interface AdErrorEvent extends ErrorEvent {\n /**\n * The {@link AdConfig} for which the ad error occurred.\n */\n adConfig?: AdConfig;\n /**\n * The {@link AdItem} for which the ad error occurred.\n */\n adItem?: AdItem;\n}\n\n/**\n * Emitted when an ad was clicked.\n */\nexport interface AdClickedEvent extends Event {\n /**\n * The click through url of the ad.\n */\n clickThroughUrl?: string;\n}\n\n/**\n * Emitted when an ad was skipped.\n */\nexport interface AdSkippedEvent extends Event {\n /**\n * The ad that was skipped.\n */\n ad?: Ad;\n}\n\n/**\n * Emitted when the playback of an ad has progressed over a quartile boundary.\n */\nexport interface AdQuartileEvent extends Event {\n /**\n * The {@link AdQuartile} boundary that playback has progressed over.\n */\n quartile: AdQuartile;\n}\n\n/**\n * Emitted when an ad manifest was successfully downloaded, parsed and added into the ad break schedule.\n */\nexport interface AdScheduledEvent extends Event {\n /**\n * The total number of scheduled ads.\n */\n numberOfAds: number;\n}\n\n/**\n * Emitted when the download of an ad manifest is started.\n */\nexport interface AdManifestLoadEvent extends Event {\n /**\n * The {@link AdBreak} this event is related to.\n */\n adBreak?: AdBreak;\n /**\n * The {@link AdConfig} of the loaded ad manifest.\n */\n adConfig?: AdConfig;\n}\n\n/**\n * Emitted when an ad manifest was successfully loaded.\n */\nexport interface AdManifestLoadedEvent extends Event {\n /**\n * The {@link AdBreak} this event is related to.\n */\n adBreak?: AdBreak;\n /**\n * The {@link AdConfig} of the loaded ad manifest.\n */\n adConfig?: AdConfig;\n /**\n * How long it took for the ad tag to be downloaded in milliseconds.\n */\n downloadTime: number;\n}\n\n/**\n * Emitted when current video download quality has changed.\n */\nexport interface VideoDownloadQualityChangedEvent extends Event {\n /**\n * The new quality\n */\n newVideoQuality: VideoQuality;\n /**\n * The previous quality\n */\n oldVideoQuality: VideoQuality;\n}\n\n/**\n * Emitted when the current video playback quality has changed.\n */\nexport interface VideoPlaybackQualityChangedEvent extends Event {\n /**\n * The new quality\n */\n newVideoQuality: VideoQuality;\n /**\n * The previous quality\n */\n oldVideoQuality: VideoQuality;\n}\n\n/**\n * Emitted when casting to a cast-compatible device is available.\n */\nexport type CastAvailableEvent = Event;\n\n/**\n * Emitted when the playback on a cast-compatible device was paused.\n *\n * On Android {@link PausedEvent} is also emitted while casting.\n */\nexport type CastPausedEvent = Event;\n\n/**\n * Emitted when the playback on a cast-compatible device has finished.\n *\n * On Android {@link PlaybackFinishedEvent} is also emitted while casting.\n */\nexport type CastPlaybackFinishedEvent = Event;\n\n/**\n * Emitted when playback on a cast-compatible device has started.\n *\n * On Android {@link PlayingEvent} is also emitted while casting.\n */\nexport type CastPlayingEvent = Event;\n\n/**\n * Emitted when the cast app is launched successfully.\n */\nexport interface CastStartedEvent extends Event {\n /**\n * The name of the cast device on which the app was launched.\n */\n deviceName: string | null;\n}\n\n/**\n * Emitted when casting is initiated, but the user still needs to choose which device should be used.\n */\nexport type CastStartEvent = Event;\n\n/**\n * Emitted when casting to a cast-compatible device is stopped.\n */\nexport type CastStoppedEvent = Event;\n\n/**\n * Emitted when the time update from the currently used cast-compatible device is received.\n */\nexport type CastTimeUpdatedEvent = Event;\n\n/**\n * Contains information for the {@link CastWaitingForDeviceEvent}.\n */\nexport interface CastPayload {\n /**\n * The current time in seconds.\n */\n currentTime: number;\n /**\n * The name of the chosen cast device.\n */\n deviceName: string | null;\n /**\n * The type of the payload (always `\"cast\"`).\n */\n type: string;\n}\n\n/**\n * Emitted when a cast-compatible device has been chosen and the player is waiting for the device to get ready for\n * playback.\n */\nexport interface CastWaitingForDeviceEvent extends Event {\n /**\n * The {@link CastPayload} object for the event\n */\n castPayload: CastPayload;\n}\n\n/**\n * Emitted when a download was finished.\n */\nexport interface DownloadFinishedEvent extends Event {\n /**\n * The time needed to finish the request, in seconds.\n */\n downloadTime: number;\n /**\n * Which type of request this was.\n */\n requestType: HttpRequestType;\n /**\n * The HTTP status code of the request.\n * If opening the connection failed, a value of `0` is returned.\n */\n httpStatus: number;\n /**\n * If the download was successful.\n */\n isSuccess: boolean;\n /**\n * The last redirect location, or `null` if no redirect happened.\n */\n lastRedirectLocation?: string;\n /**\n * The size of the downloaded data, in bytes.\n */\n size: number;\n /**\n * The URL of the request.\n */\n url: string;\n}\n\n/**\n * Emitted when the player transitions from one playback speed to another.\n * @platform iOS, tvOS\n */\nexport interface PlaybackSpeedChangedEvent extends Event {\n /**\n * The playback speed before the change happened.\n */\n from: number;\n /**\n * The playback speed after the change happened.\n */\n to: number;\n}\n\n/**\n * Emitted when a subtitle entry transitions into the active status.\n */\nexport interface CueEnterEvent extends Event {\n /**\n * The playback time in seconds when the subtitle should be rendered.\n */\n start: number;\n /**\n * The playback time in seconds when the subtitle should be hidden.\n */\n end: number;\n /**\n * The textual content of this subtitle.\n */\n text?: string;\n /**\n * Data URI for image data of this subtitle.\n */\n image?: string;\n}\n\n/**\n * Emitted when an active subtitle entry transitions into the inactive status.\n */\nexport interface CueExitEvent extends Event {\n /**\n * The playback time in seconds when the subtitle should be rendered.\n */\n start: number;\n /**\n * The playback time in seconds when the subtitle should be hidden.\n */\n end: number;\n /**\n * The textual content of this subtitle.\n */\n text?: string;\n /**\n * Data URI for image data of this subtitle.\n */\n image?: string;\n}\n\n/**\n * Base event type for events that carry timed metadata.\n *\n * Concrete events like {@link MetadataParsedEvent} and {@link MetadataEvent}\n * fix {@link metadataType} and {@link metadata} to a specific metadata entry\n * type.\n *\n * @remarks Branching on {@link metadataType} using an `if`/`switch` statement narrows the\n * event to the appropriate metadata subtype, giving access to entry-specific fields.\n *\n * @typeParam T - The metadata entry type carried by this event\n */\nexport interface MetadataEventBase<T extends MetadataEntry> extends Event {\n /**\n * Discriminator for the metadata type carried by this event.\n *\n * All entries in {@link MetadataCollection.entries} share this value.\n *\n * @remarks Use it in an `if`/`else` or `switch` to narrow the event type.\n */\n metadataType: T['metadataType'];\n /**\n * Metadata entries and their trigger time.\n *\n * The collection is homogeneous: all entries share the same metadata type,\n * reflected by {@link metadataType}.\n */\n metadata: MetadataCollection<T>;\n}\n\n/**\n * Emitted when metadata is parsed from the stream.\n */\nexport type MetadataParsedEvent =\n | (MetadataEventBase<Id3MetadataEntry> & {\n metadataType: MetadataType.ID3;\n })\n | (MetadataEventBase<DateRangeMetadataEntry> & {\n metadataType: MetadataType.DATERANGE;\n })\n | (MetadataEventBase<EventMessageMetadataEntry> & {\n metadataType: MetadataType.EMSG;\n })\n | (MetadataEventBase<ScteMetadataEntry> & {\n metadataType: MetadataType.SCTE;\n })\n | (MetadataEventBase<UnsupportedMetadataEntry> & {\n metadataType: MetadataType.Unsupported;\n });\n\n/**\n * Emitted when metadata is encountered during playback.\n */\nexport type MetadataEvent = MetadataParsedEvent;\n\n/**\n * Represents the FairPlay content key request associated with a license acquisition.\n *\n * @platform iOS, tvOS\n */\nexport interface FairplayContentKeyRequest {\n /**\n * The URI of the content key (the `skd://` URI from the HLS manifest).\n */\n skdUri: string;\n}\n\n/**\n * Emitted when a FairPlay license has been acquired successfully.\n *\n * @platform iOS, tvOS\n */\nexport interface FairplayLicenseAcquiredEvent extends Event {\n /**\n * The content key request associated with the acquired license.\n */\n contentKeyRequest: FairplayContentKeyRequest;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"","sourcesContent":["import {\n Ad,\n AdBreak,\n AdConfig,\n AdItem,\n AdQuartile,\n AdSourceType,\n} from './advertising';\nimport { SubtitleTrack } from './subtitleTrack';\nimport { VideoQuality } from './media';\nimport { AudioTrack } from './audioTrack';\nimport { LoadingState } from './source';\nimport { HttpRequestType, HttpResponse } from './network/networkConfig';\nimport {\n DateRangeMetadataEntry,\n EventMessageMetadataEntry,\n Id3MetadataEntry,\n MetadataCollection,\n MetadataEntry,\n MetadataType,\n ScteMetadataEntry,\n UnsupportedMetadataEntry,\n} from './metadata';\n\n/**\n * Base event type for all events.\n */\nexport interface Event {\n /**\n * This event name as it is on the native side.\n */\n name: string;\n /**\n * The UNIX timestamp in which this event happened.\n */\n timestamp: number;\n}\n\n/**\n * Additional diagnostic information related to an error or warning.\n */\nexport interface DeficiencyData {\n /**\n * The HTTP response associated with the error, when the root cause is a network request\n * (e.g. a DRM license or certificate request resulting in a non-2xx status code).\n */\n httpResponse?: HttpResponse;\n}\n\n/**\n * Base event type for error and warning events.\n */\nexport interface ErrorEvent extends Event {\n /**\n * Error/Warning's code number.\n */\n code?: number;\n /**\n * Error/Warning's localized message.\n */\n message: string;\n /**\n * Additional diagnostic information related to the error or warning.\n * Contains details such as an {@link DeficiencyData.httpResponse | HTTP response} when\n * the error is caused by a failed network request.\n */\n data?: DeficiencyData & Record<string, any>;\n}\n\n/**\n * Emitted when a source is loaded into the player.\n * Seeking and time shifting are allowed as soon as this event is seen.\n */\nexport type PlayerActiveEvent = Event;\n\n/**\n * Emitted when a source is unloaded from the player.\n * Seeking and time shifting are not allowed anymore after this event.\n */\nexport type PlayerInactiveEvent = Event;\n\n/**\n * Emitted when a player error occurred.\n */\nexport type PlayerErrorEvent = ErrorEvent;\n\n/**\n * Emitted when a player warning occurred.\n */\nexport type PlayerWarningEvent = ErrorEvent;\n\n/**\n * Emitted when the player is destroyed.\n */\nexport type DestroyEvent = Event;\n\n/**\n * Emitted when the player is muted.\n */\nexport type MutedEvent = Event;\n\n/**\n * Emitted when the player is unmuted.\n */\nexport type UnmutedEvent = Event;\n\n/**\n * Emitted when the player is ready for immediate playback, because initial audio/video\n * has been downloaded.\n */\nexport type ReadyEvent = Event;\n\n/**\n * Emitted when the player is paused.\n */\nexport interface PausedEvent extends Event {\n /**\n * The player's playback time from when this event happened.\n */\n time: number;\n}\n\n/**\n * Emitted when the player received an intention to start/resume playback.\n */\nexport interface PlayEvent extends Event {\n /**\n * The player's playback time from when this event happened.\n */\n time: number;\n}\n\n/**\n * Emitted when playback has started.\n */\nexport interface PlayingEvent extends Event {\n /**\n * The player's playback time from when this event happened.\n */\n time: number;\n}\n\n/**\n * Emitted when the playback of the current media has finished.\n */\nexport type PlaybackFinishedEvent = Event;\n\n/**\n * Source object representation the way it appears on event's payloads such as `SeekEvent`, for example.\n *\n * This interface only type hints what should be the shape of a {@link Source} object inside an event's\n * payload during runtime so it has no direct relation with the `Source` class present in `src/source.ts`.\n *\n * Do not mistake it for a `NativeInstance` type.\n */\nexport interface EventSource {\n /**\n * Event's source duration in seconds.\n */\n duration: number;\n /**\n * Whether this event's source is currently active in a player.\n */\n isActive: boolean;\n /**\n * Whether this event's source is currently attached to a player instance.\n */\n isAttachedToPlayer: boolean;\n /**\n * Metadata for this event's source.\n */\n metadata?: Record<string, any>;\n /**\n * The current {@link LoadingState} of the source.\n */\n loadingState: LoadingState;\n}\n\n/**\n * Represents a seeking position.\n */\nexport interface SeekPosition {\n /**\n * The relevant {@link Source}.\n */\n source: EventSource;\n /**\n * The position within the {@link Source} in seconds.\n */\n time: number;\n}\n\n/**\n * Emitted when the player is about to seek to a new position.\n * This event only applies to VoD streams.\n * When looking for an equivalent for live streams, the {@link TimeShiftEvent} is relevant.\n */\nexport interface SeekEvent extends Event {\n /**\n * Origin source metadata.\n */\n from: SeekPosition;\n /**\n * Target source metadata.\n */\n to: SeekPosition;\n}\n\n/**\n * Emitted when seeking has finished and data to continue playback is available.\n * This event only applies to VoD streams.\n * When looking for an equivalent for live streams, the {@link TimeShiftedEvent} is relevant.\n */\nexport type SeekedEvent = Event;\n\n/**\n * Emitted when the player starts time shifting.\n * This event only applies to live streams.\n * When looking for an equivalent for VoD streams, the {@link SeekEvent} is relevant.\n */\nexport interface TimeShiftEvent extends Event {\n /**\n * The position from which we start the time shift\n */\n position: number;\n /**\n * The position to which we want to jump for the time shift\n */\n targetPosition: number;\n}\n\n/**\n * Emitted when time shifting has finished and data is available to continue playback.\n * This event only applies to live streams.\n * When looking for an equivalent for VoD streams, the {@link SeekedEvent} is relevant.\n */\nexport type TimeShiftedEvent = Event;\n\n/**\n * Emitted when the player begins to stall and to buffer due to an empty buffer.\n */\nexport type StallStartedEvent = Event;\n\n/**\n * Emitted when the player ends stalling, due to enough data in the buffer.\n */\nexport type StallEndedEvent = Event;\n\n/**\n * Emitted when the current playback time has changed.\n */\nexport interface TimeChangedEvent extends Event {\n /**\n * The player's playback time from when this event happened.\n */\n currentTime: number;\n}\n\n/**\n * Emitted when a new source loading has started.\n */\nexport interface SourceLoadEvent extends Event {\n /**\n * Source that is about to load.\n */\n source: EventSource;\n}\n\n/**\n * Emitted when a new source is loaded.\n * This does not mean that the source is immediately ready for playback.\n * {@link ReadyEvent} indicates the player is ready for immediate playback.\n */\nexport interface SourceLoadedEvent extends Event {\n /**\n * Source that was loaded into player.\n */\n source: EventSource;\n}\n\n/**\n * Emitted when the current source has been unloaded.\n */\nexport interface SourceUnloadedEvent extends Event {\n /**\n * Source that was unloaded from player.\n */\n source: EventSource;\n}\n\n/**\n * Emitted when a source error occurred.\n */\nexport type SourceErrorEvent = ErrorEvent;\n\n/**\n * Emitted when a source warning occurred.\n */\nexport type SourceWarningEvent = ErrorEvent;\n\n/**\n * Emitted when a new audio track is added to the player.\n */\nexport interface AudioAddedEvent extends Event {\n /**\n * Audio track that has been added.\n */\n audioTrack: AudioTrack;\n}\n\n/**\n * Emitted when the player's selected audio track has changed.\n */\nexport interface AudioChangedEvent extends Event {\n /**\n * Audio track that was previously selected.\n */\n oldAudioTrack: AudioTrack;\n /**\n * Audio track that is selected now.\n */\n newAudioTrack: AudioTrack;\n}\n\n/**\n * Emitted when an audio track is removed from the player.\n */\nexport interface AudioRemovedEvent extends Event {\n /**\n * Audio track that has been removed.\n */\n audioTrack: AudioTrack;\n}\n\n/**\n * Emitted when a new subtitle track is added to the player.\n */\nexport interface SubtitleAddedEvent extends Event {\n /**\n * Subtitle track that has been added.\n */\n subtitleTrack: SubtitleTrack;\n}\n\n/**\n * Emitted when a subtitle track is removed from the player.\n */\nexport interface SubtitleRemovedEvent extends Event {\n /**\n * Subtitle track that has been removed.\n */\n subtitleTrack: SubtitleTrack;\n}\n\n/**\n * Emitted when the player's selected subtitle track has changed.\n */\nexport interface SubtitleChangedEvent extends Event {\n /**\n * Subtitle track that was previously selected.\n */\n oldSubtitleTrack?: SubtitleTrack;\n /**\n * Subtitle track that is selected now.\n */\n newSubtitleTrack?: SubtitleTrack;\n}\n\n/**\n * Emitted when the player enters Picture in Picture mode.\n *\n * @platform iOS, Android\n */\nexport type PictureInPictureEnterEvent = Event;\n\n/**\n * Emitted when the player exits Picture in Picture mode.\n *\n * @platform iOS, Android\n */\nexport type PictureInPictureExitEvent = Event;\n\n/**\n * Emitted when the player has finished entering Picture in Picture mode on iOS.\n *\n * @platform iOS, Android\n */\nexport type PictureInPictureEnteredEvent = Event;\n\n/**\n * Emitted when the player has finished exiting Picture in Picture mode on iOS.\n *\n * @platform iOS, Android\n */\nexport type PictureInPictureExitedEvent = Event;\n\n/**\n * Emitted when the fullscreen functionality has been enabled.\n *\n * @platform iOS, Android\n */\nexport type FullscreenEnabledEvent = Event;\n\n/**\n * Emitted when the fullscreen functionality has been disabled.\n *\n * @platform iOS, Android\n */\nexport type FullscreenDisabledEvent = Event;\n\n/**\n * Emitted when the player enters fullscreen mode.\n *\n * @platform iOS, Android\n */\nexport type FullscreenEnterEvent = Event;\n\n/**\n * Emitted when the player exits fullscreen mode.\n *\n * @platform iOS, Android\n */\nexport type FullscreenExitEvent = Event;\n\n/**\n * Emitted when the availability of the Picture in Picture mode changed on Android.\n *\n * @platform Android\n */\nexport interface PictureInPictureAvailabilityChangedEvent extends Event {\n /**\n * Whether Picture in Picture is available.\n */\n isPictureInPictureAvailable: boolean;\n}\n\n/**\n * Emitted when an ad break has started.\n */\nexport interface AdBreakStartedEvent extends Event {\n /**\n * The {@link AdBreak} that has started.\n */\n adBreak?: AdBreak;\n}\n\n/**\n * Emitted when an ad break has finished.\n */\nexport interface AdBreakFinishedEvent extends Event {\n /**\n * The {@link AdBreak} that has finished.\n */\n adBreak?: AdBreak;\n}\n\n/**\n * Emitted when the playback of an ad has started.\n */\nexport interface AdStartedEvent extends Event {\n /**\n * The {@link Ad} this event is related to.\n */\n ad?: Ad;\n /**\n * The target URL to open once the user clicks on the ad.\n */\n clickThroughUrl?: string;\n /**\n * The {@link AdSourceType} of the started ad.\n */\n clientType?: AdSourceType;\n /**\n * The duration of the ad in seconds.\n */\n duration: number;\n /**\n * The index of the ad in the queue.\n */\n indexInQueue: number;\n /**\n * The position of the corresponding ad.\n */\n position?: string;\n /**\n * The skip offset of the ad in seconds.\n */\n skipOffset: number;\n /**\n * The main content time at which the ad is played.\n */\n timeOffset: number;\n}\n\n/**\n * Emitted when an ad has finished playback.\n */\nexport interface AdFinishedEvent extends Event {\n /**\n * The {@link Ad} that finished playback.\n */\n ad?: Ad;\n}\n\n/**\n * Emitted when an error with the ad playback occurs.\n */\nexport interface AdErrorEvent extends ErrorEvent {\n /**\n * The {@link AdConfig} for which the ad error occurred.\n */\n adConfig?: AdConfig;\n /**\n * The {@link AdItem} for which the ad error occurred.\n */\n adItem?: AdItem;\n}\n\n/**\n * Emitted when an ad was clicked.\n */\nexport interface AdClickedEvent extends Event {\n /**\n * The click through url of the ad.\n */\n clickThroughUrl?: string;\n}\n\n/**\n * Emitted when an ad was skipped.\n */\nexport interface AdSkippedEvent extends Event {\n /**\n * The ad that was skipped.\n */\n ad?: Ad;\n}\n\n/**\n * Emitted when the playback of an ad has progressed over a quartile boundary.\n */\nexport interface AdQuartileEvent extends Event {\n /**\n * The {@link AdQuartile} boundary that playback has progressed over.\n */\n quartile: AdQuartile;\n}\n\n/**\n * Emitted when an ad manifest was successfully downloaded, parsed and added into the ad break schedule.\n */\nexport interface AdScheduledEvent extends Event {\n /**\n * The total number of scheduled ads.\n */\n numberOfAds: number;\n}\n\n/**\n * Emitted when the download of an ad manifest is started.\n */\nexport interface AdManifestLoadEvent extends Event {\n /**\n * The {@link AdBreak} this event is related to.\n */\n adBreak?: AdBreak;\n /**\n * The {@link AdConfig} of the loaded ad manifest.\n */\n adConfig?: AdConfig;\n}\n\n/**\n * Emitted when an ad manifest was successfully loaded.\n */\nexport interface AdManifestLoadedEvent extends Event {\n /**\n * The {@link AdBreak} this event is related to.\n */\n adBreak?: AdBreak;\n /**\n * The {@link AdConfig} of the loaded ad manifest.\n */\n adConfig?: AdConfig;\n /**\n * How long it took for the ad tag to be downloaded in milliseconds.\n */\n downloadTime: number;\n}\n\n/**\n * Emitted when current video download quality has changed.\n */\nexport interface VideoDownloadQualityChangedEvent extends Event {\n /**\n * The new quality\n */\n newVideoQuality: VideoQuality;\n /**\n * The previous quality\n */\n oldVideoQuality: VideoQuality;\n}\n\n/**\n * Emitted when the current video playback quality has changed.\n */\nexport interface VideoPlaybackQualityChangedEvent extends Event {\n /**\n * The new quality\n */\n newVideoQuality: VideoQuality;\n /**\n * The previous quality\n */\n oldVideoQuality: VideoQuality;\n}\n\n/**\n * Emitted when casting to a cast-compatible device is available.\n */\nexport type CastAvailableEvent = Event;\n\n/**\n * Emitted when the playback on a cast-compatible device was paused.\n *\n * On Android {@link PausedEvent} is also emitted while casting.\n */\nexport type CastPausedEvent = Event;\n\n/**\n * Emitted when the playback on a cast-compatible device has finished.\n *\n * On Android {@link PlaybackFinishedEvent} is also emitted while casting.\n */\nexport type CastPlaybackFinishedEvent = Event;\n\n/**\n * Emitted when playback on a cast-compatible device has started.\n *\n * On Android {@link PlayingEvent} is also emitted while casting.\n */\nexport type CastPlayingEvent = Event;\n\n/**\n * Emitted when the cast app is launched successfully.\n */\nexport interface CastStartedEvent extends Event {\n /**\n * The name of the cast device on which the app was launched.\n */\n deviceName: string | null;\n}\n\n/**\n * Emitted when casting is initiated, but the user still needs to choose which device should be used.\n */\nexport type CastStartEvent = Event;\n\n/**\n * Emitted when casting to a cast-compatible device is stopped.\n */\nexport type CastStoppedEvent = Event;\n\n/**\n * Emitted when the time update from the currently used cast-compatible device is received.\n */\nexport type CastTimeUpdatedEvent = Event;\n\n/**\n * Contains information for the {@link CastWaitingForDeviceEvent}.\n */\nexport interface CastPayload {\n /**\n * The current time in seconds.\n */\n currentTime: number;\n /**\n * The name of the chosen cast device.\n */\n deviceName: string | null;\n /**\n * The type of the payload (always `\"cast\"`).\n */\n type: string;\n}\n\n/**\n * Emitted when a cast-compatible device has been chosen and the player is waiting for the device to get ready for\n * playback.\n */\nexport interface CastWaitingForDeviceEvent extends Event {\n /**\n * The {@link CastPayload} object for the event\n */\n castPayload: CastPayload;\n}\n\n/**\n * Emitted when a download was finished.\n */\nexport interface DownloadFinishedEvent extends Event {\n /**\n * The time needed to finish the request, in seconds.\n */\n downloadTime: number;\n /**\n * Which type of request this was.\n */\n requestType: HttpRequestType;\n /**\n * The HTTP status code of the request.\n * If opening the connection failed, a value of `0` is returned.\n */\n httpStatus: number;\n /**\n * If the download was successful.\n */\n isSuccess: boolean;\n /**\n * The last redirect location, or `null` if no redirect happened.\n */\n lastRedirectLocation?: string;\n /**\n * The size of the downloaded data, in bytes.\n */\n size: number;\n /**\n * The URL of the request.\n */\n url: string;\n}\n\n/**\n * Emitted when the player transitions from one playback speed to another.\n * @platform iOS, tvOS\n */\nexport interface PlaybackSpeedChangedEvent extends Event {\n /**\n * The playback speed before the change happened.\n */\n from: number;\n /**\n * The playback speed after the change happened.\n */\n to: number;\n}\n\n/**\n * Emitted when a subtitle entry transitions into the active status.\n */\nexport interface CueEnterEvent extends Event {\n /**\n * The playback time in seconds when the subtitle should be rendered.\n */\n start: number;\n /**\n * The playback time in seconds when the subtitle should be hidden.\n */\n end: number;\n /**\n * The textual content of this subtitle.\n */\n text?: string;\n /**\n * Data URI for image data of this subtitle.\n */\n image?: string;\n}\n\n/**\n * Emitted when an active subtitle entry transitions into the inactive status.\n */\nexport interface CueExitEvent extends Event {\n /**\n * The playback time in seconds when the subtitle should be rendered.\n */\n start: number;\n /**\n * The playback time in seconds when the subtitle should be hidden.\n */\n end: number;\n /**\n * The textual content of this subtitle.\n */\n text?: string;\n /**\n * Data URI for image data of this subtitle.\n */\n image?: string;\n}\n\n/**\n * Base event type for events that carry timed metadata.\n *\n * Concrete events like {@link MetadataParsedEvent} and {@link MetadataEvent}\n * fix {@link metadataType} and {@link metadata} to a specific metadata entry\n * type.\n *\n * @remarks Branching on {@link metadataType} using an `if`/`switch` statement narrows the\n * event to the appropriate metadata subtype, giving access to entry-specific fields.\n *\n * @typeParam T - The metadata entry type carried by this event\n */\nexport interface MetadataEventBase<T extends MetadataEntry> extends Event {\n /**\n * Discriminator for the metadata type carried by this event.\n *\n * All entries in {@link MetadataCollection.entries} share this value.\n *\n * @remarks Use it in an `if`/`else` or `switch` to narrow the event type.\n */\n metadataType: T['metadataType'];\n /**\n * Metadata entries and their trigger time.\n *\n * The collection is homogeneous: all entries share the same metadata type,\n * reflected by {@link metadataType}.\n */\n metadata: MetadataCollection<T>;\n}\n\n/**\n * Emitted when metadata is parsed from the stream.\n */\nexport type MetadataParsedEvent =\n | (MetadataEventBase<Id3MetadataEntry> & {\n metadataType: MetadataType.ID3;\n })\n | (MetadataEventBase<DateRangeMetadataEntry> & {\n metadataType: MetadataType.DATERANGE;\n })\n | (MetadataEventBase<EventMessageMetadataEntry> & {\n metadataType: MetadataType.EMSG;\n })\n | (MetadataEventBase<ScteMetadataEntry> & {\n metadataType: MetadataType.SCTE;\n })\n | (MetadataEventBase<UnsupportedMetadataEntry> & {\n metadataType: MetadataType.Unsupported;\n });\n\n/**\n * Emitted when metadata is encountered during playback.\n */\nexport type MetadataEvent = MetadataParsedEvent;\n\n/**\n * Represents the FairPlay content key request associated with a license acquisition.\n *\n * @platform iOS, tvOS\n */\nexport interface FairplayContentKeyRequest {\n /**\n * The URI of the content key (the `skd://` URI from the HLS manifest).\n */\n skdUri: string;\n}\n\n/**\n * Emitted when a FairPlay license has been acquired successfully.\n *\n * @platform iOS, tvOS\n */\nexport interface FairplayLicenseAcquiredEvent extends Event {\n /**\n * The content key request associated with the acquired license.\n */\n contentKeyRequest: FairplayContentKeyRequest;\n}\n"]}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { NativeModule } from 'expo-modules-core';
|
|
2
|
-
import { AdItem, ImaSettings } from '../advertising';
|
|
2
|
+
import { AdBreak, AdItem, ImaSettings } from '../advertising';
|
|
3
3
|
export type PlayerModuleEvents = {
|
|
4
4
|
onShouldLoadAdItem: ({ nativeId, id, adItem, }: {
|
|
5
5
|
nativeId: string;
|
|
6
6
|
id: number;
|
|
7
7
|
adItem: AdItem;
|
|
8
8
|
}) => void;
|
|
9
|
+
onShouldPlayAdBreak: ({ nativeId, id, adBreak, }: {
|
|
10
|
+
nativeId: string;
|
|
11
|
+
id: number;
|
|
12
|
+
adBreak: AdBreak;
|
|
13
|
+
}) => void;
|
|
9
14
|
onImaBeforeInitialization: ({ nativeId, id, settings, }: {
|
|
10
15
|
nativeId: string;
|
|
11
16
|
id: number;
|
|
@@ -133,6 +138,10 @@ declare class PlayerModule extends NativeModule<PlayerModuleEvents> {
|
|
|
133
138
|
* Applies the JS decision for an ad item load callback.
|
|
134
139
|
*/
|
|
135
140
|
setShouldLoadAdItem(id: number, shouldLoad: boolean): Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* Applies the JS decision for an ad break playback callback.
|
|
143
|
+
*/
|
|
144
|
+
setShouldPlayAdBreak(id: number, shouldPlay: boolean): Promise<void>;
|
|
136
145
|
/**
|
|
137
146
|
* Applies the JS-updated IMA settings for a before-initialization callback.
|
|
138
147
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlayerModule.d.ts","sourceRoot":"","sources":["../../src/modules/PlayerModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"PlayerModule.d.ts","sourceRoot":"","sources":["../../src/modules/PlayerModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlayerModule.js","sourceRoot":"","sources":["../../src/modules/PlayerModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"PlayerModule.js","sourceRoot":"","sources":["../../src/modules/PlayerModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAsStE,eAAe,mBAAmB,CAAe,cAAc,CAAC,CAAC","sourcesContent":["import { NativeModule, requireNativeModule } from 'expo-modules-core';\nimport { AdBreak, AdItem, ImaSettings } from '../advertising';\n\nexport type PlayerModuleEvents = {\n onShouldLoadAdItem: ({\n nativeId,\n id,\n adItem,\n }: {\n nativeId: string;\n id: number;\n adItem: AdItem;\n }) => void;\n onShouldPlayAdBreak: ({\n nativeId,\n id,\n adBreak,\n }: {\n nativeId: string;\n id: number;\n adBreak: AdBreak;\n }) => void;\n onImaBeforeInitialization: ({\n nativeId,\n id,\n settings,\n }: {\n nativeId: string;\n id: number;\n settings: ImaSettings;\n }) => void;\n};\n\ndeclare class PlayerModule extends NativeModule<PlayerModuleEvents> {\n /**\n * Call .play() on nativeId's player.\n */\n play(nativeId: string): Promise<void>;\n\n /**\n * Call .pause() on nativeId's player.\n */\n pause(nativeId: string): Promise<void>;\n\n /**\n * Call .mute() on nativeId's player.\n */\n mute(nativeId: string): Promise<void>;\n\n /**\n * Call .unmute() on nativeId's player.\n */\n unmute(nativeId: string): Promise<void>;\n\n /**\n * Call .seek(time) on nativeId's player.\n */\n seek(nativeId: string, time: number): Promise<void>;\n\n /**\n * Sets timeShift on nativeId's player.\n */\n timeShift(nativeId: string, offset: number): Promise<void>;\n\n /**\n * Call .destroy() on nativeId's player and remove from registry.\n */\n destroy(nativeId: string): Promise<void>;\n\n /**\n * Call .setVolume(volume) on nativeId's player.\n */\n setVolume(nativeId: string, volume: number): Promise<void>;\n\n /**\n * Resolve nativeId's current volume.\n */\n getVolume(nativeId: string): Promise<number | null>;\n\n /**\n * Resolve nativeId's current time.\n */\n currentTime(nativeId: string, mode?: string): Promise<number | null>;\n\n /**\n * Resolve nativeId's current playing state.\n */\n isPlaying(nativeId: string): Promise<boolean | null>;\n\n /**\n * Resolve nativeId's current paused state.\n */\n isPaused(nativeId: string): Promise<boolean | null>;\n\n /**\n * Resolve nativeId's active source duration.\n */\n duration(nativeId: string): Promise<number | null>;\n\n /**\n * Resolve nativeId's current muted state.\n */\n isMuted(nativeId: string): Promise<boolean | null>;\n\n /**\n * Call .unload() on nativeId's player.\n */\n unload(nativeId: string): Promise<void>;\n\n /**\n * Resolve nativeId's current time shift value.\n */\n getTimeShift(nativeId: string): Promise<number | null>;\n\n /**\n * Resolve nativeId's live stream state.\n */\n isLive(nativeId: string): Promise<boolean | null>;\n\n /**\n * Resolve nativeId's maximum time shift value.\n */\n getMaxTimeShift(nativeId: string): Promise<number | null>;\n\n /**\n * Resolve nativeId's current playback speed.\n */\n getPlaybackSpeed(nativeId: string): Promise<number | null>;\n\n /**\n * Set playback speed for nativeId's player.\n */\n setPlaybackSpeed(nativeId: string, playbackSpeed: number): Promise<void>;\n\n /**\n * Resolve nativeId's current ad state.\n */\n isAd(nativeId: string): Promise<boolean | null>;\n\n /**\n * Set maximum selectable bitrate for nativeId's player.\n */\n setMaxSelectableBitrate(nativeId: string, maxBitrate: number): Promise<void>;\n\n /**\n * Resolve nativeId's AirPlay activation state (iOS only).\n */\n isAirPlayActive(nativeId: string): Promise<boolean | null>;\n\n /**\n * Resolve nativeId's AirPlay availability state (iOS only).\n */\n isAirPlayAvailable(nativeId: string): Promise<boolean | null>;\n\n /**\n * Resolve nativeId's cast availability state.\n */\n isCastAvailable(nativeId: string): Promise<boolean | null>;\n\n /**\n * Resolve nativeId's current casting state.\n */\n isCasting(nativeId: string): Promise<boolean | null>;\n\n /**\n * Initiate casting for nativeId's player.\n */\n castVideo(nativeId: string): Promise<void>;\n\n /**\n * Stop casting for nativeId's player.\n */\n castStop(nativeId: string): Promise<void>;\n\n /**\n * Skip current ad for nativeId's player.\n */\n skipAd(nativeId: string): Promise<void>;\n\n /**\n * Applies the JS decision for an ad item load callback.\n */\n setShouldLoadAdItem(id: number, shouldLoad: boolean): Promise<void>;\n\n /**\n * Applies the JS decision for an ad break playback callback.\n */\n setShouldPlayAdBreak(id: number, shouldPlay: boolean): Promise<void>;\n\n /**\n * Applies the JS-updated IMA settings for a before-initialization callback.\n */\n setPreparedImaSettings(id: number, settings: ImaSettings): Promise<void>;\n\n /**\n * Check if player can play at specified playback speed (iOS only).\n */\n canPlayAtPlaybackSpeed(\n nativeId: string,\n playbackSpeed: number\n ): Promise<boolean | null>;\n\n /**\n * Creates a new Player instance using the provided config.\n */\n initializeWithConfig(\n nativeId: string,\n config?: Record<string, any>,\n networkNativeId?: string,\n decoderNativeId?: string\n ): Promise<void>;\n\n /**\n * Creates a new analytics-enabled Player instance.\n */\n initializeWithAnalyticsConfig(\n nativeId: string,\n analyticsConfig: Record<string, any>,\n config?: Record<string, any>,\n networkNativeId?: string,\n decoderNativeId?: string\n ): Promise<void>;\n\n /**\n * Load source into the player.\n * Requires SourceModule dependency.\n */\n loadSource(nativeId: string, sourceNativeId: string): Promise<void>;\n\n /**\n * Load offline content into the player.\n */\n loadOfflineContent(\n nativeId: string,\n offlineContentId: string,\n options?: Record<string, any>\n ): Promise<void>;\n\n /**\n * Get current audio track.\n */\n getAudioTrack(nativeId: string): Promise<any | null>;\n\n /**\n * Get available audio tracks.\n */\n getAvailableAudioTracks(nativeId: string): Promise<any[]>;\n\n /**\n * Set audio track.\n */\n setAudioTrack(nativeId: string, trackId: string): Promise<void>;\n\n /**\n * Get current subtitle track.\n */\n getSubtitleTrack(nativeId: string): Promise<any | null>;\n\n /**\n * Get available subtitle tracks.\n */\n getAvailableSubtitles(nativeId: string): Promise<any[]>;\n\n /**\n * Set subtitle track.\n */\n setSubtitleTrack(nativeId: string, trackId: string | null): Promise<void>;\n\n /**\n * Schedule an ad.\n */\n scheduleAd(nativeId: string, adConfig: Record<string, any>): Promise<void>;\n\n /**\n * Get thumbnail for time position.\n */\n getThumbnail(nativeId: string, time: number): Promise<any | null>;\n\n /**\n * Get current video quality.\n */\n getVideoQuality(nativeId: string): Promise<any | null>;\n\n /**\n * Get available video qualities.\n */\n getAvailableVideoQualities(nativeId: string): Promise<any[]>;\n\n /**\n * Set video quality.\n */\n setVideoQuality(nativeId: string, qualityId: string): Promise<void>;\n}\n\nexport default requireNativeModule<PlayerModule>('PlayerModule');\n"]}
|
package/build/player.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export declare class Player extends NativeInstance<PlayerConfig> {
|
|
|
44
44
|
private network?;
|
|
45
45
|
private decoderConfig?;
|
|
46
46
|
private onShouldLoadAdItemSubscription?;
|
|
47
|
+
private onShouldPlayAdBreakSubscription?;
|
|
47
48
|
private onImaBeforeInitializationSubscription?;
|
|
48
49
|
/**
|
|
49
50
|
* Allocates the native `Player` instance and its resources natively.
|
|
@@ -112,6 +113,7 @@ export declare class Player extends NativeInstance<PlayerConfig> {
|
|
|
112
113
|
* @param volume - The volume level to set.
|
|
113
114
|
*/
|
|
114
115
|
setVolume: (volume: number) => void;
|
|
116
|
+
private ensureShouldPlayAdBreakListener;
|
|
115
117
|
private ensureImaBeforeInitializationListener;
|
|
116
118
|
/**
|
|
117
119
|
* @returns The player's current volume level.
|
package/build/player.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../src/player.ts"],"names":[],"mappings":"AAGA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../src/player.ts"],"names":[],"mappings":"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"}
|
package/build/player.js
CHANGED
|
@@ -41,6 +41,7 @@ export class Player extends NativeInstance {
|
|
|
41
41
|
network;
|
|
42
42
|
decoderConfig;
|
|
43
43
|
onShouldLoadAdItemSubscription;
|
|
44
|
+
onShouldPlayAdBreakSubscription;
|
|
44
45
|
onImaBeforeInitializationSubscription;
|
|
45
46
|
/**
|
|
46
47
|
* Allocates the native `Player` instance and its resources natively.
|
|
@@ -48,6 +49,7 @@ export class Player extends NativeInstance {
|
|
|
48
49
|
initialize = async () => {
|
|
49
50
|
if (!this.isInitialized) {
|
|
50
51
|
this.ensureShouldLoadAdItemListener();
|
|
52
|
+
this.ensureShouldPlayAdBreakListener();
|
|
51
53
|
this.ensureImaBeforeInitializationListener();
|
|
52
54
|
if (this.config?.networkConfig) {
|
|
53
55
|
this.network = new Network(this.config.networkConfig);
|
|
@@ -76,8 +78,10 @@ export class Player extends NativeInstance {
|
|
|
76
78
|
void this.network?.destroy();
|
|
77
79
|
void this.decoderConfig?.destroy();
|
|
78
80
|
this.onShouldLoadAdItemSubscription?.remove();
|
|
81
|
+
this.onShouldPlayAdBreakSubscription?.remove();
|
|
79
82
|
this.onImaBeforeInitializationSubscription?.remove();
|
|
80
83
|
this.onShouldLoadAdItemSubscription = undefined;
|
|
84
|
+
this.onShouldPlayAdBreakSubscription = undefined;
|
|
81
85
|
this.onImaBeforeInitializationSubscription = undefined;
|
|
82
86
|
this.isDestroyed = true;
|
|
83
87
|
}
|
|
@@ -193,6 +197,40 @@ export class Player extends NativeInstance {
|
|
|
193
197
|
setVolume = (volume) => {
|
|
194
198
|
void PlayerModule.setVolume(this.nativeId, volume);
|
|
195
199
|
};
|
|
200
|
+
ensureShouldPlayAdBreakListener = () => {
|
|
201
|
+
if (Platform.OS !== 'android') {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const callback = this.config?.advertisingConfig?.shouldPlayAdBreak;
|
|
205
|
+
if (!callback) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (this.onShouldPlayAdBreakSubscription) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
this.onShouldPlayAdBreakSubscription = PlayerModule.addListener('onShouldPlayAdBreak', ({ nativeId, id, adBreak }) => {
|
|
212
|
+
if (nativeId !== this.nativeId) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const cloned = {
|
|
216
|
+
...adBreak,
|
|
217
|
+
ads: adBreak.ads.map((ad) => ({
|
|
218
|
+
...ad,
|
|
219
|
+
data: ad.data ? { ...ad.data } : undefined,
|
|
220
|
+
})),
|
|
221
|
+
};
|
|
222
|
+
let shouldPlay = true;
|
|
223
|
+
try {
|
|
224
|
+
const shouldPlayResult = callback(cloned);
|
|
225
|
+
shouldPlay =
|
|
226
|
+
typeof shouldPlayResult === 'boolean' ? shouldPlayResult : true;
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
shouldPlay = true;
|
|
230
|
+
}
|
|
231
|
+
void PlayerModule.setShouldPlayAdBreak(id, shouldPlay);
|
|
232
|
+
});
|
|
233
|
+
};
|
|
196
234
|
ensureImaBeforeInitializationListener = () => {
|
|
197
235
|
const callback = this.config?.advertisingConfig?.ima?.beforeInitialization;
|
|
198
236
|
if (!callback) {
|
package/build/player.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player.js","sourceRoot":"","sources":["../src/player.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAgB,MAAM,UAAU,CAAC;AAKhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,OAAO,MAAO,SAAQ,cAA4B;IACtD;;OAEG;IACH,aAAa,GAAG,KAAK,CAAC;IACtB;;OAEG;IACH,WAAW,GAAG,KAAK,CAAC;IACpB;;OAEG;IACH,MAAM,CAAU;IAChB;;;;OAIG;IACH,SAAS,GAAkB,SAAS,CAAC;IACrC;;OAEG;IACH,MAAM,GAAc,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEzC,OAAO,CAAW;IAElB,aAAa,CAAuB;IACpC,8BAA8B,CAAqB;IACnD,qCAAqC,CAAqB;IAClE;;OAEG;IACH,UAAU,GAAG,KAAK,IAAmB,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACtC,IAAI,CAAC,qCAAqC,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBACtD,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAClC,CAAC;YACD,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;YACrD,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,YAAY,CAAC,6BAA6B,CAC9C,IAAI,CAAC,QAAQ,EACb,eAAe,EACf,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EAAE,QAAQ,EACtB,IAAI,CAAC,aAAa,EAAE,QAAQ,CAC7B,CAAC;gBACF,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,CAAC,oBAAoB,CACrC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EAAE,QAAQ,EACtB,IAAI,CAAC,aAAa,EAAE,QAAQ,CAC7B,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEF;;OAEG;IACH,OAAO,GAAG,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzC,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,8BAA8B,EAAE,MAAM,EAAE,CAAC;YAC9C,IAAI,CAAC,qCAAqC,EAAE,MAAM,EAAE,CAAC;YACrD,IAAI,CAAC,8BAA8B,GAAG,SAAS,CAAC;YAChD,IAAI,CAAC,qCAAqC,GAAG,SAAS,CAAC;YACvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEM,8BAA8B,GAAG,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,8BAA8B,GAAG,YAAY,CAAC,WAAW,CAC5D,oBAAoB,EACpB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC3B,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAW;gBACrB,GAAG,MAAM;gBACT,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;aACzD,CAAC;YACF,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC1C,UAAU;oBACR,OAAO,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;YACpE,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,KAAK,YAAY,CAAC,mBAAmB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;IAEF;;OAEG;IACH,IAAI,GAAG,CAAC,YAA0B,EAAE,EAAE;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF;;OAEG;IACH,kBAAkB,GAAG,CACnB,qBAA4C,EAC5C,OAA8B,EAC9B,EAAE;QACF,KAAK,YAAY,CAAC,kBAAkB,CAClC,IAAI,CAAC,QAAQ,EACb,qBAAqB,CAAC,QAAQ,EAC9B,OAAO,CACR,CAAC;IACJ,CAAC,CAAC;IAEF;;OAEG;IACH,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAK,MAAM;aACR,UAAU,EAAE;aACZ,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,GAAG,GAAG,EAAE;QACZ,KAAK,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF;;OAEG;IACH,IAAI,GAAG,GAAG,EAAE;QACV,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF;;OAEG;IACH,KAAK,GAAG,GAAG,EAAE;QACX,KAAK,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF;;;;;;OAMG;IACH,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;QACtB,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF;;;;;;;;;;OAUG;IACH,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE;QAC7B,KAAK,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF;;OAEG;IACH,IAAI,GAAG,GAAG,EAAE;QACV,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,GAAG,GAAG,EAAE;QACZ,KAAK,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF;;;;OAIG;IACH,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE;QAC7B,KAAK,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC;IAEM,qCAAqC,GAAG,GAAG,EAAE;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,oBAAoB,CAAC;QAC3E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,qCAAqC,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,qCAAqC,GAAG,YAAY,CAAC,WAAW,CACnE,2BAA2B,EAC3B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC7B,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAgB,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC5C,IAAI,QAAQ,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAChC,QAAQ;oBACN,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;wBAClC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE;wBAC1B,CAAC,CAAC,MAAM,CAAC;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,GAAG,MAAM,CAAC;YACpB,CAAC;YACD,KAAK,YAAY,CAAC,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;IAEF;;OAEG;IACH,SAAS,GAAG,KAAK,IAAqB,EAAE;QACtC,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC;IAEF;;;;;;;;;OASG;IACH,cAAc,GAAG,KAAK,EACpB,OAAgC,UAAU,EACzB,EAAE;QACnB,OAAO,CAAC,MAAM,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC;IAEF;;OAEG;IACH,WAAW,GAAG,KAAK,IAAqB,EAAE;QACxC,OAAO,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF;;OAEG;IACH,OAAO,GAAG,KAAK,IAAsB,EAAE;QACrC,OAAO,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IAC9D,CAAC,CAAC;IAEF;;OAEG;IACH,SAAS,GAAG,KAAK,IAAsB,EAAE;QACvC,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IAChE,CAAC,CAAC;IAEF;;OAEG;IACH,QAAQ,GAAG,KAAK,IAAsB,EAAE;QACtC,OAAO,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IAC/D,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,GAAG,KAAK,IAAsB,EAAE;QACpC,OAAO,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IAC7D,CAAC,CAAC;IAEF;;;OAGG;IACH,eAAe,GAAG,KAAK,IAAsB,EAAE;QAC7C,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CACV,WAAW,IAAI,CAAC,QAAQ,0EAA0E,CACnG,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,MAAM,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IACtE,CAAC,CAAC;IAEF;;;OAGG;IACH,kBAAkB,GAAG,KAAK,IAAsB,EAAE;QAChD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CACV,WAAW,IAAI,CAAC,QAAQ,6EAA6E,CACtG,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,MAAM,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IACzE,CAAC,CAAC;IAEF;;OAEG;IACH,aAAa,GAAG,KAAK,IAAgC,EAAE;QACrD,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF;;OAEG;IACH,uBAAuB,GAAG,KAAK,IAA2B,EAAE;QAC1D,OAAO,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC,CAAC;IAEF;;;;OAIG;IACH,aAAa,GAAG,KAAK,EAAE,eAAuB,EAAiB,EAAE;QAC/D,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACpE,CAAC,CAAC;IAEF;;OAEG;IACH,gBAAgB,GAAG,KAAK,IAAmC,EAAE;QAC3D,OAAO,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF;;OAEG;IACH,qBAAqB,GAAG,KAAK,IAA8B,EAAE;QAC3D,OAAO,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF;;;;;OAKG;IACH,gBAAgB,GAAG,KAAK,EACtB,eAAmC,EACpB,EAAE;QACjB,OAAO,YAAY,CAAC,gBAAgB,CAClC,IAAI,CAAC,QAAQ,EACb,eAAe,IAAI,IAAI,CACxB,CAAC;IACJ,CAAC,CAAC;IAEF;;;;;;;OAOG;IACH,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE;QAC9B,KAAK,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,GAAG,GAAG,EAAE;QACZ,KAAK,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF;;;OAGG;IACH,IAAI,GAAG,KAAK,IAAsB,EAAE;QAClC,OAAO,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IAC3D,CAAC,CAAC;IAEF;;;OAGG;IACH,YAAY,GAAG,KAAK,IAAqB,EAAE;QACzC,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC;IAEF;;;OAGG;IACH,eAAe,GAAG,KAAK,IAAqB,EAAE;QAC5C,OAAO,CAAC,MAAM,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC;IAEF;;;;;OAKG;IACH,uBAAuB,GAAG,CAAC,OAAsB,EAAE,EAAE;QACnD,KAAK,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC;IAEF;;;;;;;;;OASG;IACH,YAAY,GAAG,KAAK,EAAE,IAAY,EAA6B,EAAE;QAC/D,OAAO,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF;;;;;OAKG;IACH,eAAe,GAAG,KAAK,IAAsB,EAAE;QAC7C,OAAO,CAAC,MAAM,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IACtE,CAAC,CAAC;IAEF;;;;OAIG;IACH,SAAS,GAAG,KAAK,IAAsB,EAAE;QACvC,OAAO,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IAChE,CAAC,CAAC;IAEF;;;;;OAKG;IACH,SAAS,GAAG,GAAG,EAAE;QACf,KAAK,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF;;;;OAIG;IACH,QAAQ,GAAG,GAAG,EAAE;QACd,KAAK,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF;;;OAGG;IACH,eAAe,GAAG,KAAK,IAA2B,EAAE;QAClD,OAAO,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF;;;OAGG;IACH,0BAA0B,GAAG,KAAK,IAA6B,EAAE;QAC/D,OAAO,YAAY,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF;;;;;OAKG;IACH,eAAe,GAAG,CAAC,SAAiB,EAAE,EAAE;QACtC,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CACV,WAAW,IAAI,CAAC,QAAQ,2FAA2F,CACpH,CAAC;YACF,OAAO;QACT,CAAC;QACD,KAAK,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,GAAG,CAAC,aAAqB,EAAE,EAAE;QAC3C,KAAK,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF;;;OAGG;IACH,gBAAgB,GAAG,KAAK,IAAqB,EAAE;QAC7C,OAAO,CAAC,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF;;;;;OAKG;IACH,sBAAsB,GAAG,KAAK,EAC5B,aAAqB,EACS,EAAE;QAChC,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CACV,WAAW,IAAI,CAAC,QAAQ,0FAA0F,CACnH,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,CACL,CAAC,MAAM,YAAY,CAAC,sBAAsB,CACxC,IAAI,CAAC,QAAQ,EACb,aAAa,CACd,CAAC,IAAI,KAAK,CACZ,CAAC;IACJ,CAAC,CAAC;IAEM,sBAAsB,GAAG,GAAG,EAAE;QACpC,IAAI,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,IAAI,IAAI,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,mBAAmB,CAC1C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CACzC,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC,CAAC;CACH","sourcesContent":["import { EventSubscription } from 'expo-modules-core';\nimport { Platform } from 'react-native';\nimport PlayerModule from './modules/PlayerModule';\nimport NativeInstance from './nativeInstance';\nimport { Source, SourceConfig } from './source';\nimport { AudioTrack } from './audioTrack';\nimport { SubtitleTrack } from './subtitleTrack';\nimport { OfflineContentManager, OfflineSourceOptions } from './offline';\nimport { Thumbnail } from './thumbnail';\nimport { AnalyticsApi } from './analytics/player';\nimport { PlayerConfig } from './playerConfig';\nimport { AdItem, ImaSettings } from './advertising';\nimport { BufferApi } from './bufferApi';\nimport { VideoQuality } from './media';\nimport { Network } from './network';\nimport { DecoderConfigBridge } from './decoder';\n\n/**\n * Loads, controls and renders audio and video content represented through {@link Source}s. A player\n * instance can be created via the {@link usePlayer} hook and will idle until one or more {@link Source}s are\n * loaded. Once {@link Player.load} or {@link Player.loadSource} is called, the player becomes active and initiates necessary downloads to\n * start playback of the loaded source(s).\n *\n * Can be attached to {@link PlayerView} component in order to use Bitmovin's Player Web UI.\n * @see PlayerView\n */\nexport class Player extends NativeInstance<PlayerConfig> {\n /**\n * Whether the native `Player` object has been created.\n */\n isInitialized = false;\n /**\n * Whether the native `Player` object has been disposed.\n */\n isDestroyed = false;\n /**\n * Currently active source, or `null` if none is active.\n */\n source?: Source;\n /**\n * The `AnalyticsApi` for interactions regarding the `Player`'s analytics.\n *\n * `undefined` if the player was created without analytics support.\n */\n analytics?: AnalyticsApi = undefined;\n /**\n * The {@link BufferApi} for interactions regarding the buffer.\n */\n buffer: BufferApi = new BufferApi(this.nativeId);\n\n private network?: Network;\n\n private decoderConfig?: DecoderConfigBridge;\n private onShouldLoadAdItemSubscription?: EventSubscription;\n private onImaBeforeInitializationSubscription?: EventSubscription;\n /**\n * Allocates the native `Player` instance and its resources natively.\n */\n initialize = async (): Promise<void> => {\n if (!this.isInitialized) {\n this.ensureShouldLoadAdItemListener();\n this.ensureImaBeforeInitializationListener();\n if (this.config?.networkConfig) {\n this.network = new Network(this.config.networkConfig);\n await this.network.initialize();\n }\n await this.maybeInitDecoderConfig();\n const analyticsConfig = this.config?.analyticsConfig;\n if (analyticsConfig) {\n await PlayerModule.initializeWithAnalyticsConfig(\n this.nativeId,\n analyticsConfig,\n this.config,\n this.network?.nativeId,\n this.decoderConfig?.nativeId\n );\n this.analytics = new AnalyticsApi(this.nativeId);\n } else {\n await PlayerModule.initializeWithConfig(\n this.nativeId,\n this.config,\n this.network?.nativeId,\n this.decoderConfig?.nativeId\n );\n }\n\n this.isInitialized = true;\n }\n return Promise.resolve();\n };\n\n /**\n * Destroys the native `Player` and releases all of its allocated resources.\n */\n destroy = () => {\n if (!this.isDestroyed) {\n void PlayerModule.destroy(this.nativeId);\n void this.source?.destroy();\n void this.network?.destroy();\n void this.decoderConfig?.destroy();\n this.onShouldLoadAdItemSubscription?.remove();\n this.onImaBeforeInitializationSubscription?.remove();\n this.onShouldLoadAdItemSubscription = undefined;\n this.onImaBeforeInitializationSubscription = undefined;\n this.isDestroyed = true;\n }\n };\n\n private ensureShouldLoadAdItemListener = () => {\n const callback = this.config?.advertisingConfig?.shouldLoadAdItem;\n if (!callback) {\n return;\n }\n if (this.onShouldLoadAdItemSubscription) {\n return;\n }\n this.onShouldLoadAdItemSubscription = PlayerModule.addListener(\n 'onShouldLoadAdItem',\n ({ nativeId, id, adItem }) => {\n if (nativeId !== this.nativeId) {\n return;\n }\n const cloned: AdItem = {\n ...adItem,\n sources: adItem.sources.map((source) => ({ ...source })),\n };\n let shouldLoad = true;\n try {\n const shouldLoadResult = callback(cloned);\n shouldLoad =\n typeof shouldLoadResult === 'boolean' ? shouldLoadResult : true;\n } catch {\n shouldLoad = true;\n }\n void PlayerModule.setShouldLoadAdItem(id, shouldLoad);\n }\n );\n };\n\n /**\n * Loads a new {@link Source} from `sourceConfig` into the player.\n */\n load = (sourceConfig: SourceConfig) => {\n this.loadSource(new Source(sourceConfig));\n };\n\n /**\n * Loads the downloaded content from {@link OfflineContentManager} into the player.\n */\n loadOfflineContent = (\n offlineContentManager: OfflineContentManager,\n options?: OfflineSourceOptions\n ) => {\n void PlayerModule.loadOfflineContent(\n this.nativeId,\n offlineContentManager.nativeId,\n options\n );\n };\n\n /**\n * Loads the given {@link Source} into the player.\n */\n loadSource = (source: Source) => {\n this.source = source;\n void source\n .initialize()\n .then(() => PlayerModule.loadSource(this.nativeId, source.nativeId));\n };\n\n /**\n * Unloads all {@link Source}s from the player.\n */\n unload = () => {\n void PlayerModule.unload(this.nativeId);\n };\n\n /**\n * Starts or resumes playback after being paused. Has no effect if the player is already playing.\n */\n play = () => {\n void PlayerModule.play(this.nativeId);\n };\n\n /**\n * Pauses the video if it is playing. Has no effect if the player is already paused.\n */\n pause = () => {\n void PlayerModule.pause(this.nativeId);\n };\n\n /**\n * Seeks to the given playback time specified by the parameter `time` in seconds. Must not be\n * greater than the total duration of the video. Has no effect when watching a live stream since\n * seeking is not possible.\n *\n * @param time - The time to seek to in seconds.\n */\n seek = (time: number) => {\n void PlayerModule.seek(this.nativeId, time);\n };\n\n /**\n * Shifts the time to the given `offset` in seconds from the live edge. The resulting offset has to be within the\n * timeShift window as specified by `maxTimeShift` (which is a negative value) and 0. When the provided `offset` is\n * positive, it will be interpreted as a UNIX timestamp in seconds and converted to fit into the timeShift window.\n * When the provided `offset` is negative, but lower than `maxTimeShift`, then it will be clamped to `maxTimeShift`.\n * Has no effect for VoD.\n *\n * Has no effect if no sources are loaded.\n *\n * @param offset - Target offset from the live edge in seconds.\n */\n timeShift = (offset: number) => {\n void PlayerModule.timeShift(this.nativeId, offset);\n };\n\n /**\n * Mutes the player if an audio track is available. Has no effect if the player is already muted.\n */\n mute = () => {\n void PlayerModule.mute(this.nativeId);\n };\n\n /**\n * Unmutes the player if it is muted. Has no effect if the player is already unmuted.\n */\n unmute = () => {\n void PlayerModule.unmute(this.nativeId);\n };\n\n /**\n * Sets the player's volume between 0 (silent) and 100 (max volume).\n *\n * @param volume - The volume level to set.\n */\n setVolume = (volume: number) => {\n void PlayerModule.setVolume(this.nativeId, volume);\n };\n\n private ensureImaBeforeInitializationListener = () => {\n const callback = this.config?.advertisingConfig?.ima?.beforeInitialization;\n if (!callback) {\n return;\n }\n if (this.onImaBeforeInitializationSubscription) {\n return;\n }\n this.onImaBeforeInitializationSubscription = PlayerModule.addListener(\n 'onImaBeforeInitialization',\n ({ nativeId, id, settings }) => {\n if (nativeId !== this.nativeId) {\n return;\n }\n const cloned: ImaSettings = { ...settings };\n let prepared = cloned;\n try {\n const result = callback(cloned);\n prepared =\n result && typeof result === 'object'\n ? { ...cloned, ...result }\n : cloned;\n } catch {\n prepared = cloned;\n }\n void PlayerModule.setPreparedImaSettings(id, prepared);\n }\n );\n };\n\n /**\n * @returns The player's current volume level.\n */\n getVolume = async (): Promise<number> => {\n return (await PlayerModule.getVolume(this.nativeId)) ?? 0;\n };\n\n /**\n * @returns The current playback time in seconds.\n *\n * For VoD streams the returned time ranges between 0 and the duration of the asset.\n *\n * For live streams it can be specified if an absolute UNIX timestamp or a value\n * relative to the playback start should be returned.\n *\n * @param mode - The time mode to specify: an absolute UNIX timestamp ('absolute') or relative time ('relative').\n */\n getCurrentTime = async (\n mode: 'relative' | 'absolute' = 'absolute'\n ): Promise<number> => {\n return (await PlayerModule.currentTime(this.nativeId, mode)) ?? 0;\n };\n\n /**\n * @returns The total duration in seconds of the current video or INFINITY if it’s a live stream.\n */\n getDuration = async (): Promise<number> => {\n return (await PlayerModule.duration(this.nativeId)) ?? 0;\n };\n\n /**\n * @returns `true` if the player is muted.\n */\n isMuted = async (): Promise<boolean> => {\n return (await PlayerModule.isMuted(this.nativeId)) ?? false;\n };\n\n /**\n * @returns `true` if the player is currently playing, i.e. has started and is not paused.\n */\n isPlaying = async (): Promise<boolean> => {\n return (await PlayerModule.isPlaying(this.nativeId)) ?? false;\n };\n\n /**\n * @returns `true` if the player has started playback but it's currently paused.\n */\n isPaused = async (): Promise<boolean> => {\n return (await PlayerModule.isPaused(this.nativeId)) ?? false;\n };\n\n /**\n * @returns `true` if the displayed video is a live stream.\n */\n isLive = async (): Promise<boolean> => {\n return (await PlayerModule.isLive(this.nativeId)) ?? false;\n };\n\n /**\n * @platform iOS\n * @returns `true` when media is played externally using AirPlay.\n */\n isAirPlayActive = async (): Promise<boolean> => {\n if (Platform.OS === 'android') {\n console.warn(\n `[Player ${this.nativeId}] Method isAirPlayActive is not available for Android. Only iOS devices.`\n );\n return false;\n }\n return (await PlayerModule.isAirPlayActive(this.nativeId)) ?? false;\n };\n\n /**\n * @platform iOS\n * @returns `true` when AirPlay is available.\n */\n isAirPlayAvailable = async (): Promise<boolean> => {\n if (Platform.OS === 'android') {\n console.warn(\n `[Player ${this.nativeId}] Method isAirPlayAvailable is not available for Android. Only iOS devices.`\n );\n return false;\n }\n return (await PlayerModule.isAirPlayAvailable(this.nativeId)) ?? false;\n };\n\n /**\n * @returns The currently selected audio track or `null`.\n */\n getAudioTrack = async (): Promise<AudioTrack | null> => {\n return PlayerModule.getAudioTrack(this.nativeId);\n };\n\n /**\n * @returns An array containing {@link AudioTrack} objects for all available audio tracks.\n */\n getAvailableAudioTracks = async (): Promise<AudioTrack[]> => {\n return PlayerModule.getAvailableAudioTracks(this.nativeId);\n };\n\n /**\n * Sets the audio track to the ID specified by trackIdentifier. A list can be retrieved by calling getAvailableAudioTracks.\n *\n * @param trackIdentifier - The {@link AudioTrack.identifier} to be set.\n */\n setAudioTrack = async (trackIdentifier: string): Promise<void> => {\n return PlayerModule.setAudioTrack(this.nativeId, trackIdentifier);\n };\n\n /**\n * @returns The currently selected {@link SubtitleTrack} or `null`.\n */\n getSubtitleTrack = async (): Promise<SubtitleTrack | null> => {\n return PlayerModule.getSubtitleTrack(this.nativeId);\n };\n\n /**\n * @returns An array containing SubtitleTrack objects for all available subtitle tracks.\n */\n getAvailableSubtitles = async (): Promise<SubtitleTrack[]> => {\n return PlayerModule.getAvailableSubtitles(this.nativeId);\n };\n\n /**\n * Sets the subtitle track to the ID specified by trackIdentifier. A list can be retrieved by calling getAvailableSubtitles.\n * Pass `undefined` to disable subtitles.\n *\n * @param trackIdentifier - The {@link SubtitleTrack.identifier} to be set.\n */\n setSubtitleTrack = async (\n trackIdentifier: string | undefined\n ): Promise<void> => {\n return PlayerModule.setSubtitleTrack(\n this.nativeId,\n trackIdentifier ?? null\n );\n };\n\n /**\n * Dynamically schedules the {@link AdItem} for playback.\n * Has no effect if there is no active playback session.\n *\n * @param adItem - Ad to be scheduled for playback.\n *\n * @platform iOS, Android\n */\n scheduleAd = (adItem: AdItem) => {\n void PlayerModule.scheduleAd(this.nativeId, adItem);\n };\n\n /**\n * Skips the current ad.\n * Has no effect if the current ad is not skippable or if no ad is being played back.\n *\n * @platform iOS, Android\n */\n skipAd = () => {\n void PlayerModule.skipAd(this.nativeId);\n };\n\n /**\n * @returns `true` while an ad is being played back or when main content playback has been paused for ad playback.\n * @platform iOS, Android\n */\n isAd = async (): Promise<boolean> => {\n return (await PlayerModule.isAd(this.nativeId)) ?? false;\n };\n\n /**\n * The current time shift of the live stream in seconds. This value is always 0 if the active {@link Source} is not a\n * live stream or no sources are loaded.\n */\n getTimeShift = async (): Promise<number> => {\n return (await PlayerModule.getTimeShift(this.nativeId)) ?? 0;\n };\n\n /**\n * The limit in seconds for time shifting. This value is either negative or 0 and it is always 0 if the active\n * {@link Source} is not a live stream or no sources are loaded.\n */\n getMaxTimeShift = async (): Promise<number> => {\n return (await PlayerModule.getMaxTimeShift(this.nativeId)) ?? 0;\n };\n\n /**\n * Sets the upper bitrate boundary for video qualities. All qualities with a bitrate\n * that is higher than this threshold will not be eligible for automatic quality selection.\n *\n * Can be set to `null` for no limitation.\n */\n setMaxSelectableBitrate = (bitrate: number | null) => {\n void PlayerModule.setMaxSelectableBitrate(this.nativeId, bitrate || -1);\n };\n\n /**\n * @returns a {@link Thumbnail} for the specified playback time for the currently active source if available.\n * Supported thumbnail formats are:\n * - `WebVtt` configured via {@link SourceConfig.thumbnailTrack}, on all supported platforms\n * - HLS `Image Media Playlist` in the multivariant playlist, Android-only\n * - DASH `Image Adaptation Set` as specified in DASH-IF IOP, Android-only\n * If a `WebVtt` thumbnail track is provided, any potential in-manifest thumbnails are ignored on Android.\n *\n * @param time - The time in seconds for which to retrieve the thumbnail.\n */\n getThumbnail = async (time: number): Promise<Thumbnail | null> => {\n return PlayerModule.getThumbnail(this.nativeId, time);\n };\n\n /**\n * Whether casting to a cast-compatible remote device is available. {@link CastAvailableEvent} signals when\n * casting becomes available.\n *\n * @platform iOS, Android\n */\n isCastAvailable = async (): Promise<boolean> => {\n return (await PlayerModule.isCastAvailable(this.nativeId)) ?? false;\n };\n\n /**\n * Whether video is currently being casted to a remote device and not played locally.\n *\n * @platform iOS, Android\n */\n isCasting = async (): Promise<boolean> => {\n return (await PlayerModule.isCasting(this.nativeId)) ?? false;\n };\n\n /**\n * Initiates casting the current video to a cast-compatible remote device. The user has to choose to which device it\n * should be sent.\n *\n * @platform iOS, Android\n */\n castVideo = () => {\n void PlayerModule.castVideo(this.nativeId);\n };\n\n /**\n * Stops casting the current video. Has no effect if {@link Player.isCasting} is `false`.\n *\n * @platform iOS, Android\n */\n castStop = () => {\n void PlayerModule.castStop(this.nativeId);\n };\n\n /**\n * Returns the currently selected video quality.\n * @returns The currently selected video quality.\n */\n getVideoQuality = async (): Promise<VideoQuality> => {\n return PlayerModule.getVideoQuality(this.nativeId);\n };\n\n /**\n * Returns an array containing all available video qualities the player can adapt between.\n * @returns An array containing all available video qualities the player can adapt between.\n */\n getAvailableVideoQualities = async (): Promise<VideoQuality[]> => {\n return PlayerModule.getAvailableVideoQualities(this.nativeId);\n };\n\n /**\n * Sets the video quality.\n * @platform Android\n *\n * @param qualityId value obtained from {@link VideoQuality}'s `id` property, which can be obtained via `Player.getAvailableVideoQualities()` to select a specific quality. To use automatic quality selection, 'auto' can be passed here.\n */\n setVideoQuality = (qualityId: string) => {\n if (Platform.OS !== 'android') {\n console.warn(\n `[Player ${this.nativeId}] Method setVideoQuality is not available for iOS and tvOS devices. Only Android devices.`\n );\n return;\n }\n void PlayerModule.setVideoQuality(this.nativeId, qualityId);\n };\n\n /**\n * Sets the playback speed of the player. Fast forward, slow motion and reverse playback are supported.\n * @remarks\n * Platform: iOS, tvOS\n *\n * - Slow motion is indicated by values between `0` and `1`.\n * - Fast forward by values greater than `1`.\n * - Slow reverse is used by values between `0` and `-1`, and fast reverse is used by values less than `-1`. iOS and tvOS only.\n * - Negative values are ignored during Casting and on Android.\n * - During reverse playback the playback will continue until the beginning of the active source is\n * reached. When reaching the beginning of the source, playback will be paused and the playback\n * speed will be reset to its default value of `1`. No {@link PlaybackFinishedEvent} will be\n * emitted in this case.\n *\n * @param playbackSpeed - The playback speed to set.\n */\n setPlaybackSpeed = (playbackSpeed: number) => {\n void PlayerModule.setPlaybackSpeed(this.nativeId, playbackSpeed);\n };\n\n /**\n * @see {@link setPlaybackSpeed} for details on which values playback speed can assume.\n * @returns The player's current playback speed.\n */\n getPlaybackSpeed = async (): Promise<number> => {\n return (await PlayerModule.getPlaybackSpeed(this.nativeId)) ?? 0;\n };\n\n /**\n * Checks the possibility to play the media at specified playback speed.\n * @param playbackSpeed - The playback speed to check.\n * @returns `true` if it's possible to play the media at the specified playback speed, otherwise `false`. On Android it always returns `undefined`.\n * @platform iOS, tvOS\n */\n canPlayAtPlaybackSpeed = async (\n playbackSpeed: number\n ): Promise<boolean | undefined> => {\n if (Platform.OS === 'android') {\n console.warn(\n `[Player ${this.nativeId}] Method canPlayAtPlaybackSpeed is not available for Android. Only iOS and tvOS devices.`\n );\n return undefined;\n }\n return (\n (await PlayerModule.canPlayAtPlaybackSpeed(\n this.nativeId,\n playbackSpeed\n )) ?? false\n );\n };\n\n private maybeInitDecoderConfig = () => {\n if (this.config?.playbackConfig?.decoderConfig == null) {\n return;\n }\n if (Platform.OS === 'ios') {\n return;\n }\n\n this.decoderConfig = new DecoderConfigBridge(\n this.config.playbackConfig.decoderConfig\n );\n this.decoderConfig.initialize();\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"player.js","sourceRoot":"","sources":["../src/player.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventSubscription } from 'expo-modules-core';\nimport { Platform } from 'react-native';\nimport PlayerModule from './modules/PlayerModule';\nimport NativeInstance from './nativeInstance';\nimport { Source, SourceConfig } from './source';\nimport { AudioTrack } from './audioTrack';\nimport { SubtitleTrack } from './subtitleTrack';\nimport { OfflineContentManager, OfflineSourceOptions } from './offline';\nimport { Thumbnail } from './thumbnail';\nimport { AnalyticsApi } from './analytics/player';\nimport { PlayerConfig } from './playerConfig';\nimport { AdBreak, AdItem, ImaSettings } from './advertising';\nimport { BufferApi } from './bufferApi';\nimport { VideoQuality } from './media';\nimport { Network } from './network';\nimport { DecoderConfigBridge } from './decoder';\n\n/**\n * Loads, controls and renders audio and video content represented through {@link Source}s. A player\n * instance can be created via the {@link usePlayer} hook and will idle until one or more {@link Source}s are\n * loaded. Once {@link Player.load} or {@link Player.loadSource} is called, the player becomes active and initiates necessary downloads to\n * start playback of the loaded source(s).\n *\n * Can be attached to {@link PlayerView} component in order to use Bitmovin's Player Web UI.\n * @see PlayerView\n */\nexport class Player extends NativeInstance<PlayerConfig> {\n /**\n * Whether the native `Player` object has been created.\n */\n isInitialized = false;\n /**\n * Whether the native `Player` object has been disposed.\n */\n isDestroyed = false;\n /**\n * Currently active source, or `null` if none is active.\n */\n source?: Source;\n /**\n * The `AnalyticsApi` for interactions regarding the `Player`'s analytics.\n *\n * `undefined` if the player was created without analytics support.\n */\n analytics?: AnalyticsApi = undefined;\n /**\n * The {@link BufferApi} for interactions regarding the buffer.\n */\n buffer: BufferApi = new BufferApi(this.nativeId);\n\n private network?: Network;\n\n private decoderConfig?: DecoderConfigBridge;\n private onShouldLoadAdItemSubscription?: EventSubscription;\n private onShouldPlayAdBreakSubscription?: EventSubscription;\n private onImaBeforeInitializationSubscription?: EventSubscription;\n /**\n * Allocates the native `Player` instance and its resources natively.\n */\n initialize = async (): Promise<void> => {\n if (!this.isInitialized) {\n this.ensureShouldLoadAdItemListener();\n this.ensureShouldPlayAdBreakListener();\n this.ensureImaBeforeInitializationListener();\n if (this.config?.networkConfig) {\n this.network = new Network(this.config.networkConfig);\n await this.network.initialize();\n }\n await this.maybeInitDecoderConfig();\n const analyticsConfig = this.config?.analyticsConfig;\n if (analyticsConfig) {\n await PlayerModule.initializeWithAnalyticsConfig(\n this.nativeId,\n analyticsConfig,\n this.config,\n this.network?.nativeId,\n this.decoderConfig?.nativeId\n );\n this.analytics = new AnalyticsApi(this.nativeId);\n } else {\n await PlayerModule.initializeWithConfig(\n this.nativeId,\n this.config,\n this.network?.nativeId,\n this.decoderConfig?.nativeId\n );\n }\n\n this.isInitialized = true;\n }\n return Promise.resolve();\n };\n\n /**\n * Destroys the native `Player` and releases all of its allocated resources.\n */\n destroy = () => {\n if (!this.isDestroyed) {\n void PlayerModule.destroy(this.nativeId);\n void this.source?.destroy();\n void this.network?.destroy();\n void this.decoderConfig?.destroy();\n this.onShouldLoadAdItemSubscription?.remove();\n this.onShouldPlayAdBreakSubscription?.remove();\n this.onImaBeforeInitializationSubscription?.remove();\n this.onShouldLoadAdItemSubscription = undefined;\n this.onShouldPlayAdBreakSubscription = undefined;\n this.onImaBeforeInitializationSubscription = undefined;\n this.isDestroyed = true;\n }\n };\n\n private ensureShouldLoadAdItemListener = () => {\n const callback = this.config?.advertisingConfig?.shouldLoadAdItem;\n if (!callback) {\n return;\n }\n if (this.onShouldLoadAdItemSubscription) {\n return;\n }\n this.onShouldLoadAdItemSubscription = PlayerModule.addListener(\n 'onShouldLoadAdItem',\n ({ nativeId, id, adItem }) => {\n if (nativeId !== this.nativeId) {\n return;\n }\n const cloned: AdItem = {\n ...adItem,\n sources: adItem.sources.map((source) => ({ ...source })),\n };\n let shouldLoad = true;\n try {\n const shouldLoadResult = callback(cloned);\n shouldLoad =\n typeof shouldLoadResult === 'boolean' ? shouldLoadResult : true;\n } catch {\n shouldLoad = true;\n }\n void PlayerModule.setShouldLoadAdItem(id, shouldLoad);\n }\n );\n };\n\n /**\n * Loads a new {@link Source} from `sourceConfig` into the player.\n */\n load = (sourceConfig: SourceConfig) => {\n this.loadSource(new Source(sourceConfig));\n };\n\n /**\n * Loads the downloaded content from {@link OfflineContentManager} into the player.\n */\n loadOfflineContent = (\n offlineContentManager: OfflineContentManager,\n options?: OfflineSourceOptions\n ) => {\n void PlayerModule.loadOfflineContent(\n this.nativeId,\n offlineContentManager.nativeId,\n options\n );\n };\n\n /**\n * Loads the given {@link Source} into the player.\n */\n loadSource = (source: Source) => {\n this.source = source;\n void source\n .initialize()\n .then(() => PlayerModule.loadSource(this.nativeId, source.nativeId));\n };\n\n /**\n * Unloads all {@link Source}s from the player.\n */\n unload = () => {\n void PlayerModule.unload(this.nativeId);\n };\n\n /**\n * Starts or resumes playback after being paused. Has no effect if the player is already playing.\n */\n play = () => {\n void PlayerModule.play(this.nativeId);\n };\n\n /**\n * Pauses the video if it is playing. Has no effect if the player is already paused.\n */\n pause = () => {\n void PlayerModule.pause(this.nativeId);\n };\n\n /**\n * Seeks to the given playback time specified by the parameter `time` in seconds. Must not be\n * greater than the total duration of the video. Has no effect when watching a live stream since\n * seeking is not possible.\n *\n * @param time - The time to seek to in seconds.\n */\n seek = (time: number) => {\n void PlayerModule.seek(this.nativeId, time);\n };\n\n /**\n * Shifts the time to the given `offset` in seconds from the live edge. The resulting offset has to be within the\n * timeShift window as specified by `maxTimeShift` (which is a negative value) and 0. When the provided `offset` is\n * positive, it will be interpreted as a UNIX timestamp in seconds and converted to fit into the timeShift window.\n * When the provided `offset` is negative, but lower than `maxTimeShift`, then it will be clamped to `maxTimeShift`.\n * Has no effect for VoD.\n *\n * Has no effect if no sources are loaded.\n *\n * @param offset - Target offset from the live edge in seconds.\n */\n timeShift = (offset: number) => {\n void PlayerModule.timeShift(this.nativeId, offset);\n };\n\n /**\n * Mutes the player if an audio track is available. Has no effect if the player is already muted.\n */\n mute = () => {\n void PlayerModule.mute(this.nativeId);\n };\n\n /**\n * Unmutes the player if it is muted. Has no effect if the player is already unmuted.\n */\n unmute = () => {\n void PlayerModule.unmute(this.nativeId);\n };\n\n /**\n * Sets the player's volume between 0 (silent) and 100 (max volume).\n *\n * @param volume - The volume level to set.\n */\n setVolume = (volume: number) => {\n void PlayerModule.setVolume(this.nativeId, volume);\n };\n\n private ensureShouldPlayAdBreakListener = () => {\n if (Platform.OS !== 'android') {\n return;\n }\n const callback = this.config?.advertisingConfig?.shouldPlayAdBreak;\n if (!callback) {\n return;\n }\n if (this.onShouldPlayAdBreakSubscription) {\n return;\n }\n this.onShouldPlayAdBreakSubscription = PlayerModule.addListener(\n 'onShouldPlayAdBreak',\n ({ nativeId, id, adBreak }) => {\n if (nativeId !== this.nativeId) {\n return;\n }\n const cloned: AdBreak = {\n ...adBreak,\n ads: adBreak.ads.map((ad) => ({\n ...ad,\n data: ad.data ? { ...ad.data } : undefined,\n })),\n };\n let shouldPlay = true;\n try {\n const shouldPlayResult = callback(cloned);\n shouldPlay =\n typeof shouldPlayResult === 'boolean' ? shouldPlayResult : true;\n } catch {\n shouldPlay = true;\n }\n void PlayerModule.setShouldPlayAdBreak(id, shouldPlay);\n }\n );\n };\n\n private ensureImaBeforeInitializationListener = () => {\n const callback = this.config?.advertisingConfig?.ima?.beforeInitialization;\n if (!callback) {\n return;\n }\n if (this.onImaBeforeInitializationSubscription) {\n return;\n }\n this.onImaBeforeInitializationSubscription = PlayerModule.addListener(\n 'onImaBeforeInitialization',\n ({ nativeId, id, settings }) => {\n if (nativeId !== this.nativeId) {\n return;\n }\n const cloned: ImaSettings = { ...settings };\n let prepared = cloned;\n try {\n const result = callback(cloned);\n prepared =\n result && typeof result === 'object'\n ? { ...cloned, ...result }\n : cloned;\n } catch {\n prepared = cloned;\n }\n void PlayerModule.setPreparedImaSettings(id, prepared);\n }\n );\n };\n\n /**\n * @returns The player's current volume level.\n */\n getVolume = async (): Promise<number> => {\n return (await PlayerModule.getVolume(this.nativeId)) ?? 0;\n };\n\n /**\n * @returns The current playback time in seconds.\n *\n * For VoD streams the returned time ranges between 0 and the duration of the asset.\n *\n * For live streams it can be specified if an absolute UNIX timestamp or a value\n * relative to the playback start should be returned.\n *\n * @param mode - The time mode to specify: an absolute UNIX timestamp ('absolute') or relative time ('relative').\n */\n getCurrentTime = async (\n mode: 'relative' | 'absolute' = 'absolute'\n ): Promise<number> => {\n return (await PlayerModule.currentTime(this.nativeId, mode)) ?? 0;\n };\n\n /**\n * @returns The total duration in seconds of the current video or INFINITY if it’s a live stream.\n */\n getDuration = async (): Promise<number> => {\n return (await PlayerModule.duration(this.nativeId)) ?? 0;\n };\n\n /**\n * @returns `true` if the player is muted.\n */\n isMuted = async (): Promise<boolean> => {\n return (await PlayerModule.isMuted(this.nativeId)) ?? false;\n };\n\n /**\n * @returns `true` if the player is currently playing, i.e. has started and is not paused.\n */\n isPlaying = async (): Promise<boolean> => {\n return (await PlayerModule.isPlaying(this.nativeId)) ?? false;\n };\n\n /**\n * @returns `true` if the player has started playback but it's currently paused.\n */\n isPaused = async (): Promise<boolean> => {\n return (await PlayerModule.isPaused(this.nativeId)) ?? false;\n };\n\n /**\n * @returns `true` if the displayed video is a live stream.\n */\n isLive = async (): Promise<boolean> => {\n return (await PlayerModule.isLive(this.nativeId)) ?? false;\n };\n\n /**\n * @platform iOS\n * @returns `true` when media is played externally using AirPlay.\n */\n isAirPlayActive = async (): Promise<boolean> => {\n if (Platform.OS === 'android') {\n console.warn(\n `[Player ${this.nativeId}] Method isAirPlayActive is not available for Android. Only iOS devices.`\n );\n return false;\n }\n return (await PlayerModule.isAirPlayActive(this.nativeId)) ?? false;\n };\n\n /**\n * @platform iOS\n * @returns `true` when AirPlay is available.\n */\n isAirPlayAvailable = async (): Promise<boolean> => {\n if (Platform.OS === 'android') {\n console.warn(\n `[Player ${this.nativeId}] Method isAirPlayAvailable is not available for Android. Only iOS devices.`\n );\n return false;\n }\n return (await PlayerModule.isAirPlayAvailable(this.nativeId)) ?? false;\n };\n\n /**\n * @returns The currently selected audio track or `null`.\n */\n getAudioTrack = async (): Promise<AudioTrack | null> => {\n return PlayerModule.getAudioTrack(this.nativeId);\n };\n\n /**\n * @returns An array containing {@link AudioTrack} objects for all available audio tracks.\n */\n getAvailableAudioTracks = async (): Promise<AudioTrack[]> => {\n return PlayerModule.getAvailableAudioTracks(this.nativeId);\n };\n\n /**\n * Sets the audio track to the ID specified by trackIdentifier. A list can be retrieved by calling getAvailableAudioTracks.\n *\n * @param trackIdentifier - The {@link AudioTrack.identifier} to be set.\n */\n setAudioTrack = async (trackIdentifier: string): Promise<void> => {\n return PlayerModule.setAudioTrack(this.nativeId, trackIdentifier);\n };\n\n /**\n * @returns The currently selected {@link SubtitleTrack} or `null`.\n */\n getSubtitleTrack = async (): Promise<SubtitleTrack | null> => {\n return PlayerModule.getSubtitleTrack(this.nativeId);\n };\n\n /**\n * @returns An array containing SubtitleTrack objects for all available subtitle tracks.\n */\n getAvailableSubtitles = async (): Promise<SubtitleTrack[]> => {\n return PlayerModule.getAvailableSubtitles(this.nativeId);\n };\n\n /**\n * Sets the subtitle track to the ID specified by trackIdentifier. A list can be retrieved by calling getAvailableSubtitles.\n * Pass `undefined` to disable subtitles.\n *\n * @param trackIdentifier - The {@link SubtitleTrack.identifier} to be set.\n */\n setSubtitleTrack = async (\n trackIdentifier: string | undefined\n ): Promise<void> => {\n return PlayerModule.setSubtitleTrack(\n this.nativeId,\n trackIdentifier ?? null\n );\n };\n\n /**\n * Dynamically schedules the {@link AdItem} for playback.\n * Has no effect if there is no active playback session.\n *\n * @param adItem - Ad to be scheduled for playback.\n *\n * @platform iOS, Android\n */\n scheduleAd = (adItem: AdItem) => {\n void PlayerModule.scheduleAd(this.nativeId, adItem);\n };\n\n /**\n * Skips the current ad.\n * Has no effect if the current ad is not skippable or if no ad is being played back.\n *\n * @platform iOS, Android\n */\n skipAd = () => {\n void PlayerModule.skipAd(this.nativeId);\n };\n\n /**\n * @returns `true` while an ad is being played back or when main content playback has been paused for ad playback.\n * @platform iOS, Android\n */\n isAd = async (): Promise<boolean> => {\n return (await PlayerModule.isAd(this.nativeId)) ?? false;\n };\n\n /**\n * The current time shift of the live stream in seconds. This value is always 0 if the active {@link Source} is not a\n * live stream or no sources are loaded.\n */\n getTimeShift = async (): Promise<number> => {\n return (await PlayerModule.getTimeShift(this.nativeId)) ?? 0;\n };\n\n /**\n * The limit in seconds for time shifting. This value is either negative or 0 and it is always 0 if the active\n * {@link Source} is not a live stream or no sources are loaded.\n */\n getMaxTimeShift = async (): Promise<number> => {\n return (await PlayerModule.getMaxTimeShift(this.nativeId)) ?? 0;\n };\n\n /**\n * Sets the upper bitrate boundary for video qualities. All qualities with a bitrate\n * that is higher than this threshold will not be eligible for automatic quality selection.\n *\n * Can be set to `null` for no limitation.\n */\n setMaxSelectableBitrate = (bitrate: number | null) => {\n void PlayerModule.setMaxSelectableBitrate(this.nativeId, bitrate || -1);\n };\n\n /**\n * @returns a {@link Thumbnail} for the specified playback time for the currently active source if available.\n * Supported thumbnail formats are:\n * - `WebVtt` configured via {@link SourceConfig.thumbnailTrack}, on all supported platforms\n * - HLS `Image Media Playlist` in the multivariant playlist, Android-only\n * - DASH `Image Adaptation Set` as specified in DASH-IF IOP, Android-only\n * If a `WebVtt` thumbnail track is provided, any potential in-manifest thumbnails are ignored on Android.\n *\n * @param time - The time in seconds for which to retrieve the thumbnail.\n */\n getThumbnail = async (time: number): Promise<Thumbnail | null> => {\n return PlayerModule.getThumbnail(this.nativeId, time);\n };\n\n /**\n * Whether casting to a cast-compatible remote device is available. {@link CastAvailableEvent} signals when\n * casting becomes available.\n *\n * @platform iOS, Android\n */\n isCastAvailable = async (): Promise<boolean> => {\n return (await PlayerModule.isCastAvailable(this.nativeId)) ?? false;\n };\n\n /**\n * Whether video is currently being casted to a remote device and not played locally.\n *\n * @platform iOS, Android\n */\n isCasting = async (): Promise<boolean> => {\n return (await PlayerModule.isCasting(this.nativeId)) ?? false;\n };\n\n /**\n * Initiates casting the current video to a cast-compatible remote device. The user has to choose to which device it\n * should be sent.\n *\n * @platform iOS, Android\n */\n castVideo = () => {\n void PlayerModule.castVideo(this.nativeId);\n };\n\n /**\n * Stops casting the current video. Has no effect if {@link Player.isCasting} is `false`.\n *\n * @platform iOS, Android\n */\n castStop = () => {\n void PlayerModule.castStop(this.nativeId);\n };\n\n /**\n * Returns the currently selected video quality.\n * @returns The currently selected video quality.\n */\n getVideoQuality = async (): Promise<VideoQuality> => {\n return PlayerModule.getVideoQuality(this.nativeId);\n };\n\n /**\n * Returns an array containing all available video qualities the player can adapt between.\n * @returns An array containing all available video qualities the player can adapt between.\n */\n getAvailableVideoQualities = async (): Promise<VideoQuality[]> => {\n return PlayerModule.getAvailableVideoQualities(this.nativeId);\n };\n\n /**\n * Sets the video quality.\n * @platform Android\n *\n * @param qualityId value obtained from {@link VideoQuality}'s `id` property, which can be obtained via `Player.getAvailableVideoQualities()` to select a specific quality. To use automatic quality selection, 'auto' can be passed here.\n */\n setVideoQuality = (qualityId: string) => {\n if (Platform.OS !== 'android') {\n console.warn(\n `[Player ${this.nativeId}] Method setVideoQuality is not available for iOS and tvOS devices. Only Android devices.`\n );\n return;\n }\n void PlayerModule.setVideoQuality(this.nativeId, qualityId);\n };\n\n /**\n * Sets the playback speed of the player. Fast forward, slow motion and reverse playback are supported.\n * @remarks\n * Platform: iOS, tvOS\n *\n * - Slow motion is indicated by values between `0` and `1`.\n * - Fast forward by values greater than `1`.\n * - Slow reverse is used by values between `0` and `-1`, and fast reverse is used by values less than `-1`. iOS and tvOS only.\n * - Negative values are ignored during Casting and on Android.\n * - During reverse playback the playback will continue until the beginning of the active source is\n * reached. When reaching the beginning of the source, playback will be paused and the playback\n * speed will be reset to its default value of `1`. No {@link PlaybackFinishedEvent} will be\n * emitted in this case.\n *\n * @param playbackSpeed - The playback speed to set.\n */\n setPlaybackSpeed = (playbackSpeed: number) => {\n void PlayerModule.setPlaybackSpeed(this.nativeId, playbackSpeed);\n };\n\n /**\n * @see {@link setPlaybackSpeed} for details on which values playback speed can assume.\n * @returns The player's current playback speed.\n */\n getPlaybackSpeed = async (): Promise<number> => {\n return (await PlayerModule.getPlaybackSpeed(this.nativeId)) ?? 0;\n };\n\n /**\n * Checks the possibility to play the media at specified playback speed.\n * @param playbackSpeed - The playback speed to check.\n * @returns `true` if it's possible to play the media at the specified playback speed, otherwise `false`. On Android it always returns `undefined`.\n * @platform iOS, tvOS\n */\n canPlayAtPlaybackSpeed = async (\n playbackSpeed: number\n ): Promise<boolean | undefined> => {\n if (Platform.OS === 'android') {\n console.warn(\n `[Player ${this.nativeId}] Method canPlayAtPlaybackSpeed is not available for Android. Only iOS and tvOS devices.`\n );\n return undefined;\n }\n return (\n (await PlayerModule.canPlayAtPlaybackSpeed(\n this.nativeId,\n playbackSpeed\n )) ?? false\n );\n };\n\n private maybeInitDecoderConfig = () => {\n if (this.config?.playbackConfig?.decoderConfig == null) {\n return;\n }\n if (Platform.OS === 'ios') {\n return;\n }\n\n this.decoderConfig = new DecoderConfigBridge(\n this.config.playbackConfig.decoderConfig\n );\n this.decoderConfig.initialize();\n };\n}\n"]}
|
|
@@ -28,7 +28,7 @@ Pod::Spec.new do |s|
|
|
|
28
28
|
s.static_framework = true
|
|
29
29
|
|
|
30
30
|
s.dependency 'ExpoModulesCore'
|
|
31
|
-
s.dependency "BitmovinPlayer", "3.
|
|
31
|
+
s.dependency "BitmovinPlayer", "3.114.1"
|
|
32
32
|
s.ios.dependency "GoogleAds-IMA-iOS-SDK", "3.26.1"
|
|
33
33
|
s.tvos.dependency "GoogleAds-IMA-tvOS-SDK", "4.15.1"
|
|
34
34
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bitmovin-player-react-native",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.1",
|
|
4
4
|
"description": "Official React Native bindings for Bitmovin's mobile Player SDKs.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"eslint-config-expo": "~10.0.0",
|
|
67
67
|
"eslint-config-prettier": "^9.1.0",
|
|
68
68
|
"eslint-plugin-prettier": "^5.5.1",
|
|
69
|
-
"expo": "~54.0.
|
|
69
|
+
"expo": "~54.0.35",
|
|
70
70
|
"expo-module-scripts": "^4.1.9",
|
|
71
71
|
"lint-staged": "13.0.3",
|
|
72
72
|
"prettier": "^3.6.2",
|
|
@@ -46,9 +46,10 @@ const withBitmovinIosConfig = (config, options) => {
|
|
|
46
46
|
delete config.modResults['BitmovinPlayerOfflineSupportEnabled'];
|
|
47
47
|
}
|
|
48
48
|
if (googleCastConfig?.ios != null) {
|
|
49
|
-
const
|
|
49
|
+
const defaultLocalNetworkUsageDescription = '${PRODUCT_NAME} uses the local network to discover Cast-enabled devices on your WiFi network.';
|
|
50
|
+
const localNetworkUsageDescription = (typeof googleCastConfig?.ios === 'object'
|
|
50
51
|
? googleCastConfig?.ios?.localNetworkUsageDescription
|
|
51
|
-
:
|
|
52
|
+
: undefined) ?? defaultLocalNetworkUsageDescription;
|
|
52
53
|
config.modResults['BitmovinPlayerGoogleCastApplicationId'] =
|
|
53
54
|
googleCastAppId;
|
|
54
55
|
if (googleCastMessageNamespace) {
|