From 10677627809c5724457262661440110a801d92db Mon Sep 17 00:00:00 2001 From: Danilo Bargen Date: Thu, 12 May 2016 16:48:54 +0200 Subject: [PATCH] Add promise based API to RTCPeerConnection --- webrtc/RTCPeerConnection-tests.ts | 51 +++++++++++-------------------- webrtc/RTCPeerConnection.d.ts | 40 +++++++++++++++++------- 2 files changed, 47 insertions(+), 44 deletions(-) diff --git a/webrtc/RTCPeerConnection-tests.ts b/webrtc/RTCPeerConnection-tests.ts index 1ed79bf2cc..ea850f8724 100644 --- a/webrtc/RTCPeerConnection-tests.ts +++ b/webrtc/RTCPeerConnection-tests.ts @@ -1,6 +1,8 @@ /// /// +let voidpromise: Promise; + var config: RTCConfiguration = { iceServers: [{ urls: "stun.l.google.com:19302" }] }; var constraints: RTCMediaConstraints = @@ -27,34 +29,27 @@ peerConnection.onicecandidate = ev => console.log(ev.type); peerConnection.onremovestream = ev => console.log(ev.type); peerConnection.onstatechange = ev => console.log(ev.type); -peerConnection.createOffer( - offer => { - peerConnection.setLocalDescription(offer, - () => console.log("set local description"), - error => console.log("Error setting local description: " + error)); - }, - error => console.log("Error creating offer: " + error)); +peerConnection.createOffer(); +let offer2: Promise = peerConnection.createOffer({ + voiceActivityDetection: true, + iceRestart: false +}); var type: string = RTCSdpType[RTCSdpType.offer]; var offer: RTCSessionDescriptionInit = { type: type, sdp: "some sdp" }; var sessionDescription = new RTCSessionDescription(offer); -peerConnection.setRemoteDescription(sessionDescription, () => { - peerConnection.createAnswer( - answer => { - peerConnection.setLocalDescription(answer, - () => console.log('Set local description'), - error => console.log( - "Error setting local description from created answer: " + error + - "; answer.sdp=" + answer.sdp)); - }, - error => console.log("Error creating answer: " + error)); -}, -error => console.log('Error setting remote description: ' + error + - "; offer.sdp=" + offer.sdp)); +peerConnection.setRemoteDescription(sessionDescription).then( + () => peerConnection.createAnswer(), + error => console.log('Error setting remote description: ' + error + "; offer.sdp=" + offer.sdp) +); var webkitSessionDescription = new webkitRTCSessionDescription(offer); +// New syntax +voidpromise = peerConnection.setLocalDescription(webkitSessionDescription); + +// Legacy syntax peerConnection.setRemoteDescription(webkitSessionDescription, () => { peerConnection.createAnswer( answer => { @@ -71,20 +66,10 @@ error => console.log('Error setting remote description: ' + error + var mozSessionDescription = new mozRTCSessionDescription(offer); -peerConnection.setRemoteDescription(mozSessionDescription, () => { - peerConnection.createAnswer( - answer => { - peerConnection.setLocalDescription(answer, - () => console.log('Set local description'), - error => console.log( - "Error setting local description from created answer: " + error + - "; answer.sdp=" + answer.sdp)); - }, - error => console.log("Error creating answer: " + error)); -}, -error => console.log('Error setting remote description: ' + error + - "; offer.sdp=" + offer.sdp)); +peerConnection.setRemoteDescription(mozSessionDescription); var wkPeerConnection: webkitRTCPeerConnection = new webkitRTCPeerConnection(config, constraints); +let candidate: RTCIceCandidate = {'candidate': 'foobar'}; +voidpromise = peerConnection.addIceCandidate(candidate); diff --git a/webrtc/RTCPeerConnection.d.ts b/webrtc/RTCPeerConnection.d.ts index b95b0b0a5c..dcd36d9aec 100644 --- a/webrtc/RTCPeerConnection.d.ts +++ b/webrtc/RTCPeerConnection.d.ts @@ -243,24 +243,40 @@ interface RTCStatsCallback { (report: RTCStatsReport): void; } +interface RTCOfferAnswerOptions { + voiceActivityDetection ?: boolean; // default = true +} + +interface RTCOfferOptions extends RTCOfferAnswerOptions { + iceRestart ?: boolean; // default = false +} + +interface RTCAnswerOptions extends RTCOfferAnswerOptions { } + interface RTCPeerConnection { + + createOffer(options?: RTCOfferOptions): Promise; createOffer(successCallback: RTCSessionDescriptionCallback, failureCallback?: RTCPeerConnectionErrorCallback, - constraints?: RTCMediaConstraints): void; + constraints?: RTCMediaConstraints): void; // Deprecated + createAnswer(options?: RTCAnswerOptions): Promise; createAnswer(successCallback: RTCSessionDescriptionCallback, failureCallback?: RTCPeerConnectionErrorCallback, - constraints?: RTCMediaConstraints): void; + constraints?: RTCMediaConstraints): void; // Deprecated + setLocalDescription(description: RTCSessionDescription | RTCSessionDescriptionInit): Promise; setLocalDescription(description: RTCSessionDescription, successCallback?: RTCVoidCallback, - failureCallback?: RTCPeerConnectionErrorCallback): void; - localDescription: RTCSessionDescription; + failureCallback?: RTCPeerConnectionErrorCallback): void; // Deprecated + setRemoteDescription(description: RTCSessionDescription | RTCSessionDescriptionInit): Promise; setRemoteDescription(description: RTCSessionDescription, successCallback?: RTCVoidCallback, failureCallback?: RTCPeerConnectionErrorCallback): void; + localDescription: RTCSessionDescription; remoteDescription: RTCSessionDescription; signalingState: string; // RTCSignalingState; see TODO(1) updateIce(configuration?: RTCConfiguration, constraints?: RTCMediaConstraints): void; + addIceCandidate(candidate: RTCIceCandidate): Promise; addIceCandidate(candidate:RTCIceCandidate, successCallback:() => void, failureCallback:RTCPeerConnectionErrorCallback): void; @@ -284,8 +300,10 @@ interface RTCPeerConnection { onicecandidate: (event: RTCIceCandidateEvent) => void; onidentityresult: (event: Event) => void; onsignalingstatechange: (event: Event) => void; - getStats: (successCallback: RTCStatsCallback, - failureCallback: RTCPeerConnectionErrorCallback) => void; + getStats(selector: MediaStreamTrack): Promise; + getStats(selector: MediaStreamTrack, // nullable + successCallback: RTCStatsCallback, + failureCallback: RTCPeerConnectionErrorCallback): void; } declare var RTCPeerConnection: { prototype: RTCPeerConnection; @@ -294,7 +312,7 @@ declare var RTCPeerConnection: { }; interface RTCIceCandidate { - candidate?: string; + candidate: string; sdpMid?: string; sdpMLineIndex?: number; } @@ -304,7 +322,7 @@ declare var RTCIceCandidate: { }; interface webkitRTCIceCandidate extends RTCIceCandidate { - candidate?: string; + candidate: string; sdpMid?: string; sdpMLineIndex?: number; } @@ -314,7 +332,7 @@ declare var webkitRTCIceCandidate: { }; interface mozRTCIceCandidate extends RTCIceCandidate { - candidate?: string; + candidate: string; sdpMid?: string; sdpMLineIndex?: number; } @@ -325,8 +343,8 @@ declare var mozRTCIceCandidate: { interface RTCIceCandidateInit { candidate: string; - sdpMid: string; - sdpMLineIndex: number; + sdpMid?: string; + sdpMLineIndex?: number; } declare var RTCIceCandidateInit:{ prototype: RTCIceCandidateInit;