UNPKG

webrtc-native

Version:
133 lines (109 loc) 3.14 kB
<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>