UNPKG

amazon-ivs-react-native-broadcast

Version:

A React Native wrapper for the Amazon IVS iOS and Android broadcast SDKs

209 lines (184 loc) 7.79 kB
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } import React, { useRef, forwardRef, useImperativeHandle } from 'react'; import { Platform, UIManager, findNodeHandle, requireNativeComponent } from 'react-native'; import { Command, StateStatusEnum, NetworkHealthEnum, BroadcastQualityEnum } from './IVSBroadcastCameraView.types'; const isNumber = value => typeof value === 'number'; const UNKNOWN = 'unknown'; export const NATIVE_VIEW_NAME = 'RCTIVSBroadcastCameraView'; const NATIVE_SIDE_COMMANDS = UIManager.getViewManagerConfig(NATIVE_VIEW_NAME).Commands; const RCTIVSBroadcastCameraView = requireNativeComponent(NATIVE_VIEW_NAME); export const getCommandIdByPlatform = command => { switch (Platform.OS) { case 'android': { return command; } case 'ios': { return NATIVE_SIDE_COMMANDS[command]; } default: { return ''; } } }; const IVSBroadcastCameraView = /*#__PURE__*/forwardRef((props, parentRef) => { const { onError, onBroadcastError, onIsBroadcastReady, onBroadcastAudioStats, onBroadcastStateChanged, onBroadcastQualityChanged, onNetworkHealthChanged, onTransmissionStatisticsChanged, onAudioSessionInterrupted, onAudioSessionResumed, onMediaServicesWereLost, onMediaServicesWereReset, isMuted = false, isCameraPreviewMirrored = false, cameraPosition = 'back', cameraPreviewAspectMode = 'none', logLevel = 'error', sessionLogLevel = 'error', ...restProps } = props; const nativeViewRef = useRef(null); useImperativeHandle(parentRef, () => { const reactTag = findNodeHandle(nativeViewRef.current); const dispatchViewManagerCommand = function (command) { for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { params[_key - 1] = arguments[_key]; } return UIManager.dispatchViewManagerCommand(reactTag, getCommandIdByPlatform(command), params !== null && params !== void 0 ? params : []); }; return { start: function () { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return dispatchViewManagerCommand(Command.Start, options); }, stop: () => dispatchViewManagerCommand(Command.Stop), /** * @deprecated in favor of {@link cameraPosition} */ swapCamera: () => dispatchViewManagerCommand(Command.SwapCamera) }; }, []); const onErrorHandler = _ref => { let { nativeEvent } = _ref; return onError === null || onError === void 0 ? void 0 : onError(nativeEvent.message); }; const onBroadcastErrorHandler = _ref2 => { var _String; let { nativeEvent } = _ref2; const { code, type, detail, source, isFatal, sessionId } = nativeEvent.exception; onBroadcastError === null || onBroadcastError === void 0 ? void 0 : onBroadcastError({ code: (_String = String(code)) !== null && _String !== void 0 ? _String : UNKNOWN, type: type !== null && type !== void 0 ? type : UNKNOWN, source: source !== null && source !== void 0 ? source : UNKNOWN, detail: detail !== null && detail !== void 0 ? detail : '', isFatal: !!isFatal, sessionId: sessionId !== null && sessionId !== void 0 ? sessionId : UNKNOWN }); }; const onIsBroadcastReadyHandler = _ref3 => { let { nativeEvent } = _ref3; return onIsBroadcastReady === null || onIsBroadcastReady === void 0 ? void 0 : onIsBroadcastReady(nativeEvent.isReady); }; const onBroadcastAudioStatsHandler = _ref4 => { let { nativeEvent } = _ref4; return onBroadcastAudioStats === null || onBroadcastAudioStats === void 0 ? void 0 : onBroadcastAudioStats(nativeEvent.audioStats); }; const onBroadcastStateChangedHandler = _ref5 => { let { nativeEvent } = _ref5; const { stateStatus: incomingStateStatus, metadata } = nativeEvent; const outcomingStateStatus = isNumber(incomingStateStatus) ? StateStatusEnum[incomingStateStatus] : incomingStateStatus; onBroadcastStateChanged === null || onBroadcastStateChanged === void 0 ? void 0 : onBroadcastStateChanged(outcomingStateStatus, metadata); }; /** * @deprecated in favor of {@link onTransmissionStatisticsChangedHandler} */ const onNetworkHealthChangedHandler = _ref6 => { let { nativeEvent } = _ref6; return onNetworkHealthChanged === null || onNetworkHealthChanged === void 0 ? void 0 : onNetworkHealthChanged(nativeEvent.networkHealth); }; /** * @deprecated in favor of {@link onTransmissionStatisticsChangedHandler} */ const onBroadcastQualityChangedHandler = _ref7 => { let { nativeEvent } = _ref7; return onBroadcastQualityChanged === null || onBroadcastQualityChanged === void 0 ? void 0 : onBroadcastQualityChanged(nativeEvent.quality); }; const onTransmissionStatisticsChangedHandler = _ref8 => { let { nativeEvent } = _ref8; const { networkHealth: incomingNetworkHealth, broadcastQuality: incomingBroadcastQuality, ...rest } = nativeEvent.statistics; const networkHealth = isNumber(incomingNetworkHealth) ? NetworkHealthEnum[incomingNetworkHealth] : incomingNetworkHealth; const broadcastQuality = isNumber(incomingBroadcastQuality) ? BroadcastQualityEnum[incomingBroadcastQuality] : incomingBroadcastQuality; return onTransmissionStatisticsChanged === null || onTransmissionStatisticsChanged === void 0 ? void 0 : onTransmissionStatisticsChanged({ networkHealth, broadcastQuality, ...rest }); }; const onAudioSessionInterruptedHandler = () => onAudioSessionInterrupted === null || onAudioSessionInterrupted === void 0 ? void 0 : onAudioSessionInterrupted(); const onAudioSessionResumedHandler = () => onAudioSessionResumed === null || onAudioSessionResumed === void 0 ? void 0 : onAudioSessionResumed(); const onMediaServicesWereLostHandler = () => onMediaServicesWereLost === null || onMediaServicesWereLost === void 0 ? void 0 : onMediaServicesWereLost(); const onMediaServicesWereResetHandler = () => onMediaServicesWereReset === null || onMediaServicesWereReset === void 0 ? void 0 : onMediaServicesWereReset(); return /*#__PURE__*/React.createElement(RCTIVSBroadcastCameraView, _extends({ testID: NATIVE_VIEW_NAME }, restProps, { ref: nativeViewRef, isMuted: isMuted, logLevel: logLevel, sessionLogLevel: sessionLogLevel, cameraPreviewAspectMode: cameraPreviewAspectMode, isCameraPreviewMirrored: isCameraPreviewMirrored, cameraPosition: cameraPosition, onError: onErrorHandler, onBroadcastError: onBroadcastErrorHandler, onIsBroadcastReady: onIsBroadcastReadyHandler, onBroadcastAudioStats: onBroadcastAudioStatsHandler, onBroadcastStateChanged: onBroadcastStateChangedHandler, onBroadcastQualityChanged: onBroadcastQualityChangedHandler, onNetworkHealthChanged: onNetworkHealthChangedHandler, onTransmissionStatisticsChanged: onTransmissionStatisticsChangedHandler, onAudioSessionInterrupted: onAudioSessionInterruptedHandler, onAudioSessionResumed: onAudioSessionResumedHandler, onMediaServicesWereLost: onMediaServicesWereLostHandler, onMediaServicesWereReset: onMediaServicesWereResetHandler })); }); export default IVSBroadcastCameraView; //# sourceMappingURL=IVSBroadcastCameraView.js.map