react-native-theoplayer
Version:
A THEOplayer video component for react-native.
326 lines (325 loc) • 18.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.WebEventForwarder = void 0;
var _reactNativeTheoplayer = require("react-native-theoplayer");
var _BaseEvent = require("./event/BaseEvent");
var _PlayerEvents = require("./event/PlayerEvents");
var _TrackUtils = require("./web/TrackUtils");
class WebEventForwarder {
constructor(player, facade) {
this._player = player;
this._facade = facade;
this.addEventListeners();
}
addEventListeners() {
this._player.addEventListener('sourcechange', this.onSourceChange);
this._player.addEventListener('loadstart', this.onLoadStart);
this._player.addEventListener('loadeddata', this.onLoadedData);
this._player.addEventListener('loadedmetadata', this.onLoadedMetadata);
this._player.addEventListener('error', this.onError);
this._player.addEventListener('progress', this.onProgress);
this._player.addEventListener('play', this.onPlay);
this._player.addEventListener('canplay', this.onCanPlay);
this._player.addEventListener('playing', this.onPlaying);
this._player.addEventListener('pause', this.onPause);
this._player.addEventListener('seeking', this.onSeeking);
this._player.addEventListener('seeked', this.onSeeked);
this._player.addEventListener('ended', this.onEnded);
this._player.addEventListener('waiting', this.onWaiting);
this._player.addEventListener('readystatechange', this.onReadyStateChanged);
this._player.addEventListener('timeupdate', this.onTimeUpdate);
this._player.addEventListener('durationchange', this.onDurationChange);
this._player.addEventListener('ratechange', this.onPlaybackRateChange);
this._player.addEventListener('segmentnotfound', this.onSegmentNotFound);
this._player.addEventListener('volumechange', this.onVolumeChangeEvent);
this._player.addEventListener('dimensionchange', this.onDimensionChange);
this._player.addEventListener('resize', this.onVideoResize);
this._player.textTracks.addEventListener('addtrack', this.onAddTextTrack);
this._player.textTracks.addEventListener('removetrack', this.onRemoveTextTrack);
this._player.textTracks.addEventListener('change', this.onChangeTextTrack);
this._player.audioTracks.addEventListener('addtrack', this.onAddAudioTrack);
this._player.audioTracks.addEventListener('removetrack', this.onRemoveAudioTrack);
this._player.audioTracks.addEventListener('change', this.onChangeAudioTrack);
this._player.videoTracks.addEventListener('addtrack', this.onAddVideoTrack);
this._player.videoTracks.addEventListener('removetrack', this.onRemoveVideoTrack);
this._player.videoTracks.addEventListener('change', this.onChangeVideoTrack);
this._player.cast?.chromecast?.addEventListener('statechange', this.onChromecastStateChange);
this._player.cast?.chromecast?.addEventListener('error', this.onChromecastError);
this._player.cast?.airplay?.addEventListener('statechange', this.onAirplayStateChange);
this._player.ads?.addEventListener(FORWARDED_AD_EVENTS, this.onAdEvent);
this._player.ads?.addEventListener(FORWARDED_ADBREAK_EVENTS, this.onAdBreakEvent);
this._player.theoads?.addEventListener(FORWARDED_THEOADS_EVENTS, this.onTheoAdsEvent);
this._player.theoLive?.addEventListener(FORWARDED_THEOLIVE_EVENTS, this.onTheoLiveEvent);
}
unload() {
this.removeEventListeners();
}
removeEventListeners() {
this._player.removeEventListener('sourcechange', this.onSourceChange);
this._player.removeEventListener('loadstart', this.onLoadStart);
this._player.removeEventListener('loadeddata', this.onLoadedData);
this._player.removeEventListener('loadedmetadata', this.onLoadedMetadata);
this._player.removeEventListener('error', this.onError);
this._player.removeEventListener('progress', this.onProgress);
this._player.removeEventListener('canplay', this.onCanPlay);
this._player.removeEventListener('play', this.onPlay);
this._player.removeEventListener('playing', this.onPlaying);
this._player.removeEventListener('pause', this.onPause);
this._player.removeEventListener('seeking', this.onSeeking);
this._player.removeEventListener('seeked', this.onSeeked);
this._player.removeEventListener('ended', this.onEnded);
this._player.removeEventListener('waiting', this.onWaiting);
this._player.removeEventListener('readystatechange', this.onReadyStateChanged);
this._player.removeEventListener('timeupdate', this.onTimeUpdate);
this._player.removeEventListener('durationchange', this.onDurationChange);
this._player.removeEventListener('ratechange', this.onPlaybackRateChange);
this._player.removeEventListener('segmentnotfound', this.onSegmentNotFound);
this._player.removeEventListener('volumechange', this.onVolumeChangeEvent);
this._player.removeEventListener('dimensionchange', this.onDimensionChange);
this._player.removeEventListener('resize', this.onVideoResize);
this._player.textTracks.removeEventListener('addtrack', this.onAddTextTrack);
this._player.textTracks.removeEventListener('removetrack', this.onRemoveTextTrack);
this._player.textTracks.removeEventListener('change', this.onChangeTextTrack);
this._player.audioTracks.removeEventListener('addtrack', this.onAddAudioTrack);
this._player.audioTracks.removeEventListener('removetrack', this.onRemoveAudioTrack);
this._player.audioTracks.removeEventListener('change', this.onChangeAudioTrack);
this._player.videoTracks.removeEventListener('addtrack', this.onAddVideoTrack);
this._player.videoTracks.removeEventListener('removetrack', this.onRemoveVideoTrack);
this._player.videoTracks.removeEventListener('change', this.onChangeVideoTrack);
this._player.cast?.chromecast?.removeEventListener('statechange', this.onChromecastStateChange);
this._player.cast?.chromecast?.removeEventListener('error', this.onChromecastError);
this._player.cast?.airplay?.removeEventListener('statechange', this.onAirplayStateChange);
this._player.ads?.removeEventListener(FORWARDED_AD_EVENTS, this.onAdEvent);
this._player.ads?.removeEventListener(FORWARDED_ADBREAK_EVENTS, this.onAdBreakEvent);
this._player.theoads?.removeEventListener(FORWARDED_THEOADS_EVENTS, this.onTheoAdsEvent);
this._player.theoLive?.removeEventListener(FORWARDED_THEOLIVE_EVENTS, this.onTheoLiveEvent);
}
onSourceChange = () => {
this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.SOURCE_CHANGE));
};
onLoadStart = () => {
this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.LOAD_START));
};
onLoadedData = () => {
this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.LOADED_DATA));
};
onLoadedMetadata = () => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultLoadedMetadataEvent(this._player.textTracks.map(textTrack => (0, _TrackUtils.fromNativeTextTrack)(textTrack)), this._player.audioTracks.map(audioTrack => (0, _TrackUtils.fromNativeMediaTrack)(audioTrack)), this._player.videoTracks.map(videoTrack => (0, _TrackUtils.fromNativeMediaTrack)(videoTrack)), 1e3 * this._player.duration, this._player.textTracks.find(track => track.mode === 'showing')?.uid, this._player.videoTracks.find(track => track.enabled)?.uid, this._player.audioTracks.find(track => track.enabled)?.uid));
};
onError = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultErrorEvent({
errorCode: event.errorObject.code.toString(),
errorMessage: event.errorObject.message
}));
};
onProgress = () => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultProgressEvent(fromTimeRanges(this._player.seekable), fromTimeRanges(this._player.buffered)));
};
onCanPlay = () => {
this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.CANPLAY));
};
onPlay = () => {
this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.PLAY));
};
onPlaying = () => {
this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.PLAYING));
};
onPause = () => {
this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.PAUSE));
};
onSeeking = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultSeekingEvent(event.currentTime * 1e3));
};
onSeeked = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultSeekedEvent(event.currentTime * 1e3));
};
onEnded = () => {
this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.ENDED));
};
onWaiting = () => {
this._facade.dispatchEvent(new _BaseEvent.BaseEvent(_reactNativeTheoplayer.PlayerEventType.WAITING));
};
onReadyStateChanged = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultReadyStateChangeEvent(event.readyState));
};
onTimeUpdate = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultTimeupdateEvent(event.currentTime * 1e3, event.currentProgramDateTime?.getTime()));
};
onDurationChange = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultDurationChangeEvent(event.duration * 1e3));
};
onPlaybackRateChange = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultRateChangeEvent(event.playbackRate));
};
onSegmentNotFound = () => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultSegmentNotFoundEvent(0, 'Segment not found', -1));
};
onVolumeChangeEvent = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultVolumeChangeEvent(event.volume, this._player.muted));
};
onDimensionChange = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultResizeEvent(event.width, event.height));
this._facade.dispatchEvent(new _PlayerEvents.DefaultDimensionChangeEvent(event.width, event.height));
};
onVideoResize = _event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultVideoResizeEvent(this._player.videoWidth, this._player.videoHeight));
};
onAddTextTrack = event => {
const track = event.track;
if (track.kind === _reactNativeTheoplayer.TextTrackKind.metadata) {
track.mode = _reactNativeTheoplayer.TextTrackMode.hidden;
}
track.addEventListener('addcue', this.onAddTextTrackCue(track));
track.addEventListener('removecue', this.onRemoveTextTrackCue(track));
track.addEventListener('entercue', this.onEnterTextTrackCue(track));
track.addEventListener('exitcue', this.onExitTextTrackCue(track));
this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackListEvent(_reactNativeTheoplayer.TrackListEventType.ADD_TRACK, (0, _TrackUtils.fromNativeTextTrack)(track)));
};
onRemoveTextTrack = event => {
const track = event.track;
track.removeEventListener('addcue', this.onAddTextTrackCue(track));
track.removeEventListener('removecue', this.onRemoveTextTrackCue(track));
track.removeEventListener('entercue', this.onEnterTextTrackCue(track));
track.removeEventListener('exitcue', this.onExitTextTrackCue(track));
this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackListEvent(_reactNativeTheoplayer.TrackListEventType.REMOVE_TRACK, (0, _TrackUtils.fromNativeTextTrack)(track)));
};
onChangeTextTrack = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackListEvent(_reactNativeTheoplayer.TrackListEventType.CHANGE_TRACK, (0, _TrackUtils.fromNativeTextTrack)(event.track)));
};
onAddAudioTrack = event => {
this.onAddMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.AUDIO);
};
onAddVideoTrack = event => {
this.onAddMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.VIDEO);
};
onAddMediaTrack = (event, trackType) => {
const track = event.track;
track.addEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track));
this._facade.dispatchEvent(new _PlayerEvents.DefaultMediaTrackListEvent(_reactNativeTheoplayer.TrackListEventType.ADD_TRACK, trackType, track));
};
onRemoveAudioTrack = event => {
this.onRemoveMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.AUDIO);
};
onRemoveVideoTrack = event => {
this.onRemoveMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.VIDEO);
};
onRemoveMediaTrack = (event, trackType) => {
const track = event.track;
track.removeEventListener('activequalitychanged', this.onActiveQualityChanged(trackType, track));
this._facade.dispatchEvent(new _PlayerEvents.DefaultMediaTrackListEvent(_reactNativeTheoplayer.TrackListEventType.REMOVE_TRACK, trackType, track));
};
onChangeAudioTrack = event => {
this.onChangeMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.AUDIO);
};
onChangeVideoTrack = event => {
this.onChangeMediaTrack(event, _reactNativeTheoplayer.MediaTrackType.VIDEO);
};
onChangeMediaTrack = (event, trackType) => {
const track = event.track;
this._facade.dispatchEvent(new _PlayerEvents.DefaultMediaTrackListEvent(_reactNativeTheoplayer.TrackListEventType.CHANGE_TRACK, trackType, track));
};
onChromecastStateChange = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultChromecastChangeEvent(event.state));
};
onChromecastError = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultChromecastErrorEvent(event.error));
};
onAirplayStateChange = event => {
this._facade.dispatchEvent(new _PlayerEvents.DefaultAirplayStateChangeEvent(event.state));
};
onAdEvent = event => {
const castedEvent = event;
this._facade.dispatchEvent(new _PlayerEvents.DefaultAdEvent(event.type, castedEvent.ad));
};
onAdBreakEvent = event => {
const castedEvent = event;
this._facade.dispatchEvent(new _PlayerEvents.DefaultAdEvent(event.type, castedEvent.adBreak));
};
onTheoAdsEvent = event => {
if (event.type === _reactNativeTheoplayer.TheoAdsEventType.INTERSTITIAL_ERROR) {
const {
message
} = event;
this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoAdsErrorEvent(event.type, event.interstitial, message));
} else {
this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoAdsEvent(event.type, event.interstitial));
}
};
onTheoLiveEvent = event => {
if (event.type === _reactNativeTheoplayer.TheoLiveEventType.DISTRIBUTION_LOAD_START || event.type === _reactNativeTheoplayer.TheoLiveEventType.DISTRIBUTION_OFFLINE) {
const {
distributionId
} = event;
this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoLiveDistributionEvent(event.type, distributionId));
} else if (event.type === _reactNativeTheoplayer.TheoLiveEventType.ENDPOINT_LOADED) {
const {
endpoint
} = event;
this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoLiveEndpointLoadedEvent(event.type, endpoint));
} else if (event.type === _reactNativeTheoplayer.TheoLiveEventType.INTENT_TO_FALLBACK) {
const {
reason
} = event;
this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoLiveIntentToFallbackEvent(event.type, {
errorCode: reason?.code?.toString() ?? '',
errorMessage: reason?.message ?? ''
}));
} else {
this._facade.dispatchEvent(new _PlayerEvents.DefaultTheoLiveEvent(event.type));
}
};
onAddTextTrackCue = track => event => {
const {
cue
} = event;
if (cue) {
this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackEvent(_reactNativeTheoplayer.TextTrackEventType.ADD_CUE, track.uid, (0, _TrackUtils.fromNativeCue)(cue)));
}
};
onRemoveTextTrackCue = track => event => {
const {
cue
} = event;
if (cue) {
this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackEvent(_reactNativeTheoplayer.TextTrackEventType.REMOVE_CUE, track.uid, (0, _TrackUtils.fromNativeCue)(cue)));
}
};
onEnterTextTrackCue = track => event => {
const {
cue
} = event;
if (cue) {
this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackEvent(_reactNativeTheoplayer.TextTrackEventType.ENTER_CUE, track.uid, (0, _TrackUtils.fromNativeCue)(cue)));
}
};
onExitTextTrackCue = track => event => {
const {
cue
} = event;
if (cue) {
this._facade.dispatchEvent(new _PlayerEvents.DefaultTextTrackEvent(_reactNativeTheoplayer.TextTrackEventType.EXIT_CUE, track.uid, (0, _TrackUtils.fromNativeCue)(cue)));
}
};
onActiveQualityChanged = (trackType, track) => () => {
const quality = track.activeQuality;
this._facade.dispatchEvent(new _PlayerEvents.DefaultMediaTrackEvent(_reactNativeTheoplayer.MediaTrackEventType.ACTIVE_QUALITY_CHANGED, trackType, track.uid, quality ? [quality] : undefined));
};
}
exports.WebEventForwarder = WebEventForwarder;
const FORWARDED_AD_EVENTS = [_reactNativeTheoplayer.AdEventType.AD_LOADED, _reactNativeTheoplayer.AdEventType.ADD_AD, _reactNativeTheoplayer.AdEventType.AD_BEGIN, _reactNativeTheoplayer.AdEventType.AD_END, _reactNativeTheoplayer.AdEventType.UPDATE_AD, _reactNativeTheoplayer.AdEventType.AD_FIRST_QUARTILE, _reactNativeTheoplayer.AdEventType.AD_MIDPOINT, _reactNativeTheoplayer.AdEventType.AD_THIRD_QUARTILE, _reactNativeTheoplayer.AdEventType.AD_SKIP, _reactNativeTheoplayer.AdEventType.AD_IMPRESSION, _reactNativeTheoplayer.AdEventType.AD_ERROR, _reactNativeTheoplayer.AdEventType.AD_METADATA, _reactNativeTheoplayer.AdEventType.AD_BUFFERING];
const FORWARDED_ADBREAK_EVENTS = [_reactNativeTheoplayer.AdEventType.ADD_AD_BREAK, _reactNativeTheoplayer.AdEventType.REMOVE_AD_BREAK, _reactNativeTheoplayer.AdEventType.AD_BREAK_BEGIN, _reactNativeTheoplayer.AdEventType.AD_BREAK_END, _reactNativeTheoplayer.AdEventType.AD_BREAK_CHANGE, _reactNativeTheoplayer.AdEventType.UPDATE_AD_BREAK];
const FORWARDED_THEOADS_EVENTS = [_reactNativeTheoplayer.TheoAdsEventType.ADD_INTERSTITIAL, _reactNativeTheoplayer.TheoAdsEventType.INTERSTITIAL_BEGIN, _reactNativeTheoplayer.TheoAdsEventType.INTERSTITIAL_END, _reactNativeTheoplayer.TheoAdsEventType.INTERSTITIAL_UPDATE, _reactNativeTheoplayer.TheoAdsEventType.INTERSTITIAL_ERROR];
const FORWARDED_THEOLIVE_EVENTS = [_reactNativeTheoplayer.TheoLiveEventType.DISTRIBUTION_LOAD_START, _reactNativeTheoplayer.TheoLiveEventType.DISTRIBUTION_OFFLINE, _reactNativeTheoplayer.TheoLiveEventType.ENDPOINT_LOADED, _reactNativeTheoplayer.TheoLiveEventType.INTENT_TO_FALLBACK];
function fromTimeRanges(timeRanges) {
const result = [];
for (let i = 0; i < timeRanges.length; i++) {
result.push({
start: timeRanges.start(i) * 1e3,
end: timeRanges.end(i) * 1e3
});
}
return result;
}
//# sourceMappingURL=WebEventForwarder.js.map