RN的WebRTC模块 – react-native-webrtc
react-native-webrtc
React Native的WebRTC模块。
支持
目前支持iOS 和 Android.
支持视频和音频交流.
支持数据通道
你可以使用它创建一个 iOS/Android应用,可以与web浏览器交流.
使用方法
你可以像在浏览器中一样使用WebRTC,在你的index.ios.js/index.android.js你可以require WebRTC 以导入RTCPeerConnection, RTCSessionDescription等。
var WebRTC = require('react-native-webrtc');
var {
RTCPeerConnection,
RTCIceCandidate,
RTCSessionDescription,
RTCView,
MediaStream,
MediaStreamTrack,
getUserMedia,
} = WebRTC;
使用RTCPeerConnection, RTCSessionDescription 和 RTCIceCandidate类似浏览器。
var configuration = {"iceServers": [{"url": "stun:stun.l.google.com:19302"}]};
var pc = new RTCPeerConnection(configuration);
let isFront = true;
MediaStreamTrack.getSources(sourceInfos => {
console.log(sourceInfos);
let videoSourceId;
for (const i = 0; i < sourceInfos.length; i++) {
const sourceInfo = sourceInfos[i];
if(sourceInfo.kind == "video" && sourceInfo.facing == (isFront ? "front" : "back")) {
videoSourceId = sourceInfo.id;
}
}
getUserMedia({
audio: true,
video: {
mandatory: {
minWidth: 500, // Provide your own width, height and frame rate here
minHeight: 300,
minFrameRate: 30
},
facingMode: (isFront ? "user" : "environment"),
optional: (videoSourceId ? [{sourceId: videoSourceId}] : [])
}
}, function (stream) {
console.log('dddd', stream);
callback(stream);
}, logError);
});
pc.createOffer(function(desc) {
pc.setLocalDescription(desc, function () {
// Send pc.localDescription to peer
}, function(e) {});
}, function(e) {});
pc.onicecandidate = function (event) {
// send event.candidate to peer
};
// also support setRemoteDescription, createAnswer, addIceCandidate, onnegotiationneeded, oniceconnectionstatechange, onsignalingstatechange, onaddstream
渲染RTCView.
var container;
var RCTWebRTCDemo = React.createClass({
getInitialState: function() {
return {videoURL: null};
},
componentDidMount: function() {
container = this;
},
render: function() {
return (
<View>
<RTCView streamURL={this.state.videoURL}/>
</View>
);
}
});
设置RTCView的stream
container.setState({videoURL: stream.toURL()});