From 8a1a2552991d6417e66a351efb5e02328bf37a13 Mon Sep 17 00:00:00 2001 From: Cullen Jennings Date: Mon, 27 Jan 2014 19:08:50 -0700 Subject: [PATCH] seting up for push of webrtc 20140127 --- archives/20140127/images/camera-names-exp.svg | 29 + .../20140127/images/change_states_after.png | Bin 0 -> 59386 bytes .../20140127/images/change_states_after2.png | Bin 0 -> 24109 bytes .../20140127/images/change_states_before.png | Bin 0 -> 54212 bytes .../20140127/images/change_states_before2.png | Bin 0 -> 29063 bytes archives/20140127/images/icestates.svg | 589 ++ .../20140127/images/ladder-2party-full.svg | 168 + .../20140127/images/ladder-2party-simple.svg | 177 + .../20140127/images/ladder-mcu-simple.svg | 77 + archives/20140127/images/media-stream-1.png | Bin 0 -> 10784 bytes archives/20140127/images/media-stream-2.png | Bin 0 -> 23216 bytes archives/20140127/images/media-stream.png | Bin 0 -> 38828 bytes .../20140127/images/overconstrained_after.png | Bin 0 -> 55195 bytes .../images/overconstrained_before.png | Bin 0 -> 63916 bytes archives/20140127/images/peerstates.svg | 1284 ++++ archives/20140127/webrtc.css | 52 + archives/20140127/webrtc.html | 5466 +++++++++++++++++ archives/20140127/webrtc.js | 73 + webrtc.js | 4 +- 19 files changed, 7917 insertions(+), 2 deletions(-) create mode 100644 archives/20140127/images/camera-names-exp.svg create mode 100644 archives/20140127/images/change_states_after.png create mode 100644 archives/20140127/images/change_states_after2.png create mode 100644 archives/20140127/images/change_states_before.png create mode 100644 archives/20140127/images/change_states_before2.png create mode 100644 archives/20140127/images/icestates.svg create mode 100644 archives/20140127/images/ladder-2party-full.svg create mode 100644 archives/20140127/images/ladder-2party-simple.svg create mode 100644 archives/20140127/images/ladder-mcu-simple.svg create mode 100644 archives/20140127/images/media-stream-1.png create mode 100644 archives/20140127/images/media-stream-2.png create mode 100644 archives/20140127/images/media-stream.png create mode 100644 archives/20140127/images/overconstrained_after.png create mode 100644 archives/20140127/images/overconstrained_before.png create mode 100644 archives/20140127/images/peerstates.svg create mode 100644 archives/20140127/webrtc.css create mode 100644 archives/20140127/webrtc.html create mode 100644 archives/20140127/webrtc.js diff --git a/archives/20140127/images/camera-names-exp.svg b/archives/20140127/images/camera-names-exp.svg new file mode 100644 index 000000000..2e20c9357 --- /dev/null +++ b/archives/20140127/images/camera-names-exp.svg @@ -0,0 +1,29 @@ + + + + +left +user +right +environment + + + + + + + + + + + + + + + + + +person +Top down view + diff --git a/archives/20140127/images/change_states_after.png b/archives/20140127/images/change_states_after.png new file mode 100644 index 0000000000000000000000000000000000000000..7440ebd79ab09fb07be5d9c01fdce37e1ed37082 GIT binary patch literal 59386 zcmb5WWmFwovjvK~ySqbhw*bN2U4pw4*l2KqY+Ql|hXjWJ!CgXt;Oc zeE8(;f+N#hik^G2g5ANt>a`pF+5M!qtsV1XV2&WBP+Os!ncz1RZw_HD;TQ-KMnb{< zM5-Jr=(N8*M6cIQ+kn8qoTmQ7MqGjd5rzPRLhKO1yt)QuFlTkqC&@$2Ui(8M?|CF2 zj@ER#p3xhv>w;fDe|>zwkLX!<@j-jJc5YqSap5nLNN&zTXGC2>x|Cq~i0APGQ-(i2?|w{t zBI}#4v&P24`l27C0P!UslZRQp0<#h)*22;<;q^9cLBy#JuAhUV#`WkuA+Bfy7LMdp zR0f#zVMs!&m=q^zXFi$Gwk{qZh8h$Qv_eDHuDS;bLaqKlaFMx>vrW^b4p^v<-E`rv zgz&=iE%YL^vqDV~{kwE)1Z1gd zX|A|bh>rZp5$lg>Em23bhywhk%t5>e@a3gPIdPtRC|K10J|4fBZ_XaZIr9)X@E{rO zp%>jakvUtIC`P02D;VjUUy;huf z-Q2AJdg*+Md|@<`Z@r)tnK22hw!(yR4lE98t$y<$8utFE$8B{375(kdb3vTMrShrS z*%P$ObT#wWR(5I!gjM!JoOT06Y6+0%-`$7=b_4RUgvgF-sgK_K%V@6=%pyfzJM9DM zmqtjcr*1p&b9Ag7EfktMWe*Iu2yEPN05XJbS=34i%WXDo`AgB2aG(h`Rp<$JXUr+4 z99vXsxUD3@*y#SUi#<+=7lqih5QJ%dJA;HKekZ1^+?yyU>%tEhQXT_P6Wj>?rBZlB z`f^eAya@p~^7zQ`a#3jP1rDeZ3O(FZq1L-i%BP`VVPTvt>SL=;C1Bf8-cM4H5<#WH zwWwNeu)^A_<@KnI1m9T zxcD=80OKSj9IFKf6?s;8ip|WZp9TrCTi5#n(<&h4RgNLM$&%st{>!CyS^y3RW`*Dl z#tQmONcYPR4nhdF@#yXhWzDzpDqXJB6ny5qB)jX^Ycq2~oy`iRA+-|WNVMg|l!RM- zy<5Mj7efTWhr>ZHkCWUkc5|?y%RHrpOfzA6x?h!Kp&7%R<@CpT_z)=kpk)W-0$K!r zAuxuKIs^&T>#W1|c9-xf_L)Ae0wQ139&=&=YeZ|W?DPYKjOO!ngbrk? zoraH~nutnAck&nOgaC1h+vhN6X-3+T*`5kD%tXz+DDhL;^`nIZt;e#BeMvrom4ogB zls}lX$;T=z@DvYU*NE}(!cM^2@O!mP?>WViG4ozh5}(j4G~AY88>P`<8~cqR*jQ-)D6AwMUoZGq^M*O>3VoxTnYDtvW*YBe#oO<9E zXr6uJni*?F%2x|JT@xj~6z*AfV>1TzsT*iPc0h%eU{7Cs7Bf=E+{cHZs_02kck>ZZ zu{ok{gJ%GRK)x>JG?b@yFc;z1;JHcJKev8g_BC1b9X~>RHkziWW9%On`%6_9`@{YB zPvya-yF{4~H3odyKR`OUT zCL<5L6(QCtk@913Y)LDV6DR+8OW2d|i-;wxya)Nd*P@cRSC`Q~D~T$>UVi_&6NfG8 z@XwKM2ZfEmOhNnqxuh?pL)tNyYH!!;cIJ{1kUmvS_+VLL2ABnPv*?;e zJ&&X|&_RGOSXB3lnbtBPlULs2%0Dt;<|ylrnP-0U`9nuB@=5lO%RKU~FrskY_qeEm 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%0ACicPXVnStnnw>MsImjE`vN-$K!C;D=>tp6^8dT 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 hi~a9^mNZl|22 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 F{{wukVj2Jd literal 0 HcmV?d00001 diff --git a/archives/20140127/images/change_states_before2.png b/archives/20140127/images/change_states_before2.png new file mode 100644 index 0000000000000000000000000000000000000000..6897e47edf4209bf430efb29f64559b062c71797 GIT binary patch literal 29063 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 literal 0 HcmV?d00001 diff --git a/archives/20140127/images/icestates.svg b/archives/20140127/images/icestates.svg new file mode 100644 index 000000000..5a738b5c6 --- /dev/null +++ b/archives/20140127/images/icestates.svg @@ -0,0 +1,589 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +new +disconnected +failed +checking +connected +completed +closed(reachable fromany state) + \ No newline at end of file diff --git a/archives/20140127/images/ladder-2party-full.svg b/archives/20140127/images/ladder-2party-full.svg new file mode 100644 index 000000000..6cbf8bb17 --- /dev/null +++ b/archives/20140127/images/ladder-2party-full.svg @@ -0,0 +1,168 @@ + +Call showing all callback - this is far from complete +Alice's Turn + +Alice's Turn +Alice's Browser + +Alice's Browser +Alice's App + +Alice's App +Alice + +Alice +Web Server + +Web Server +Bob + +Bob +Bob's App + +Bob's App +Bob's Browse + +Bob's Browse +Bob's Turn + +Bob's Turn + +1. Load Page + +2. Authenticate + +3. create PeerConnection() + +4. Alloc (pair 1) + +5. Alloc (pair 2) + +6. Alloc (pair 3) + +7. IPs and Ports (pair 1) + +8. onIceCandiate + +9. IPs and Ports (pair 2) + +10. onIceCandiate + +11. IPs and Ports (pair 3) + +12. onIceCandiate + +13. Load Page + +14. Authenticate + +15. create PeerConnection() + +16. Alloc + +17. Alloc + +18. Alloc + +19. IPs and Ports + +20. IPs and Ports + +21. IPs and Ports + +22. Call Bob + +23. addStream( data ) + +24. onRenegotationNeeed + +25. addStream( audio/video ) + +26. onRenegotationNeeed + +27. createOffer + +28. offer + +29. setLocal + +30. Offer to Bob + +31. Offer + +32. SetRemote + +33. TBD Remote has audio, video, and data + +34. Phones Ringing Dude + +35. addStream( data ) + +36. createAnswer( Provisional, RelayOnly ) + +37. PR_Answer + +38. setLocal + +39. PR_Answer to Alice + +40. Permission + +41. De-Alloc (RTCP port of pair1) + +42. De-Alloc (pair 2) + +43. De-Alloc (pair 3) + +44. onRemoteStream( data ) + +45. ICE Check + +46. ICE Check + +47. DTLS + +48. DTLS + +49. SCTP/Data + +50. SCTP/Data + +51. onRemoteStream( data ) + +52. time passes - remove later + +53. PR_Answer + +54. setRemote + +55. Permission + +56. Accept Audio and Video + +57. addStream( audio/video ) + +58. createAnswer + +59. Answer + +60. setLocal + +61. Answer to Alice + +62. onRemoteStream( audio/video ) + +63. RTP/Data + +64. RTP/Data + +65. ICE Check + +66. RTP/Data + +67. time passes - remove later + +68. Answer + +69. setRemote + \ No newline at end of file diff --git a/archives/20140127/images/ladder-2party-simple.svg b/archives/20140127/images/ladder-2party-simple.svg new file mode 100644 index 000000000..f8e1e7d00 --- /dev/null +++ b/archives/20140127/images/ladder-2party-simple.svg @@ -0,0 +1,177 @@ + +Simple Call Flow +Alice's Turn + +Alice's Turn +Alice's Browser + +Alice's Browser +Alice's App + +Alice's App +Alice + +Alice +Alice's Web Server + +Alice's Web Server +Bob's Web Server + +Bob's Web Server +Bob + +Bob +Bob's App + +Bob's App +Bob's Browser + +Bob's Browser +Bob's Turn + +Bob's Turn + +1. Load Page + +2. Authenticate + +3. Load Page + +4. Authenticate + +5. Call Bob + +6. new RTCPeerConnection() + +7. createDataChannel() + +8. addStream(stream) + +9. event: "negotiationneeded" + +10. createOffer(gotOffer) + +11. Alloc + +12. IPs and Ports + +13. callback: gotOffer(offer) + +14. setLocalDescription(offer) + +15. offer + +16. offer + +17. offer + +18. new RTCPeerConnection() + +19. setRemoteDescription(offer) + +20. event: "addstream" with remoteStream + +21. Phones Ringing Dude + +22. constr = {iceTransports: "relay"} + +23. createAnswer(gotAnswer, constr) + +24. Alloc + +25. IPs and Ports + +26. callback: gotAnswer(answer) + +27. answer.type = "pranswer"; pranswer = answer + +28. setLocalDescription(pranswer) + +29. pranswer + +30. Permission + +31. pranswer + +32. pranswer + +33. setRemoteDescription(pranswer) + +34. Permission + +35. ICE Check + +36. ICE Check + +37. DTLS + +38. DTLS + +39. SCTP/Data + +40. SCTP/Data + +41. event: "datachannel" + +42. Accept Audio and Video + +43. addStream(stream) + +44. createAnswer(gotAnswer) + +45. callback: gotAnswer(answer) + +46. setLocalDescription(answer) + +47. answer + +48. SRTP + +49. SRTP + +50. ICE Check + +51. SRTP without relay + +52. answer + +53. answer + +54. setRemoteDescription(answer) + +55. event: "addstream" with remoteStream + +56. Add document camera + +57. addStream(docStream) + +58. event: "negotationneeded" + +59. createOffer(gotOffer) + +60. callbakc: gotOffer(offer) + +61. setLocalDescription(offer) + +62. offer + +63. offer + +64. offer + +65. setRemoteDescription(offer) + +66. event: "addstream" with docStream + +67. createAnswer(gotAnswer) + +68. callback: gotAnswer(answer) + +69. answer + +70. answer + +71. answer + +72. setRemoteDescription(answer); + \ No newline at end of file diff --git a/archives/20140127/images/ladder-mcu-simple.svg b/archives/20140127/images/ladder-mcu-simple.svg new file mode 100644 index 000000000..9a38de954 --- /dev/null +++ b/archives/20140127/images/ladder-mcu-simple.svg @@ -0,0 +1,77 @@ + +Simple hangout where media set is overlapped with hair check +Alice + +Alice +Alice's Browser + +Alice's Browser +Alice's App + +Alice's App +Alice's Turn + +Alice's Turn +Web Server Browse + +Web Server Browse +Media Switch + +Media Switch + +1. Load Page + +2. Authenticate + +3. stuff + +4. Offer + +5. Check Hair + +6. create PeerConnection() + +7. Alloc + +8. SetRemote( Offer ) + +9. createAnswer( Provisional ) + +10. IPs and Ports + +11. answer + +12. setLocal + +13. onRemoteStream main + +14. onRemoteStream thumbnail one + +15. onRemoteStream thumbnail two + +16. ICE + +17. stuff + +18. answer + +19. DTLS + +20. SRTP + +21. Hair is fluffy + +22. addStream audio/video + +23. createAnswer + +24. answer + +25. setLocal + +26. stuff + +27. answer + +28. SRTP + \ No newline at end of file diff --git a/archives/20140127/images/media-stream-1.png b/archives/20140127/images/media-stream-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5b43e1c3706a8a4b91ed07878d32753deb52c954 GIT binary patch literal 10784 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 E0QWo`EC2ui literal 0 HcmV?d00001 diff --git a/archives/20140127/images/media-stream-2.png b/archives/20140127/images/media-stream-2.png new file mode 100644 index 0000000000000000000000000000000000000000..da957deb27a69809f124176be8c9a2d48c6ee68a GIT binary patch literal 23216 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ˆVj-uaRW7ZhEMMWLP$t?z;v?cF7qG$_9B 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 CV7~ + + + + + +have-local-offer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +stable +have-remote-offer +have-local-pranswer +have-remote-pranswer + + diff --git a/archives/20140127/webrtc.css b/archives/20140127/webrtc.css new file mode 100644 index 000000000..34e660fdd --- /dev/null +++ b/archives/20140127/webrtc.css @@ -0,0 +1,52 @@ + +@media screen { + html { background: #eeeeee; } + body { margin-bottom: 30%; border-bottom: thin solid #3c790a; } +} + +pre { margin-left: 2em; white-space: pre-wrap; } +dt, dfn { font-weight: bold; font-style: normal; } +i, em, dt dfn { font-style: italic; } +pre, code { font-size: inherit; font-family: monospace, Droid Sans Fallback, sans-serif; font-variant: normal; } +pre strong { color: black; font: inherit; font-weight: bold; background: yellow; } +pre em { font-weight: bolder; font-style: normal; } +@media screen { code { color: orange; } } +var sub { vertical-align: bottom; font-size: smaller; position: relative; top: 0.1em; } +table { border-collapse: collapse; border-style: hidden hidden none hidden; } +table thead, table tbody { border-bottom: solid; } +table tbody th { text-align: left; } +table tbody th:first-child { border-left: solid; } +table td, table th { border-left: solid; border-right: solid; border-bottom: solid thin; vertical-align: top; padding: 0.2em; } + +ins { background: green; color: white; /* color: green; border: solid thin lime; padding: 0.3em; line-height: 1.6em; */ text-decoration: none; } +del { background: maroon; color: white; /* color: maroon; border: solid thin red; padding: 0.3em; line-height: 1.6em; */ text-decoration: line-through; } +body ins, body del { display: block; } +body * ins, body * del { display: inline; } + + +p > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]), +li > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]) { border-bottom: solid #99CC99; } + +.note { color: green; background: transparent; font-family: sans-serif, Droid Sans Fallback; } +.warning { color: red; background: transparent; } +.note, .warning { font-weight: bolder; font-style: italic; } +.note em, .warning em, .note i, .warning i { font-style: normal; } +p.note, div.note { padding: 0.5em 2em; } +span.note { padding: 0 2em; } +.note p:first-child, .warning p:first-child { margin-top: 0; } +.note p:last-child, .warning p:last-child { margin-bottom: 0; } +.warning:before { font-style: normal; } +p.note:before { content: 'Note: '; } +p.warning:before { content: '\26A0 Warning! '; } + +.bookkeeping:before { display: block; content: 'Bookkeeping details'; font-weight: bolder; font-style: italic; } +.bookkeeping { font-size: 0.8em; margin: 2em 0; } +.bookkeeping p { margin: 0.5em 2em; display: list-item; list-style: square; } +.bookkeeping dt { margin: 0.5em 2em 0; } +.bookkeeping dd { margin: 0 3em 0.5em; } + +.critical { margin: 1em; border: double thick red; padding: 1em; background: #FFFFCC; } +.critical > :first-child { margin-top: 0; } + +.example { display: block; color: #222222; background: #FCFCFC; border-left: double; margin-left: 2em; padding-left: 1em; } +td > .example:only-child { margin: 0 0 0 0.1em; } diff --git a/archives/20140127/webrtc.html b/archives/20140127/webrtc.html new file mode 100644 index 000000000..d1af31217 --- /dev/null +++ b/archives/20140127/webrtc.html @@ -0,0 +1,5466 @@ + + + + WebRTC 1.0: Real-time Communication Between Browsers + + + + + + +

Abstract

+

This document defines a set of ECMAScript APIs in WebIDL to allow media + to be sent to and received from another browser or device implementing the + appropriate set of real-time protocols. This specification is being + developed in conjunction with a protocol specification developed by the + IETF RTCWEB group and an API specification to get access to local media + devices developed by the Media Capture Task Force.

+

Status of This Document

+ + + +

+ This section describes the status of this document at the time of its publication. + Other documents may supersede this document. A list of current W3C publications and the + latest revision of this technical report can be found in the W3C technical reports index at + http://www.w3.org/TR/. +

+ +

This document is neither complete nor stable, and as such is not yet + suitable for commercial implementation. However, early experimentation is + encouraged. The API is based on preliminary work done in the WHATWG. The + Web Real-Time Communications Working Group expects this specification to + evolve significantly based on:

+ + +
    +
  • The outcome of ongoing exchanges in the companion RTCWEB group at + IETF to define the set of protocols that, together with this document, + will enable real-time communications in Web browsers.
  • + + +
  • Privacy issues that arise when exposing local capabilities and local + streams.
  • + + +
  • Technical discussions within the group.
  • + + +
  • Experience gained through early experimentations.
  • + + +
  • Feedback received from other groups and individuals.
  • +
+ +

+ This document was published by the Web Real-Time Communications Working Group as an Editor's Draft. + + + If you wish to make comments regarding this document, please send them to + public-webrtc@w3.org + (subscribe, + archives). + + + + + All comments are welcome. + +

+ + +

+ Publication as an Editor's Draft does not imply endorsement by the W3C + Membership. This is a draft document and may be updated, replaced or obsoleted by other + documents at any time. It is inappropriate to cite this document as other than work in + progress. +

+ + +

+ + This document was produced by a group operating under the + 5 February 2004 W3C Patent + Policy. + + + + + W3C maintains a public list of any patent + disclosures + + made in connection with the deliverables of the group; that page also includes + instructions for disclosing a patent. An individual who has actual knowledge of a patent + which the individual believes contains + Essential + Claim(s) must disclose the information in accordance with + section + 6 of the W3C Patent Policy. + + +

+ + + + +

Table of Contents

+ + + + + +
+

1. Introduction

This section is non-normative.

+ + +

There are a number of facets to video-conferencing in HTML covered by + this specification:

+ + +
    +
  • Connecting to remote peers using NAT-traversal technologies such as + ICE, STUN, and TURN.
  • + + +
  • Sending the locally-produced streams to remote peers and receiving + streams from remote peers.
  • + + +
  • Sending arbitrary data directly to remote peers.
  • +
+ + +

This document defines the APIs used for these features. This + specification is being developed in conjunction with a protocol + specification developed by the IETF RTCWEB group and an API + specification to get access to local media devices developed by the + Media Capture Task + Force.

+
+ + +

2. Conformance

+

+ As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, + and notes in this specification are non-normative. Everything else in this specification is + normative. +

+

+ The key words MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED, MAY, + and OPTIONAL in this specification are to be interpreted as described in [RFC2119]. +

+ +

This specification defines conformance criteria that apply to a single + product: the user agent that implements the interfaces that it + contains.

+ + +

Implementations that use ECMAScript to implement the APIs defined in + this specification must implement them in a manner consistent with the + ECMAScript Bindings defined in the Web IDL specification [WEBIDL], as + this specification uses that specification and terminology.

+
+ + +
+

3. Terminology

+ + +

The EventHandler + interface represents a callback used for event handlers as defined in + [HTML5].

+ + +

The concepts queue a + task and fires a + simple event are defined in [HTML5].

+ + +

The terms event, event + handlers and event + handler event types are defined in [HTML5].

+ + +

The terms MediaStream, MediaStreamTrack, + Constraints, and Consumer are defined in + [GETUSERMEDIA].

+
+ + +
+

4. Peer-to-peer connections

+ + +
+

4.1 Introduction

+ + +

An RTCPeerConnection allows two users to + communicate directly, browser to browser. Communications are coordinated + via a signaling channel which is provided by unspecified means, but + generally by a script in the page via the server, e.g. using + XMLHttpRequest.

+
+ + +
+

4.2 Configuration

+ + +
+

4.2.1 RTCConfiguration Type

+ + +
dictionary RTCConfiguration {
+    sequence<RTCIceServer> iceServers;
+    RTCIceTransports       iceTransports = "all";
+    RTCIdentityOption      requestIdentity = "ifconfigured";
+};
4.2.1.1 Dictionary RTCConfiguration Members
iceServers of type sequence<RTCIceServer>
+

An array containing URIs of servers available to be used + by ICE, such as STUN and TURN server.

+
iceTransports of type RTCIceTransports, defaulting to "all"
+

Indicates which candidates the ICE engine is allowed to use. +

+
requestIdentity of type RTCIdentityOption, defaulting to "ifconfigured"
+

See the requestIdentity member of + the RTCOfferAnswerOptions dictionary.

+
+
+ + +
+

4.2.2 RTCIceServer Type

+ + +
dictionary RTCIceServer {
+    (DOMString or sequence<DOMString>) urls;
+    DOMString                          username;
+    DOMString                          credential;
+};
4.2.2.1 Dictionary RTCIceServer Members
credential of type DOMString
+

If this RTCIceServer object represents a + TURN server, then this attribute specifies the credential to use + with that TURN server.

+
urls of type (DOMString or sequence<DOMString>)
+

STUN or TURN URI(s) as defined in [STUN-URI] and + [TURN-URI] or other URI types.

+
username of type DOMString
+

If this RTCIceServer object represents a + TURN server, then this attribute specifies the username to use with + that TURN server.

+
+ + +

In network topologies with multiple layers of NATs, it is desirable + to have a STUN server between every layer of NATs in addition to the + TURN servers to minimize the peer to peer network latency.

+ + +

An example array of RTCIceServer objects is:

+ + +

[ { "urls": "stun:stun1.example.net" }, { "urls": + "turn:turn.example.org", "username": "user", "credential": "myPassword" + } ] +

+
+ +
+

4.2.3 RTCIceTransports Enum

+ + +
enum RTCIceTransports {
+    "none",
+    "relay",
+    "all"
+};
Enumeration description
noneThe ICE engine MUST not send or receive any packets at this + point.
relayThe ICE engine MUST only use media relay candidates such as + candidates passing through a TURN server. This can be used to reduce + leakage of IP addresses in certain use cases.
allThe ICE engine may use any type of candidates when this value is + specified.
+ +
+ +
+

4.2.4 Offer/Answer Options

+ +

These dictionaries describe the options that can be used to + control the offer/answer creation process.

+ + +
dictionary RTCOfferAnswerOptions {
+    RTCIdentityOption requestIdentity = "ifconfigured";
+};
4.2.4.1 Dictionary RTCOfferAnswerOptions Members
requestIdentity of type RTCIdentityOption, defaulting to "ifconfigured"
+

The requestIdentity + option indicates whether an identity should be requested. The option + may be used with either of the createOffer() or + createAnswer() calls, but also with the + RTCPeerConnection constructor. Note that as long as + DTLS-SRTP is in used, fingerprints will be sent regardless of the + value of this option.

+
+ + +
dictionary RTCOfferOptions : RTCOfferAnswerOptions {
+    long    offerToReceiveVideo;
+    long    offerToReceiveAudio;
+    boolean voiceActivityDetection = true;
+    boolean iceRestart = false;
+};
4.2.4.2 Dictionary RTCOfferOptions Members
iceRestart of type boolean, defaulting to false
+

When the value of this dictionary member is true, the + generated description will have ICE credentials that are different + from the current credentials (as visible in the + localDescription attribute's SDP). Applying the + generated description will restart ICE.

+ + +

When the value of this dictionary member is false, and the + localDescription attribute has valid ICE + credentials, the generated description will have the same ICE + credentials as the current value from the + localDescription attribute.

+
offerToReceiveAudio of type long
+

In some cases, an RTCPeerConnection may wish to + receive audio but not send any audio. The + RTCPeerConnection needs to know if it should signal to + the remote side whether it wishes to receive audio. This option + allows an application to indicate its preferences for the number of + audio streams to receive when creating an offer.

+
offerToReceiveVideo of type long
+

In some cases, an RTCPeerConnection may wish to + receive video but not send any video. The + RTCPeerConnection needs to know if it should signal to + the remote side whether it wishes to receive video or not. This + option allows an application to indicate its preferences for the + number of video streams to receive when creating an offer.

+
voiceActivityDetection of type boolean, defaulting to true
+

Many codecs and system are capable of detecting "silence" and + changing their behavior in this case by doing things such as not + transmitting any media. In many cases, such as when dealing with + sounds other than spoken voice or emergency calling, it is desirable + to be able to turn off this behavior. This option allows the + application to provide information about whether it wishes this type + of processing enabled or disabled.

+
+ + +
enum RTCIdentityOption {
+    "yes",
+    "no",
+    "ifconfigured"
+};
Enumeration description
yesAn identity MUST be requested.
noNo identity is to be requested.
ifconfiguredThe value "ifconfigured" means that an identity will be requested + if either the user has configured an identity in the browser or if the + setIdentityProvider() call has been made in JavaScript. + As this is the default value, an identity will be requested if and + only if the user has configured an IdP in some way.
+
+
+ + +
+

4.3 RTCPeerConnection Interface

+ + +

The general operation of the RTCPeerConnection is described in + [RTCWEB-JSEP].

+ + +
+

4.3.1 Operation

+ + +

Calling new RTCPeerConnection(configuration + ) creates an RTCPeerConnection object.

+ + +

The configuration has the information to find and access + the servers used by ICE. There may be multiple servers of + each type and any TURN server also acts as a STUN server.

+ + +

An RTCPeerConnection object has an associated + ICE agent [ICE], + RTCPeerConnection signaling state, ICE gathering state, and ICE + connection state. These are initialized when the object is created.

+ + +

An RTCPeerConnection object has two associated + stream sets. A local streams set, + representing streams that are currently sent, and a remote streams set, representing streams + that are currently received with this + RTCPeerConnection object. The stream sets are + initialized to empty sets when the + RTCPeerConnection object is created.

+ + +

When the RTCPeerConnection() constructor + is invoked, the user agent MUST run the following steps:

+ + +
    +
  1. +

    Validate the RTCConfiguration argument by + running the steps defined by the updateIce() method.

    +
  2. + + +
  3. +

    Create an ICE Agent as defined in [ICE] and let + connection's RTCPeerConnection ICE Agent be + that ICE Agent and provide it the the ICE servers list. The ICE Agent will proceed + with gathering as soon as the ICE + transports setting is not set to none. At this + point the ICE Agent does not know how many ICE components it needs + (and hence the number of candidates to gather), but it can make a + reasonable assumption such as 2. As the + RTCPeerConnection object gets more information, the + ICE Agent can adjust the number of components.

    +
  4. + + +
  5. +

    Set connection's RTCPeerConnection + signalingState to stable.

    +
  6. + + +
  7. +

    Set connection's RTCPeerConnection + ice connection state to new.

    +
  8. + + +
  9. +

    Set connection's RTCPeerConnection + ice gathering state to new.

    +
  10. + + +
  11. +

    Initialize an internal variable to represent a queue of + operations with an empty set.

    +
  12. + + +
  13. +

    Return connection.

    +
  14. +
+ + +

Once the RTCPeerConnection object has been initialized, for every + call to createOffer, setLocalDescription, + createAnswer and setRemoteDescription; + execute the following steps:

+ + +
    +
  1. +

    Append an object representing the current call being handled + (i.e. function name and corresponding arguments) to the + operations array.

    +
  2. + + +
  3. +

    If the length of the operations array is exactly 1, + execute the function from the front of the queue + asynchronously.

    +
  4. + + +
  5. +

    When the asynchronous operation completes (either successfully + or with an error), remove the corresponding object from the + operations array. After removal, if the array is + non-empty, execute the first object queued asynchronously and + repeat this step on completion.

    +
  6. +
+ + +

The general idea is to have only one among createOffer, + setLocalDescription, createAnswer and + setRemoteDescription executing at any given time. If + subsequent calls are made while one of them is still executing, they + are added to a queue and processed when the previous operation is fully + completed. It is valid, and expected, for normal error handling + procedures to be applied.

+ + +

Additionally, during the lifetime of the RTCPeerConnection object, + the following procedures are followed when an ICE event occurs:

+ + +
    +
  1. +

    If the RTCPeerConnection + ice gathering state is new and the ICE transports setting is not + set to none, the user agent MUST + queue a task to start gathering ICE addresses and set the ice gathering state + to gathering.

    +
  2. + + +
  3. +

    If the ICE Agent has found one or more candidate pairs for each + MediaStreamTrack that forms a valid connection, the ICE connection + state is changed to "connected".

    +
  4. + + +
  5. +

    When the ICE Agent finishes checking all candidate pairs, if at + least one connection has been found for each MediaStreamTrack, the + iceConnectionState is changed to "completed"; else the + iceConnectionState is changed to "failed".

    +
  6. +
+ + +

When the ICE Agent needs to notify the script about the candidate + gathering progress, the user agent must queue a task to run the + following steps:

+ + +
    +
  1. +

    Let connection be the + RTCPeerConnection object associated with this + ICE Agent.

    +
  2. + + +
  3. +

    If connection's RTCPeerConnection + signalingState is closed, abort these steps.

    +
  4. + + +
  5. +

    If the intent of the ICE Agent is to notify the script that:

    + + +
      +
    • +

      A new candidate is available.

      + + +

      Add the candidate to connection's + localDescription and create a + RTCIceCandidate object to represent the + candidate. Let newCandidate be that object.

      +
    • + + +
    • +

      The gathering process is done.

      + + +

      Set connection's ice gathering + state to completed and let + newCandidate be null.

      +
    • +
    +
  6. + + +
  7. +

    Fire a icecandidate event named icecandidate with + newCandidate at connection.

    +
  8. +
+ + +

User agents negotiate the codec resolution, bitrate, and other media + parameters. It is RECOMMENDED that user agents initially negotiate for + the maximum resolution of a video stream. For streams that are then + rendered (using a video element), it is RECOMMENDED that + user agents renegotiate for a resolution that matches the rendered + display size.

+ + +

The word "components" in this context refers to an RTP media flow + and does not have anything to do with how [ICE] uses the term + "component".

+ + +

When a user agent has reached the point where a + MediaStream can be created to represent incoming + components, the user agent MUST run the following steps:

+ + +
    +
  1. +

    Let connection be the + RTCPeerConnection expecting this media.

    +
  2. + + +
  3. +

    Create a MediaStream object + stream, to represent the incoming media stream.

    +
  4. + + +
  5. +

    Run the algorithm + to represent an incoming component with a track for each incoming + component.

    + + +
    Note

    The creation of new incoming + MediaStreams may be triggered either by SDP + negotiation or by the receipt of media on a given flow. +

    +
  6. + + +
  7. +

    Queue a task to run the following substeps:

    + + +
      +
    1. +

      If the connection's RTCPeerConnection + signalingState is closed, abort these + steps.

      +
    2. + + +
    3. +

      Add stream to connection's remote streams set.

      +
    4. + + +
    5. +

      Fire a stream event named + addstream with + stream at the connection + object.

      +
    6. +
    +
  8. +
+ + +

When a user agent has negotiated media for a component that belongs + to a media stream that is already represented by an existing + MediaStream object, the user agent MUST associate + the component with that MediaStream object.

+ + +

When an RTCPeerConnection finds that a stream + from the remote peer has been removed, the user agent MUST follow these + steps:

+ + +
    +
  1. +

    Let connection be the + RTCPeerConnection associated with the stream + being removed.

    +
  2. + + +
  3. +

    Let stream be the MediaStream + object that represents the media stream being removed, if any. If + there isn't one, then abort these steps.

    +
  4. + + +
  5. +

    By definition, stream is now ended.

    + + +
    Note

    A task is thus + queued to update + stream and fire an event.

    +
  6. + + +
  7. +

    Queue a task to run the following substeps:

    + + +
      +
    1. +

      If the connection's RTCPeerConnection + signalingState is closed, abort these + steps.

      +
    2. + + + +
    3. +

      Remove stream from connection's + remote streams set.

      +
    4. + + +
    5. +

      Fire a stream event named + removestream with + stream at the connection + object.

      +
    6. +
    +
  8. +
+ + +

The task source for the tasks + listed in this section is the networking task source.

+ + +

If something in the browser changes that causes the + RTCPeerConnection object to need to initiate a new + session description negotiation, a negotiationneeded event is fired at the + RTCPeerConnection object.

+ + +

In particular, if an RTCPeerConnection object is + consuming a MediaStream on + which a track is added, by, e.g., the addTrack() + method being invoked, the RTCPeerConnection object + MUST fire the "negotiationneeded" event. Removal of media components + must also trigger "negotiationneeded".

+ + +

To prevent network sniffing from allowing a fourth + party to establish a connection to a peer using the information sent + out-of-band to the other peer and thus spoofing the client, the + configuration information SHOULD always be transmitted using an + encrypted connection.

+
+ + +
+

4.3.2 Interface Definition

+ + +
[ Constructor (RTCConfiguration configuration)]
+interface RTCPeerConnection : EventTarget  {
+    void                  createOffer (RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional RTCOfferOptions options);
+    void                  createAnswer (RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional RTCOfferAnswerOptions options);
+    void                  setLocalDescription (RTCSessionDescription description, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback);
+    readonly    attribute RTCSessionDescription? localDescription;
+    void                  setRemoteDescription (RTCSessionDescription description, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback);
+    readonly    attribute RTCSessionDescription? remoteDescription;
+    readonly    attribute RTCSignalingState      signalingState;
+    void                  updateIce (RTCConfiguration configuration);
+    void                  addIceCandidate (RTCIceCandidate candidate, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback);
+    readonly    attribute RTCIceGatheringState   iceGatheringState;
+    readonly    attribute RTCIceConnectionState  iceConnectionState;
+    RTCConfiguration      getConfiguration ();
+    sequence<MediaStream> getLocalStreams ();
+    sequence<MediaStream> getRemoteStreams ();
+    MediaStream?          getStreamById (DOMString streamId);
+    void                  addStream (MediaStream stream);
+    void                  removeStream (MediaStream stream);
+    void                  close ();
+                attribute EventHandler           onnegotiationneeded;
+                attribute EventHandler           onicecandidate;
+                attribute EventHandler           onsignalingstatechange;
+                attribute EventHandler           onaddstream;
+                attribute EventHandler           onremovestream;
+                attribute EventHandler           oniceconnectionstatechange;
+};
4.3.2.1 Constructors
RTCPeerConnection
+ See the RTCPeerConnection constructor + algorithm. +
ParameterTypeNullableOptionalDescription
configurationRTCConfiguration
4.3.2.2 Attributes
iceConnectionState of type RTCIceConnectionState, readonly
+

The iceConnectionState + attribute MUST return the state of the RTCPeerConnection ICE + Agent ICE state.

+
iceGatheringState of type RTCIceGatheringState, readonly
+

The iceGatheringState + attribute MUST return the gathering state of the RTCPeerConnection ICE + Agent connection state.

+
localDescription of type RTCSessionDescription, readonly , nullable
+

The localDescription + attribute MUST return the RTCSessionDescription + that was most recently passed to setLocalDescription(), + plus any local candidates that have been generated by the ICE Agent + since then.

+ + +

A null object will be returned if the local description has not + yet been set.

+
onaddstream of type EventHandler,
This event handler, of event handler event type addstream, MUST be fired by + all objects implementing the RTCPeerConnection + interface. It is called any time a MediaStream is added + by the remote peer. This will be fired only as a result of + setRemoteDescription. Onnaddstream happens as early as + possible after the setRemoteDescription. This callback + does not wait for a given media stream to be accepted or rejected via + SDP negotiation.
onicecandidate of type EventHandler,
This event handler, of event handler event type icecandidate, MUST be supported by + all objects implementing the RTCPeerConnection + interface.
oniceconnectionstatechange of type EventHandler,
This event handler, of event handler event type iceconnectionstatechange, + MUST be fired by all objects implementing the + RTCPeerConnection interface. It is called any + time the iceConnectionState changes.
onnegotiationneeded of type EventHandler,
This event handler, of event handler event type negotiationneeded , MUST be supported + by all objects implementing the RTCPeerConnection + interface.
onremovestream of type EventHandler,
This event handler, of event handler event type removestream, MUST be + fired by all objects implementing the + RTCPeerConnection interface. It is called any + time a MediaStream is removed by the remote peer. This + will be fired only as a result of + setRemoteDescription.
onsignalingstatechange of type EventHandler,
This event handler, of event handler event type signalingstatechange, MUST + be supported by all objects implementing the + RTCPeerConnection interface. It is called any + time the readyState changes, i.e., from a call to + setLocalDescription, a call to + setRemoteDescription, or code. It does not fire for the + initial state change into new.
remoteDescription of type RTCSessionDescription, readonly , nullable
+

The remoteDescription + attribute MUST return the RTCSessionDescription + that was most recently passed to setRemoteDescription(), + plus any remote candidates that have been supplied via + addIceCandidate() + since then.

+ + +

A null object will be returned if the remote description has not + yet been set.

+
signalingState of type RTCSignalingState, readonly
+

The signalingState + attribute MUST return the RTCPeerConnection + object's RTCPeerConnection + signaling state.

+
4.3.2.3 Methods
addIceCandidate
+

The addIceCandidate() + method provides a remote candidate to the ICE Agent. In addition to + being added to the remote description, connectivity checks will be + sent to the new candidates as long as the ICE Transports setting is not + set to none. This call will result in a change + to the connection state of the ICE Agent, and may result in a + change to media state if it results in different connectivity being + established.

+ + +

If the candidate parameter is malformed, throw a + SyntaxError exception and abort these steps.

+ + +

If the candidate is successfully applied, the user agent MUST + queue a task to invoke successCallback.

+ + +

If the candidate could not be successfully applied, the user + agent MUST queue a task to invoke failureCallback with a + DOMError object whose name attribute has + the value TBD (TODO InvalidCandidate and InvalidMidIndex).

+ + +
Note
+ What errors do we need here? Should we reuse the + *SessionDescriptionError names or invent new ones for candidates? + Should this method be queued? +
+
ParameterTypeNullableOptionalDescription
candidateRTCIceCandidate
successCallbackVoidFunction
failureCallbackRTCPeerConnectionErrorCallback
Return type: void
addStream
+

Adds a new stream to the RTCPeerConnection.

+ + +

When the addStream() method is invoked, the user agent MUST + run the following steps:

+ + +
    +
  1. +

    Let connection be the + RTCPeerConnection object on which the + MediaStream, stream, is to be + added.

    +
  2. + + +
  3. +

    If connection's RTCPeerConnection + signalingState is closed, throw an + InvalidStateError exception and abort these + steps.

    +
  4. + + +
  5. +

    If stream is already in connection's + local streams set, then abort + these steps.

    +
  6. + + +
  7. +

    Add stream to connection's local streams set.

    +
  8. + + + +
  9. +

    If connection's RTCPeerConnection + signalingState is stable, then fire a negotiationneeded event at + connection.

    +
  10. +
+
ParameterTypeNullableOptionalDescription
streamMediaStream
Return type: void
close
+

When the RTCPeerConnection close() method is invoked, the + user agent MUST run the following steps:

+ + +
    + +
  1. + If the RTCPeerConnection object's RTCPeerConnection + signalingState is closed, abort these steps. +
  2. + +
  3. +

    Destroy the RTCPeerConnection + ICE Agent, abruptly ending any active ICE processing and + any active streaming, and releasing any relevant resources + (e.g. TURN permissions).

    +
  4. + + +
  5. +

    Set the object's RTCPeerConnection + signalingState to closed.

    +
  6. +
+
No parameters.
Return type: void
createAnswer
+

The createAnswer method generates an [SDP] answer with the + supported configuration for the session that is compatible with the + parameters in the remote configuration. Like createOffer, the + returned blob contains descriptions of the local MediaStreams + attached to this RTCPeerConnection, the codec/RTP/RTCP options + negotiated for this session, and any candidates that have been + gathered by the ICE Agent. The options parameter may be + supplied to provide additional control over the generated + answer.

+ + +

As an answer, the generated SDP will contain a specific + configuration that, along with the corresponding offer, specifies + how the media plane should be established. The generation of the + SDP must follow the appropriate process for generating an + answer.

+ + +

Session descriptions generated by createAnswer must be + immediately usable by setLocalDescription without generating an + error if setLocalDescription is called from the successCallback + function. Like createOffer, the returned description should reflect + the current state of the system. The session descriptions MUST + remain usable by setLocalDescription without causing an error until + at least the end of the successCallback function. Calling this + method is needed to get the ICE user name fragment and + password.

+ + +

An answer can be marked as provisional, as described in + [RTCWEB-JSEP], by setting the type to + "pranswer".

+ + +

If the RTCPeerConnection is configured to generate + Identity assertions, then the session description SHALL contain an + appropriate assertion.

+ + +

If this RTCPeerConnection object is closed before + the SDP generation process completes, the USER agent MUST suppress + the result and not call any of the result callbacks.

+ + +

If the SDP generation process completed successfully, the user + agent MUST queue a task to invoke successCallback with a + newly created RTCSessionDescription object, + representing the generated answer, as its argument.

+ + +

If the SDP generation process failed for any reason, the user + agent MUST queue a task to invoke failureCallback with + an DOMError object of type TBD as its argument.

+
ParameterTypeNullableOptionalDescription
successCallbackRTCSessionDescriptionCallback
failureCallbackRTCPeerConnectionErrorCallback
optionsRTCOfferAnswerOptions
Return type: void
createOffer
+

The createOffer method generates a blob of SDP that contains an + RFC 3264 offer with the supported configurations for the session, + including descriptions of the local MediaStreams + attached to this RTCPeerConnection, the codec/RTP/RTCP + options supported by this implementation, and any candidates that + have been gathered by the ICE Agent. The options parameter may + be supplied to provide additional control over the offer generated. +

+ + +

As an offer, the generated SDP will contain the full set of + capabilities supported by the session (as opposed to an answer, + which will include only a specific negotiated subset to use); for + each SDP line, the generation of the SDP must follow the + appropriate process for generating an offer. In the event + createOffer is called after the session is established, createOffer + will generate an offer that is compatible with the current session, + incorporating any changes that have been made to the session since + the last complete offer-answer exchange, such as addition or + removal of streams. If no changes have been made, the offer will + include the capabilities of the current local description as well + as any additional capabilities that could be negotiated in an + updated offer.

+ + +

Session descriptions generated by createOffer MUST be + immediately usable by setLocalDescription without causing an error + as long as setLocalDescription is called within the successCallback + function. If a system has limited resources (e.g. a finite number + of decoders), createOffer needs to return an offer that reflects + the current state of the system, so that setLocalDescription will + succeed when it attempts to acquire those resources. The session + descriptions MUST remain usable by setLocalDescription without + causing an error until at least end of the successCallback + function. Calling this method is needed to get the ICE user name + fragment and password.

+ + +

If the RTCPeerConnection is configured to generate + Identity assertions, then the session description SHALL contain an + appropriate assertion.

+ + +

If this RTCPeerConnection object is closed before + the SDP generation process completes, the USER agent MUST suppress + the result and not call any of the result callbacks.

+ + +

If the SDP generation process completed successfully, the user + agent MUST queue a task to invoke successCallback with a + newly created RTCSessionDescription object, + representing the generated offer, as its argument.

+ + +

If the SDP generation process failed for any reason, the user + agent MUST queue a task to invoke failureCallback with + an DOMError object of type TBD as its argument.

+ + +

To Do: Discuss privacy aspects of this from a fingerprinting + point of view - it's probably around as bad as access to a canvas + :-)

+
ParameterTypeNullableOptionalDescription
successCallbackRTCSessionDescriptionCallback
failureCallbackRTCPeerConnectionErrorCallback
optionsRTCOfferOptions
Return type: void
getConfiguration
+

Returns a RTCConfiguration object representing the current configuration of this RTCPeerConnection object.

+ + +

When this method is call, the user agent MUST construct new RTCConfiguration object to be returned, and initialize it using the ICE Agent's ICE transports setting and ICE servers list.

+
No parameters.
Return type: RTCConfiguration
getLocalStreams
+

Returns a sequence of MediaStream objects + representing the streams that are currently sent with this + RTCPeerConnection object.

+ + +

The getLocalStreams() + method MUST return a new sequence that represents a snapshot of all + the MediaStream objects in this + RTCPeerConnection object’s local streams set. The conversion from the + streams set to the sequence, to be returned, is user agent defined + and the order does not have to stable between calls.

+
No parameters.
Return type: sequence<MediaStream>
getRemoteStreams
+

Returns a sequence of MediaStream objects + representing the streams that are currently received with this + RTCPeerConnection object.

+ + +

The getRemoteStreams() + method MUST return a new sequence that represents a snapshot of all + the MediaStream objects in this + RTCPeerConnection object’s remote streams set. The conversion from + the streams set to the sequence, to be returned, is user agent + defined and the order does not have to stable between calls.

+
No parameters.
Return type: sequence<MediaStream>
getStreamById
+

If a MediaStream object, with an + id + equal to streamId, exists in this + RTCPeerConnection object’s stream sets + (local streams set or remote streams set), then the getStreamById() + method MUST return that MediaStream object. The + method MUST return null if no stream matches the + streamId argument.

+ + +
Note
+

For this method to make sense, we need to make sure that ids + are unique within the two stream sets of a RTCPeerConnection. + This is not the case today when a peer re-adds a stream that is + received. Two different stream instances will now have the same + id at both peers; one in the remote stream set and one in the + local stream set.

+ + +

One way to resolve this is to not allow re-adding a stream + instance that is received (guard on id). If an application really + needs this functionality it's really easy to make a clone of the + stream, which will give it a new id, and send the clone.

+
+
ParameterTypeNullableOptionalDescription
streamIdDOMString
Return type: MediaStream, nullable
removeStream
+

Removes the given stream from the + RTCPeerConnection.

+ + +

When the other peer stops sending a stream in this manner, a + removestream event is + fired at the RTCPeerConnection object.

+ + +

When the removeStream() method is invoked, the user agent + MUST run the following steps:

+ + +
    +
  1. +

    Let connection be the + RTCPeerConnection object on which the + MediaStream, stream, is to be + removed.

    +
  2. + + +
  3. +

    If connection's RTCPeerConnection + signalingState is closed, throw an + InvalidStateError exception.

    +
  4. + + +
  5. +

    If stream is not in connection's + local streams set, then abort + these steps.

    +
  6. + + +
  7. +

    Remove stream from connection's + local streams set.

    +
  8. + + +
  9. +

    If connection's RTCPeerConnection + signalingState is stable, then fire a negotiationneeded event at + connection.

    +
  10. +
+
ParameterTypeNullableOptionalDescription
streamMediaStream
Return type: void
setLocalDescription
+

The setLocalDescription() + method instructs the RTCPeerConnection to apply + the supplied RTCSessionDescription as the local + description.

+ + +

This API changes the local media state. In order to successfully + handle scenarios where the application wants to offer to change + from one media format to a different, incompatible format, the + RTCPeerConnection must be able to + simultaneously support use of both the old and new local + descriptions (e.g. support codecs that exist in both descriptions) + until a final answer is received, at which point the + RTCPeerConnection can fully adopt the new local + description, or rollback to the old description if the remote side + denied the change.

+ + +
Issue 1

ISSUE: how to indicate to rollback?

+ + +

To Do: specify what parts of the SDP can be changed between the + createOffer and setLocalDescription

+ + +

When the method is invoked, the user agent must follow the + processing model described by + the following list:

+ + +
    +
  • +

    If this RTCPeerConnection object's + signaling + state is closed, the user agent MUST throw an + InvalidStateError exception and abort this + operation.

    +
  • + + +
  • +

    If a local description contains a different set of ICE + credentials, then the ICE Agent MUST trigger an ICE restart. + When ICE restarts, the gathering state will be changed back to + "gathering", if it was not already gathering. If the + IceConnectionState was "completed", it will be changed back to + "connected".

    +
  • + + +
  • +

    If the process to apply the + RTCSessionDescription argument fails for + any reason, then user agent must queue a task runs the + following steps:

    + + +
      +
    1. +

      Let connection be the + RTCPeerConnection object on with this + method was invoked.

      +
    2. + + +
    3. +

      If connection's signaling state + is closed, then abort these steps.

      +
    4. + + +
    5. +

      If the reason for the failure is:

      + + +
        +
      • +

        The content of the + RTCSessionDescription argument is + invalid or the type is + wrong for the current signaling + state of connection.

        + + +

        Let errorType be + InvalidSessionDescriptionError.

        +
      • + + +
      • +

        The RTCSessionDescription is a + valid description but cannot be applied at the media + layer.

        + + +

        TODO ISSUE - next few points are probably wrong. + Make sure to check this in setRemote too.

        + + +

        This can happen, e.g., if there are insufficient + resources to apply the SDP. The user agent MUST then + rollback as necessary if the new description was + partially applied when the failure occurred.

        + + +

        If rollback was not necessary or was completed + successfully, let errorType be + IncompatibleSessionDescriptionError. If + rollback was not possible, let errorType be + InternalError and set + connection's signaling + state to closed.

        +
      • +
      +
    6. + + +
    7. +

      Invoke the failureCallback with an + DOMError object, whose name + attribute is errorType, as its argument.

      +
    8. +
    +
  • + + +
  • +

    If the RTCSessionDescription argument is + applied successfully, then user agent must queue a task runs + the following steps:

    + + +
      +
    1. +

      Let connection be the + RTCPeerConnection object on with this + metod was invoked.

      +
    2. + + +
    3. +

      If connection's signaling state + is closed, then abort these steps.

      +
    4. + + +
    5. +

      Set connection's description attribute + (localDescription or + remoteDescription depending on the + setting operation) to the + RTCSessionDescription argument.

      +
    6. + + +
    7. +

      If the local description was set, + connection's ice gathering + state is new, and the local description + contains media, then set connection's ice gathering + state to gathering.

      +
    8. + + +
    9. +

      If the local description was set with content that + caused an ICE restart, then set connection's + ice + gathering state to gathering.

      +
    10. + + +
    11. +

      Set connection's signalingState + accordingly.

      +
    12. + + +
    13. +

      Fire a simple event named signalingstatechange + at connection.

      +
    14. + + +
    15. +

      Queue a new task that, if connection's + signalingState is + not closed, invokes the + successCallback.

      +
    16. +
    +
  • +
+
ParameterTypeNullableOptionalDescription
descriptionRTCSessionDescription
successCallbackVoidFunction
failureCallbackRTCPeerConnectionErrorCallback
Return type: void
setRemoteDescription
+

The setRemoteDescription() + method instructs the RTCPeerConnection to apply + the supplied RTCSessionDescription as the + remote offer or answer. This API changes the local media state.

+ + +

If a=identity attributes are present, the browser + verifies the identity following the procedures in [TODO REF to + SECTION ACTION MARTIN TO GO DO THIS + sec.identity-proxy-assertion-request].

+ + +

If any tracks on the RTCPeerConnection have a + peerIdentity constraint and either the RTCPeerConnection + connection has no peer identity or that identity is not equal to + the specified peerIdentity, the user agent MUST queue a + task to invoke failureCallback with a + DOMError object whose name attribute has + the value IncompatibleConstraintsError. Media must not + be transmitted to the other side in this case.

+ +
Note

Open Issue: + Waiting for Martin to see if the above should send black instead of + doing what is above.

+ + +

When the method is invoked, the user agent must follow the + processing model of + setLocalDescription() + .

+
ParameterTypeNullableOptionalDescription
descriptionRTCSessionDescription
successCallbackVoidFunction
failureCallbackRTCPeerConnectionErrorCallback
Return type: void
updateIce
+

The updateIce method updates the ICE Agent process of gathering + local candidates and pinging remote candidates.

+ + +

This call may result in a change to the state of the ICE Agent, + and may result in a change to media state if it results in + connectivity being established.

+ + +

When the updateIce() + method is invoked, the user MUST run the following steps to + process the RTCConfiguration dictionary:

+ + +
    +
  1. +

    If the iceTransports member + is present, let its value be the ICE Agent's ICE transports setting.

    +
  2. + + +
  3. +

    If the iceTransports member + was omitted and the ICE Agent's ICE transports setting is unset, + set the ICE Agent's ICE transports setting to the iceTransports + dictionary member default value.

    +
  4. + + +
  5. +

    If the iceServers dictionary + member is present, but its value is an empty list, then throw + an InvalidAccessError and abort these steps. If + the list, on the other hand, has elements, each element must be + validated by running the following sub-steps:

    + + +
      +
    1. +

      Let server be the current list element.

      +
    2. + + +
    3. +

      If the server.urls dictionary member is + omitted or an empty list, then throw an + InvalidAccessError and abort these steps.

      +
    4. + + +
    5. +

      If server.urls is a string, let + urls be a list consisting of just that string. + Otherwise, let urls refer to the + server.urls list.

      +
    6. + + +
    7. +

      For each url in urls, parse the url and + obtain scheme name. If the parsing fails or if + scheme name is not implemented by the browser, + throw a SyntaxError and abort these steps.

      +
    8. + + +
    9. +

      If scheme name is "turn" and either of the + dictionary members server.username or + server.credential are omitted, then throw an + InvalidAccessError and abort these steps.

      +
    10. + + +

      After passing the validation, let the iceServers + dictionary member be the ICE Agent's ICE servers list.

      + +

      If a new list of servers replaces the ICE Agent's existing + ICE servers list, no action will taken until the + RTCPeerConnection's ice gathering + state transitions to gathering. If a script + wants this to happen immediately, it should do an ICE restart. + + +

    11. +

      If the iceServers dictionary + member was omitted, and the ICE Agent's ICE servers list is unset, throw an + InvalidAccessError and abort these steps.

      +
    12. +
    + + +
    Note
    + The exception types throw in the above algorithm are provisional + (until we decide what to do in each case). +
    +
ParameterTypeNullableOptionalDescription
configurationRTCConfiguration
Return type: void
+
+ + +
+

4.3.3 Garbage collection

+ + +

A Window object has a strong reference to any + RTCPeerConnection objects created from the + constructor whose global object is that Window object.

+ +
+
+ + +
+

4.4 State Definitions

+ + +
+

4.4.1 RTCPeerState Enum

+ + +
enum RTCSignalingState {
+    "stable",
+    "have-local-offer",
+    "have-remote-offer",
+    "have-local-pranswer",
+    "have-remote-pranswer",
+    "closed"
+};
Enumeration description
stableThere is no offer­answer exchange in progress. This is also the + initial state in which case the local and remote descriptions are + empty.
have-local-offerA local description, of type "offer", has been successfully + applied.
have-remote-offerA remote description, of type "offer", has been successfully + applied.
have-local-pranswerA remote description of type "offer" has been successfully + applied and a local description of type "pranswer" has been + successfully applied.
have-remote-pranswerA local description of type "offer" has been successfully applied + and a remote description of type "pranswer" has been successfully + applied.
closedThe connection is closed.
+ + +

The non-normative peer state transitions are: The non-normative peer state transition diagram

+ + +

An example set of transitions might be:

+ + +

Caller transition:

+ + +
    +
  • new RTCPeerConnection(): stable
  • + + +
  • setLocal(offer): have-local-offer
  • + + +
  • setRemote(pranswer): have-remote-pranswer
  • + + +
  • setRemote(answer): stable
  • + + +
  • close(): closed
  • +
+ + +

Callee transition:

+ + +
    +
  • new RTCPeerConnection(): stable
  • + + +
  • setRemote(offer): have-remote-offer
  • + + +
  • setLocal(pranswer): have-local-pranswer
  • + + +
  • setLocal(answer): stable
  • + + +
  • close(): closed
  • +
+
+ + +
+

4.4.2 RTCIceGatheringState Enum

+ + +
enum RTCIceGatheringState {
+    "new",
+    "gathering",
+    "complete"
+};
Enumeration description
newThe object was just created, and no networking has occurred + yet.
gatheringThe ICE engine is in the process of gathering candidates for this + RTCPeerConnection.
completeThe ICE engine has completed gathering. Events such as adding a + new interface or a new TURN server will cause the state to go back to + gathering.
+
+ + +
+

4.4.3 RTCIceConnectionState Enum

+ + +
enum RTCIceConnectionState {
+    "new",
+    "checking",
+    "connected",
+    "completed",
+    "failed",
+    "disconnected",
+    "closed"
+};
Enumeration description
newThe ICE Agent is gathering addresses and/or waiting for remote + candidates to be supplied.
checkingThe ICE Agent has received remote candidates on at least one + component, and is checking candidate pairs but has not yet found a + connection. In addition to checking, it may also still be + gathering.
connectedThe ICE Agent has found a usable connection for all components + but is still checking other candidate pairs to see if there is a + better connection. It may also still be gathering.
completedThe ICE Agent has finished gathering and checking and found a + connection for all components. Open issue: it is not clear how the + non controlling ICE side knows it is in the state.
failedThe ICE Agent is finished checking all candidate pairs and failed + to find a connection for at least one component. Connections may have + been found for some components.
disconnectedLiveness checks have failed for one or more components. This is + more aggressive than failed, and may trigger + intermittently (and resolve itself without action) on a flaky + network.
closedThe ICE Agent has shut down and is no longer responding to STUN + requests.
+ + +

States take either the value of any component or all components, as + outlined below:

+ + +
    +
  • checking occurs if ANY component has received a + candidate and can start checking
  • + + +
  • connected occurs if ALL components have established + a working connection
  • + + +
  • completed occurs if ALL components have finalized + the running of their ICE processes
  • + + +
  • failed occurs if ANY component has given up trying + to connect
  • + + +
  • disconnected occurs if ANY component has failed + liveness checks
  • + + +
  • closed occurs only if + RTCPeerConnection.close() has been called.
  • +
+ + +

If a component is discarded as a result of signaling (e.g. RTCP mux + or BUNDLE), the state may advance directly from checking + to completed.

+ + +

An example transition might look like:

+ + +
    +
  • new RTCPeerConnection(): new
  • + + +
  • (new, remote candidates received): + checking
  • + + +
  • (checking, found usable connection): + connected
  • + + +
  • (checking, gave up): failed
  • + + +
  • (connected, finished all checks): + completed
  • + + +
  • (completed, lost connectivity): + disconnected
  • + + +
  • (any state, ICE restart occurs): new
  • + + +
  • close(): closed
  • +
+ + +

The non-normative ICE state transitions are: The non-normative ICE state transition diagram

+
+
+ + +
+

4.5 Callback Definitions

+ + +
+

4.5.1 RTCPeerConnectionErrorCallback

+ + +
callback RTCPeerConnectionErrorCallback = void (DOMError error);
4.5.1.1 Callback RTCPeerConnectionErrorCallback Parameters
error of type DOMError
An error object encapsulating information about what went + wrong.
+
+
+ + +
+

4.6 Error Handling

+ + +
+

4.6.1 General Principles

+ + +

Errors are indicated in two ways: exceptions and objects passed to + error callbacks. Exceptions are thrown to indicate invalid state and + other programming errors. For example when a method is called when the + RTCPeerConnection is in an invalid state, or a + state in which that particular method is not allowed to be executed. In + all other cases, an error object MUST be provided to the error + callback.

+
+ + +
+

4.6.2 RTCSdpError

+ + +
interface RTCSdpError : DOMError {
+    readonly    attribute long sdpLineNumber;
+};
4.6.2.1 Attributes
sdpLineNumber of type long, readonly
The line number of an RTCSessionDescription + at which the error was encountered.
+ + +
Note
+

Ask the DOM team to extend their list with the following errors. + The error names and their descriptions are directly copied from the + old RTCErrorName enum and might need some adjustment before being + added to the public list of errors.

+ + +
    +
  • InvalidSessionDescriptionError: The provided + RTCSessionDescription contained invalid SDP, or the type was wrong + for the current state of the RTCPeerConnection. User agents SHOULD + provide as much additional information in the error message as + possible, including the sdpLineNumber, if appropriate.
  • + + +
  • IncompatibleSessionDescriptionError: The provided + RTCSessionDescription contained SDP that could not be correctly + applied to the RTCPeerConnection due to its current state. User + agents SHOULD provide as much additional information in the error + message as possible, including the sdpLineNumber, if + appropriate.
  • + + +
  • IncompatibleConstraintsError: The provided MediaConstraints + could not be correctly applied to the RTCPeerConnection due to its + current state. User agents SHOULD provide as much additional + information in the error message as possible.
  • + + +
  • IncompatibleMediaStreamTrackError: The provided + MediaStreamTrack is not an element of a MediaStream that is + currently in the RTCPeerConnection's localStreams attribute.
  • + + +
  • InternalError: The RTCPeerConnection encountered an error that + it could not recover from.
  • +
+
+
+
+ + +
+

4.7 Session Description Model

+ + +
+

4.7.1 RTCSdpType

+ + +

The RTCSdpType enum describes the type of an + RTCSessionDescription instance.

+ + +
enum RTCSdpType {
+    "offer",
+    "pranswer",
+    "answer"
+};
Enumeration description
offer +

An RTCSdpType of "offer" indicates that a description should be + treated as an [SDP] offer.

+
pranswer +

An RTCSdpType of "pranswer" indicates that a description should + be treated as an [SDP] answer, but not a final answer. A + description used as an SDP "pranswer" may be applied as a response + to a SDP offer, or an update to a previously sent SDP + "pranswer".

+
answer +

An RTCSdpType of "answer" indicates that a description should be + treated as an [SDP] final answer, and the offer-answer exchange + should be considered complete. A description used as an SDP answer + may be applied as a response to an SDP offer or as an update to a + previously sent SDP "pranswer".

+
+
+ + +
+

4.7.2 RTCSessionDescription Class

+ + +
dictionary RTCSessionDescriptionInit {
+    RTCSdpType type;
+    DOMString  sdp;
+};

[ Constructor (optional RTCSessionDescriptionInit descriptionInitDict)] +interface RTCSessionDescription { + attribute RTCSdpType? type; + attribute DOMString? sdp; + serializer = {attribute}; +};
4.7.2.1 Constructors
RTCSessionDescription
The RTCSessionDescription() + constructor takes an optional dictionary argument, + descriptionInitDict, whose content is used to initialize + the new RTCSessionDescription object. If a + dictionary key is not present in descriptionInitDict, the + corresponding attribute will be initialized to null. If the + constructor is run without the dictionary argument, all attributes + will be initialized to null. This class is a future extensible + carrier for the data contained in it and does not perform any + substantive processing.
ParameterTypeNullableOptionalDescription
descriptionInitDictRTCSessionDescriptionInit
4.7.2.2 Attributes
sdp of type DOMString, , nullable
The string representation of the SDP [SDP]
type of type RTCSdpType, , nullable
The type of SDP this RTCSessionDescription represents.
4.7.2.3 Serializer

Instances of this interface are serialized as a map with entries for each of the serializable attributes.

+ + +
4.7.2.4 Dictionary RTCSessionDescriptionInit Members
sdp of type DOMString
type of type RTCSdpType
DOMString sdp
+
+ + +
+

4.7.3 RTCSessionDescriptionCallback

+ + +
callback RTCSessionDescriptionCallback = void (RTCSessionDescription sdp);
4.7.3.1 Callback RTCSessionDescriptionCallback Parameters
sdp of type RTCSessionDescription
The object containing the SDP [SDP].
+
+
+ + +
+

4.8 Interfaces for Connectivity Establishment

+ + +
+

4.8.1 RTCIceCandidate Type

+ + +

This class is a future extensible carrier for the data contained in + it and does not perform any substantive processing.

+ + +
dictionary RTCIceCandidateInit {
+    DOMString      candidate;
+    DOMString      sdpMid;
+    unsigned short sdpMLineIndex;
+};

[ Constructor (optional RTCIceCandidateInit candidateInitDict)] +interface RTCIceCandidate { + attribute DOMString? candidate; + attribute DOMString? sdpMid; + attribute unsigned short? sdpMLineIndex; + serializer = {attribute}; +};
4.8.1.1 Constructors
RTCIceCandidate
The RTCIceCandidate() constructor + takes an optional dictionary argument, candidateInitDict, + whose content is used to initialize the new + RTCIceCandidate object. If a dictionary key is + not present in candidateInitDict, the corresponding + attribute will be initialized to null. If the constructor is run + without the dictionary argument, all attributes will be initialized + to null.
ParameterTypeNullableOptionalDescription
candidateInitDictRTCIceCandidateInit
4.8.1.2 Attributes
candidate of type DOMString, , nullable
This carries the candidate-attribute as defined in section 15.1 + of [ICE].
sdpMLineIndex of type unsigned short, , nullable
This indicates the index (starting at zero) of the m-line in the + SDP this candidate is associated with.
sdpMid of type DOMString, , nullable
If present, this contains the identifier of the "media stream + identification" as defined in [RFC 3388] for the m-line this + candidate is associated with.
4.8.1.3 Serializer

Instances of this interface are serialized as a map with entries for each of the serializable attributes.

+ + +
4.8.1.4 Dictionary RTCIceCandidateInit Members
candidate of type DOMString
DOMString sdpMid
sdpMLineIndex of type unsigned short
sdpMid of type DOMString
unsigned short sdpMLineIndex
+
+ + +
+

4.8.2 RTCPeerConnectionIceEvent

+ + +

The icecandidate event of the RTCPeerConnection uses + the RTCPeerConnectionIceEvent interface.

+ + +

Firing an + RTCPeerConnectionIceEvent event named + e with an RTCIceCandidate + candidate means that an event with the name e, + which does not bubble (except where otherwise stated) and is not + cancelable (except where otherwise stated), and which uses the + RTCPeerConnectionIceEvent interface with the + candidate attribute set to the new ICE candidate, MUST be + created and dispatched at the given target.

+ + +
dictionary RTCPeerConnectionIceEventInit : EventInit {
+    RTCIceCandidate candidate;
+};

[ Constructor (DOMString type, RTCPeerConnectionIceEventInit eventInitDict)] +interface RTCPeerConnectionIceEvent : Event { + readonly attribute RTCIceCandidate candidate; +};
4.8.2.1 Constructors
RTCPeerConnectionIceEvent
readonly attribute RTCIceCandidate candidate
ParameterTypeNullableOptionalDescription
typeDOMString
eventInitDictRTCPeerConnectionIceEventInit
4.8.2.2 Attributes
candidate of type RTCIceCandidate, readonly
+

The candidate attribute is the + RTCIceCandidate object with the new ICE + candidate that caused the event.

+
+ + +
4.8.2.3 Dictionary RTCPeerConnectionIceEventInit Members
candidate of type RTCIceCandidate
+

TODO

+
+
+
+
+ + +
+

5. Peer-to-peer Data API

+ + +

The Peer-to-peer Data API lets a web application send and receive + generic application data peer-to-peer. The API for sending and receiving + data models the behavior of WebSockets [WEBSOCKETS-API].

+ + +
+

5.1 RTCPeerConnection Interface Extensions

+ + +

The Peer-to-peer data API extends the + RTCPeerConnection interface as described below.

+ + +
partial interface RTCPeerConnection {
+    RTCDataChannel createDataChannel ([TreatNullAs=EmptyString] DOMString label, optional RTCDataChannelInit dataChannelDict);
+                attribute EventHandler ondatachannel;
+};

5.1.1 Attributes

ondatachannel of type EventHandler,
This event handler, of type datachannel, MUST be supported by all + objects implementing the RTCPeerConnection + interface.

5.1.2 Methods

createDataChannel
+

Creates a new RTCDataChannel object with the + given label. The RTCDataChannelInit dictionary + can be used to configure properties of the underlying channel such as + data reliability.

+ + +

When the createDataChannel() + method is invoked, the user agent MUST run the following steps.

+ + +
    +
  1. +

    If the RTCPeerConnection object’s RTCPeerConnection + signalingState is closed, throw an + InvalidStateError exception and abort these + steps.

    +
  2. + + +
  3. +

    Let channel be a newly created + RTCDataChannel object.

    +
  4. + + +
  5. +

    Initialize channel's label attribute to the value + of the first argument.

    +
  6. + + +
  7. +

    If the second (dictionary) argument is present, set + channel's ordered, maxRetransmitTime, + maxRetransmits, + protocol, + negotiated + and id attributes + to the values of their corresponding dictionary members (if + present in the dictionary).

    +
  8. + + +
  9. +

    If both the maxRetransmitTime + and maxRetransmits + attributes are set (not null), then throw a + SyntaxError exception and abort these steps.

    +
  10. + + +
  11. +

    If an attribute, either maxRetransmitTime + or maxRetransmits, has + been set to indicate unreliable mode, and that value exceeds the + maximum value supported by the user agent, the value must be set + to the user agents maximum value.

    +
  12. + + +
  13. +

    If id attribute + is uninitialized (not set via the dictionary), initialize it to a + value generated by the user agent, according to the WebRTC + DataChannel Protocol specification, and skip to the next step. + Otherwise, if the value of the id attribute is taken by an + existing RTCDataChannel, throw a + ResourceInUse exception and abort these steps.

    +
  14. + + +
  15. +

    Return channel and continue the following steps in + the background.

    +
  16. + + +
  17. +

    Create channel's associated underlying data + transport and configure it according to the relevant + properties of channel.

    +
  18. +
+
ParameterTypeNullableOptionalDescription
labelDOMString
dataChannelDictRTCDataChannelInit
Return type: RTCDataChannel
+
+ + +
+

5.2 RTCDataChannel

+ + +

The RTCDataChannel interface represents a + bi-directional data channel between two peers. A + RTCDataChannel is created via a factory method on an + RTCPeerConnection object.

+ + +

There are two ways to establish a connection with + RTCDataChannel. The first way is to simply create a + RTCDataChannel at one of the peers with the + negotiated + RTCDataChannelInit dictionary member unset or set to + its default value false. This will announce the new channel in-band and + trigger a RTCDataChannelEvent with the corresponding + RTCDataChannel object at the other peer. The second + way is to let the application negotiate the + RTCDataChannel. To do this, create a + RTCDataChannel object with the negotiated + RTCDataChannelInit dictionary member set to true, and + signal out-of-band (e.g. via a web server) to the other side that it + should create a corresponding RTCDataChannel with the + negotiated + RTCDataChannelInit dictionary member set to true and + the same id. This will + connect the two separately created RTCDataChannel + objects. The second way makes it possible to create channels with + asymmetric properties and to create channels in a declarative way by + specifying matching ids.

+ + +

Each RTCDataChannel has an associated + underlying data transport that is used to transport actual + data to the other peer. The transport properties of the underlying + data transport, such as in order delivery settings and reliability + mode, are configured by the peer as the channel is created. The + properties of a channel cannot change after the channel has been created. + The actual wire protocol between the peers is specified by the WebRTC + DataChannel Protocol specification (TODO: reference needed).

+ + +

A RTCDataChannel can be configured to operate in + different reliability modes. A reliable channel ensures that the data is + delivered at the other peer through retransmissions. An unreliable + channel is configured to either limit the number of retransmissions + (maxRetransmits ) or + set a time during which retransmissions are allowed (maxRetransmitTime). + These properties can not be used simultaneously and an attempt to do so + will result in an error. Not setting any of these properties results in a + reliable channel.

+ + +

A RTCDataChannel, created with createDataChannel() or + dispatched via a RTCDataChannelEvent, MUST initially + be in the connecting state. When the + RTCDataChannel object’s underlying data + transport is ready, the user agent MUST announce the RTCDataChannel as + open.

+ + +

When the user agent is to announce + a RTCDataChannel as open, the user agent MUST queue a + task to run the following steps:

+ + +
    +
  1. +

    If the associated RTCPeerConnection object's + RTCPeerConnection + signalingState is closed, abort these steps.

    +
  2. + + +
  3. +

    Let channel be the RTCDataChannel + object to be announced.

    +
  4. + + +
  5. +

    Set channel's readyState attribute to + open.

    +
  6. + + +
  7. +

    Fire a simple event named open at channel.

    +
  8. +
+ + +

When an underlying data transport is to be announced (the other + peer created a channel with negotiated unset or set + to false), the user agent of the peer that did not initiate the creation + process MUST queue a task to run the following steps:

+ + +
    +
  1. +

    If the associated RTCPeerConnection object's + RTCPeerConnection + signalingState is closed, abort these steps.

    +
  2. + + +
  3. +

    Let channel be a newly created + RTCDataChannel object.

    +
  4. + + +
  5. +

    Let configuration be an information bundle received + from the other peer as a part of the process to establish the + underlying data transport described by the WebRTC DataChannel + Protocol specification.

    +
  6. + + +
  7. +

    Initialize channel's label, ordered, maxRetransmitTime, + maxRetransmits, + protocol, + negotiated and + id attributes to their + corresponding values in configuration.

    +
  8. + + +
  9. +

    Set channel's readyState attribute to + connecting.

    +
  10. + + +
  11. +

    Fire a datachannel event named datachannel with channel + at the RTCPeerConnection object.

    +
  12. +
+ + +

An RTCDataChannel object's underlying data + transport may be torn down in a non-abrupt manner by running the + closing procedure. When + that happens the user agent MUST, unless the procedure was initiated by + the close() method, + queue a task that sets the object's readyState attribute to + closing. This will eventually render the data transport closed.

+ + +
Note
+ References to protocol specification are needed. +
+ + +

When a RTCDataChannel object's underlying data + transport has been closed, the + user agent MUST queue a task to run the following steps:

+ + +
    +
  1. +

    Let channel be the RTCDataChannel + object whose transport + was closed.

    + + +
    Note
    + The data transport protocol will specify what happens to, e.g. + buffered data, when the data transport is closed. +
    +
  2. + + +
  3. +

    Set channel's readyState attribute to + closed.

    +
  4. + + +
  5. +

    If the transport was + closed with an error, + fire an NetworkError event at channel.

    +
  6. + + +
  7. +

    Fire a simple event named close at + channel.

    +
  8. +
+ + +
dictionary RTCDataChannelInit {
+    boolean        ordered = true;
+    unsigned short maxRetransmitTime;
+    unsigned short maxRetransmits;
+    DOMString      protocol = "";
+    boolean        negotiated = false;
+    unsigned short id;
+};

interface RTCDataChannel : EventTarget { + readonly attribute DOMString label; + readonly attribute boolean ordered; + readonly attribute unsigned? maxRetransmitTime; + readonly attribute unsigned? maxRetransmits; + readonly attribute DOMString protocol; + readonly attribute boolean negotiated; + readonly attribute unsigned short id; + readonly attribute RTCDataChannelState readyState; + readonly attribute unsigned long bufferedAmount; + attribute EventHandler onopen; + attribute EventHandler onerror; + attribute EventHandler onclose; + void close (); + attribute EventHandler onmessage; + attribute DOMString binaryType; + void send (DOMString data); + void send (Blob data); + void send (ArrayBuffer data); + void send (ArrayBufferView data); +};

5.2.1 Attributes

binaryType of type DOMString,
+

The binaryType attribute + MUST, on getting, return the value to which it was last set. On + setting, the user agent must set the IDL attribute to the new value. + When a RTCDataChannel object is created, the + binaryType + attribute MUST be initialized to the string "blob".

+ + +

This attribute controls how binary data is exposed to scripts. See + the [WEBSOCKETS-API] for more information.

+
bufferedAmount of type unsigned long, readonly
+

The bufferedAmount + attribute MUST return the number of bytes of application data (UTF-8 + text and binary data) that have been queued using send() but that, as of the last + time the event loop started executing a task, had not yet been + transmitted to the network. (This thus includes any text sent during + the execution of the current task, regardless of whether the user + agent is able to transmit text asynchronously with script execution.) + This does not include framing overhead incurred by the protocol, or + buffering done by the operating system or network hardware. If the + channel is closed, this attribute's value will only increase with + each call to the send() method (the attribute does + not reset to zero once the channel closes).

+
id of type unsigned short, readonly
+

The RTCDataChannel.id attribute + returns the id for this RTCDataChannel . The id + was either assigned by the user agent at channel creation time or + selected by the script. The attribute MUST return the value to which + it was set when the RTCDataChannel was + created.

+
label of type DOMString, readonly
+

The RTCDataChannel.label + attribute represents a label that can be used to distinguish this + RTCDataChannel object from other + RTCDataChannel objects. The attribute MUST return + the value to which it was set when the + RTCDataChannel object was created.

+
maxRetransmitTime of type unsigned, readonly , nullable
+

The RTCDataChannel.maxRetransmitTime + attribute returns the length of the time window (in milliseconds) + during which retransmissions may occur in unreliable mode, or null if + unset. The attribute MUST be initialized to null by default and MUST + return the value to which it was set when the + RTCDataChannel was created.

+
maxRetransmits of type unsigned, readonly , nullable
+

The RTCDataChannel.maxRetransmits + attribute returns the maximum number of retransmissions that are + attempted in unreliable mode, or null if unset. The attribute MUST be + initialized to null by default and MUST return the value to which it + was set when the RTCDataChannel was created.

+
negotiated of type boolean, readonly
+

The RTCDataChannel.negotiated + attribute returns true if this RTCDataChannel was + negotiated by the application, or false otherwise. The attribute MUST + be initialized to false by default and MUST return the value to which + it was set when the RTCDataChannel was + created.

+
onclose of type EventHandler,
This event handler, of type close, MUST be supported by all + objects implementing the RTCDataChannel + interface.
onerror of type EventHandler,
This event handler, of type error, MUST be supported by all + objects implementing the RTCDataChannel + interface.
onmessage of type EventHandler,
This event handler, of type message ,MUST be supported by + all objects implementing the RTCDataChannel + interface.
onopen of type EventHandler,
This event handler, of type open, MUST be supported by all + objects implementing the RTCDataChannel + interface.
ordered of type boolean, readonly
+

The RTCDataChannel.ordered + attribute returns true if the RTCDataChannel is + ordered, and false if other of order delivery is allowed. The + attribute MUST be initialized to true by default and MUST return the + value to which it was set when the RTCDataChannel + was created.

+
protocol of type DOMString, readonly
+

The RTCDataChannel.protocol + attribute returns the name of the sub-protocol used with this + RTCDataChannel if any, or the empty string + otherwise. The attribute MUST be initialized to the empty string by + default and MUST return the value to which it was set when the + RTCDataChannel was created.

+
readyState of type RTCDataChannelState, readonly
+

The RTCDataChannel.readyState + attribute represents the state of the RTCDataChannel + object. It MUST return the value to which the user agent last set it + (as defined by the processing model algorithms).

+

5.2.2 Methods

close
+

Closes the RTCDataChannel. It may be called + regardless of whether the RTCDataChannel object + was created by this peer or the remote peer.

+ + +

When the RTCDataChannel + close() method is called, the user agent MUST run the + following steps:

+ + +
    +
  1. +

    Let channel be the + RTCDataChannel object which is about to be + closed.

    +
  2. + + +
  3. +

    If channel's readyState is + closing or closed, then abort these + steps.

    +
  4. + + +
  5. +

    Set channel's readyState attribute to + closing.

    +
  6. + + +
  7. +

    If the closing procedure + has not started yet, start it.

    +
  8. +
+
No parameters.
Return type: void
send
+

Run the steps described by the send() algorithm with argument + type string object.

+
ParameterTypeNullableOptionalDescription
dataDOMString
Return type: void
send
+

Run the steps described by the send() algorithm with argument + type Blob object.

+
ParameterTypeNullableOptionalDescription
dataBlob
Return type: void
send
+

Run the steps described by the send() algorithm with argument + type ArrayBuffer object.

+
ParameterTypeNullableOptionalDescription
dataArrayBuffer
Return type: void
send
+

Run the steps described by the send() algorithm with argument + type ArrayBufferView object.

+
ParameterTypeNullableOptionalDescription
dataArrayBufferView
Return type: void
+ + +

5.2.3 Dictionary RTCDataChannelInit Members

id of type unsigned short
+

Overrides the default selection of id for this channel.

+
maxRetransmitTime of type unsigned short
+

Limits the time during which the channel will retransmit data if + not successfully delivered. This value may be clamped if it exceeds + the maximum value supported by the user agent.

+
maxRetransmits of type unsigned short
+

Limits the number of times a channel will retransmit data if not + successfully delivered. This value may be clamped if it exceeds the + maximum value supported by the user agent..

+
negotiated of type boolean, defaulting to false
+

The default value of false tells the user agent to announce the + channel in-band and instruct the other peer to dispatch a + corresponding RTCDataChannel object. If set to + true, it is up to the application to negotiate the channel and create + a RTCDataChannel object with the same + id at the other + peer.

+
ordered of type boolean, defaulting to true
+

If set to false, data is allowed to be delivered out of order. The + default value of true, guarantees that data will be delivered in + order.

+
protocol of type DOMString, defaulting to ""
+

Subprotocol name used for this channel.

+
+ + +

The send() method is + overloaded to handle different data argument types. When any version of + the method is called, the user agent MUST run the following steps:

+ + +
    +
  1. +

    Let channel be the RTCDataChannel + object on which data is to be sent.

    +
  2. + + +
  3. +

    If channel’s readyState attribute + is connecting, throw an InvalidStateError + exception and abort these steps.

    +
  4. + + +
  5. +

    Execute the sub step that corresponds to the type of the methods + argument:

    + + +
      +
    • +

      string object:

      + + +

      Let data be the result of converting the argument + object to a sequence of Unicode characters and increase the + bufferedAmount + attribute by the number of bytes needed to express + data as UTF-8.

      +
    • + + +
    • +

      Blob object:

      + + +

      Let data be the raw data represented by the + Blob object and increase the bufferedAmount + attribute by the size of data, in bytes.

      +
    • + + +
    • +

      ArrayBuffer object:

      + + +

      Let data be the data stored in the buffer described + by the ArrayBuffer object and increase the + bufferedAmount + attribute by the length of the ArrayBuffer in + bytes.

      +
    • + + +
    • +

      ArrayBufferView object:

      + + +

      Let data be the data stored in the section of the + buffer described by the ArrayBuffer object that the + ArrayBufferView object references and increase the + bufferedAmount + attribute by the length of the ArrayBufferView in + bytes.

      +
    • +
    +
  6. + + +
  7. +

    If channel’s underlying data transport is not + established yet, or if the closing procedure has + started, then abort these steps.

    +
  8. + + +
  9. +

    Attempt to send data on channel’s + underlying data transport; if the data cannot be sent, e.g. + because it would need to be buffered but the buffer is full, the user + agent MUST abruptly close + channel’s underlying data transport with an error.

    +
  10. +
+ + +
enum RTCDataChannelState {
+    "connecting",
+    "open",
+    "closing",
+    "closed"
+};
Enumeration description
connecting +

The user agent is attempting to establish the underlying data + transport. This is the initial state of a + RTCDataChannel object created with createDataChannel() + .

+
open +

The underlying data transport is established and + communication is possible. This is the initial state of a + RTCDataChannel object dispatched as a part of a + RTCDataChannelEvent .

+
closing +

The procedure to close + down the underlying data transport has started.

+
closed +

The underlying data transport has been closed or could not be + established.

+
+ +
+ + +
+

5.3 RTCDataChannelEvent

+ + +

The datachannel event + uses the RTCDataChannelEvent interface.

+ + +

Firing a datachannel event named + e with a RTCDataChannel + channel means that an event with the name e, which + does not bubble (except where otherwise stated) and is not cancelable + (except where otherwise stated), and which uses the + RTCDataChannelEvent interface with the channel attribute set to + channel, MUST be created and dispatched at the given + target.

+ + +
dictionary RTCDataChannelEventInit : EventInit {
+    RTCDataChannel channel;
+};

[ Constructor (DOMString type, RTCDataChannelEventInit eventInitDict)] +interface RTCDataChannelEvent : Event { + readonly attribute RTCDataChannel channel; +};

5.3.1 Constructors

RTCDataChannelEvent
readonly attribute RTCDataChannel channel
ParameterTypeNullableOptionalDescription
typeDOMString
eventInitDictRTCDataChannelEventInit

5.3.2 Attributes

channel of type RTCDataChannel, readonly
+

The channel attribute + represents the RTCDataChannel object associated + with the event.

+
+ + +

5.3.3 Dictionary RTCDataChannelEventInit Members

channel of type RTCDataChannel
+

TODO

+
+
+ + +
+

5.4 Garbage Collection

+ + +

A RTCDataChannel object MUST not be garbage + collected if its

+ + +
    +
  • +

    readyState + is connecting and at least one event listener is + registered for open events, message events, + error events, or close events.

    +
  • + + +
  • +

    readyState + is open and at least one event listener is registered + for message events, error events, or + close events.

    +
  • + + +
  • +

    readyState + is closing and at least one event listener is registered + for error events, or close events.

    +
  • + + +
  • +

    underlying data transport is established and data is queued + to be transmitted.

    +
  • +
+
+
+ + +
+

6. Peer-to-peer DTMF

+ + +

In order to send DTMF (phone keypad) values across an + RTCPeerConnection, the user agent needs to know which + MediaStreamTrack on which + RTCPeerConnection will carry the DTMF. This section + describes an interface on RTCPeerConnection to + associate DTMF capability with a MediaStreamTrack for + that RTCPeerConnection.

+ + +
+

6.1 RTCPeerConnection Interface Extensions

+ + +

The Peer-to-peer DTMF API extends the + RTCPeerConnection interface as described below.

+ + +
partial interface RTCPeerConnection {
+    RTCDTMFSender createDTMFSender (MediaStreamTrack track);
+};

6.1.1 Methods

createDTMFSender
+

The createDTMFSender() method creates an RTCDTMFSender + that references the given MediaStreamTrack. The MediaStreamTrack MUST + be an element of a MediaStream that's currently in the + RTCPeerConnection object's local streams set; if not, throw an + InvalidParameter exception and abort these steps.

+
ParameterTypeNullableOptionalDescription
trackMediaStreamTrack
Return type: RTCDTMFSender
+
+ + +
+

6.2 RTCDTMFSender

+ + +

An RTCDTMFSender is created by calling the + createDTMFSender() method on an + RTCPeerConnection. This constructs an object that + exposes the functions required to send DTMF on the given + MediaStreamTrack.

+ + +
[NoInterfaceObject]
+interface RTCDTMFSender {
+    readonly    attribute boolean          canInsertDTMF;
+    void insertDTMF (DOMString tones, optional long duration, optional long interToneGap);
+    readonly    attribute MediaStreamTrack track;
+                attribute EventHandler     ontonechange;
+    readonly    attribute DOMString        toneBuffer;
+    readonly    attribute long             duration;
+    readonly    attribute long             interToneGap;
+};

6.2.1 Attributes

canInsertDTMF of type boolean, readonly
+

The canInsertDTMF + attribute MUST indicate if the RTCDTMFSender is + capable of sending DTMF.

+
duration of type long, readonly
+

The duration attribute + MUST return the current tone duration value. This value will be the + value last set via the insertDTMF() method, or + the default value of 100 ms if insertDTMF() was + called without specifying the duration.

+
interToneGap of type long, readonly
+

The interToneGap + attribute MUST return the current value of the between-tone gap. This + value will be the value last set via the + insertDTMF() method, or the default value of 50 + ms if insertDTMF() was called without specifying + the interToneGap.

+
ontonechange of type EventHandler,
+

This event handler uses the + RTCDTMFToneChangeEvent interface to return the + character for each tone as it is played out. See + RTCDTMFToneChangeEvent for details.

+
toneBuffer of type DOMString, readonly
+

The toneBuffer + attribute MUST return a list of the tones remaining to be played out. + For the syntax, content, and interpretation of this list, see + insertDTMF.

+
track of type MediaStreamTrack, readonly
+

The track attribute MUST return the + MediaStreamTrack given as argument to the + createDTMFSender() method.

+

6.2.2 Methods

insertDTMF
+

An RTCDTMFSender object’s insertDTMF() method + is used to send DTMF tones.

+ + +

The tones parameter is treated as a series of characters. The + characters 0 through 9, A through D, #, and * generate the associated + DTMF tones. The characters a to d are equivalent to A to D. The + character ',' indicates a delay of 2 seconds before processing the + next character in the tones parameter. Unrecognized characters are + ignored.

+ + +

The duration parameter indicates the duration in ms to use for + each character passed in the tones parameters. The duration cannot be + more than 6000 ms or less than 40 ms. The default duration is 100 ms + for each tone.

+ + +

The interToneGap parameter indicates the gap between tones. It + MUST be at least 30 ms. The default value is 70 ms.

+ + +

The browser MAY increase the duration and interToneGap times to + cause the times that DTMF start and stop to align with the boundaries + of RTP packets but it MUST not increase either of them by more than + the duration of a single RTP audio packet.

+ + +
Issue 2

ISSUE: How are invalid values handled?

+ + +

When the insertDTMF() method is invoked, the + user agent MUST run the following steps:

+ + +
    +
  1. If the associated MediaStreamTrack is not + connected to the associated RTCPeerConnection, + return.
  2. + + +
  3. If the canInsertDTMF + attribute is false, return.
  4. + + +
  5. Set the value of the toneBuffer attribute to + the value of the tones argument, the value of the + duration + attribute to the duration argument if specified, and the + value of the interToneGap to the + interToneGap argument, if specified.
  6. + + +
  7. If toneBuffer is an empty + string, return.
  8. + + +
  9. If a Playout task is scheduled to be run; abort these + steps; otherwise queue a task that runs the following steps + (Playout task): + +
      +
    1. If toneBuffer is an + empty string, fire an event named tonechange with an + empty string at the RTCDTMFSender object + and abort these steps.
    2. + + +
    3. Remove the first character from toneBuffer and let + that character be tone.
    4. + + +
    5. Start playout of tone for duration ms on the + associated RTP media stream, using the appropriate codec.
    6. + + +
    7. Queue a task to be executed in duration + + interToneGap ms + from now that runs the steps labelled Playout + task.
    8. + + +
    9. Fire an event named tonechange with a + string consisting of tone at the + RTCDTMFSender object.
    10. +
    +
  10. +
+ + +

Calling insertDTMF() with an empty + tones parameter can be used to cancel all tones queued to play after + the currently playing tone.

+
ParameterTypeNullableOptionalDescription
tonesDOMString
durationlong
interToneGaplong
Return type: void
+
+ + +
+

6.3 RTCDTMFToneChangeEvent

+ + +

The tonechange event uses the + RTCDTMFToneChangeEvent interface.

+ + +

Firing a tonechange event named + e with a DOMString tone means + that an event with the name e, which does not bubble (except + where otherwise stated) and is not cancelable (except where otherwise + stated), and which uses the RTCDTMFToneChangeEvent + interface with the tone attribute set to + tone, MUST be created and dispatched at the given target.

+ + +
dictionary RTCDTMFToneChangeEventInit : EventInit {
+    DOMString tone;
+};

[ Constructor (DOMString type, RTCDTMFToneChangeEventInit eventInitDict)] +interface RTCDTMFToneChangeEvent : Event { + readonly attribute DOMString tone; +};

6.3.1 Constructors

RTCDTMFToneChangeEvent
readonly attribute DOMString tone
ParameterTypeNullableOptionalDescription
typeDOMString
eventInitDictRTCDTMFToneChangeEventInit

6.3.2 Attributes

tone of type DOMString, readonly
+

The tone + attribute contains the character for the tone that has just begun + playout (see insertDTMF()). If the value is the + empty string, it indicates that the previous tone has completed + playback.

+
+ + +

6.3.3 Dictionary RTCDTMFToneChangeEventInit Members

tone of type DOMString
+

TODO

+
+
+
+ + +
+

7. Statistics Model

+ + +
+

7.1 Introduction

+ + +

The basic statistics model is that the browser maintains a set of + statistics referenced by a selector. The + selector may, for example, be a MediaStreamTrack. For a + track to be a valid selector, it must be a member of a + MediaStream that is sent or received by the + RTCPeerConnection object on which the stats request + was issued. The calling Web application provides the selector to the + getStats() method + and the browser emits (in the JavaScript) a set of statistics that it + believes is relevant to the selector.

+ + +
Note
+ Evaluate the need for other selectors than MediaStreamTrack. +
+ + +

The statistics returned are designed in such a way that repeated + queries can be linked by the RTCStats id dictionary member. Thus, a Web application can + make measurements over a given time period by requesting measurements at + the beginning and end of that period.

+
+ + +
+

7.2 RTCPeerConnection Interface Extensions

+ + +

The Statistics API extends the RTCPeerConnection + interface as described below.

+ + +
partial interface RTCPeerConnection {
+    void getStats (MediaStreamTrack? selector, RTCStatsCallback successCallback, RTCPeerConnectionErrorCallback failureCallback);
+};

7.2.1 Methods

getStats
+

Gathers stats for the given selector + and reports the result asynchronously.

+ + +

When the getStats() method is + invoked, the user agent MUST queue a task to run the following + steps:

+ + +
    +
  1. +

    If the RTCPeerConnection object's RTCPeerConnection + signalingState is closed, throw an + InvalidStateError exception.

    +
  2. + + +
  3. +

    Return, but continue the following steps in the + background.

    +
  4. + + +
  5. +

    Let selectorArg be the methods first argument.

    +
  6. + + +
  7. +

    If selectorArg is an invalid selector, the user agent MUST queue a task + to invoke the failure callback (the method's third argument).

    +
  8. + + +
  9. +

    Start gathering the stats indicated by selectorArg. + In case selectorArg is null, stats MUST be gathered + for the whole RTCPeerConnection object.

    +
  10. + + +
  11. +

    When the relevant stats have been gathered, queue a task to + invoke the success callback (the method's second argument) with a + new RTCStatsReport object, representing the + gathered stats, as its argument.

    +
  12. +
+
ParameterTypeNullableOptionalDescription
selectorMediaStreamTrack
successCallbackRTCStatsCallback
failureCallbackRTCPeerConnectionErrorCallback
Return type: void
+
+ + +
+

7.3 RTCStatsCallback

+ + +
callback RTCStatsCallback = void (RTCStatsReport report);

7.3.1 Callback RTCStatsCallback Parameters

report of type RTCStatsReport
+

A RTCStatsReport representing the gathered + stats.

+
+
+ + +
+

7.4 RTCStatsReport Object

+ + +

The getStats() + method delivers a successful result in the form of a + RTCStatsReport object. A + RTCStatsReport object represents a map between + strings, identifying the inspected objects (RTCStats.id), and their corresponding + RTCStats objects.

+ + +

An RTCStatsReport may be composed of several + RTCStats objects, each reporting stats for one + underlying object that the implementation thinks is relevant for the + selector. One achieves the total for the + selector by summing over all the stats of a + certain type; for instance, if a MediaStreamTrack is carried + by multiple SSRCs over the network, the + RTCStatsReport may contain one RTCStats + object per SSRC (which can be distinguished by the value of the "ssrc" + stats attribute).

+ + +
interface RTCStatsReport {
+    getter RTCStats (DOMString id);
+};

7.4.1 Methods

RTCStats
+

Getter to retrieve the RTCStats objects that + this stats report is composed of.

+ + +

The set of supported property names [WEBIDL] is defined as the + ids of all the RTCStats objects that has been + generated for this stats report. The order of the property names is + left to the user agent.

+
ParameterTypeNullableOptionalDescription
idDOMString
Return type: getter
+
+ + +
+

7.5 RTCStats Dictionary

+ + +

An RTCStats dictionary represents the stats + gathered by inspecting a specific object relevant to a selector. The RTCStats + dictionary is a base type that specifies as set of default attributes, + such as timestamp and type. Specific stats are added by extending the + RTCStats dictionary.

+ + +

Note that while stats names are standardized, any given implementation + may be using experimental values or values not yet known to the Web + application. Thus, applications MUST be prepared to deal with unknown + stats.

+ + +
Note
+ OPEN ISSUE: Need to define an IANA registry for this and populate with + pointers to existing things such as the RTCP statistics. +
+ + +

Statistics need to be synchronized with each other in order to yield + reasonable values in computation; for instance, if "bytesSent" and + "packetsSent" are both reported, they both need to be reported over the + same interval, so that "average packet size" can be computed as "bytes / + packets" - if the intervals are different, this will yield errors. Thus + implementations MUST return synchronized values for all stats in a + RTCStats object.

+ + +
dictionary RTCStats {
+    DOMHiResTimeStamp timestamp;
+    RTCStatsType      type;
+    DOMString         id;
+};

7.5.1 Dictionary RTCStats Members

id of type DOMString
+

A unique id that is + associated with the object that was inspected to produce this + RTCStats object. Two RTCStats + objects, extracted from two different + RTCStatsReport objects, MUST have the same id if + they were produced by inspecting the same underlying object. User + agents are free to pick any format for the id as long as it meets the + requirements above.

+ + +
Note
+ Consider naming id something that indicates that the id refers to + the underlying object that was inspected to produce the stats, + instead of being an id for the JavaScript object. Suggestions: + statsObjectId, reporterId, srcId. +
+
timestamp of type DOMHiResTimeStamp
+

The timestamp, + of type DOMHiResTimeStamp [HIGHRES-TIME], associated + with this object. The time is relative to the UNIX epoch (Jan 1, + 1970, UTC).

+
type of type RTCStatsType
+

The type of this object.

+ + +

The type attribute + MUST be initialized to the name of the most specific type this + RTCStats dictionary represents.

+
+ + +
enum RTCStatsType {
+    "inbound-rtp",
+    "outbound-rtp"
+};
Enumeration description
inbound-rtpInbound RTP.
outbound-rtpOutbund RTP.
+
+ + +
+

7.6 Derived Stats Dictionaries

+ + +
dictionary RTCRTPStreamStats : RTCStats {
+    DOMString ssrc;
+    DOMString remoteId;
+};

7.6.1 Dictionary RTCRTPStreamStats Members

remoteId of type DOMString
+

The remoteId can be used to look up the corresponding + RTCStats object that represents stats reported by + the other peer.

+
ssrc of type DOMString
+

...

+
+ + +
dictionary RTCInboundRTPStreamStats : RTCRTPStreamStats {
+    unsigned long packetsReceived;
+    unsigned long bytesReceived;
+};

7.6.2 Dictionary RTCInboundRTPStreamStats Members

bytesReceived of type unsigned long
+

...

+
packetsReceived of type unsigned long
+

...

+
+ + +
dictionary RTCOutboundRTPStreamStats : RTCRTPStreamStats {
+    unsigned long packetsSent;
+    unsigned long bytesSent;
+};

7.6.3 Dictionary RTCOutboundRTPStreamStats Members

bytesSent of type unsigned long
+

...

+
packetsSent of type unsigned long
+

...

+
+
+ + +
+

7.7 Example

+ + +

Consider the case where the user is experiencing bad sound and the + application wants to determine if the cause of it is packet loss. The + following example code might be used:

+ +
Example 1
var baselineReport, currentReport;
+var selector = pc.getRemoteStreams()[0].getAudioTracks()[0];
+
+pc.getStats(selector, function (report) {
+    baselineReport = report;
+});
+
+// ... wait a bit
+setTimeout(function () {
+    pc.getStats(selector, function (report) {
+        currentReport = report;
+        processStats();
+    });
+}, aBit);
+
+function processStats() {
+    // compare the elements from the current report with the baseline
+    for each (var now in currentReport) {
+        if (now.type != "outbund-rtp")
+            continue;
+
+        // get the corresponding stats from the baseline report
+        base = baselineReport[now.id];
+
+        if (base) {
+            remoteNow = currentReport[now.remoteId];
+            remoteBase = baselineReport[base.remoteId];
+
+            var packetsSent = now.packetsSent - base.packetsSent;
+            var packetsReceived = remoteNow.packetsReceived - remoteBase.packetsReceived;
+
+            // if fractionLost is > 0.3, we have probably found the culprit
+            var fractionLost = (packetsSent - packetsReceived) / packetsSent;
+        }
+    }
+}
+
+
+ + +
+

8. Identity

+ + +
+

8.1 Identity Provider Interaction

+ + +

WebRTC offers and answers (and hence the channels established by + RTCPeerConnection objects) can be authenticated by using + web-based Identity Providers. The idea is that the entity sending the + offer/answer acts as the Authenticating Party (AP) and obtains an + identity assertion from the IdP which it attaches to the offer/answer. + The consumer of the offer/answer (i.e., the + RTCPeerConnection on which + setRemoteDescription() is called acts as the Relying Party + (RP) and verifies the assertion.

+ + +

The interaction with the IdP is designed to decouple the browser from + any particular identity provider; the browser need only know how to load + the IdP's JavaScript -- which is deterministic from the IdP's identity -- + and the generic protocol for requesting and verifying assertions. The IdP + provides whatever logic is necessary to bridge the generic protocol to + the IdP's specific requirements. Thus, a single browser can support any + number of identity protocols, including being forward compatible with + IdPs which did not exist at the time the browser was written. The generic + protocol details are described in [RTCWEB-SECURITY-ARCH]. This document + specifies the procedures required to instantiate the IdP proxy, request + identity assertions, and consume the results.

+ + +
+

8.1.1 Peer-Connection/IdP + Communications

+ + +

In order to communicate with the IdP, the browser must instantiate + an isolated interpreted context [TODO: What's the technical term?], + such as an invisible IFRAME. The initial contents of the context are + loaded from a URI derived from the IdP's domain name. + [RTCWEB-SECURITY-ARCH].

+ + +

For purposes of generating assertions, the IdP shall be chosen as + follows:

+ + +
    +
  1. If the setIdentityProvider() method has been called, + the IdP provided shall be used.
  2. + + +
  3. If the setIdentityProvider() method has not been + called, then the browser shall use an IdP configured into the + browser. If more than one such IdP is configured, the browser should + provide the user with a chooser interface.
  4. +
+ + +

In order to verify assertions, the IdP domain name and protocol + shall be equal to the "domain" and "protocol" fields of the identity + assertion.

+
+ + +
+

8.1.2 Instantiating an IdP Proxy

+ + +

The browser creates an IdP proxy by loading an isolated, invisible + IFRAME with HTML content from the IdP URI. The URI for the IdP is a + well-known URI formed from the domain and protocol + fields, as specified in [RTCWEB-SECURITY-ARCH].

+ + +

When an IdP proxy is requiured, the browser performs the following + steps:

+ + +
    +
  1. An invisible, sandboxed IFRAME is created within the browser + context, with a sandbox attribute set to "allow-forms + allow-scripts allow-same-origin". The browser MUST prevent the IdP + proxy from navigating the browsing context to a different location. + The browser MUST prevent the IdP proxy from interacting with the user + (this includes, in particular, popup windows and user dialogs).
  2. + + +
  3. Once the IdP proxy is created, the browser creates a + MessageChannel [webmessaging] within the context of + the IdP proxy and assigns one port from the channel to a variable + named window.rtcwebIdentityPort. This message channel + forms the basis of communication between the browser and the IdP + proxy. Since it is an essential security property of the web sandbox + that a page is unable to insert objects into content from another + origin, this ensures that the IdP proxy can trust that messages + originating from window.rtcwebIdentityPort are from + RTCPeerConnection and not some other page. This + protection ensures that pages from other origins are unable to + instantiate IdP proxies and obtain identity assertions.
  4. + + +
  5. The IdP proxy completes loading and informs the + RTCPeerConnection that it is ready by sending a "READY" + message to the message channel port. Once this message is received by + the RTCPeerConnection, the IdP is considered ready to + receive requests to generate or verify identity assertions.
  6. +
+ + +

[TODO: This is not sufficient unless we expect the IdP to protect + this information. Otherwise, the a=identity information can be copied + from a session with "good" properties to any other session with the + same fingerprint information. Since we want to reuse credentials, that + would be bad.] The identity mechanism MUST provide an indication to the + remote side of the type of stream (ordinary, peerIdentity, noaccess) it + is associated with. Implementations MUST have an user interface that + indicates the different cases and identity for these.

+ +
+
+ + +
+

8.2 Requesting Assertions

+ + +

The identity assertion request process involves the following + steps.

+ + +
    +
  1. The RTCPeerConnection instantiates an IdP context as + described in the previos section. +
  2. + + +
  3. The IdP serves up the IdP JavaScript code to the IdP context.
  4. + + +
  5. Once the IdP is loaded and ready to receive messages it sends a + "READY" message [RTCWEB-SECURITY-ARCH]. Note that this + does not imply that the user is logged in, merely that enough IdP state + is booted up to be ready to handle PostMessage calls.
  6. + + +
  7. The IdP sends a "SIGN" message to the IdP proxy + context. This message includes the material the + RTCPeerConnection desires to be bound to the user's + identity.
  8. + + +
  9. If the user is not logged in, at this point the IdP will initiate + the login process. For instance, it might pop up a dialog box inviting + the user to enter their (IdP) username and password.
  10. + + +
  11. Once the user is logged in (potentially after the previous step), + the IdP proxy generates an identity assertion (depending on the + authentication protocol this may involve interacting with the IDP + server).
  12. + + +
  13. Once the assertion is generated, the IdP proxy sends a response + containing the assertion to the + RTCPeerConnection over the message channel.
  14. + + +
  15. The RTCPeerConnection stores the assertion for use + with future offers or answers. If the identity request was triggered by + a createOffer() or createAnswer(), then the + assertion is inserted in the offer/answer.
  16. +
+
+ + +
+

8.3 Verifying Assertions

+ + +

The identity assertion request process involves the following + steps.

+ + +
    +
  1. The RTCPeerConnection instantiates an IdP context as + described in the previous section.
  2. + + +
  3. The IdP serves up the IdP JavaScript code to the IdP context.
  4. + + +
  5. Once the IdP is loaded and ready to receive messages it sends a + "READY" message [RTCWEB-SECURITY-ARCH]. Note that this + does not imply that the user is logged in, merely that enough IdP state + is booted up to be ready to handle PostMessage calls.
  6. + + +
  7. The IdP sends a "VERIFY" message to the IdP + proxy context. This message includes assertion from the offer/answer + which is to be verified.
  8. + + +
  9. The IdP proxy verifies the identity assertion (depending on the + authentication protocol this may involve interacting with the IDP + server).
  10. + + +
  11. Once the assertion is verified the IdP proxy sends a response + containing the verified assertion results to the + RTCPeerConnection over the message channel.
  12. + + +
  13. If an incoming stream is associated with an identity assertion, + implementations SHOULD still allow sites access to the stream (i.e., + they should not taint it) but MUST NOT display the browser chrome + identity indications if the site maps it onto a modifiable or viewable + object. If the site performs such a mapping after the chrome + indications have been displayed, the browser MUST change the identity + indicators appropriately and MAY wish to ask for user consent prior to + allowing the mapping.
  14. + + +
  15. The RTCPeerConnection displays the assertion + information in the browser UI and stores the assertion in the + peerIdentity + attribute for availability to the JavaScript application. The assertion + information to be displayed shall contain the domain name of the IdP + and the identity returned by the IdP and must be displayed via some + mechanism which cannot be spoofed by content. [[OPEN ISSUE: The + identity information should also be available in the inspector + interface defined in [RTCWEB-SECURITY-ARCH].
  16. +
+
+ + +
+

8.4 RTCPeerConnection Interface Extensions

+ + +

The Identity API extends the RTCPeerConnection + interface as described below.

+ + +
partial interface RTCPeerConnection {
+    void setIdentityProvider (DOMString provider, optional DOMString protocol, optional DOMString username);
+    void getIdentityAssertion ();
+    readonly    attribute RTCIdentityAssertion? peerIdentity;
+                attribute EventHandler          onidentityresult;
+};

8.4.1 Attributes

onidentityresult of type EventHandler,
This event handler, of event handler event type identityresult, MUST be fired by all + objects implementing the RTCPeerConnection + interface. It is called any time an identity verification succeeds or + fails.
peerIdentity of type RTCIdentityAssertion, readonly , nullable
+

Contains the peer identity assertion information if an identity + assertion was provided and verified.

+

8.4.2 Methods

getIdentityAssertion
+

Initiates the process of obtaining an identity assertion. + Applications need not make this call. It is merely intended to allow + them to start the process of obtaining identity assertions before a + call is initiated. If an identity is needed, either because the + browser has been configured with a default identity provider or + because the setIdentityProvider() method was called, + then an identity will be automatically requested when an offer or + answer is created.

+ + +

Queue a task to run the following substeps.

+ + +
    +
  1. +

    If the connection's RTCPeerConnection + signalingState is closed, abort these steps.

    +
  2. + + + +
  3. +

    Instantiate a new IdP proxy and request an identity + assertion.

    +
  4. +
+
No parameters.
Return type: void
setIdentityProvider
+

Sets the identity provider to be used for a given + RTCPeerConnection object. Applications need not make + this call; if the browser is already configured for an IdP, then that + configured IdP will be used to get an assertion.

+ + +

When the setIdentityProvider() method is invoked, the user + agent MUST run the following steps:

+ + +
    +
  1. +

    Set the current identity values to the triplet + (provider, protocol, + username).

    +
  2. + + +
  3. +

    If the RTCPeerConnection object's RTCPeerConnection + signalingState is stable, and any of the + identity settings have changed, queue a task to run the following + substeps:

    + + +
      +
    1. +

      If the connection's RTCPeerConnection + signalingState is closed, throw an + InvalidStateError exception and abort these + steps.

      +
    2. + + +
    3. +

      Instantiate a new IdP proxy and request an identity + assertion.

      +
    4. + + +
    5. +

      If/when the assertion is obtained, fire a negotiationneeded event.

      +
    6. +
    +
  4. +
+
ParameterTypeNullableOptionalDescription
providerDOMString
protocolDOMString
usernameDOMString
Return type: void
+
+ + +
+

8.5 RTCIdentityAssertion Type

+ + +
dictionary RTCIdentityAssertion {
+    DOMString idp;
+    DOMString name;
+};

8.5.1 Dictionary RTCIdentityAssertion Members

idp of type DOMString
+

A domain name representing the identity provider.

+
name of type DOMString
+

An RFC822-conformant [TODO: REF] representation of the verified + peer identity. This identity will have been verified via the + procedures described in [RTCWEB-SECURITY-ARCH].

+
+
+ + +
+

8.6 Examples

+ + +

The identity system is designed so that applications need not take any + special action in order for users to generate and verify identity + assertions; if a user has configured an IdP into their browser, then the + browser will automatically request/generate assertions and the other side + will automatically verify them and display the results. However, + applications may wish to exercise tighter control over the identity + system as shown by the following examples.

+ + +
+

This example shows how to configure the identity provider and + protocol.

+ +
Example 2
pc.setIdentityProvider("example.com", "default", "alice@example.com");
+
+ + +
+

This example shows how to consume identity assertions inside a Web + application.

+ +
Example 3
pc.onidentityresult = function(result) {
+  console.log("IdP= " + pc.peerIdentity.idp +
+              " identity=" + pc.peerIdentity.name);
+};
+
+
+
+ + +
+

9. Media Stream API Extensions for Network Use

+ + +
+

9.1 Introduction

+ + +

The MediaStream interface, as defined in the + [GETUSERMEDIA] specification, typically represents a stream of data of + audio and/or video. A MediaStream may be extended to + represent a stream that either comes from or is sent to a remote node + (and not just the local camera, for instance). The extensions required to + enable this capability on the MediaStream object will be + described in this document.

+ + +

A MediaStream as defined in [GETUSERMEDIA] may contain + zero or more MediaStreamTrack objects. A + MediaStreamTrack sent to another peer will appear as one and + only one MediaStreamTrack to the recipient. A peer is + defined as a user agent that supports this specification.

+ + +

Channels are the smallest unit considered in the + MediaStream specification. Channels are intended to be + encoded together for transmission as, for instance, an RTP payload type. + All of the channels that a codec needs to encode jointly MUST be in the + same MediaStreamTrack and the codecs SHOULD be able to + encode, or discard, all the channels in the track.

+ + +

The concepts of an input and output to a given + MediaStream apply in the case of MediaStream + objects transmitted over the network as well. A + MediaStream created by an + RTCPeerConnection object (described later in this + document) will take as input the data received from a remote peer. + Similarly, a MediaStream from a local source, for instance a + camera via [GETUSERMEDIA], will have an output that represents what is + transmitted to a remote peer if the object is used with an + RTCPeerConnection object.

+ + +

The concept of duplicating MediaStream objects as + described in [GETUSERMEDIA] is also applicable here. This feature can + be used, for instance, in a video-conferencing scenario to display the + local video from the user’s camera and microphone in a local monitor, + while only transmitting the audio to the remote peer (e.g. in response to + the user using a "video mute" feature). Combining tracks from different + MediaStream objects into a new + MediaStream is useful in certain situations.

+ + +
Note

In this document, we only specify aspects of the + following objects that are relevant when used along with an + RTCPeerConnection. Please refer to the original + definitions of the objects in the [GETUSERMEDIA] document for general + information on using MediaStream and + MediaStreamTrack.

+
+ + +
+

9.2 MediaStream

+ + +
+

9.2.1 id

+ + +

The id attribute + specified in MediaStream returns an id that is unique to + this stream, so that streams can be recognized after they are sent + through the RTCPeerConnection API.

+ + +

When a MediaStream is + created to represent a stream obtained from a remote peer, the + id + attribute is initialized from information provided by the remote + source.

+ + +
Note

The id of a MediaStream object is + unique to the source of the stream, but that does not mean it is not + possible to end up with duplicates. For example, a locally generated + stream could be sent from one user agent to a remote peer using + RTCPeerConnection and then sent back to the + original user agent in the same manner, in which case the original user + agent will have multiple streams with the same id (the + locally-generated one and the one received from the remote peer).

+
+ + +
+

9.2.2 Events on MediaStream

+ + +

A new media track may be associated with an existing + MediaStream. For example, if a remote peer adds a + new MediaStreamTrack object to a + MediaStream that is being sent over an + RTCPeerConnection, this is observed on the local + user agent. If this happens for the reason exemplified, or for any + other reason than the addTrack() + method being invoked locally on a MediaStream or + tracks being added as the stream is created (i.e. the stream is + initialized with tracks), the user agent MUST run the following + steps:

+ + +
    +
  1. +

    Let stream be the target + MediaStream object.

    +
  2. + + +
  3. +

    Represent component + with track: Run the following steps to create a track + representing the incoming component:

    + + +
      +
    1. +

      Create a MediaStreamTrack object + track to represent the component.

      +
    2. + + +
    3. +

      Initialize track’s kind + attribute to "audio" or "video" + depending on the media type of the incoming component.

      +
    4. + + +
    5. +

      Initialize track’s id + attribute to the component track id.

      +
    6. + + +
    7. +

      Initialize track’s label + attribute to "remote audio" or "remote + video" depending on the media type of the incoming + component.

      +
    8. + + +
    9. +

      Initialize track’s readyState + attribute to muted.

      +
    10. + + +
    11. +

      Add track to stream’s track set.

      +
    12. +
    +
  4. + + +
  5. +

    Fire a track event named addtrack + with the newly created MediaStreamTrack object + at stream.

    +
  6. +
+ + +

An existing media track may also be disassociated from a + MediaStream. If this happens for any other reason + than the removeTrack() + method being invoked locally on a MediaStream or + the stream being destroyed, the user agent MUST run the following + steps:

+ + +
    +
  1. +

    Let stream be the target + MediaStream object.

    +
  2. + + +
  3. +

    Let track be the MediaStreamTrack + object representing the media component about to be removed.

    +
  4. + + +
  5. +

    Remove track from stream’s track set.

    +
  6. + + +
  7. +

    Fire a track event named removetrack + with track at stream.

    +
  8. +
+ + +

The event source for the onended event in the networked + case is the RTCPeerConnection object.

+
+
+ + +
+

9.3 MediaStreamTrack

+ + +

A MediaStreamTrack object’s reference to its + MediaStream in the non-local media source case (an RTP + source, as is the case for a MediaStream received over an + RTCPeerConnection) is always strong.

+ + +

When a track belongs to a MediaStream that comes + from a remote peer and the remote peer has permanently stopped sending + data the ended event MUST be fired on the track, as + specified in [GETUSERMEDIA].

+ + +
Issue 3

ISSUE: How do you know when it has stopped? This seems + like an SDP question, not a media-level question.

+ + +

A track in a MediaStream, received with an + RTCPeerConnection, MUST have its + readyState attribute [GETUSERMEDIA] set to + muted until media data arrives.

+ + +

In addition, a MediaStreamTrack has its + readyState set to muted on the remote peer if + the local user agent disables the corresponding + MediaStreamTrack in the + MediaStream that is being sent. When the addstream + event triggers on an RTCPeerConnection, all + MediaStreamTrack objects in the resulting + MediaStream are muted until media data can be read + from the RTP source.

+ + +
Issue 4

ISSUE: How do you know when it has been disabled? This + seems like an SDP question, not a media-level question.

+
+ + +
+

9.4 MediaStreamEvent

+ + +

The addstream + and removestream events use the + MediaStreamEvent interface.

+ + +

Firing a + stream event named e with a + MediaStream stream means that an event + with the name e, which does not bubble (except where otherwise + stated) and is not cancelable (except where otherwise stated), and which + uses the MediaStreamEvent interface with the + stream attribute + set to stream, MUST be created and dispatched at the + given target.

+ + +
dictionary MediaStreamEventInit : EventInit {
+    MediaStream stream;
+};

[ Constructor (DOMString type, MediaStreamEventInit eventInitDict)] +interface MediaStreamEvent : Event { + readonly attribute MediaStream? stream; +};

9.4.1 Constructors

MediaStreamEvent
readonly attribute MediaStream? stream
ParameterTypeNullableOptionalDescription
typeDOMString
eventInitDictMediaStreamEventInit

9.4.2 Attributes

stream of type MediaStream, readonly , nullable
+

The stream attribute + represents the MediaStream object associated with + the event.

+
+ + +

9.4.3 Dictionary MediaStreamEventInit Members

stream of type MediaStream
+

TODO

+
+
+
+ + +
+

10. Examples and Call Flows

This section is non-normative.

+ + +
+

10.1 Simple Peer-to-peer Example

+ + +
+

When two peers decide they are going to set up a connection to each + other, they both go through these steps. The STUN/TURN server + configuration describes a server they can use to get things like their + public IP address or to set up NAT traversal. They also have to send + data for the signaling channel to each other using the same out-of-band + mechanism they used to establish that they were going to communicate in + the first place.

+ +
Example 4
var signalingChannel = new SignalingChannel();
+var configuration = { "iceServers": [{ "url": "stun:stun.example.org" }] };
+var pc;
+
+// call start() to initiate
+function start() {
+    pc = new RTCPeerConnection(configuration);
+
+    // send any ice candidates to the other peer
+    pc.onicecandidate = function (evt) {
+        if (evt.candidate)
+            signalingChannel.send(JSON.stringify({ "candidate": evt.candidate }));
+    };
+
+    // let the "negotiationneeded" event trigger offer generation
+    pc.onnegotiationneeded = function () {
+        pc.createOffer(localDescCreated, logError);
+    }
+
+    // once remote stream arrives, show it in the remote video element
+    pc.onaddstream = function (evt) {
+        remoteView.src = URL.createObjectURL(evt.stream);
+    };
+
+    // get a local stream, show it in a self-view and add it to be sent
+    navigator.getUserMedia({ "audio": true, "video": true }, function (stream) {
+        selfView.src = URL.createObjectURL(stream);
+        pc.addStream(stream);
+    }, logError);
+}
+
+function localDescCreated(desc) {
+    pc.setLocalDescription(desc, function () {
+        signalingChannel.send(JSON.stringify({ "sdp": pc.localDescription }));
+    }, logError);
+}
+
+signalingChannel.onmessage = function (evt) {
+    if (!pc)
+        start();
+
+    var message = JSON.parse(evt.data);
+    if (message.sdp)
+        pc.setRemoteDescription(new RTCSessionDescription(message.sdp), function () {
+            // if we received an offer, we need to answer
+            if (pc.remoteDescription.type == "offer")
+                pc.createAnswer(localDescCreated, logError);
+        }, logError);
+    else
+        pc.addIceCandidate(new RTCIceCandidate(message.candidate));
+};
+
+function logError(error) {
+    log(error.name + ": " + error.message);
+}
+
+
+ + +
+

10.2 Advanced Peer-to-peer Example

+ + +
+

This example shows the more complete functionality.

+ +
Example 5
TODO
+
+
+ + +
+

10.3 Peer-to-peer Data Example

+ + +
+

This example shows how to create a + RTCDataChannel object and perform the offer/answer + exchange required to connect the channel to the other peer. The + RTCDataChannel is used in the context of a simple + chat application and listeners are attached to monitor when the channel + is ready, messages are received and when the channel is closed.

+ + +
Note

This example uses the negotiationneeded + event to initiate the offer/answer dialog. The exact behavior + surrounding the negotiationneeded event is not specified + in detail at the moment. This example can hopefully help to drive that + discussion. An assumption made in this example is that the event only + triggers when a new negotiation should be started. This means that an + action (such as addStream()) that normally would have fired the + negotiationneeded event will not do so during an ongoing + offer/answer dialog.

+ +
Example 6
var signalingChannel = new SignalingChannel();
+var configuration = { "iceServers": [{ "url": "stun:stun.example.org" }] };
+var pc;
+var channel;
+
+// call start(true) to initiate
+function start(isInitiator) {
+    pc = new RTCPeerConnection(configuration);
+
+    // send any ice candidates to the other peer
+    pc.onicecandidate = function (evt) {
+        if (evt.candidate)
+            signalingChannel.send(JSON.stringify({ "candidate": evt.candidate }));
+    };
+
+    // let the "negotiationneeded" event trigger offer generation
+    pc.onnegotiationneeded = function () {
+        pc.createOffer(localDescCreated, logError);
+    }
+
+    if (isInitiator) {
+        // create data channel and setup chat
+        channel = pc.createDataChannel("chat");
+        setupChat();
+    } else {
+        // setup chat on incoming data channel
+        pc.ondatachannel = function (evt) {
+            channel = evt.channel;
+            setupChat();
+        };
+    }
+}
+
+function localDescCreated(desc) {
+    pc.setLocalDescription(desc, function () {
+        signalingChannel.send(JSON.stringify({ "sdp": pc.localDescription }));
+    }, logError);
+}
+
+signalingChannel.onmessage = function (evt) {
+    if (!pc)
+        start(false);
+
+    var message = JSON.parse(evt.data);
+    if (message.sdp)
+        pc.setRemoteDescription(new RTCSessionDescription(message.sdp), function () {
+            // if we received an offer, we need to answer
+            if (pc.remoteDescription.type == "offer")
+                pc.createAnswer(localDescCreated, logError);
+        }, logError);
+    else
+        pc.addIceCandidate(new RTCIceCandidate(message.candidate));
+};
+
+function setupChat() {
+    channel.onopen = function () {
+        // e.g. enable send button
+        enableChat(channel);
+    };
+
+    channel.onmessage = function (evt) {
+        showChatMessage(evt.data);
+    };
+}
+
+function sendChatMessage(msg) {
+    channel.send(msg);
+}
+
+function logError(error) {
+    log(error.name + ": " + error.message);
+}
+
+ +
+ + +
+

10.4 Call Flow Browser to Browser

+ + +
Note

Editors' Note: This example flow needs to be discussed on + the list and is likely wrong in many ways.

+ + +

This shows an example of one possible call flow between two browsers. + This does not show the procedure to get access to local media or every + callback that gets fired but instead tries to reduce it down to only show + the key events and messages.

+ + +

A message sequence chart detailing a call flow between two browsers +

+ +
+ + +
+

10.5 DTMF Example

+ + +

Examples assume that pc is a connected RTCPeerConnection, + and track is an audio track on that connection.

+ + +

Sending the DTMF signal "1234" with 500 ms duration per tone:

+ +
Example 7
var sender = pc.createDTMFSender(track);
+if (sender.canInsertDTMF) {
+    var duration = 500;
+    sender.insertDTMF("1234", duration);
+} else
+    log("DTMF function not available");
+ +

Send the DTMF signal "1234", and light up the active key using + lightKey(key) while the tone is playing (assuming that + lightKey("") will darken all the keys):

+ +
Example 8
var sender = pc.createDTMFSender(track);
+sender.ontonechange = function (e) {
+    if (!e.tone)
+        return;
+    // light up the key when playout starts
+    lightKey(e.tone);
+    // turn off the light after tone duration
+    setTimeout(lightKey, sender.duration, "");
+};
+sender.insertDTMF("1234");
+ +

Send a 1-second "1" tone followed by a 2-second "2" tone:

+ +
Example 9
var sender = pc.createDTMFSender(track);
+sender.ontonechange = function (e) {
+    if (e.tone == "1")
+        sender.insertDTMF("2", 2000);
+};
+sender.insertDTMF("1", 1000);
+ +

It is always safe to append to the tone buffer. This example appends + before any tone playout has started as well as during playout.

+ +
Example 10
var sender = pc.createDTMFSender(track);
+sender.insertDTMF("123");
+// append more tones to the tone buffer before playout has begun
+sender.insertDTMF(sender.toneBuffer + "456");
+
+sender.ontonechange = function (e) {
+    if (e.tone == "1")
+        // append more tones when playout has begun
+        sender.insertDTMF(sender.toneBuffer + "789");
+};
+ +

Send the DTMF signal "123" and abort after sending "2".

+ +
Example 11
var sender = pc.createDTMFSender(track);
+sender.ontonechange = function (e) {
+    if (e.tone == "2")
+        // empty the buffer to not play any tone after "2"
+        sender.insertDTMF("");
+};
+sender.insertDTMF("123");
+
+ +
+ + +
+

11. Event summary

This section is non-normative.

+ + +

The following events fire on RTCDataChannel + objects:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Event nameInterfaceFired when...
open + Event + + The RTCDataChannel object's underlying data + transport has been established (or re-established). +
MessageEvent + Event + A message was successfully received. TODO: Ref where MessageEvent + is defined?
error + Event + TODO.
close + Event + + The RTCDataChannel object's underlying data + transport has bee closed. +
+ + +

The following events fire on RTCPeerConnection + objects:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Event nameInterfaceFired when...
connecting + Event + TODO
addstream + MediaStreamEvent + + A new stream has been added to the remote streams set. +
removestream + MediaStreamEvent + + A stream has been removed from the remote streams set. +
negotiationneeded + Event + The browser wishes to inform the application that session + negotiation needs to be done at some point in the near future.
signalingstatechange + Event + + The RTCPeerConnection + signalingState has changed. This state change is the result of + either setLocalDescription() + or setRemoteDescription() + being invoked. +
iceconnectionstatechange + Event + + The RTCPeerConnection + ice connection state has changed. +
icecandidate + RTCPeerConnectionIceEvent + A new RTCIceCandidate is made available to + the script.
datachannel + RTCDataChannelEvent + A new RTCDataChannel is dispatched to the + script in response to the other peer creating a channel.
identityresult + RTCIdentityEvent + TODO - define RTCIdentityEvent.
+ + +

The following events fire on RTCDTMFSender + objects:

+ + + + + + + + + + + + + + + + + + + + + +
Event nameInterfaceFired when...
tonechange + Event + The RTCDTMFSender object has either just + begun playout of a tone (returned as the tone + attribute) or just ended playout of a tone (returned as an empty + value in the tone attribute).
+
+ + +
+

12. Security Considerations

+ + +

TBD

+
+ + + + + +
+

13. Change Log

+ + +

This section will be removed before publication.

+ + + +

Changes since August 30, 2013

+ + +
    + +
  1. Make RTCPeerConnection close method be idempotent.
  2. + +
  3. Clarified ICE server configuration could contain URI types other than STUN and TURN.
  4. + +
  5. Changed the DTMF timing values.
  6. + +
  7. Allow offerToReceiveAudio/video indicate number of streams to offer.
  8. + +
  9. ACTION-98: Added text about clamping of maxRetransmitTime and + maxRetransmits.
  10. + + +
  11. ACTION-88: Removed nullable types from dictionaries (added attribute + default values for attributes that would be left uninitialized without + the init dictionary present.
  12. + + +
  13. InvalidMediaStreamTrackError changed to InvalidParameter.
  14. + + +
  15. Fire NetworkError when the data transport is closed with an + error.
  16. + + +
  17. Add an exception for data channel with trying to use existing + code.
  18. + + +
  19. Change maxRetransmits to be an unsigned type.
  20. + + +
  21. Clarify state changes when ICE restarts.
  22. + + +
  23. Added InvalidStateError exception for operations on a + RTCPeerConnection that is closed.
  24. + +
  25. Major changes to Identity Proxy section.
  26. + + +
  27. (ACTION: 95) Moved IceTransports (constraint) to RTCConfiguration + dictionary.
  28. + + +
  29. (ACTION: 95) Introduced RTCOfferAnswerOptions and RTCOfferOptions + dictionaries.
  30. + + +
  31. (ACTION: 95) Removed constraints argument from addStream() (and + removed IANA Constraints section).
  32. + + +
  33. Added validation of the RTCConfiguration dictionary argument(s).
  34. + + +
  35. Added getConfiguration() on RTCPeerConnection.
  36. +
+ + +

Changes since June 3, 2013

+ + +
    +
  1. Removed synchronous section left-overs.
  2. + + +
  3. RTCIceServer now accepts multiple URLs.
  4. + + +
  5. Redefined the meaning of negotiated for DataChannel.
  6. + + +
  7. Made iceServers a sequence (instead of an Array).
  8. + + +
  9. Updated error reporting (to use DOMError and camel cased names).
  10. + + +
  11. Added success and failure callbacks to addIceCandidate().
  12. + + +
  13. Made local/remoteDescription attributes nullable.
  14. + + +
  15. Added username member to RTCIceServer dictionary.
  16. +
+ + +

Changes since March 22, 2013

+ + +
    +
  1. Added IceRestart constraint.
  2. + + +
  3. Big updates on DataChannel API to use new channel setup + procedures.
  4. +
+ + +

Changes since Feb 22, 2013

+ + +
    +
  1. Example review: Updated DTMF and Stats examples. Added text about + when to fire "negotiationneeded" event to align with examples.
  2. + + +
  3. Updated RTCPeerConnection state machine. Added a shared processing + model for setLocalDescription()/setRemoteDescription().
  4. + + +
  5. Updated simple callflow to match the current API.
  6. +
+ + +

Changes since Jan 16, 2013

+ + +
    +
  1. Initial import of Statistics API to version 2.
  2. + + +
  3. Integration of Statistics API version 2.5 started.
  4. + + +
  5. Updated Statistics API to match Boston/list discussions.
  6. + + +
  7. Extracted API extensions introduced by features, such as the P2P Data + API, from the RTCPeerConnection API.
  8. + + +
  9. Updated DTMF algorithm to dispatch an event when insertDTMF() is + called with an empty string to cancel future tones.
  10. + + +
  11. Updated DTMF algorithm to not cancel and reschedule if a playout task + is running (only update toneBuffer and other values).
  12. +
+ + +

Changes since Dec 12, 2012

+ + +
    +
  1. Changed AudioMediaStreamTrack to RTCDTMFSender and gave it its own + section. Updated text to reflect most recent agreements. Also added + examples section.
  2. + + +
  3. Replaced the localStreams and remoteStreams attributes with functions + returning sequences of MediaStream objects.
  4. + + +
  5. Added spec text for attributes and methods adopted from the WebSocket + interface.
  6. + + +
  7. Changed the state ENUMs and transition diagrams.
  8. + + +
  9. Aligned the data channel processing model a bit more with WebSockets + (mainly closing the underlying transport).
  10. +
+ + +

Changes since Nov 13, 2012

+ + +
    +
  1. Made some clarifications as to how operation queuing works, and fixed + a few errors with the error handling description.
  2. + + +
  3. Introduced new representation of tracks in a stream (removed + MediaStreamTrackList). Added algorithm for creating a track to represent + an incoming network media component.
  4. + + +
  5. Renamed MediaStream.label to MediaStream.id (the definition needs + some more work).
  6. +
+ + +

Changes since Nov 03, 2012

+ + +
    +
  1. Added text describing the queuing mechanism for + RTCPeerConnection.
  2. + + +
  3. Updated simple P2P example to include all mandatory (error) + callbacks.
  4. + + +
  5. Updated P2P data example to include all mandatory (error) callbacks. + Also added some missing RTC prefixes.
  6. +
+ + +

Changes since Oct 19, 2012

+ + +
    +
  1. Clarified how createOffer() and createAnswer() use their + callbacks.
  2. + + +
  3. Made all failure callbacks mandatory.
  4. + + +
  5. Added error object types, general error handling principles, and + rules for when errors should be thrown.
  6. +
+ + +

Changes since Sept 23, 2012

+ + +
    +
  1. Restructured the document layout and created separate sections for + features like Peer-to-peer Data API, Statistics and Identity.
  2. +
+ + +

Changes since Aug 16, 2012

+ + +
    +
  1. Replaced stringifier with serializer on RTCSessionDescription and + RTCIceCandidate (used when JSON.stringify() is called).
  2. + + +
  3. Removed offer and createProvisionalAnswer arguments from the + createAnswer() method.
  4. + + +
  5. Removed restart argument from the updateIce() method.
  6. + + +
  7. Made RTCDataChannel an EventTarget
  8. + + +
  9. Updated simple RTCPeerConnection example to match spec changes.
  10. + + +
  11. Added section about RTCDataChannel garbage collection.
  12. + + +
  13. Added stuff for identity proxy.
  14. + + +
  15. Added stuff for stats.
  16. + + +
  17. Added stuff peer and ice state reporting.
  18. + + +
  19. Minor changes to sequence diagrams.
  20. + + +
  21. Added a more complete RTCDataChannel example
  22. + + +
  23. Various fixes from Dan's Idp API review.
  24. + + +
  25. Patched the Stats API.
  26. +
+ + +

Changes since Aug 13, 2012

+ + +
    +
  1. Made the RTCSessionDescription and RTCIceCandidate constructors take + dictionaries instead of a strings. Also added detailed stringifier + algorithm.
  2. + + +
  3. Went through the list of issues (issue numbers are only valid with + HEAD at fcda53c460). Closed (fixed/wontfix): 1, 8, 10, 13, 14, 16, 18, + 19, 22, 23, 24. Converted to notes: 4, 12. Updated: 9.
  4. + + +
  5. Incorporate changes + proposed by Li Li. +
  6. + + +
  7. Use an enum for DataChannelState and fix IDLs where using an optional + argument also requires all previous optional arguments to have a default + value.
  8. +
+ + +

Changes since Jul 20, 2012

+ + +
    +
  1. Added RTC Prefix to names (including the notes below).
  2. + + +
  3. Moved to new definition of configuration and ice servers object.
  4. + + +
  5. Added correlating lines to candidate structure.
  6. + + +
  7. Converted setLocalDescription and setRemoteDescription to be + asynchronous.
  8. + + +
  9. Added call flows.
  10. +
+ + +

Changes since Jul 13, 2012

+ + +
    +
  1. Removed peer attribute from RTCPeerConnectionIceEvent (duplicates + functionality of Event.target attribute).
  2. + + +
  3. Removed RTCIceCandidateCallback (no longer used).
  4. + + +
  5. Removed RTCPeerConnectionEvent (we use a simple event instead).
  6. + + +
  7. Removed RTCSdpType argument from setLocalDescription() and + setRemoteDescription(). Updated simple example to match.
  8. +
+ + +

Changes since May 28, 2012

+ + +
    +
  1. Changed names to use RTC Prefix.
  2. + + +
  3. Changed the data structure used to pass in STUN and TURN servers in + configuration.
  4. + + +
  5. Updated simple RTCPeerConnection example (RTCPeerConnection + constructor arguments; use icecandidate event).
  6. + + +
  7. Initial import of new Data API.
  8. + + +
  9. Removed some left-overs from the old Data Stream API.
  10. + + +
  11. Renamed "underlying data channel" to "underlying data transport". + Fixed closing procedures. Fixed some typos.
  12. +
+ + +

Changes since April 27, 2012

+ + +
    +
  1. Major rewrite of RTCPeerConnection section to line up with IETF JSEP + draft.
  2. + + +
  3. Added simple RTCPeerConnection example. Initial update of + RTCSessionDescription and RTCIceCandidate to support serialization and + construction.
  4. +
+ + +

Changes since 21 April 2012

+ + +
    +
  1. Moved MediaStream and related definitions to getUserMedia.
  2. + + +
  3. Removed section "Obtaining local multimedia content".
  4. + + +
  5. Updated getUserMedia() calls in examples (changes in Media Capture TF + spec).
  6. + + +
  7. Introduced MediaStreamTrackList interface with support for adding and + removing tracks.
  8. + + +
  9. Updated the algorithm that is run when RTCPeerConnection receives a + stream (create new stream when negotiated instead of when data + arrives).
  10. +
+ + +

Changes since 12 January 2012

+ + +
    +
  1. Clarified the relation of Stream, Track, and Channel.
  2. +
+ + +

Changes since 17 October 2011

+ + +
    +
  1. Tweak the introduction text and add a reference to the IETF RTCWEB + group.
  2. + + +
  3. Changed the first argument to getUserMedia to be an object.
  4. + + +
  5. Added a MediaStreamHints object as a second argument to + RTCPeerConnection.addStream.
  6. + + +
  7. Added AudioMediaStreamTrack class and DTMF interface.
  8. +
+ + +

Changes since 23 August 2011

+ + +
    +
  1. Separated the SDP and ICE Agent into separate agents and added + explicit state attributes for each.
  2. + + +
  3. Removed the send method from PeerConenction and associated callback + function.
  4. + + +
  5. Modified MediaStream() constructor to take a list of MediaStreamTrack + objects instead of a MediaStream. Removed text about MediaStream parent + and child relationship.
  6. + + +
  7. Added abstract.
  8. + + +
  9. Moved a few paragraphs from the MediaStreamTrack.label section to the + MediaStream.label section (where they belong).
  10. + + +
  11. Split MediaStream.tracks into MediaStream.audioTracks and + MediaStream.videoTracks.
  12. + + +
  13. Removed a sentence that implied that track access is limited to + LocalMediaStream.
  14. + + +
  15. Updated a few getUserMedia()-examples to use MediaStreamOptions.
  16. + + +
  17. Replaced calls to URL.getObjectURL() with URL.createObjectURL() in + example code.
  18. + + +
  19. Fixed some broken getUserMedia() links.
  20. + + +
  21. Introduced state handling on MediaStreamTrack (removed state handling + from MediaStream).
  22. + + +
  23. Reintroduced onended on MediaStream to simplify checking if all + tracks are ended.
  24. + + +
  25. Aligned the MediaStreamTrack ended event dispatching behavior with + that of MediaStream.
  26. + + +
  27. Updated the LocalMediaStream.stop() algorithm to implicitly use the + end track algorithm.
  28. + + +
  29. Replaced an occurrence the term finished track with ended track (to + align with rest of spec).
  30. + + +
  31. Moved (and extended) the explanation about track references and media + sources from LocalMediaStream to MediaStreamTrack.
  32. +
+
+ + +
+

A. Acknowledgements

+ + +

The editors wish to thank the Working Group chairs and Team Contact, + Harald Alvestrand, Stefan Håkansson and Dominique Hazaël-Massieux, for + their support. Substantial text in this specification was provided by many + people including Martin Thomson, Harald Alvestrand, Justin Uberti, and Eric + Rescorla.

+
+ + +

B. References

B.1 Normative references

[GETUSERMEDIA]
Daniel Burnett; Adam Bergkvist; Cullen Jennings; Anant Narayanan. Media Capture and Streams. 3 September 2013. W3C Working Draft. URL: http://www.w3.org/TR/mediacapture-streams/ +
[HIGHRES-TIME]
Jatinder Mann. High Resolution Time Specification. 18 October 2012. W3C Editor's Draft. URL: http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/HighResolutionTime/Overview.html +
[HTML5]
Robin Berjon; Steve Faulkner; Travis Leithead; Erika Doyle Navara; Edward O'Connor; Silvia Pfeiffer. HTML5. 6 August 2013. W3C Candidate Recommendation. URL: http://www.w3.org/TR/html5/ +
[ICE]
J. Rosenberg. Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols. April 2010. RFC. URL: http://www.ietf.org/rfc/rfc5245.txt +
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Internet RFC 2119. URL: http://www.ietf.org/rfc/rfc2119.txt +
[RTCWEB-SECURITY-ARCH]
Eric Rescorla. WebRTC Security Architecture. 22 January 2014. Active Internet-Draft. URL: http://datatracker.ietf.org/doc/draft-ietf-rtcweb-security-arch/ +
[SDP]
J. Rosenberg; H. Schulzrinne. An Offer/Answer Model with the Session Description Protocol (SDP). June 2002. RFC 3264. URL: http://tools.ietf.org/html/rfc3264 +
[STUN-URI]
S. Nandakumar; G. Salgueiro; P. Jones; and M. Petit-Huguenin. URI Scheme for Session Traversal Utilities for NAT (STUN) Protocol. 12 March 2012. Internet Draft (work in progress). URL: http://tools.ietf.org/html/draft-nandakumar-rtcweb-stun-uri +
[TURN-URI]
M. Petit-Huguenin; S. Nandakumar; G. Salgueiro; and P. Jones. Traversal Using Relays around NAT (TURN) Uniform Resource Identifiers. 12 March 2012. Internet Draft (work in progress). URL: http://tools.ietf.org/html/draft-petithuguenin-behave-turn-uris +
[WEBIDL]
Cameron McCormack. Web IDL. 19 April 2012. W3C Candidate Recommendation. URL: http://www.w3.org/TR/WebIDL/ +
[WEBSOCKETS-API]
Ian Hickson. The WebSocket API. 20 September 2012. W3C Candidate Recommendation. URL: http://www.w3.org/TR/websockets/ +
[webmessaging]
Ian Hickson. HTML5 Web Messaging. 1 May 2012. W3C Candidate Recommendation. URL: http://www.w3.org/TR/webmessaging/ +

B.2 Informative references

[RTCWEB-JSEP]
Justin Uberti; Cullen Jennings. Javascript Session Establishment Protocol. 22 October 2013. Active Internet-Draft. URL: http://http://datatracker.ietf.org/doc/draft-ietf-rtcweb-jsep/ +
diff --git a/archives/20140127/webrtc.js b/archives/20140127/webrtc.js new file mode 100644 index 000000000..3bb5029d2 --- /dev/null +++ b/archives/20140127/webrtc.js @@ -0,0 +1,73 @@ + +var respecConfig = { + // specification status (e.g. WD, LCWD, NOTE, etc.). If in doubt use ED. + specStatus: "ED", + + // the specification's short name, as in http://www.w3.org/TR/short-name/ + shortName: "webrtc", + + // if your specification has a subtitle that goes below the main + // formal title, define it here + // subtitle : "an excellent document", + + // if you wish the publication date to be other than today, set this + publishDate: "2014-01-27", + + // new ability to override the copyright completely + overrideCopyright: " ", + + + // if the specification's copyright date is a range of years, specify + // the start date here: + // copyrightStart: "2005", + + // if there is a previously published draft, uncomment this and set its YYYY-MM-DD + prevED: "http://dev.w3.org/2011/webrtc/editor/archives/20130830/webrtc.html", + + // if there a publicly available Editor's Draft, this is the link + edDraftURI: "http://dev.w3.org/2011/webrtc/editor/webrtc.html", + + // if this is a LCWD, uncomment and set the end of its review period + // lcEnd: "2009-08-05", + + // if you want to have extra CSS, append them to this list + // it is RECOMMENDED that the respec.css stylesheet be kept + // extraCSS: ["ReSpec.js/css/respec.css"], + // extraCSS: ["../../../2009/dap/ReSpec.js/css/respec.css"], + + // editors, add as many as you like + // only "name" is REQUIRED + editors: [ + // { name: "Your Name", url: "http://example.org/", + // company: "Your Company", companyURL: "http://example.com/" }, + { name: "Adam Bergkvist", company: "Ericsson" }, + { name: "Daniel C. Burnett", company: "Voxeo" }, + { name: "Cullen Jennings", company: "Cisco" }, + { name: "Anant Narayanan", company: "Mozilla (until November 2012)" } + ], + + // authors, add as many as you like. + // This is optional, uncomment if you have authors as well as editors. + // only "name" is REQUIRED. Same format as editors. + + //authors: [ + // { name: "Your Name", url: "http://example.org/", + // company: "Your Company", companyURL: "http://example.com/" } + //], + + // name of the WG + wg: "Web Real-Time Communications Working Group", + + // URI of the public WG page + wgURI: "http://www.w3.org/2011/04/webrtc/", + + // name (without the @w3c.org) of the public mailing to which comments are due + wgPublicList: "public-webrtc", + + // URI of the patent status for this WG, for Rec-track documents + // !!!! IMPORTANT !!!! + // This is important for Rec-track documents, do not copy a patent URI from a random + // document unless you know what you're doing. If in doubt ask your friendly neighbourhood + // Team Contact. + wgPatentURI: "http://www.w3.org/2004/01/pp-impl/47318/status", +}; diff --git a/webrtc.js b/webrtc.js index f9bc3c718..3bb5029d2 100644 --- a/webrtc.js +++ b/webrtc.js @@ -11,7 +11,7 @@ var respecConfig = { // subtitle : "an excellent document", // if you wish the publication date to be other than today, set this - // publishDate: "2012-05-28", + publishDate: "2014-01-27", // new ability to override the copyright completely overrideCopyright: " ", @@ -22,7 +22,7 @@ var respecConfig = { // copyrightStart: "2005", // if there is a previously published draft, uncomment this and set its YYYY-MM-DD - prevED: "http://dev.w3.org/2011/webrtc/editor/archives/20130603/webrtc.html", + prevED: "http://dev.w3.org/2011/webrtc/editor/archives/20130830/webrtc.html", // if there a publicly available Editor's Draft, this is the link edDraftURI: "http://dev.w3.org/2011/webrtc/editor/webrtc.html",