webrtc-native
Version:
WebRTC for NodeJS
133 lines (109 loc) • 3.14 kB
HTML
<html>
<head>
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
</head>
<body>
<video></video>
<script>
var config = {
iceServers: [
{
url: 'stun:stun.l.google.com:19302',
},
],
};
var constraints = {
optional: [
{
DtlsSrtpKeyAgreement: true,
},
],
mandatory: {
OfferToReceiveAudio: true,
OfferToReceiveVideo: true,
},
};
var socket = io.connect();
var peer = new window.webkitRTCPeerConnection(config, constraints);
socket.on('disconnect', function() {
peer.close();
});
socket.on('icecandidate', function(data) {
if (data && data.candidate && data.sdpMid && data.sdpMLineIndex) {
peer.addIceCandidate(new RTCIceCandidate(data));
}
});
socket.on('offer', function(data) {
peer.setRemoteDescription(new RTCSessionDescription(data), function() {
peer.createAnswer(function(sdp) {
peer.setLocalDescription(sdp, function() {
socket.emit('answer', sdp);
});
});
});
});
socket.on('answer', function (data) {
peer.setRemoteDescription(new RTCSessionDescription(data));
});
peer.onicecandidate = function(event) {
var candidate = event.candidate || event;
socket.emit('icecandidate', candidate);
};
peer.onnegotiationneeded = function() {
peer.createOffer(function(sdp) {
peer.setLocalDescription(sdp, function() {
socket.emit('offer', sdp);
});
});
};
peer.onaddstream = function(event) {
if (event.stream && event.stream.active) {
console.log('Peer Add mediaStream:', event.stream);
var video = document.querySelector('video');
video.src = window.URL.createObjectURL(event.stream);
video.onloadedmetadata = function(event) {
video.play();
};
event.stream.onaddtrack = function(track) {
console.log('Track Added!');
};
event.stream.onremovetrack = function (track) {
console.log('Track Removed!');
};
var audio_list = event.stream.getAudioTracks();
audio_list.forEach(function (track) {
console.log(track);
});
var video_list = event.stream.getVideoTracks();
video_list.forEach(function (track) {
console.log(track);
});
}
};
peer.onremovestream = function(event) {
console.log('Peer Remove mediaStream:', event.stream);
};
peer.ondatachannel = function(event) {
var channel = event ? event.channel || event : null;
var pingpong = null;
channel.onopen = function() {
console.log('Peer Channel opened!');
pingpong = setInterval(function() {
console.log('Peer: Sending PING');
channel.send('PING');
}, 5000);
};
channel.onclose = function() {
console.log('Peer Channel closed!');
if (pingpong) {
clearInterval(pingpong);
}
};
channel.onmessage = function(event) {
var data = event.data;
console.log('Peer Message:', data);
};
};
</script>
</body>
</html>