UNPKG

@jwplayer/jwplayer-react-native

Version:

React-native Android/iOS plugin for JWPlayer SDK (https://www.jwplayer.com/)

616 lines (580 loc) 17.3 kB
declare module "@jwplayer/jwplayer-react-native" { import React from "react"; import { ViewStyle } from "react-native"; interface JwConfig { pid?: string; mute?: boolean; forceLegacyConfig?: boolean; /** * If true, `onBeforeNextPlaylistItem` MUST be impelemented with `player.resolveNextPlaylistItem()` called in the callback or content will hang */ playlistItemCallbackEnabled?: boolean; useTextureView?: boolean; autostart?: boolean; nextupoffset?: string | number; // String with % or number repeat?: boolean; allowCrossProtocolRedirectsSupport?: boolean; // maybe android only? displaytitle?: boolean; displaydescription?: boolean; stretching?: JwStretching; thumbnailPreview?: JwThumbnailPreview; preload?: boolean; playlist?: JwPlaylistItem[] | string; sources?: JwSource[]; // Can be used in place of `playlist` to build a playlist, but not recommended (cannot be used for DRM) file?: string; // Can be used in place of `playlist` to build a playlist, but not recommended (cannot be used for DRM) playlistIndex?: number; related?: JwRelatedConfig; uiConfig?: JwUiConfig; logoView?: JwLogoView; advertising?: JwAdvertisingConfig; playbackRates?: number[]; playbackRateControls?: boolean; // Non-Json Parsing props license: string; playerInModal?: boolean; fullScreenOnLandscape?: boolean; landscapeOnFullScreen?: boolean; portraitOnExitFullScreen?: boolean; exitFullScreenOnPortrait?: boolean; } type JwThumbnailPreview = 101 | 102 | 103; type JwStretching = "uniform" | "fill" | "exactfit" | "none"; type JwAdvertisingConfig = VmapAdvertisingConfig | VastAdvertisingConfig | ImaVmapAdvertisingConfig | ImaAdvertisingConfig | ImaDaiAdvertisingConfig; interface JwAdRules { startOn?: number; frequency?: number; timeBetweenAds?: number; startOnSeek?: JwStartOnSeek; } type JwStartOnSeek = "pre" | "none"; interface VmapAdvertisingConfig { cuetext?: string; adpodmessage?: string; vpaidcontrols?: boolean; requestTimeout?: number; creativeTimeout?: number; conditionaladoptout?: boolean; schedule: string; // Must bestring for VMAP rules?: JwAdRules; allowedOmidVendors?: string[]; omidSupport?: JwOmidSupport; admessage?: string; skipmessage?: string; skiptext?: string; skipoffset?: number; } interface VastAdvertisingConfig { cuetext?: string; adpodmessage?: string; vpaidcontrols?: boolean; requestTimeout?: number; creativeTimeout?: number; conditionaladoptout?: boolean; schedule?: JwAdBreak[]; // Array of breaks or object of breaks rules: JwAdRules; allowedOmidVendors?: string[]; omidSupport?: JwOmidSupport; admessage?: string; skipmessage?: string; skiptext?: string; skipoffset?: number; } type JwOmidSupport = "auto" | "enabled" | "disabled"; interface ImaVmapAdvertisingConfig { imaSdkSettings?: JwImaSdkSettings; tag?: string; } interface ImaAdvertisingConfig { imaSdkSettings?: JwImaSdkSettings; schedule?: JwAdBreak[] | JwAdBreak; // Array of breaks or object of breaks } interface ImaDaiAdvertisingConfig { imaDaiSettings?: JwImaDaiSettings; imaSdkSettings?: JwImaSdkSettings; } interface JwImaSdkSettings { sessionId?: string; ppid?: string; autoPlayAdBreaks?: boolean; language?: string; maxRedirects?: number; //int playerType?: string; playerVersion?: string; isDebugMode?: boolean; doesRestrictToCustomPlayer?: boolean; } interface JwLogoView { imageFile: string; fades: boolean; // margin required for fade on Android margin?: number; position?: JwLogoPosition; webLink: string; } type JwLogoPosition = "topLeft" | "topRight" | "bottomLeft" | "bottomRight"; interface JwUiConfig { // all default to false. When using this, it's specify all or they are assumed false hasOverlay?: boolean; hasControlbar?: boolean; hasCenterControls?: boolean; hasNextUp?: boolean; hasSideSeek?: boolean; hasLogoView?: boolean; hasError?: boolean; hasPlaylist?: boolean; hasQualitySubMenu?: boolean; hasCaptionsSubMenu?: boolean; hasPlaybackRatesSubMenu?: boolean; hasAudiotracksSubMenu?: boolean; hasMenu?: boolean; hasPlayerControlsContainer?: boolean; hasCastingMenu?: boolean; hasChapters?: boolean; hasAds?: boolean; } interface JwRelatedConfig { file?: string; oncomplete?: JwRelatedOnComplete; onclick?: JwOnRelatedClick; // autoplaymessage: string; // deprecated autoplaytimer: number; } interface JwPlaylistItem { title?: string; description?: string; file?: string; image?: string; mediaid?: string; feedid?: string; recommendations?: string; starttime?: number; // double -- default 0.0 duration: number; // int -- default 0 tracks?: JwTrack[]; sources?: JwSource[]; externalMetadata?: JwExternalMetadata[]; adschedule?: JwAdBreak[]; // array of schedules schedule?: { [key: string]: JwAdBreak }; imaDaiSettings?: JwImaDaiSettings; httpheaders?: { [key: string]: string }; } interface JwImaDaiSettings { videoID?: string; cmsID?: string; assetKey?: string; apiKey?: string; streamType?: string; adTagParameters?: { [key: string]: string }; } interface JwAdBreak { ad?: string | string[]; offset?: string; skipoffset?: number; type?: JwAdType; custParams?: { [key: string]: string }; } type JwAdType = "LINEAR" | "NONLINEAR"; interface JwExternalMetadata { startTime?: number; // double endTime?: number; // double id: number; // int } interface JwSource { drm?: JwDrm; file?: string; label?: string; default?: string; type?: string; httpheaders?: { [key: string]: string }; } interface JwDrm { widevine?: JwWidevine; fairplay?: JwFairplay; } interface JwFairplay { processSpcUrl?: string; certificateUrl?: string; } interface JwWidevine { url?: string; keySetId?: string; } interface JwTrack { id?: string; file?: string; kind: TrackKind; label?: string; default?: boolean; } type JwRelatedOnComplete = "hide" | "show" | "none" | "autoplay"; type JwOnRelatedClick = "play" | "link"; interface AudioTrack { autoSelect: boolean; defaultTrack: boolean; groupId: string; language: string; name: string; } export interface QualityLevel { playListPosition: number; bitRate: number; label: string; height: number; width: number; index: number; } interface CastingDevice { name?: string; identifier?: string; } interface Source { file: string; label: string; default?: boolean; } type TrackKind = "captions" | "chapters" | "thumbnails"; interface Track { file: string; label: string; kind: TrackKind; default?: boolean; } interface JWAdSettings { allowsBackgroundPlayback?: boolean; // Add other ad settings properties as needed } interface IMASettings { locale?: string; ppid?: string; maxRedirects?: number; sessionID?: string; debugMode?: boolean; } interface AdSchedule { tag: string; offset: string; } // interface CompanionAdSlot { // viewId: string; // Reference to a UIView in the application // size?: { width: number; height: number }; // } interface GoogleDAIStream { videoID?: string; cmsID?: string; assetKey?: string; apiKey?: string; adTagParameters?: { [key: string]: string }; } interface AdRule { startOn: number; frequency: number; timeBetweenAds: number; startOnSeek: 'none' | 'pre'; // Mapped from JWAdShownOnSeek } // interface FriendlyObstruction { // viewId: string; // purpose: 'mediaControls' | 'closeAd' | 'notVisible' | 'other'; // Mapped from JWFriendlyObstructionPurpose // reason?: string; // } type ClientTypes = "vast" | "ima" | "ima_dai"; interface VASTAdvertising { adSchedule?: AdSchedule[]; adVmap?: string; tag?: string; // Vast xml url openBrowserOnAdClick?: boolean; adClient: "vast"; adRules?: AdRule; adSettings?: JWAdSettings; } interface IMAAdvertising { adSchedule?: AdSchedule[]; adVmap?: string; tag?: string; // Vast xml url adClient: "ima"; adRules?: AdRule; imaSettings?: IMASettings; // companionAdSlots?: CompanionAdSlot[]; // friendlyObstructions?: FriendlyObstruction[]; } interface IMA_DAIAdvertising { adClient: "ima_dai"; imaSettings?: IMASettings; // friendlyObstructions?: FriendlyObstruction[]; googleDAIStream?: GoogleDAIStream; } type Advertising = VASTAdvertising | IMAAdvertising | IMA_DAIAdvertising; interface PlaylistItem { file: string; sources?: Source[]; image?: string; title?: string; description?: string; mediaId?: string; adSchedule?: AdSchedule[]; adVmap?: string; tracks?: Track[]; recommendations?: string; startTime?: number; autostart?: boolean; } type RelatedOnClicks = "play" | "link"; type RelatedOnCompletes = "show" | "hide" | "autoplay"; interface Related { onClick?: RelatedOnClicks; onComplete?: RelatedOnCompletes; heading?: string; url?: string; autoplayMessage?: string; autoplayTimer?: number; } interface Font { name?: string; size?: number; } type EdgeStyles = "none" | "dropshadow" | "raised" | "depressed" | "uniform"; // All `Styling` is only intended to be used with iOS. Android requires overloading // of the JWP IDs seen here: https://docs.jwplayer.com/players/docs/android-styling-guide interface Styling { colors?: { buttons?: string; backgroundColor?: string; fontColor?: string; timeslider?: { progress?: string; rail?: string; thumb?: string }; }; font?: Font; displayTitle?: boolean; displayDescription?: boolean; captionsStyle?: { font?: Font; fontColor?: string; backgroundColor?: string; highlightColor?: string; edgeStyle?: EdgeStyles; }; menuStyle: { font?: Font; fontColor?: string; backgroundColor?: string; }; } type Preloads = "auto" | "none"; type InterfaceBehaviors = "normal" | "hidden" | "onscreen"; type UIGroups = | "overlay" | "control_bar" | "center_controls" | "next_up" | "error" | "playlist" | "controls_container" | "settings_menu" | "quality_submenu" | "captions_submenu" | "playback_submenu" | "audiotracks_submenu" | "casting_menu"; type AudioSessionCategory = | "Ambient" | "SoloAmbient" | "Playback" | "Record" | "PlayAndRecord" | "MultiRoute"; type AudioSessionCategoryOptions = | "MixWithOthers" | "DuckOthers" | "AllowBluetooth" | "DefaultToSpeaker" | "InterruptSpokenAudioAndMix" | "AllowBluetoothA2DP" | "AllowAirPlay" | "OverrideMutedMicrophone"; type AudioSessionMode = | "Default" | "VoiceChat" | "VideoChat" | "GameChat" | "VideoRecording" | "Measurement" | "MoviePlayback" | "SpokenAudio" | "VoicePrompt"; type JWControlType = | "forward" | "rewind" | "pip" | "airplay" | "chromecast" | "next" | "previous" | "settings" | "languages" | "fullscreen"; interface Config { license: string; advertising?: Advertising; autostart?: boolean; controls?: boolean; repeat?: boolean; nextUpStyle?: { offsetSeconds: number; offsetPercentage: number }; styling?: Styling; backgroundAudioEnabled?: boolean; category?: AudioSessionCategory; categoryOptions?: Array<AudioSessionCategoryOptions>; mode?: AudioSessionMode; fullScreenOnLandscape?: boolean; landscapeOnFullScreen?: boolean; portraitOnExitFullScreen?: boolean; exitFullScreenOnPortrait?: boolean; playerInModal?: boolean; playlist?: PlaylistItem[]; stretching?: string; related?: Related; preload?: Preloads; interfaceBehavior?: InterfaceBehaviors; interfaceFadeDelay?: number; hideUIGroups?: UIGroups[]; processSpcUrl?: string; fairplayCertUrl?: string; contentUUID?: string; viewOnly?: boolean; enableLockScreenControls: boolean; pipEnabled: boolean; } interface BaseEvent<T> { nativeEvent: T; } interface SeekEventProps { position: number; offset: number; } interface SeekedEventProps { position: number; } interface RateChangedEventProps { rate: number; at: number; } interface PlayerSetupErrorProps { errorMessage?: string; errorCode?: number; } interface PlayerErrorProps { error?: string; errorCode?: number; description?: string; // Android Only } interface TimeEventProps { position: number; duration: number; } interface ControlBarVisibleEventProps { visible: boolean; } interface PlaylistEventProps { playlist: PlaylistItem[] } interface LoadEventProps { loadTime: number; } interface PlaylistItemEventProps { playlistItem: PlaylistItem } interface PlayerErrorEventProps { code: string; error: string; } interface PlayerWarningEventProps { code?: number; warning?: string; adErrorCode?: number; // Android only } interface AdEventProps { client: number; reason?: string; type: number; } // Overloaded type to be used in multiple error events interface CaptionsChangedEventProps { index?: number; } interface CaptionsListEventProps { index: number; file?: string; label: string; default: string; } type NativeError = (event: BaseEvent<PlayerErrorEventProps> | BaseEvent<PlayerSetupErrorProps> | BaseEvent<PlayerErrorProps>) => void; type NativeWarning = (event: BaseEvent<PlayerWarningEventProps>) => void; interface PropsType { config: Config | JwConfig; style?: ViewStyle; controls?: boolean; forceLegacyConfig?: boolean; onPlayerReady?: () => void; onPlaylist?: (event: BaseEvent<PlaylistEventProps>) => void; onLoaded? : (event: BaseEvent<LoadEventProps>) => void; onBeforePlay?: () => void; onBeforeComplete?: () => void; onComplete?: () => void; onPlay?: () => void; onPause?: () => void; onSeek?: (event: BaseEvent<SeekEventProps>) => void; onSeeked?: (event?: BaseEvent<SeekedEventProps>) => void; onRateChanged?: (event?: BaseEvent<RateChangedEventProps>) => void; onSetupPlayerError?: NativeError; onPlayerError?: NativeError; onPlayerWarning?: NativeWarning; onPlayerAdError?: NativeError; onPlayerAdWarning?: NativeWarning; onAdEvent?: (event: BaseEvent<AdEventProps>) => void; onAdTime?: (event: BaseEvent<TimeEventProps>) => void; onBuffer?: () => void; onTime?: (event: BaseEvent<TimeEventProps>) => void; onFullScreenRequested?: () => void; onFullScreen?: () => void; onFullScreenExitRequested?: () => void; onFullScreenExit?: () => void; onControlBarVisible?: (event: BaseEvent<ControlBarVisibleEventProps>) => void; onPlaylistComplete?: () => void; onPlaylistItem?: (event: BaseEvent<PlaylistItemEventProps>) => void; onCaptionsChanged?: (event: BaseEvent<CaptionsChangedEventProps>) => void; onCaptionsList?: (event: BaseEvent<CaptionsListEventProps>) => void; onAudioTracks?: () => void; shouldComponentUpdate?: (nextProps: any, nextState: any) => boolean; onBeforeNextPlaylistItem?: (event: BaseEvent<PlaylistItemEventProps>) => void; } export default class JWPlayer extends React.Component<PropsType> { pause(): void; play(): void; stop(): void; toggleSpeed(): void; setSpeed(speed: number): void; setCurrentQuality(index: number): void; currentQuality(): number; getQualityLevels(): Promise<QualityLevel[] | null>; setVolume(volume: number): void; setPlaylistIndex(index: number): void; setControls(show: boolean): void; setLockScreenControls(show: boolean): void; seekTo(time: number): void; loadPlaylist(playlistItems: PlaylistItem[] | JwPlaylistItem[] | string): void; setFullscreen(fullScreen: boolean): void; position(): Promise<number>; setUpCastController(): void; presentCastDialog(): void; connectedDevice(): Promise<CastingDevice | null>; availableDevices(): Promise<CastingDevice[] | null>; castState(): Promise<number | null>; playerState(): Promise<number | null>; getAudioTracks(): Promise<AudioTrack[] | null>; getCurrentAudioTrack(): Promise<number | null>; setCurrentAudioTrack(index: number): void; setCurrentCaptions(index: number): void; getCurrentCaptions(): Promise<number | null>; setVisibility(visibility: boolean, controls: JWControlType[]): void; /** * Only called inside `onBeforeNextPlaylistItem` callback, and once per callback * @param playlistItem `PlaylistItem` or `JwPlaylistItem` */ resolveNextPlaylistItem(playlistItem: PlaylistItem | JwPlaylistItem): void; } }