DataChannel creation
by ibcaliax
JavaScript
async function run()
{
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
pc1.createDataChannel('make SDP O/A happy', { negotiated: true, id: 0 });
pc2.createDataChannel('make SDP O/A happy', { negotiated: true, id: 0 });
pc1.addEventListener('icecandidate', (event) =>
{
const { candidate } = event;
if (candidate)
pc2.addIceCandidate(candidate);
});
pc2.addEventListener('icecandidate', (event) =>
{
const { candidate } = event;
if (candidate)
pc1.addIceCandidate(candidate);
});
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);
pc1.addEventListener('iceconnectionstatechange', () =>
{
if (pc1.iceConnectionState === 'connected')
{
const dc1s = new Map();
const dc2s = new Map();
let id = 1;
const timer = setInterval(() =>
{
console.warn('>>> creating DataChannels with id:%d ...', id);
try
{
const dc1 = pc1.createDataChannel("foo", { negotiated: true, id: id });
const dc2 = pc2.createDataChannel("foo", { negotiated: true, id: id });
console.warn('<<< DataChannels with id:%d created', id);
dc1s.set(id, dc1);
dc2s.set(id, dc2);
++id;
// if (id === 256)
// clearInterval(timer);
}
catch (error)
{
console.error('<<< DataChannels with id:%d failed: %o', id, error);
clearInterval(timer);
}
}, 50);
}
});
}
run();