diff --git a/webrtc/MediaStream.d.ts b/webrtc/MediaStream.d.ts
new file mode 100644
index 0000000000..7d6b3759b8
--- /dev/null
+++ b/webrtc/MediaStream.d.ts
@@ -0,0 +1,136 @@
+// Type definitions take from http://dev.w3.org/2011/webrtc/editor/getusermedia.html
+
+interface MediaStreamConstraints {
+ audio: bool;
+ video: bool;
+}
+declare var MediaStreamConstraints: {
+ prototype: MediaStreamConstraints;
+ new (): MediaStreamConstraints;
+}
+
+interface MediaTrackConstraints {
+ mandatory: MediaTrackConstraintSet;
+ optional: MediaTrackConstraint[];
+}
+declare var MediaTrackConstraints: {
+ prototype: MediaTrackConstraints;
+ new (): MediaTrackConstraints;
+}
+
+// ks - Not defined in the source doc.
+interface MediaTrackConstraintSet {
+}
+declare var MediaTrackConstraintSet: {
+ prototype: MediaTrackConstraintSet;
+ new (): MediaTrackConstraintSet;
+}
+
+// ks - Not defined in the source doc.
+interface MediaTrackConstraint {
+}
+declare var MediaTrackConstraint: {
+ prototype: MediaTrackConstraint;
+ new (): MediaTrackConstraints;
+}
+
+interface Navigator {
+ getUserMedia(constraints: MediaStreamConstraints, successCallback: (stream: any) => void , errorCallback: (error: Error) => void );
+ webkitGetUserMedia(constraints: MediaStreamConstraints, successCallback: (stream: any) => void , errorCallback: (error: Error) => void );
+}
+
+interface EventHandler { (event: Event): void; }
+
+interface NavigatorUserMediaSuccessCallback { (stream: LocalMediaStream): void; }
+
+interface NavigatorUserMediaError {
+ PERMISSION_DENIED: number; // = 1;
+ code: number;
+}
+declare var NavigatorUserMediaError: {
+ prototype: NavigatorUserMediaError;
+ new (): NavigatorUserMediaError;
+ PERMISSION_DENIED: number; // = 1;
+}
+
+interface NavigatorUserMediaErrorCallback { (error: NavigatorUserMediaError): void; }
+
+interface MediaStreamTrackList {
+ length: number;
+ item: MediaStreamTrack;
+ add(track: MediaStreamTrack): void;
+ remove(track: MediaStreamTrack): void;
+ onaddtrack: (event: Event) => void;
+ onremovetrack: (event: Event) => void;
+}
+declare var MediaStreamTrackList: {
+ prototype: MediaStreamTrackList;
+ new (): MediaStreamTrackList;
+}
+declare var webkitMediaStreamTrackList: {
+ prototype: MediaStreamTrackList;
+ new (): MediaStreamTrackList;
+}
+
+interface MediaStream {
+ label: string;
+ audioTracks: MediaStreamTrackList;
+ videoTracks: MediaStreamTrackList;
+ ended: bool;
+ onended: (event: Event) => void;
+}
+declare var MediaStream: {
+ prototype: MediaStream;
+ new (): MediaStream;
+ new (trackContainers: MediaStream[]): MediaStream;
+ new (trackContainers: MediaStreamTrackList[]): MediaStream;
+ new (trackContainers: MediaStreamTrack[]): MediaStream;
+}
+declare var webkitMediaStream: {
+ prototype: MediaStream;
+ new (): MediaStream;
+ new (trackContainers: MediaStream[]): MediaStream;
+ new (trackContainers: MediaStreamTrackList[]): MediaStream;
+ new (trackContainers: MediaStreamTrack[]): MediaStream;
+}
+
+interface LocalMediaStream extends MediaStream {
+ stop(): void;
+}
+
+interface MediaStreamTrack {
+ kind: string;
+ label: string;
+ enabled: bool;
+ LIVE: number; // = 0;
+ MUTED: number; // = 1;
+ ENDED: number; // = 2;
+ readyState: number;
+ onmute: (event: Event) => void;
+ onunmute: (event: Event) => void;
+ onended: (event: Event) => void;
+}
+var MediaStramTrack: {
+ prototype: MediaStreamTrack;
+ new (): MediaStreamTrack;
+ LIVE: number; // = 0;
+ MUTED: number; // = 1;
+ ENDED: number; // = 2;
+}
+
+interface URL {
+ createObjectURL(stream: MediaStream): string;
+}
+var URL: {
+ prototype: MediaStreamTrack;
+ new (): URL;
+ createObjectURL(stream: MediaStream): string;
+}
+
+interface WebkitURL extends URL {
+}
+var webkitURL: {
+ prototype: WebkitURL;
+ new (): URL;
+ createObjectURL(stream: MediaStream): string;
+}
diff --git a/webrtc/RTCPeerConnection.d.ts b/webrtc/RTCPeerConnection.d.ts
new file mode 100644
index 0000000000..7276b60aa7
--- /dev/null
+++ b/webrtc/RTCPeerConnection.d.ts
@@ -0,0 +1,221 @@
+///
+
+// These are TypeScript definitions to support static typing in TypeScript when interacting with WebRtc.
+// Definitions taken from http://dev.w3.org/2011/webrtc/editor/webrtc.html
+
+interface RTCConfiguration {
+ iceServers: RTCIceServer[];
+}
+var RTCConfiguration: {
+ prototype: RTCConfiguration;
+ new (): RTCConfiguration;
+}
+
+interface RTCIceServer {
+ url: string;
+ credential?: string;
+}
+var RTCIceServer: {
+ prototype: RTCIceServer;
+ new (): RTCIceServer;
+}
+
+interface webkitRTCPeerConnection extends RTCPeerConnection {
+}
+var webkitRTCPeerConnection: {
+ prototype: webkitRTCPeerConnection;
+ new (settings: RTCPeerConnectionConfig, constraints?:MediaConstraints): webkitRTCPeerConnection;
+}
+
+interface IceState {
+}
+var IceState: {
+ prototype: IceState;
+ new (): IceState;
+}
+
+// ks 12/20/12 - There's more here that doesn't seem to be documented very well yet.
+interface MediaConstraints {
+ mandatory: MediaOfferConstraints;
+}
+
+interface MediaOfferConstraints {
+ OfferToReceiveAudio: bool;
+ OfferToReceiveVideo: bool;
+}
+
+interface RTCSessionDescription {
+ type?: RTCSdpType;
+ sdp?: string;
+}
+var RTCSessionDescription: {
+ prototype: RTCSessionDescription;
+ new (descriptionInitDict?: RTCSessionDescriptionInit): RTCSessionDescription;
+}
+
+interface RTCSessionDescriptionInit {
+ type: RTCSdpType;
+ sdp: string;
+}
+var RTCSessionDescriptionInit: {
+ prototype: RTCSessionDescriptionInit;
+ new (): RTCSessionDescriptionInit;
+}
+
+interface SdpType {
+}
+
+interface RTCPeerState {
+}
+
+interface RTCDataChannelInit {
+ reliable: bool;
+}
+
+enum RTCSdpType {
+ offer,
+ pranswer,
+ answer
+}
+
+enum RTCDataChannelState {
+ connecting,
+ open,
+ closing,
+ closed
+}
+
+interface RTCDataChannel extends EventTarget {
+ label: string;
+ reliable: bool;
+ readyState: RTCDataChannelState;
+ bufferedAmount: number;
+ onopen: (event: Event)=> void;
+ onerror: (event: Event)=> void;
+ onclose: (event: Event)=> void;
+ close(): void;
+ onmessage: (event: Event)=> void;
+ binaryType: string;
+ send(data: string);
+ send(data: ArrayBuffer);
+ send(data: Blob);
+}
+declare var RTCDataChannel: {
+ prototype: RTCDataChannel;
+ new (): RTCDataChannel;
+}
+
+interface RTCDataChannelEvent extends Event {
+ constructor (eventInitDict: RTCDataChannelEventInit);
+ channel: RTCDataChannel;
+}
+var RTCDataChannelEvent: {
+ prototype: RTCDataChannelEvent;
+ new (eventInitDict: RTCDataChannelEventInit);
+}
+
+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: string): void;
+}
+
+// This should be an enum
+interface RTCGatheringState {
+ string;
+}
+
+// This should be an enum
+interface RTCIceState {
+ string;
+}
+
+interface RTCPeerConnection {
+ createOffer(successCallback: RTCSessionDescriptionCallback, failureCallback?: RTCPeerConnectionErrorCallback, constraints?: MediaConstraints): void;
+ createAnswer(successCallback: RTCSessionDescriptionCallback, failureCallback?: RTCPeerConnectionErrorCallback, constraints?: MediaConstraints): void;
+ setLocalDescription(description: RTCSessionDescription, successCallback?: RTCVoidCallback, failureCallback?: RTCPeerConnectionErrorCallback): void;
+ localDescription: RTCSessionDescription;
+ setRemoteDescription(description: RTCSessionDescription, successCallback?: RTCVoidCallback, failureCallback?: RTCPeerConnectionErrorCallback): void;
+ remoteDescription: RTCSessionDescription;
+ readyState: RTCPeerState;
+ updateIce(configuration?: RTCConfiguration, constraints?: MediaConstraints): void;
+ addIceCandidate(candidate: RTCIceCandidate): void;
+ iceGatheringState: RTCGatheringState;
+ iceState: RTCIceState;
+ localStreams: MediaStream[];
+ remoteStreams: MediaStream[];
+ createDataChannel(label?: string, dataChannelDict?: RTCDataChannelInit): RTCDataChannel;
+ ondatachannel: (event: Event)=> void;
+ addStream(stream: MediaStream, constraints?: MediaConstraints): 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;
+ onicechange: (event: Event)=> void;
+ onicecandidate: (event: RTCIceCandidateEvent)=> void;
+ onidentityresult: (event: Event)=> void;
+}
+var RTCPeerConnection: {
+ prototype: RTCPeerConnection;
+ new (configuration: RTCConfiguration, constraints?: MediaConstraints): RTCPeerConnection;
+}
+
+interface RTCIceCandidate {
+ candidate?: string;
+ sdpMid?: string;
+ sdpMLineIndex?: number;
+}
+var RTCIceCandidate: {
+ prototype: RTCIceCandidate;
+ new (candidateInitDict?: RTCIceCandidate);
+}
+
+interface RTCIceCandidateInit {
+ candidate: string;
+ sdpMid: string;
+ sdpMLineIndex: number;
+}
+var RTCIceCandidateInit:{
+ prototype: RTCIceCandidateInit;
+ new (): RTCIceCandidateInit;
+}
+
+interface PeerConnectionIceEvent {
+ peer: RTCPeerConnection;
+ candidate: RTCIceCandidate;
+}
+var PeerConnectionIceEvent: {
+ prototype: PeerConnectionIceEvent;
+ new (): PeerConnectionIceEvent;
+}
+
+interface RTCPeerConnectionConfig {
+ iceServers: RTCIceServer[];
+}
+var RTCPeerConnectionConfig: {
+ prototype: RTCPeerConnectionConfig;
+ new (): RTCPeerConnectionConfig;
+}
diff --git a/webrtc/readme.md b/webrtc/readme.md
new file mode 100644
index 0000000000..1cc42b2d73
--- /dev/null
+++ b/webrtc/readme.md
@@ -0,0 +1,14 @@
+# WebRTC Definition Notes
+
+## The WebRTC specification
+
+The WebRTC specification is currently a work in progress, but it has been implemented at a basic level in recent versions of Chrome, Opera and (to a lesser extent) Firefox.
+The latest version of the specification can be found at http://dev.w3.org/2011/webrtc/editor/webrtc.html.
+
+This particular set of definitions has been annotated with the vendor-specific prefixes for Chrome (e.g., `webitkit`),
+but anyone who wants, feel free to add the Mozilla-specific prefixes.
+
+### Adding the reference to your project
+
+ ///
+ ///
\ No newline at end of file