WebRTC getSources
by juberti
HTML
<button onclick="start()">▶</button>
<audio autoplay/>
JavaScript
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var audioContext = new AudioContext();
var audio = document.querySelector("audio");
var pc1, pc2;
async function start() {
audio.play();
audioContext.resume();
createConnection(createLocalStream(), audio);
setInterval(() => {
dumpReceiver(pc2);
}, 1000);
}
function createLocalStream() {
var oscillator = audioContext.createOscillator();
oscillator.type = 'sine';
oscillator.frequency.value = 440; // value in hertz
var dest = audioContext.createMediaStreamDestination();
oscillator.connect(dest);
oscillator.start(0);
return dest.stream;
}
async function createConnection(stream, elem) {
pc1 = new RTCPeerConnection({}), pc2 = new RTCPeerConnection({});
pc1.addTrack(stream.getTracks()[0], stream);
pc1.onicecandidate = (e) => { if (e.candidate) pc2.addIceCandidate(e.candidate); }
pc2.onicecandidate = (e) => { if (e.candidate) pc1.addIceCandidate(e.candidate); }
pc2.ontrack = (e) => { elem.srcObject = e.streams[0]; }
const offer = await pc1.createOffer();
await pc1.setLocalDescription(offer);
await pc2.setRemoteDescription(offer);
const answer = await pc2.createAnswer();
await pc2.setLocalDescription(answer);
await pc1.setRemoteDescription(answer);
}
async function dumpReceiver(pc) {
const sources = await pc.getReceivers()[0].getSynchronizationSources();
console.log(sources);
}