mirror of
https://github.com/zhigang1992/DefinitelyTyped.git
synced 2026-05-18 04:24:30 +08:00
* Rewrite all RTCPeerConnection definitions I used the specification IDL to rewrite all definitions. * RTCPeerConnection: Add legacy interface extensions
92 lines
3.3 KiB
TypeScript
92 lines
3.3 KiB
TypeScript
/// <reference path="MediaStream.d.ts" />
|
|
/// <reference path="RTCPeerConnection.d.ts" />
|
|
|
|
let defaultIceServers: RTCIceServer[] = RTCPeerConnection.defaultIceServers;
|
|
if (defaultIceServers.length > 0) {
|
|
let urls = defaultIceServers[0].urls;
|
|
}
|
|
|
|
// Create a peer connection
|
|
let ice1: RTCIceServer = {
|
|
'urls': 'stun:stun.l.google.com:19302',
|
|
'username': 'john',
|
|
'credential': '1234',
|
|
'credentialType': 'password',
|
|
};
|
|
let ice2: RTCIceServer = {'urls': ['stun:stunserver.org', 'stun:stun.example.com']};
|
|
let pc: RTCPeerConnection = new RTCPeerConnection();
|
|
let pc2: RTCPeerConnection = new RTCPeerConnection({
|
|
iceServers: [ice1, ice2],
|
|
});
|
|
RTCPeerConnection.generateCertificate("sha-256").then((cert: RTCCertificate) => {
|
|
new RTCPeerConnection({
|
|
iceServers: [ice1],
|
|
iceTransportPolicy: 'relay',
|
|
bundlePolicy: 'max-compat',
|
|
rtcpMuxPolicy: 'negotiate',
|
|
peerIdentity: 'dude',
|
|
certificates: [cert],
|
|
iceCandidatePoolSize: 5,
|
|
});
|
|
});
|
|
|
|
// Get/set the configuration
|
|
let conf: RTCConfiguration = pc2.getConfiguration();
|
|
pc.setConfiguration(conf);
|
|
|
|
// Close peer connection
|
|
pc2.close();
|
|
|
|
// Offer/answer flow
|
|
let offer: RTCSessionDescriptionInit;
|
|
let answer: RTCSessionDescriptionInit;
|
|
pc.createOffer({iceRestart: true})
|
|
.then((_offer: RTCSessionDescriptionInit) => offer = _offer);
|
|
pc.setLocalDescription(offer);
|
|
pc2.setRemoteDescription(offer);
|
|
pc2.createAnswer().then((_answer: RTCSessionDescriptionInit) => answer = _answer);
|
|
pc2.setLocalDescription(answer);
|
|
pc.setRemoteDescription(answer);
|
|
|
|
// Event handlers
|
|
pc.onnegotiationneeded = ev => console.log(ev.type);
|
|
pc.onicecandidate = ev => console.log(ev.candidate);
|
|
pc.onicecandidateerror = ev => console.log(ev.errorText);
|
|
pc.onsignalingstatechange = ev => console.log(ev.type);
|
|
pc.oniceconnectionstatechange = ev => console.log(ev.type);
|
|
pc.onicegatheringstatechange = ev => console.log(ev.type);
|
|
pc.onconnectionstatechange = ev => console.log(ev.type);
|
|
pc.ontrack = ev => console.log(ev.receiver);
|
|
pc.ondatachannel = ev => console.log(ev.channel);
|
|
|
|
// Legacy interface extensions
|
|
pc.createOffer(
|
|
(sdp: RTCSessionDescription) => console.log(sdp.sdp),
|
|
(error: DOMException) => console.log(error.message),
|
|
{iceRestart: true}
|
|
).then(() => console.log('createOffer complete'));
|
|
pc.setLocalDescription(
|
|
{type: 'offer', sdp: 'foobar'},
|
|
() => console.log('local description set'),
|
|
(error: DOMException) => console.log(error.message)
|
|
).then(() => console.log('setLocalDescription complete'));
|
|
pc.createAnswer(
|
|
(sdp: RTCSessionDescription) => console.log(sdp.sdp),
|
|
(error: DOMException) => console.log(error.message)
|
|
).then(() => console.log('createAnswer complete'));
|
|
pc.setRemoteDescription(
|
|
{type: 'answer', sdp: 'foobar'},
|
|
() => console.log('remote description set'),
|
|
(error: DOMException) => console.log(error.message)
|
|
).then(() => console.log('setRemoteDescription complete'));
|
|
pc.addIceCandidate(
|
|
{candidate: 'candidate', sdpMid: 'foo', sdpMLineIndex: 1},
|
|
() => console.log('candidate added'),
|
|
(error: DOMException) => console.log(error.message)
|
|
).then(() => console.log('addIceCandidate complete'));
|
|
pc.getStats(
|
|
null,
|
|
(report: RTCStatsReport) => console.log('got report'),
|
|
(error: DOMException) => console.log(error.message)
|
|
).then(() => console.log('getStats complete'));
|