react-native-wowza-gocoder
Version:
React Native wrapper for the Wowza GoCoder SDK
122 lines (106 loc) • 3.52 kB
JavaScript
import React, {Component} from 'react';
import { PropTypes } from "prop-types";
import {StyleSheet, requireNativeComponent, NativeModules, View, DeviceEventEmitter, Platform} from 'react-native';
const BroadcastManager = NativeModules.BroadcastModule;
const styles = StyleSheet.create({
base: {
overflow: 'hidden',
},
});
export default class BroadcastView extends Component {
setNativeProps(nativeProps) {
this._root.setNativeProps(nativeProps);
}
componentWillMount(){
if(Platform.OS == 'android'){
DeviceEventEmitter.addListener('broadcastTimer', (seconds) => {
this.props.onBroadcastVideoEncoded({seconds:seconds})
});
}
}
_assignRoot = (component) => {
this._root = component;
};
_onBroadcastStart = (event) => {
if(Platform.OS == 'android'){
BroadcastManager.startTimer(1.1, 3600);
}
if (this.props.onBroadcastStart) {
this.props.onBroadcastStart(event.nativeEvent);
}
};
_onBroadcastFail = (event) => {
if (this.props.onBroadcastFail) {
this.props.onBroadcastFail(event.nativeEvent);
}
};
_onBroadcastStatusChange = (event) => {
if (this.props.onBroadcastStatusChange) {
this.props.onBroadcastStatusChange(event.nativeEvent);
}
};
_onBroadcastEventReceive = (event) => {
if (this.props.onBroadcastEventReceive) {
this.props.onBroadcastEventReceive(event.nativeEvent);
}
};
_onBroadcastErrorReceive = (event) => {
if (this.props.onBroadcastErrorReceive) {
this.props.onBroadcastErrorReceive(event.nativeEvent);
}
};
_onBroadcastVideoEncoded = (event) => {
if (this.props.onBroadcastVideoEncoded) {
this.props.onBroadcastVideoEncoded(event.nativeEvent);
}
};
_onBroadcastStop = (event) => {
if (this.props.onBroadcastStop) {
this.props.onBroadcastStop(event.nativeEvent);
}
};
render() {
const nativeProps = Object.assign({}, this.props);
Object.assign(nativeProps, {
style: [styles.base, nativeProps.style],
onBroadcastStart: this._onBroadcastStart,
onBroadcastFail: this._onBroadcastFail,
onBroadcastStatusChange: this._onBroadcastStatusChange,
onBroadcastEventReceive: this._onBroadcastEventReceive,
onBroadcastErrorReceive: this._onBroadcastErrorReceive,
onBroadcastVideoEncoded: this._onBroadcastVideoEncoded,
onBroadcastStop: this._onBroadcastStop,
});
return (
<RNBroadcastView
ref={this._assignRoot}
{...nativeProps}
/>
);
}
}
BroadcastView.propTypes = {
hostAddress: PropTypes.string.isRequired,
applicationName: PropTypes.string.isRequired,
sdkLicenseKey: PropTypes.string.isRequired,
broadcastName: PropTypes.string.isRequired,
backgroundMode: PropTypes.bool,
sizePreset: PropTypes.number,
videoOrientation: PropTypes.oneOf(['landscape', 'portrait']),
port: PropTypes.number,
username: PropTypes.string.isRequired,
password: PropTypes.string.isRequired,
broadcasting: PropTypes.bool.isRequired,
muted: PropTypes.bool,
flashOn: PropTypes.bool,
frontCamera: PropTypes.bool,
onBroadcastStart: PropTypes.func,
onBroadcastFail: PropTypes.func,
onBroadcastStatusChange: PropTypes.func,
onBroadcastEventReceive: PropTypes.func,
onBroadcastErrorReceive: PropTypes.func,
onBroadcastVideoEncoded: PropTypes.func,
onBroadcastStop: PropTypes.func,
...View.propTypes,
};
const RNBroadcastView = requireNativeComponent('RNBroadcastView', BroadcastView);