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
JavaScript
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