amazon-ivs-react-native-player
Version:
amazon-ivs-react-native-player
270 lines (242 loc) • 8.91 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const VIEW_NAME = 'AmazonIvs';
const IVSPlayer = (0, _reactNative.requireNativeComponent)(VIEW_NAME);
function parseDuration(duration) {
if (duration == null) {
return duration;
}
return duration > 0 ? duration : Infinity;
}
const IVSPlayerContainer = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
let {
style,
streamUrl,
paused,
muted,
loop = false,
resizeMode,
autoplay = true,
liveLowLatency,
rebufferToLive,
playbackRate,
pipEnabled,
logLevel,
progressInterval,
volume,
quality,
autoMaxQuality,
autoQualityMode,
breakpoints = [],
maxBitrate,
initialBufferDuration,
onSeek,
onData,
onVideoStatistics,
onPlayerStateChange,
onDurationChange,
onQualityChange,
onPipChange,
onRebuffering,
onLoadStart,
onLoad,
onLiveLatencyChange,
onTextCue,
onTextMetadataCue,
onProgress,
onError,
onTimePoint,
children
} = _ref;
const mediaPlayerRef = (0, _react.useRef)(null);
const initialized = (0, _react.useRef)(false);
const play = (0, _react.useCallback)(() => {
_reactNative.UIManager.dispatchViewManagerCommand((0, _reactNative.findNodeHandle)(mediaPlayerRef.current), _reactNative.UIManager.getViewManagerConfig(VIEW_NAME).Commands.play, []);
}, []);
const pause = (0, _react.useCallback)(() => {
_reactNative.UIManager.dispatchViewManagerCommand((0, _reactNative.findNodeHandle)(mediaPlayerRef.current), _reactNative.UIManager.getViewManagerConfig(VIEW_NAME).Commands.pause, []);
}, []);
const seekTo = (0, _react.useCallback)(value => {
_reactNative.UIManager.dispatchViewManagerCommand((0, _reactNative.findNodeHandle)(mediaPlayerRef.current), _reactNative.UIManager.getViewManagerConfig(VIEW_NAME).Commands.seekTo, [value]);
}, []);
const setOrigin = (0, _react.useCallback)(value => {
_reactNative.UIManager.dispatchViewManagerCommand((0, _reactNative.findNodeHandle)(mediaPlayerRef.current), _reactNative.UIManager.getViewManagerConfig(VIEW_NAME).Commands.setOrigin, [value]);
}, []);
const togglePip = (0, _react.useCallback)(() => {
_reactNative.UIManager.dispatchViewManagerCommand((0, _reactNative.findNodeHandle)(mediaPlayerRef.current), _reactNative.UIManager.getViewManagerConfig(VIEW_NAME).Commands.togglePip, []);
}, []);
(0, _react.useEffect)(() => {
if (initialized.current || autoplay) {
if (paused) {
pause();
} else {
play();
}
}
initialized.current = true;
}, [pause, paused, play, autoplay]);
(0, _react.useImperativeHandle)(ref, () => ({
play,
pause,
seekTo,
setOrigin,
togglePip
}), [play, pause, seekTo, setOrigin, togglePip]);
const onSeekHandler = event => {
const {
position
} = event.nativeEvent;
onSeek === null || onSeek === void 0 ? void 0 : onSeek(position);
};
const onPlayerStateChangeHandler = event => {
const {
state
} = event.nativeEvent;
onPlayerStateChange === null || onPlayerStateChange === void 0 ? void 0 : onPlayerStateChange(state);
};
const onDurationChangeHandler = event => {
const {
duration
} = event.nativeEvent;
onDurationChange === null || onDurationChange === void 0 ? void 0 : onDurationChange(parseDuration(duration));
};
const onQualityChangeHandler = event => {
const {
quality: newQuality
} = event.nativeEvent;
onQualityChange === null || onQualityChange === void 0 ? void 0 : onQualityChange(newQuality);
};
const onPipChangeHandler = event => {
const {
active
} = event.nativeEvent;
onPipChange === null || onPipChange === void 0 ? void 0 : onPipChange(active === true || active === 'true');
};
const onLoadHandler = event => {
if (_reactNative.Platform.OS === 'android') {
const shouldAutoPlay = autoplay && !paused;
shouldAutoPlay ? play() : pause();
}
const {
duration
} = event.nativeEvent;
onLoad === null || onLoad === void 0 ? void 0 : onLoad(parseDuration(duration));
};
const onLiveLatencyChangeHandler = event => {
const {
liveLatency
} = event.nativeEvent;
onLiveLatencyChange === null || onLiveLatencyChange === void 0 ? void 0 : onLiveLatencyChange(liveLatency);
};
const onDataHandler = event => {
const {
playerData
} = event.nativeEvent;
onData === null || onData === void 0 ? void 0 : onData(playerData);
};
const onTextCueHandler = event => {
const {
textCue
} = event.nativeEvent;
onTextCue === null || onTextCue === void 0 ? void 0 : onTextCue(textCue);
};
const onVideoStatisticsHandler = event => {
const {
videoData
} = event.nativeEvent;
const statistics = { ...videoData,
duration: parseDuration(videoData.duration)
};
onVideoStatistics === null || onVideoStatistics === void 0 ? void 0 : onVideoStatistics(statistics);
};
const onTextMetadataCueHandler = event => {
const {
textMetadataCue
} = event.nativeEvent;
onTextMetadataCue === null || onTextMetadataCue === void 0 ? void 0 : onTextMetadataCue(textMetadataCue);
};
const onProgressHandler = event => {
const {
position
} = event.nativeEvent;
onProgress === null || onProgress === void 0 ? void 0 : onProgress(position);
};
const onErrorHandler = event => {
const {
error
} = event.nativeEvent;
onError === null || onError === void 0 ? void 0 : onError(error);
};
const onTimePointHandler = event => {
const {
position
} = event.nativeEvent;
onTimePoint === null || onTimePoint === void 0 ? void 0 : onTimePoint(position);
};
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
style: [styles.container, style],
ref: ref
}, /*#__PURE__*/_react.default.createElement(IVSPlayer, {
testID: "IVSPlayer",
muted: muted,
loop: loop,
liveLowLatency: liveLowLatency,
rebufferToLive: rebufferToLive,
style: styles.mediaPlayer,
ref: mediaPlayerRef,
playbackRate: playbackRate,
streamUrl: streamUrl,
logLevel: logLevel,
resizeMode: resizeMode,
progressInterval: progressInterval,
volume: volume,
quality: quality,
initialBufferDuration: initialBufferDuration,
autoMaxQuality: autoMaxQuality,
autoQualityMode: autoQualityMode,
breakpoints: breakpoints,
maxBitrate: maxBitrate,
pipEnabled: pipEnabled,
onVideoStatistics: onVideoStatistics ? onVideoStatisticsHandler : undefined,
onData: onDataHandler,
onSeek: onSeekHandler,
onQualityChange: onQualityChangeHandler,
onPipChange: onPipChangeHandler,
onPlayerStateChange: onPlayerStateChangeHandler,
onDurationChange: onDurationChangeHandler,
onRebuffering: onRebuffering,
onLoadStart: onLoadStart,
onLoad: onLoadHandler,
onTextCue: onTextCueHandler,
onTextMetadataCue: onTextMetadataCueHandler,
onProgress: onProgressHandler,
onLiveLatencyChange: onLiveLatencyChange ? onLiveLatencyChangeHandler : undefined,
onError: onErrorHandler,
onTimePoint: onTimePointHandler
}), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
style: styles.children
}, children));
});
const styles = _reactNative.StyleSheet.create({
container: {
flex: 1
},
mediaPlayer: {
flex: 1
},
children: {
position: 'absolute',
width: '100%',
height: '100%'
}
});
var _default = IVSPlayerContainer;
exports.default = _default;
//# sourceMappingURL=IVSPlayer.js.map