diff --git a/webrtc/MediaStream.d.ts b/webrtc/MediaStream.d.ts index a7bebb857..c4a836d61 100644 --- a/webrtc/MediaStream.d.ts +++ b/webrtc/MediaStream.d.ts @@ -1,204 +1,204 @@ -// Type definitions for WebRTC -// Project: http://dev.w3.org/2011/webrtc/ -// Definitions by: Ken Smith -// Definitions: https://github.com/borisyankov/DefinitelyTyped - -// Taken from http://dev.w3.org/2011/webrtc/editor/getusermedia.html -// version: W3C Editor's Draft 29 June 2015 - -/// - -interface ConstrainBooleanParameters { - exact?: boolean; - ideal?: boolean; -} - -interface NumberRange { - max?: number; - min?: number; -} - -interface ConstrainNumberRange extends NumberRange { - exact?: number; - ideal?: number; -} - -interface ConstrainStringParameters { - exact?: string | string[]; - ideal?: string | string[]; -} - -interface MediaStreamConstraints { - video?: boolean | MediaTrackConstraints; - audio?: boolean | MediaTrackConstraints; -} - -declare module W3C { - type LongRange = NumberRange; - type DoubleRange = NumberRange; - type ConstrainBoolean = boolean | ConstrainBooleanParameters; - type ConstrainNumber = number | ConstrainNumberRange; - type ConstrainLong = ConstrainNumber; - type ConstrainDouble = ConstrainNumber; - type ConstrainString = string | string[] | ConstrainStringParameters; -} - -interface MediaTrackConstraints extends MediaTrackConstraintSet { - advanced?: MediaTrackConstraintSet[]; -} - -interface MediaTrackConstraintSet { - width?: W3C.ConstrainLong; - height?: W3C.ConstrainLong; - aspectRatio?: W3C.ConstrainDouble; - frameRate?: W3C.ConstrainDouble; - facingMode?: W3C.ConstrainString; - volume?: W3C.ConstrainDouble; - sampleRate?: W3C.ConstrainLong; - sampleSize?: W3C.ConstrainLong; - echoCancellation?: W3C.ConstrainBoolean; - latency?: W3C.ConstrainDouble; - deviceId?: W3C.ConstrainString; - groupId?: W3C.ConstrainString; -} - -interface MediaTrackSupportedConstraints { - width?: boolean; - height?: boolean; - aspectRatio?: boolean; - frameRate?: boolean; - facingMode?: boolean; - volume?: boolean; - sampleRate?: boolean; - sampleSize?: boolean; - echoCancellation?: boolean; - latency?: boolean; - deviceId?: boolean; - groupId?: boolean; -} - -interface MediaStream extends EventTarget { - id: string; - active: boolean; - - onactive: EventListener; - oninactive: EventListener; - onaddtrack: (event: MediaStreamTrackEvent) => any; - onremovetrack: (event: MediaStreamTrackEvent) => any; - - clone(): MediaStream; - stop(): void; - - getAudioTracks(): MediaStreamTrack[]; - getVideoTracks(): MediaStreamTrack[]; - getTracks(): MediaStreamTrack[]; - - getTrackById(trackId: string): MediaStreamTrack; - - addTrack(track: MediaStreamTrack): void; - removeTrack(track: MediaStreamTrack): void; -} - -interface MediaStreamTrackEvent extends Event { - track: MediaStreamTrack; -} - -declare enum MediaStreamTrackState { - "live", - "ended" -} - -interface MediaStreamTrack extends EventTarget { - id: string; - kind: string; - label: string; - enabled: boolean; - muted: boolean; - remote: boolean; - readyState: MediaStreamTrackState; - - onmute: EventListener; - onunmute: EventListener; - onended: EventListener; - onoverconstrained: EventListener; - - clone(): MediaStreamTrack; - - stop(): void; - - getCapabilities(): MediaTrackCapabilities; - getConstraints(): MediaTrackConstraints; - getSettings(): MediaTrackSettings; - applyConstraints(constraints: MediaTrackConstraints): Promise; -} - -interface MediaTrackCapabilities { - width: number | W3C.LongRange; - height: number | W3C.LongRange; - aspectRatio: number | W3C.DoubleRange; - frameRate: number | W3C.DoubleRange; - facingMode: string; - volume: number | W3C.DoubleRange; - sampleRate: number | W3C.LongRange; - sampleSize: number | W3C.LongRange; - echoCancellation: boolean[]; - latency: number | W3C.DoubleRange; - deviceId: string; - groupId: string; -} - -interface MediaTrackSettings { - width: number; - height: number; - aspectRatio: number; - frameRate: number; - facingMode: string; - volume: number; - sampleRate: number; - sampleSize: number; - echoCancellation: boolean; - latency: number; - deviceId: string; - groupId: string; -} - -interface MediaStreamError { - name: string; - message: string; - constraintName: string; -} - -interface NavigatorGetUserMedia { - (constraints: MediaStreamConstraints, - successCallback: (stream: MediaStream) => void, - errorCallback: (error: MediaStreamError) => void): void; -} - -// to use with adapter.js, see: https://github.com/webrtc/adapter -declare var getUserMedia: NavigatorGetUserMedia; - -interface Navigator { - getUserMedia: NavigatorGetUserMedia; - - webkitGetUserMedia: NavigatorGetUserMedia; - - mozGetUserMedia: NavigatorGetUserMedia; - - msGetUserMedia: NavigatorGetUserMedia; - - mediaDevices: MediaDevices; -} - -interface MediaDevices { - getSupportedConstraints(): MediaTrackSupportedConstraints; - - getUserMedia(constraints: MediaStreamConstraints): Promise; - enumerateDevices(): Promise; -} - -interface MediaDeviceInfo { - label: string; - id: string; - kind: string; - facing: string; -} +// Type definitions for WebRTC +// Project: http://dev.w3.org/2011/webrtc/ +// Definitions by: Ken Smith +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +// Taken from http://dev.w3.org/2011/webrtc/editor/getusermedia.html +// version: W3C Editor's Draft 29 June 2015 + +/// + +interface ConstrainBooleanParameters { + exact?: boolean; + ideal?: boolean; +} + +interface NumberRange { + max?: number; + min?: number; +} + +interface ConstrainNumberRange extends NumberRange { + exact?: number; + ideal?: number; +} + +interface ConstrainStringParameters { + exact?: string | string[]; + ideal?: string | string[]; +} + +interface MediaStreamConstraints { + video?: boolean | MediaTrackConstraints; + audio?: boolean | MediaTrackConstraints; +} + +declare module W3C { + type LongRange = NumberRange; + type DoubleRange = NumberRange; + type ConstrainBoolean = boolean | ConstrainBooleanParameters; + type ConstrainNumber = number | ConstrainNumberRange; + type ConstrainLong = ConstrainNumber; + type ConstrainDouble = ConstrainNumber; + type ConstrainString = string | string[] | ConstrainStringParameters; +} + +interface MediaTrackConstraints extends MediaTrackConstraintSet { + advanced?: MediaTrackConstraintSet[]; +} + +interface MediaTrackConstraintSet { + width?: W3C.ConstrainLong; + height?: W3C.ConstrainLong; + aspectRatio?: W3C.ConstrainDouble; + frameRate?: W3C.ConstrainDouble; + facingMode?: W3C.ConstrainString; + volume?: W3C.ConstrainDouble; + sampleRate?: W3C.ConstrainLong; + sampleSize?: W3C.ConstrainLong; + echoCancellation?: W3C.ConstrainBoolean; + latency?: W3C.ConstrainDouble; + deviceId?: W3C.ConstrainString; + groupId?: W3C.ConstrainString; +} + +interface MediaTrackSupportedConstraints { + width?: boolean; + height?: boolean; + aspectRatio?: boolean; + frameRate?: boolean; + facingMode?: boolean; + volume?: boolean; + sampleRate?: boolean; + sampleSize?: boolean; + echoCancellation?: boolean; + latency?: boolean; + deviceId?: boolean; + groupId?: boolean; +} + +interface MediaStream extends EventTarget { + id: string; + active: boolean; + + onactive: EventListener; + oninactive: EventListener; + onaddtrack: (event: MediaStreamTrackEvent) => any; + onremovetrack: (event: MediaStreamTrackEvent) => any; + + clone(): MediaStream; + stop(): void; + + getAudioTracks(): MediaStreamTrack[]; + getVideoTracks(): MediaStreamTrack[]; + getTracks(): MediaStreamTrack[]; + + getTrackById(trackId: string): MediaStreamTrack; + + addTrack(track: MediaStreamTrack): void; + removeTrack(track: MediaStreamTrack): void; +} + +interface MediaStreamTrackEvent extends Event { + track: MediaStreamTrack; +} + +declare enum MediaStreamTrackState { + "live", + "ended" +} + +interface MediaStreamTrack extends EventTarget { + id: string; + kind: string; + label: string; + enabled: boolean; + muted: boolean; + remote: boolean; + readyState: MediaStreamTrackState; + + onmute: EventListener; + onunmute: EventListener; + onended: EventListener; + onoverconstrained: EventListener; + + clone(): MediaStreamTrack; + + stop(): void; + + getCapabilities(): MediaTrackCapabilities; + getConstraints(): MediaTrackConstraints; + getSettings(): MediaTrackSettings; + applyConstraints(constraints: MediaTrackConstraints): Promise; +} + +interface MediaTrackCapabilities { + width: number | W3C.LongRange; + height: number | W3C.LongRange; + aspectRatio: number | W3C.DoubleRange; + frameRate: number | W3C.DoubleRange; + facingMode: string; + volume: number | W3C.DoubleRange; + sampleRate: number | W3C.LongRange; + sampleSize: number | W3C.LongRange; + echoCancellation: boolean[]; + latency: number | W3C.DoubleRange; + deviceId: string; + groupId: string; +} + +interface MediaTrackSettings { + width: number; + height: number; + aspectRatio: number; + frameRate: number; + facingMode: string; + volume: number; + sampleRate: number; + sampleSize: number; + echoCancellation: boolean; + latency: number; + deviceId: string; + groupId: string; +} + +interface MediaStreamError { + name: string; + message: string; + constraintName: string; +} + +interface NavigatorGetUserMedia { + (constraints: MediaStreamConstraints, + successCallback: (stream: MediaStream) => void, + errorCallback: (error: MediaStreamError) => void): void; +} + +// to use with adapter.js, see: https://github.com/webrtc/adapter +declare var getUserMedia: NavigatorGetUserMedia; + +interface Navigator { + getUserMedia: NavigatorGetUserMedia; + + webkitGetUserMedia: NavigatorGetUserMedia; + + mozGetUserMedia: NavigatorGetUserMedia; + + msGetUserMedia: NavigatorGetUserMedia; + + mediaDevices: MediaDevices; +} + +interface MediaDevices { + getSupportedConstraints(): MediaTrackSupportedConstraints; + + getUserMedia(constraints: MediaStreamConstraints): Promise; + enumerateDevices(): Promise; +} + +interface MediaDeviceInfo { + label: string; + id: string; + kind: string; + facing: string; +} diff --git a/webrtc/RTCPeerConnection-tests.ts b/webrtc/RTCPeerConnection-tests.ts index b85c61806..1ed79bf2c 100644 --- a/webrtc/RTCPeerConnection-tests.ts +++ b/webrtc/RTCPeerConnection-tests.ts @@ -1,90 +1,90 @@ -/// -/// - -var config: RTCConfiguration = - { iceServers: [{ urls: "stun.l.google.com:19302" }] }; -var constraints: RTCMediaConstraints = - { mandatory: { offerToReceiveAudio: true, offerToReceiveVideo: true } }; - -var peerConnection: RTCPeerConnection = - new RTCPeerConnection(config, constraints); - -navigator.getUserMedia({ audio: true, video: true }, - stream => { - peerConnection.addStream(stream); - }, - error => { - console.log('Error message: ' + error.message); - console.log('Error name: ' + error.name); - }); - -peerConnection.onaddstream = ev => console.log(ev.type); -peerConnection.ondatachannel = ev => console.log(ev.type); -peerConnection.oniceconnectionstatechange = ev => console.log(ev.type); -peerConnection.onnegotiationneeded = ev => console.log(ev.type); -peerConnection.onopen = ev => console.log(ev.type); -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)); - -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)); - -var webkitSessionDescription = new webkitRTCSessionDescription(offer); - -peerConnection.setRemoteDescription(webkitSessionDescription, () => { - 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)); - -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)); - -var wkPeerConnection: webkitRTCPeerConnection = - new webkitRTCPeerConnection(config, constraints); - +/// +/// + +var config: RTCConfiguration = + { iceServers: [{ urls: "stun.l.google.com:19302" }] }; +var constraints: RTCMediaConstraints = + { mandatory: { offerToReceiveAudio: true, offerToReceiveVideo: true } }; + +var peerConnection: RTCPeerConnection = + new RTCPeerConnection(config, constraints); + +navigator.getUserMedia({ audio: true, video: true }, + stream => { + peerConnection.addStream(stream); + }, + error => { + console.log('Error message: ' + error.message); + console.log('Error name: ' + error.name); + }); + +peerConnection.onaddstream = ev => console.log(ev.type); +peerConnection.ondatachannel = ev => console.log(ev.type); +peerConnection.oniceconnectionstatechange = ev => console.log(ev.type); +peerConnection.onnegotiationneeded = ev => console.log(ev.type); +peerConnection.onopen = ev => console.log(ev.type); +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)); + +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)); + +var webkitSessionDescription = new webkitRTCSessionDescription(offer); + +peerConnection.setRemoteDescription(webkitSessionDescription, () => { + 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)); + +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)); + +var wkPeerConnection: webkitRTCPeerConnection = + new webkitRTCPeerConnection(config, constraints); + diff --git a/webrtc/RTCPeerConnection.d.ts b/webrtc/RTCPeerConnection.d.ts index 661b9685b..0594f84c3 100644 --- a/webrtc/RTCPeerConnection.d.ts +++ b/webrtc/RTCPeerConnection.d.ts @@ -1,363 +1,363 @@ -// Type definitions for WebRTC -// Project: http://dev.w3.org/2011/webrtc/ -// Definitions by: Ken Smith -// Definitions: https://github.com/borisyankov/DefinitelyTyped -// -// Definitions taken from http://dev.w3.org/2011/webrtc/editor/webrtc.html -// -// For example code see: -// https://code.google.com/p/webrtc/source/browse/stable/samples/js/apprtc/js/main.js -// -// For a generic implementation see that deals with browser differences, see: -// https://code.google.com/p/webrtc/source/browse/stable/samples/js/base/adapter.js - -/// - -// TODO(1): Get Typescript to have string-enum types as WebRtc is full of string -// enums. -// https://typescript.codeplex.com/discussions/549207 - -// TODO(2): get Typescript to have union types as WebRtc uses them. -// https://typescript.codeplex.com/workitem/1364 - -interface RTCConfiguration { - iceServers: RTCIceServer[]; -} -declare var RTCConfiguration: { - prototype: RTCConfiguration; - new (): RTCConfiguration; -}; - -interface RTCIceServer { - urls: string; - credential?: string; -} -declare var RTCIceServer: { - prototype: RTCIceServer; - new (): RTCIceServer; -}; - -// moz (Firefox) specific prefixes. -interface mozRTCPeerConnection extends RTCPeerConnection { -} -declare var mozRTCPeerConnection: { - prototype: mozRTCPeerConnection; - new (settings: RTCPeerConnectionConfig, - constraints?:RTCMediaConstraints): mozRTCPeerConnection; -}; -// webkit (Chrome) specific prefixes. -interface webkitRTCPeerConnection extends RTCPeerConnection { -} -declare var webkitRTCPeerConnection: { - prototype: webkitRTCPeerConnection; - new (settings: RTCPeerConnectionConfig, - constraints?:RTCMediaConstraints): webkitRTCPeerConnection; -}; - -// For Chrome, look at the code here: -// https://code.google.com/p/chromium/codesearch#chromium/src/third_party/libjingle/source/talk/app/webrtc/webrtcsession.cc&sq=package:chromium&dr=C&l=63 -interface RTCOptionalMediaConstraint { - // When true, will use DTLS/SCTP data channels - DtlsSrtpKeyAgreement?: boolean; - // When true will use Rtp-based data channels (depreicated) - RtpDataChannels?: boolean; -} - -// ks 12/20/12 - There's more here that doesn't seem to be documented very well yet. -// http://www.w3.org/TR/2013/WD-webrtc-20130910/ -interface RTCMediaConstraints { - mandatory?: RTCMediaOfferConstraints; - optional?: RTCOptionalMediaConstraint[] -} - -interface RTCMediaOfferConstraints { - offerToReceiveAudio: boolean; - offerToReceiveVideo: boolean; -} - -interface RTCSessionDescriptionInit { - type: string; // RTCSdpType; See TODO(1) - sdp: string; -} - -interface RTCSessionDescription { - type?: string; // RTCSdpType; See TODO(1) - sdp?: string; -} -declare var RTCSessionDescription: { - prototype: RTCSessionDescription; - new (descriptionInitDict?: RTCSessionDescriptionInit): RTCSessionDescription; - // TODO: Add serializer. - // See: http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCSdpType) -}; - -interface webkitRTCSessionDescription extends RTCSessionDescription{ - type?: string; - sdp?: string; -} -declare var webkitRTCSessionDescription: { - prototype: webkitRTCSessionDescription; - new (descriptionInitDict?: RTCSessionDescriptionInit): webkitRTCSessionDescription; -}; - -interface mozRTCSessionDescription extends RTCSessionDescription{ - type?: string; - sdp?: string; -} -declare var mozRTCSessionDescription: { - prototype: mozRTCSessionDescription; - new (descriptionInitDict?: RTCSessionDescriptionInit): mozRTCSessionDescription; -}; - - - -interface RTCDataChannelInit { - ordered ?: boolean; // messages must be sent in-order. - maxPacketLifeTime ?: number; // unsigned short - maxRetransmits ?: number; // unsigned short - protocol ?: string; // default = '' - negotiated ?: boolean; // default = false; - id ?: number; // unsigned short -} - -// TODO(1) -declare enum RTCSdpType { - // http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcsdptype - 'offer', - 'pranswer', - 'answer' -} - -interface RTCMessageEvent { - // http://dev.w3.org/2011/webrtc/editor/webrtc.html#event-datachannel-message - // At present, this can be an: ArrayBuffer, a string, or a Blob. - // See TODO(2) - data: any; -} - -// TODO(1) -declare enum RTCDataChannelState { - // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDataChannelState - 'connecting', - 'open', - 'closing', - 'closed' -} - -interface RTCDataChannel extends EventTarget { - label: string; - reliable: boolean; - readyState: string; // RTCDataChannelState; see TODO(1) - bufferedAmount: number; - binaryType: string; - - onopen: (event: Event) => void; - onerror: (event: Event) => void; - onclose: (event: Event) => void; - onmessage: (event: RTCMessageEvent) => void; - - close(): void; - - send(data: string): void ; - send(data: ArrayBuffer): void; - send(data: ArrayBufferView): void; - send(data: Blob): void; -} -declare var RTCDataChannel: { - prototype: RTCDataChannel; - new (): RTCDataChannel; -}; - -interface RTCDataChannelEvent extends Event { - channel: RTCDataChannel; -} -declare var RTCDataChannelEvent: { - prototype: RTCDataChannelEvent; - new (eventInitDict: RTCDataChannelEventInit): RTCDataChannelEvent; -}; - -interface RTCIceCandidateEvent extends Event { - candidate: RTCIceCandidate; -} - -interface RTCMediaStreamEvent extends Event { - stream: MediaStream; -} - -interface EventInit { -} - -interface RTCDataChannelEventInit extends EventInit { - channel: RTCDataChannel; -} - -interface RTCVoidCallback { - (): void; -} -interface RTCSessionDescriptionCallback { - (sdp: RTCSessionDescription): void; -} -interface RTCPeerConnectionErrorCallback { - (errorInformation: DOMError): void; -} - -// TODO(1) -declare enum RTCIceGatheringState { - // http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcicegatheringstate-enum - 'new', - 'gathering', - 'complete' -} - -// TODO(1) -declare enum RTCIceConnectionState { - // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCIceConnectionState - 'new', - 'checking', - 'connected', - 'completed', - 'failed', - 'disconnected', - 'closed' -} - -// TODO(1) -declare enum RTCSignalingState { - // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCSignalingState - 'stable', - 'have-local-offer', - 'have-remote-offer', - 'have-local-pranswer', - 'have-remote-pranswer', - 'closed' -} - -// This is based on the current implementation of WebRtc in Chrome; the spec is -// a little unclear on this. -// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCStatsReport -interface RTCStatsReport { - stat(id: string): string; -} - -interface RTCStatsCallback { - (report: RTCStatsReport): void; -} - -interface RTCPeerConnection { - createOffer(successCallback: RTCSessionDescriptionCallback, - failureCallback?: RTCPeerConnectionErrorCallback, - constraints?: RTCMediaConstraints): void; - createAnswer(successCallback: RTCSessionDescriptionCallback, - failureCallback?: RTCPeerConnectionErrorCallback, - constraints?: RTCMediaConstraints): void; - setLocalDescription(description: RTCSessionDescription, - successCallback?: RTCVoidCallback, - failureCallback?: RTCPeerConnectionErrorCallback): void; - localDescription: RTCSessionDescription; - setRemoteDescription(description: RTCSessionDescription, - successCallback?: RTCVoidCallback, - failureCallback?: RTCPeerConnectionErrorCallback): void; - remoteDescription: RTCSessionDescription; - signalingState: string; // RTCSignalingState; see TODO(1) - updateIce(configuration?: RTCConfiguration, - constraints?: RTCMediaConstraints): void; - addIceCandidate(candidate:RTCIceCandidate, - successCallback:() => void, - failureCallback:RTCPeerConnectionErrorCallback): void; - iceGatheringState: string; // RTCIceGatheringState; see TODO(1) - iceConnectionState: string; // RTCIceConnectionState; see TODO(1) - getLocalStreams(): MediaStream[]; - getRemoteStreams(): MediaStream[]; - createDataChannel(label?: string, - dataChannelDict?: RTCDataChannelInit): RTCDataChannel; - ondatachannel: (event: Event) => void; - addStream(stream: MediaStream, constraints?: RTCMediaConstraints): void; - removeStream(stream: MediaStream): void; - close(): void; - onnegotiationneeded: (event: Event) => void; - onconnecting: (event: Event) => void; - onopen: (event: Event) => void; - onaddstream: (event: RTCMediaStreamEvent) => void; - onremovestream: (event: RTCMediaStreamEvent) => void; - onstatechange: (event: Event) => void; - oniceconnectionstatechange: (event: Event) => void; - onicecandidate: (event: RTCIceCandidateEvent) => void; - onidentityresult: (event: Event) => void; - onsignalingstatechange: (event: Event) => void; - getStats: (successCallback: RTCStatsCallback, - failureCallback: RTCPeerConnectionErrorCallback) => void; -} -declare var RTCPeerConnection: { - prototype: RTCPeerConnection; - new (configuration: RTCConfiguration, - constraints?: RTCMediaConstraints): RTCPeerConnection; -}; - -interface RTCIceCandidate { - candidate?: string; - sdpMid?: string; - sdpMLineIndex?: number; -} -declare var RTCIceCandidate: { - prototype: RTCIceCandidate; - new (candidateInitDict?: RTCIceCandidate): RTCIceCandidate; -}; - -interface webkitRTCIceCandidate extends RTCIceCandidate { - candidate?: string; - sdpMid?: string; - sdpMLineIndex?: number; -} -declare var webkitRTCIceCandidate: { - prototype: webkitRTCIceCandidate; - new (candidateInitDict?: webkitRTCIceCandidate): webkitRTCIceCandidate; -}; - -interface mozRTCIceCandidate extends RTCIceCandidate { - candidate?: string; - sdpMid?: string; - sdpMLineIndex?: number; -} -declare var mozRTCIceCandidate: { - prototype: mozRTCIceCandidate; - new (candidateInitDict?: mozRTCIceCandidate): mozRTCIceCandidate; -}; - -interface RTCIceCandidateInit { - candidate: string; - sdpMid: string; - sdpMLineIndex: number; -} -declare var RTCIceCandidateInit:{ - prototype: RTCIceCandidateInit; - new (): RTCIceCandidateInit; -}; - -interface PeerConnectionIceEvent { - peer: RTCPeerConnection; - candidate: RTCIceCandidate; -} -declare var PeerConnectionIceEvent: { - prototype: PeerConnectionIceEvent; - new (): PeerConnectionIceEvent; -}; - -interface RTCPeerConnectionConfig { - iceServers: RTCIceServer[]; -} -declare var RTCPeerConnectionConfig: { - prototype: RTCPeerConnectionConfig; - new (): RTCPeerConnectionConfig; -}; - -interface Window{ - RTCPeerConnection: RTCPeerConnection; - webkitRTCPeerConnection: webkitRTCPeerConnection; - mozRTCPeerConnection: mozRTCPeerConnection; - RTCSessionDescription: RTCSessionDescription; - webkitRTCSessionDescription: webkitRTCSessionDescription; - mozRTCSessionDescription: mozRTCSessionDescription; - RTCIceCandidate: RTCIceCandidate; - webkitRTCIceCandidate: webkitRTCIceCandidate; - mozRTCIceCandidate: mozRTCIceCandidate; -} +// Type definitions for WebRTC +// Project: http://dev.w3.org/2011/webrtc/ +// Definitions by: Ken Smith +// Definitions: https://github.com/borisyankov/DefinitelyTyped +// +// Definitions taken from http://dev.w3.org/2011/webrtc/editor/webrtc.html +// +// For example code see: +// https://code.google.com/p/webrtc/source/browse/stable/samples/js/apprtc/js/main.js +// +// For a generic implementation see that deals with browser differences, see: +// https://code.google.com/p/webrtc/source/browse/stable/samples/js/base/adapter.js + +/// + +// TODO(1): Get Typescript to have string-enum types as WebRtc is full of string +// enums. +// https://typescript.codeplex.com/discussions/549207 + +// TODO(2): get Typescript to have union types as WebRtc uses them. +// https://typescript.codeplex.com/workitem/1364 + +interface RTCConfiguration { + iceServers: RTCIceServer[]; +} +declare var RTCConfiguration: { + prototype: RTCConfiguration; + new (): RTCConfiguration; +}; + +interface RTCIceServer { + urls: string; + credential?: string; +} +declare var RTCIceServer: { + prototype: RTCIceServer; + new (): RTCIceServer; +}; + +// moz (Firefox) specific prefixes. +interface mozRTCPeerConnection extends RTCPeerConnection { +} +declare var mozRTCPeerConnection: { + prototype: mozRTCPeerConnection; + new (settings: RTCPeerConnectionConfig, + constraints?:RTCMediaConstraints): mozRTCPeerConnection; +}; +// webkit (Chrome) specific prefixes. +interface webkitRTCPeerConnection extends RTCPeerConnection { +} +declare var webkitRTCPeerConnection: { + prototype: webkitRTCPeerConnection; + new (settings: RTCPeerConnectionConfig, + constraints?:RTCMediaConstraints): webkitRTCPeerConnection; +}; + +// For Chrome, look at the code here: +// https://code.google.com/p/chromium/codesearch#chromium/src/third_party/libjingle/source/talk/app/webrtc/webrtcsession.cc&sq=package:chromium&dr=C&l=63 +interface RTCOptionalMediaConstraint { + // When true, will use DTLS/SCTP data channels + DtlsSrtpKeyAgreement?: boolean; + // When true will use Rtp-based data channels (depreicated) + RtpDataChannels?: boolean; +} + +// ks 12/20/12 - There's more here that doesn't seem to be documented very well yet. +// http://www.w3.org/TR/2013/WD-webrtc-20130910/ +interface RTCMediaConstraints { + mandatory?: RTCMediaOfferConstraints; + optional?: RTCOptionalMediaConstraint[] +} + +interface RTCMediaOfferConstraints { + offerToReceiveAudio: boolean; + offerToReceiveVideo: boolean; +} + +interface RTCSessionDescriptionInit { + type: string; // RTCSdpType; See TODO(1) + sdp: string; +} + +interface RTCSessionDescription { + type?: string; // RTCSdpType; See TODO(1) + sdp?: string; +} +declare var RTCSessionDescription: { + prototype: RTCSessionDescription; + new (descriptionInitDict?: RTCSessionDescriptionInit): RTCSessionDescription; + // TODO: Add serializer. + // See: http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCSdpType) +}; + +interface webkitRTCSessionDescription extends RTCSessionDescription{ + type?: string; + sdp?: string; +} +declare var webkitRTCSessionDescription: { + prototype: webkitRTCSessionDescription; + new (descriptionInitDict?: RTCSessionDescriptionInit): webkitRTCSessionDescription; +}; + +interface mozRTCSessionDescription extends RTCSessionDescription{ + type?: string; + sdp?: string; +} +declare var mozRTCSessionDescription: { + prototype: mozRTCSessionDescription; + new (descriptionInitDict?: RTCSessionDescriptionInit): mozRTCSessionDescription; +}; + + + +interface RTCDataChannelInit { + ordered ?: boolean; // messages must be sent in-order. + maxPacketLifeTime ?: number; // unsigned short + maxRetransmits ?: number; // unsigned short + protocol ?: string; // default = '' + negotiated ?: boolean; // default = false; + id ?: number; // unsigned short +} + +// TODO(1) +declare enum RTCSdpType { + // http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcsdptype + 'offer', + 'pranswer', + 'answer' +} + +interface RTCMessageEvent { + // http://dev.w3.org/2011/webrtc/editor/webrtc.html#event-datachannel-message + // At present, this can be an: ArrayBuffer, a string, or a Blob. + // See TODO(2) + data: any; +} + +// TODO(1) +declare enum RTCDataChannelState { + // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDataChannelState + 'connecting', + 'open', + 'closing', + 'closed' +} + +interface RTCDataChannel extends EventTarget { + label: string; + reliable: boolean; + readyState: string; // RTCDataChannelState; see TODO(1) + bufferedAmount: number; + binaryType: string; + + onopen: (event: Event) => void; + onerror: (event: Event) => void; + onclose: (event: Event) => void; + onmessage: (event: RTCMessageEvent) => void; + + close(): void; + + send(data: string): void ; + send(data: ArrayBuffer): void; + send(data: ArrayBufferView): void; + send(data: Blob): void; +} +declare var RTCDataChannel: { + prototype: RTCDataChannel; + new (): RTCDataChannel; +}; + +interface RTCDataChannelEvent extends Event { + channel: RTCDataChannel; +} +declare var RTCDataChannelEvent: { + prototype: RTCDataChannelEvent; + new (eventInitDict: RTCDataChannelEventInit): RTCDataChannelEvent; +}; + +interface RTCIceCandidateEvent extends Event { + candidate: RTCIceCandidate; +} + +interface RTCMediaStreamEvent extends Event { + stream: MediaStream; +} + +interface EventInit { +} + +interface RTCDataChannelEventInit extends EventInit { + channel: RTCDataChannel; +} + +interface RTCVoidCallback { + (): void; +} +interface RTCSessionDescriptionCallback { + (sdp: RTCSessionDescription): void; +} +interface RTCPeerConnectionErrorCallback { + (errorInformation: DOMError): void; +} + +// TODO(1) +declare enum RTCIceGatheringState { + // http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcicegatheringstate-enum + 'new', + 'gathering', + 'complete' +} + +// TODO(1) +declare enum RTCIceConnectionState { + // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCIceConnectionState + 'new', + 'checking', + 'connected', + 'completed', + 'failed', + 'disconnected', + 'closed' +} + +// TODO(1) +declare enum RTCSignalingState { + // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCSignalingState + 'stable', + 'have-local-offer', + 'have-remote-offer', + 'have-local-pranswer', + 'have-remote-pranswer', + 'closed' +} + +// This is based on the current implementation of WebRtc in Chrome; the spec is +// a little unclear on this. +// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCStatsReport +interface RTCStatsReport { + stat(id: string): string; +} + +interface RTCStatsCallback { + (report: RTCStatsReport): void; +} + +interface RTCPeerConnection { + createOffer(successCallback: RTCSessionDescriptionCallback, + failureCallback?: RTCPeerConnectionErrorCallback, + constraints?: RTCMediaConstraints): void; + createAnswer(successCallback: RTCSessionDescriptionCallback, + failureCallback?: RTCPeerConnectionErrorCallback, + constraints?: RTCMediaConstraints): void; + setLocalDescription(description: RTCSessionDescription, + successCallback?: RTCVoidCallback, + failureCallback?: RTCPeerConnectionErrorCallback): void; + localDescription: RTCSessionDescription; + setRemoteDescription(description: RTCSessionDescription, + successCallback?: RTCVoidCallback, + failureCallback?: RTCPeerConnectionErrorCallback): void; + remoteDescription: RTCSessionDescription; + signalingState: string; // RTCSignalingState; see TODO(1) + updateIce(configuration?: RTCConfiguration, + constraints?: RTCMediaConstraints): void; + addIceCandidate(candidate:RTCIceCandidate, + successCallback:() => void, + failureCallback:RTCPeerConnectionErrorCallback): void; + iceGatheringState: string; // RTCIceGatheringState; see TODO(1) + iceConnectionState: string; // RTCIceConnectionState; see TODO(1) + getLocalStreams(): MediaStream[]; + getRemoteStreams(): MediaStream[]; + createDataChannel(label?: string, + dataChannelDict?: RTCDataChannelInit): RTCDataChannel; + ondatachannel: (event: Event) => void; + addStream(stream: MediaStream, constraints?: RTCMediaConstraints): void; + removeStream(stream: MediaStream): void; + close(): void; + onnegotiationneeded: (event: Event) => void; + onconnecting: (event: Event) => void; + onopen: (event: Event) => void; + onaddstream: (event: RTCMediaStreamEvent) => void; + onremovestream: (event: RTCMediaStreamEvent) => void; + onstatechange: (event: Event) => void; + oniceconnectionstatechange: (event: Event) => void; + onicecandidate: (event: RTCIceCandidateEvent) => void; + onidentityresult: (event: Event) => void; + onsignalingstatechange: (event: Event) => void; + getStats: (successCallback: RTCStatsCallback, + failureCallback: RTCPeerConnectionErrorCallback) => void; +} +declare var RTCPeerConnection: { + prototype: RTCPeerConnection; + new (configuration: RTCConfiguration, + constraints?: RTCMediaConstraints): RTCPeerConnection; +}; + +interface RTCIceCandidate { + candidate?: string; + sdpMid?: string; + sdpMLineIndex?: number; +} +declare var RTCIceCandidate: { + prototype: RTCIceCandidate; + new (candidateInitDict?: RTCIceCandidate): RTCIceCandidate; +}; + +interface webkitRTCIceCandidate extends RTCIceCandidate { + candidate?: string; + sdpMid?: string; + sdpMLineIndex?: number; +} +declare var webkitRTCIceCandidate: { + prototype: webkitRTCIceCandidate; + new (candidateInitDict?: webkitRTCIceCandidate): webkitRTCIceCandidate; +}; + +interface mozRTCIceCandidate extends RTCIceCandidate { + candidate?: string; + sdpMid?: string; + sdpMLineIndex?: number; +} +declare var mozRTCIceCandidate: { + prototype: mozRTCIceCandidate; + new (candidateInitDict?: mozRTCIceCandidate): mozRTCIceCandidate; +}; + +interface RTCIceCandidateInit { + candidate: string; + sdpMid: string; + sdpMLineIndex: number; +} +declare var RTCIceCandidateInit:{ + prototype: RTCIceCandidateInit; + new (): RTCIceCandidateInit; +}; + +interface PeerConnectionIceEvent { + peer: RTCPeerConnection; + candidate: RTCIceCandidate; +} +declare var PeerConnectionIceEvent: { + prototype: PeerConnectionIceEvent; + new (): PeerConnectionIceEvent; +}; + +interface RTCPeerConnectionConfig { + iceServers: RTCIceServer[]; +} +declare var RTCPeerConnectionConfig: { + prototype: RTCPeerConnectionConfig; + new (): RTCPeerConnectionConfig; +}; + +interface Window{ + RTCPeerConnection: RTCPeerConnection; + webkitRTCPeerConnection: webkitRTCPeerConnection; + mozRTCPeerConnection: mozRTCPeerConnection; + RTCSessionDescription: RTCSessionDescription; + webkitRTCSessionDescription: webkitRTCSessionDescription; + mozRTCSessionDescription: mozRTCSessionDescription; + RTCIceCandidate: RTCIceCandidate; + webkitRTCIceCandidate: webkitRTCIceCandidate; + mozRTCIceCandidate: mozRTCIceCandidate; +}