Re: Object RTC (ORTC) API for WebRTC - call to authors

I Christoph Dorn, working independently, hereby agree to be bound by 
the terms of the W3C CLA.



On October 11, 2013 06:39:29 PM EDT, Robin Raymond 
<robin@hookflash.com> wrote:

>
> I would like all authors of the attached draft to respond to this 
> email with a follow up email to the group that they (and their 
> organizations they represent) agree to be bound by the terms of the 
> W3C CLA in advance to producing a report for the ORCA group.
>
> See attached draft "Object RTC (ORTC) API for WebRTC" "Draft 
> Community Group Specification 04 October 2013"
>
> This version of the file can also be found at:
> https://github.com/openpeer/ortc/blob/a32af5256b1a389887aa946226b16721e5904d21/ortc.html
>
> All updates are posted to:
> https://github.com/openpeer/ortc/blob/master/ortc.html
>
>
> http://www.w3.org/community/about/agreements/cla/
>
>
> Thank you,
> Robin Raymond
> ORCA - Object-RTC API Community Group (Chair)
>
>
>
> W3C
>
>
>
>
>
>
>
>                                                             Object 
> RTC (ORTC) API for WebRTC
>
> Draft Community Group Specification 04 October 2013
>
> Editor:
>         Robin Raymond, Hookflash
>
> Authors:
>         Inaki Baz Castillo, Versatica
>         Christoph Dorn, Independent
>         Roman Shpount, TurboBridge
>         Erik Lagerway, Hookflash
>
> Copyright © 2013 the Contributors to the Object RTC (ORTC) API for 
> WebRTC Specification, published by the Object-RTC API Community Group 
> under the W3C Community Contributor License Agreement (CLA). A 
> human-readable summary is available.
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Abstract
>
> This document defines a set of ECMAScript APIs in WebIDL to allow 
> media to be sent and received from another browser or device 
> implementing the appropriate set of real-time protocols. However, 
> unlike the current WebRTC 1.0 APIs, ORTC does not mandate a media 
> signaling protocol or format. As a result, ORTC does not utilize SDP 
> within its APIs, nor does it mandate support for the Offer/Answer 
> state machine. Instead, ORTC focuses on "connections" and "tracks" 
> being carried over those connections.
>
> Status of This Document
>
> This specification was published by the Object-RTC API Community 
> Group. It is not a W3C Standard nor is it on the W3C Standards Track. 
> Please note that under the W3C Community Contributor License 
> Agreement (CLA) there is a limited opt-out and other conditions 
> apply. Learn more about W3C Community and Business Groups.
>
> Table of Contents
>
>   * 1. Overview
>   * 2. The RTCConnection Class
>
>        * 2.1 Overview
>        * 2.2 Operation
>        * 2.3 Interface Definition
>
>             * 2.3.1 Events
>             * 2.3.2 Methods
>
>                  * 2.3.2.1 getLocalSocket
>                  * 2.3.2.2 setLocalCandidate
>                  * 2.3.2.3 setRemoteCandidate
>                  * 2.3.2.4 connect
>                  * 2.3.2.5 update
>                  * 2.3.2.6 addStream
>                  * 2.3.2.7 removeStream
>                  * 2.3.2.8 track
>                  * 2.3.2.9 tracks
>                  * 2.3.2.10 receiveTrack
>                  * 2.3.2.11 addDtmfHandler
>                  * 2.3.2.12 getSendingStreams
>                  * 2.3.2.13 getReceivingStreams
>                  * 2.3.2.14 close
>
>             * 2.3.3 The RTCConnectionOptions Object
>
>                  * 2.3.3.1 Attributes
>
>             * 2.3.4 The RTCIceServer Object
>
>                  * 2.3.4.1 Attributes
>
>             * 2.3.5 The RTCSocket Class
>             * 2.3.6 The RTCConnectionSide Object
>
>                  * 2.3.6.1 Attributes
>
>             * 2.3.7 The RTCIceConnectionInfo Object
>
>                  * 2.3.7.1 Attributes
>
>             * 2.3.8 The RTCDtlsConnectionInfo Object
>
>                  * 2.3.8.1 Attributes
>                  * 2.3.8.2 The CertificateFingerprint Object
>
>             * 2.3.9 The RTCIceCandidateDescription Object
>
>                  * 2.3.9.1 Attributes
>                  * 2.3.9.2 RTCIceCandidateDescription Example
>
>             * 2.3.10 The RTCTrackFilter Object
>
>                  * 2.3.10.1 Attributes
>
>   * 3. The RTCTrack Class
>
>        * 3.1 Overview
>        * 3.2 Operation
>        * 3.3 Interface Definition
>
>             * 3.3.1 Attributes
>             * 3.3.2 Methods
>
>                  * 3.3.2.1 getDescription
>                  * 3.3.2.2 start
>                  * 3.3.2.3 stop
>                  * 3.3.2.4 remove
>
>             * 3.3.3 The RTCTrackDescription Object
>
>                  * 3.3.3.1 RTCTrackDescription Example
>
>             * 3.3.4 The RTCCodec Object
>             * 3.3.5 The RTCMediaAttributes Object
>
>   * 4. The RTCDTMFHandler Class
>
>        * 4.1 Overview
>        * 4.2 Interface Definition
>
>             * 4.2.1 Events
>             * 4.2.2 Methods
>
>                  * 4.2.2.1 insertDTMF
>
>             * 4.2.3 Audio RTCTrackDescription Example with DTMF
>
>   * 5. RTCP Protocol
>   * 6. RTC Capabilities
>
>   * 7. Extensions to MediaCapture MediaStream
>
>   * 8. Extensions to MediaCapture MediaStreamTrack
>
>   * 9. Examples
>
>        * 9.1 Simple Peer-to-peer Example
>
> 1. Overview
>
> ORTC provides a powerful API for the development of WebRTC based 
> applications. ORTC does not mandate a media signaling protocol or 
> format (as the current WebRTC 1.0 does by mandating SDP 
> Offer/Answer). ORTC focuses on "connections" and "tracks" being 
> carried over those connections.
>
> 2. The RTCConnection Class
>
>   2.1 Overview
>
> RTCConnection is the main class of ORTC. A RTCConnection instance 
> provides the interface for a browser to directly communicate with 
> another browser or a compliant device, for sending and receiving 
> media stream tracks. Communication is signaled via HTTP or WebSocket 
> through a web server or WebSocket server by unspecified means.
>
>   2.2 Operation
>
> A peer instantiates a RTCConnection. Once the RTCConnection has been 
> instantiated the ICE gathering procedure automatically starts for 
> retrieving local ICE candidates.
>
> The peer can, at any time, signal its ICE information to the remote 
> peer. Once the remote ICE information is entered into the 
> RTCConnection ICE establishment procedure begins until the connection 
> is established. ICE candidates can be signaled one to each other at 
> any time (trickle-ICE). In order to apply a discovered local ICE 
> candidate in the RTCConnection the method setLocalCandidate must be 
> called by passing as argument the RTCIceCandidateDescription provided 
> in the oncandidate event. Same for remote ICE candidates by using the 
> setRemoteCandidate method.
>
> The developer's JavaScript can attach MediaStream instances to the 
> RTCConnection to be sent to the remote. Audio/video sending tracks 
> can be individually managed by getting their associated RTCTrack 
> instance via the track method. The developer's JavaScript can also 
> signal the receiving tracks information by providing their 
> RTCTrackDescription via the receiveTrack method.
>
>   2.3 Interface Definition
>
>  [Constructor (RTCConnectionOptions options)]
>  interface RTCConnection : EventTarget  {
>   attribute RTCConnectionSide     local;
>   attribute RTCConnectionSide     remote;
>
>   RTCSocket                           getLocalSocket ();
>   void                                setLocalCandidate ();
>   void                                setRemoteCandidate ();
>   void                                connect ();
>   void                                update ();
>   void                                addStream ();
>   void                                removeStream ();
>   RTCTrack                            track ();
>   sequence<RTCTrack>                  tracks ();
>   void                                receiveTrack ();
>   RTCDTMFHandler                      addDtmfHandler ();
>   sequence<MediaStream>               getSendingStreams ();
>   sequence<MediaStream>               getReceivingStreams ();
>   void                                close ();
>               attribute EventHandler                  oncandidate;
>               attribute EventHandler                  onendofcandidates;
>               attribute EventHandler                  onactivecandidate;
>               attribute EventHandler                  onconnected;
>               attribute EventHandler                  ondisconnected;
>               attribute EventHandler                  onaddstream;
>               attribute EventHandler                  onunknowntrack;
>               attribute EventHandler                  onadddtmfhandler;
>  };
>
>  2.3.1 Events
>
> oncandidate of type EventHandler,
>
>   This event handler, of event handler event type candidate, must be 
> fired to allow a developer's JavaScript to receive a discovered ICE 
> candidate (RTCIceCandidateDescription).
>
>   | Event Argument | Description | |--- | --- | 
> |RTCIceCandidateDescription candidate |A local ICE candidate. |
>
> onendofcandidates of type EventHandler,
>
>   This event handler, of event handler event type endofcandidates, 
> must be fired to allow a developer's JavaScript to be notified when 
> all candidate discoveries have completed.
>
>   Event arguments: none
>
> onactivecandidate of type EventHandler,
>
>   This event handler, of event handler event type activecandidate, 
> must be fired to allow a developer's JavaScript to be notified which 
> active ICE candidate local/remote pairing the connection is using. 
> This event could change over time as more optimal routes are 
> discovered.
>
>   | Event Argument | Description | |--- | --- | 
> |RTCIceCandidateDescription localCandidate |The connected local ICE 
> candidate. | |RTCIceCandidateDescription remoteCandidate |The 
> connected remote ICE candidate. |
>
> onconnected of type EventHandler,
>
>   This event handler, of event handler event type connected, must be 
> fired to allow a developer's JavaScript to be notified when the 
> RTCConnection has been paired with its remote and the ICE connection 
> has been established.
>
>   Event arguments: none
>
> ondisconnected of type EventHandler,
>
>   This event handler, of event handler event type disconnected, must 
> be fired to allow a developer's JavaScript to be notified when the 
> RTCConnection has been disconnected.
>
>   Event arguments: none
>
> onaddstream of type EventHandler,
>
>   This event handler, of event handler event type addstream, must be 
> fired to allow a developer's JavaScript to be notified when a 
> receiving MediaStream is added. It is fired when calling the 
> receiveTrack method by passing as argument a RTCTrackDescription with 
> a msid value which does not match the msid of other receiving tracks.
>
>   | Event Argument | Description | |--- | --- | |MediaStream stream 
> |The MediaStream instance being added by the remote peer. |
>
> onunknowntrack of type EventHandler,
>
>   This event handler, of event handler event type unknowntrack, must 
> be fired to allow a developer's JavaScript to be notified when a 
> track for which there is not RTCTrackDescription has been connected 
> from the remote peer.
>
>   It is possible for a peer to receive a track for which its 
> RTCTrackDescription has not yet been received (via wire signaling) or 
> for which there won't be RTCTrackDescription at all. If an unknown 
> track (for which there is no RTCTrackDescription) is connected this 
> event fires by providing a collection of the RTP extension headers 
> present in the RTP packets.
>
>   The offerer can then indicate, via custom wire signaling, those 
> desired RTP extension header and values to the remote peer, and the 
> remote peer starts sending tracks with the requested RTP extension 
> headers, so the offerer can identify them when the unknowntrack event 
> fires.
>
>   | Event Argument | Description | |--- | --- | |rtpExtHeaders |A 
> collection of RTP extension header and value pairs. |
>
> onadddtmfhandler of type EventHandler,
>
>   This event handler, of event handler event type adddtmfhandler, 
> must be fired to allow a developer's JavaScript to be notified when a 
> receiving RTCDTMFHandler is added. It is fired when calling the 
> receiveTrack method by passing as argument the RTCTrackDescription of 
> a receiving audio MediaStreamTrack including a "dtmf" codec.
>
>   | Event Argument | Description | |--- | --- | |RTCDTMFHandler 
> handler |The RTCDTMFHandler instance being added by the remote peer. |
>
>  2.3.2 Methods
>
>    2.3.2.1 getLocalSocket
>
> Get the local RTCSocket.
>
>   Parameters: none
>
>    2.3.2.2 setLocalCandidate
>
> Adds a local ICE candidate to the RTCConnection (retrieved within the 
> oncandidate event).
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |candidate |RTCIceCandidateDescription | no | no 
> | |
>
>    2.3.2.3 setRemoteCandidate
>
> Adds a remote ICE candidate to the RTCConnection.
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |candidate |RTCIceCandidateDescription | no | no 
> | |
>
>    2.3.2.4 connect
>
> Starts the ICE establishment procedure with the peer. If new local or 
> remote ICE candidates are provided once this method has been called, 
> they will be also considered for the ICE connection procedure.
>
>   Connection data for the remote side (the iceUsernameFrag and 
> icePassword attributes within the remote RTCConnectionSide attribute) 
> must be set before calling this method.
>
>   Parameters: none
>
>    2.3.2.5 update
>
> This method will usually be called upon network interfaces change 
> (i.e. in mobile network). By calling this method the ICE gathering 
> procedure starts again as when the RTCConnection was instantiated.
>
>   Parameters: none
>
>    2.3.2.6 addStream
>
>   Adds a sending MediaStream to the RTCConnection.
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |stream |MediaStream | no | no | | |autostart 
> |Boolean | yes | yes | If set to true (default value) tracks within 
> the stream are automatically sent to the remote once the connection 
> is established. |
>
>    2.3.2.7 removeStream
>
>   Removes a sending MediaStream from the RTCConnection. It does 
> automatically stop sending it via RTP.
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |stream |MediaStream | no | no | |
>
>    2.3.2.8 track
>
>   Returns the RTCTrack instance associated to the sending 
> MediaStreamTrack given as argument.
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |track |MediaStreamTrack | no | no | |
>
>    2.3.2.9 tracks
>
>   Returns a sequence of RTCTrack instances associated to the sending 
> MediaStreamTrack in the RTCConnection. If a filter is given as 
> parameter, the returned sequence could be a subset of the existing 
> sending tracks.
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |filter |RTCTrackFilter | yes | yes | Filters the 
> returned elements. |
>
>    2.3.2.10 receiveTrack
>
>   Tell the RTCConnection to be ready to receive a track with the 
> information provided in the given RTCTrackDescription.
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |trackDescription |RTCTrackDescription | no | no 
> | |
>
>    2.3.2.11 addDtmfHandler
>
>   Adds DTMF sending capabilities to the RTCConnection. The method 
> returns a RTCDTMFHandler instance for sending DTMF tones to the 
> remote peer.
>
>   Internally the DTMF handler is attached to an existing sending 
> audio track in the RTCConnection by introducing a new "dtmf" codec in 
> the list of codecs of its associated RTCTrack. At RTP level, a DTMF 
> track shares the same SSRC value as its audio track, but uses a 
> different payload-id.
>
>   The function can be called with an optional "container" argument 
> which can be:
>
>     * no argument: the DTMF handler is attached to the first sending 
> audio track in the RTCConnection.
>     * MediaStream: the DTMF handler is attached to the first sending 
> audio track in the given MediaStream.
>     * MediaStreamTrack: the DTMF handler is attached to the given 
> audio MediaStreamTrack.
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |container |MediaStream|MediaStreamTrack | yes | 
> yes | |
>
>    2.3.2.12 getSendingStreams
>
>   Get a sequence of the sending MediaStream instances within the 
> RTCConnection.
>
>   Parameters: none
>
>    2.3.2.13 getReceivingStreams
>
>   Get a sequence of the receiving MediaStream instances within the 
> RTCConnection.
>
>   Parameters: none
>
>    2.3.2.14 close
>
>   Closes the connection.
>
>   Parameters: none
>
>  2.3.3 The RTCConnectionOptions Object
>
>  dictionary RTCConnectionOptions {
>   sequence<RTCIceServer>?     iceServers
>   RTCSocket?                  socket
>  };
>
>    2.3.3.1 Attributes
>
> iceServers of type sequence
>
>   A sequence of RTCIceServer objects.
>
> socket of type RTCSocket
>
>   A local RTCSocket to be reused (which can be retrieved from another 
> RTCConnection instance via the getLocalSocket method).
>
>   Reusing the same local socket can be used to implement media forking.
>
>  2.3.4 The RTCIceServer Object
>
>  dictionary RTCIceServer {
>   sequence<DOMString>         url;
>   DOMString?                  credential;
>  };
>
>    2.3.4.1 Attributes
>
> url of type DOMString
>
>   A STUN or TURN URI as defined in STUN-URI and TURN-URI.
>
> credential of type DOMString, nullable
>
>   If the url element is a TURN-URI, then this is the credential 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:
>
>  [ { url:"stun:stun.example.net" } , { 
> url:"turn:user@turn.example.org", credential:"myPassword"} ]
>
>  2.3.5 The RTCSocket Class
>
> The RTCSocket class describes a local socket. A local socket can be 
> reused within different RTCConnection instances (useful for media 
> forking).
>
> A RTCSocket can be retrieved from its RTCConnection by calling the 
> getLocalSocket method on it.
>
>  2.3.6 The RTCConnectionSide Object
>
> The RTCConnectionSide Object contains information for both sides of 
> the connection. An RTCConnection has both a local RTCConnectionSide 
> (whose attributes are readonly) and a remote RTCConnectionSide (whose 
> attributes must be set by the JavaScript's developer before 
> attempting the connection procedure (this is, before calling connect 
> on the RTCConnection).
>
>  dictionary RTCConnectionSide {
>   attribute RTCIceConnectionInfo  ice;
>   attribute RTCDtlsConnectionInfo dtls;
>  };
>
>    2.3.6.1 Attributes
>
> ice of type RTCIceConnectionInfo
>
> dtls of type RTCDtlsConnectionInfo
>
>  2.3.7 The RTCIceConnectionInfo Object
>
>  dictionary RTCIceConnectionInfo {
>   DOMString                   usernameFrag;
>   DOMString                   password;
>  };
>
>    2.3.7.1 Attributes
>
> usernameFrag of type DOMString
>
>   Within the local RTCConnectionSide this attribute is readonly, and 
> must be set for the remote side.
>
> password of type DOMString
>
>   Within the local RTCConnectionSide this attribute is readonly, and 
> must be set for the remote side.
>
>  2.3.8 The RTCDtlsConnectionInfo Object
>
>  dictionary RTCDtlsConnectionInfo {
>   attribute CertificateFingerprint   fingerprint;
>  };
>
>    2.3.8.1 Attributes
>
> fingerprint of type CertificateFingerprint
>
>   The DTLS fingerprint of the connection for the local or the remote 
> side. The local side is readonly and can be retrieved at any time. 
> The remote side is also readonly and can only be retrieved once the 
> connection is established (it returns null otherwise).
>
>    2.3.8.2 The CertificateFingerprint Object
>
>  dictionary CertificateFingerprint {
>   getter ArrayBuffer (DOMString hashFunction);
>  };
>
> A dictionary containing fingerprints for the certificate. Keys are 
> the textual name for the hash function; the corresponding value for 
> each is an ArrayBuffer containing the value of the fingerprint. 
> Browsers must implement SHA-1 (sha-1) and SHA-2 256 (sha-256).
>
>  2.3.9 The RTCIceCandidateDescription Object
>
>  dictionary RTCIceCandidateDescription {
>   DOMString                           foundation;
>   int                                 component;
>   DOMString                           transport;
>   int                                 priority;
>   DOMString                           connectionAddress;
>   int                                 connectionPort;
>   DOMString                           type;
>   DOMString                           relAddress;
>   int                                 relPort;
>  };
>
>    2.3.9.1 Attributes
>
> foundation of type unsinged DOMString
>
> component of type unsigned int
>
> transport of type DOMString
>
> priority of type unsigned int
>
> connectionAddress of type DOMString
>
> connectionPort of type unsigned int
>
> type of type DOMString
>
> relAddress of type DOMString
>
> relPort of type unsigned int
>
>    2.3.9.2 RTCIceCandidateDescription Example
>
>  {
> foundation: "abcd1234",
> component: 1,
> transport: "udp",
> priority: 1694498815,
> connectionAddress: "192.0.2.33",
> connectionPort: 10000,
> type: "host"
>  };
>
>  2.3.10 The RTCTrackFilter Object
>
> This Object is used to filter the output of the tracks method in 
> RTCConnection.
>
>  dictionary RTCTrackFilter {
>   MediaStream?        mediaStream;
>   DOMString?          kind;
>  };
>
>    2.3.10.1 Attributes
>
> mediaStream of type MediaStream
>
>   Just RTCTrack instances within the given MediaStream are returned.
>
> kind of type DOMString
>
>   Just RTCTrack instances of the given kind ("audio" or "video") are 
> returned.
>
> 3. The RTCTrack Class
>
>   3.1 Overview
>
> An RTCTrack instance is associated to a sending MediaStreamTrack and 
> provides RTC related methods to it.
>
>   3.2 Operation
>
> A RTCTrack instance is retrieved from a RTCConnection via the track 
> or tracks methods.
>
>   3.3 Interface Definition
>
>  interface RTCTrack  {
>   readonly    attribute MediaStreamTrack                source;
>   readonly    attribute DOMString                           kind;
>   readonly    attribute DOMString                           ssrc;
>               attribute sequence<DOMString>                 msid;
>               attribute sequence<RTCCodec>                  codecs;
>               attribute sequence<RTCMediaAttributes>        mediaAttributes;
>               attribute Object                              rtpExtHeaders;
>
>   RTCTrackDescription                 getDescription ();
>   void                                start ();
>   void                                stop ();
>   void                                remove ();
>
>  3.3.1 Attributes
>
> source of type MediaStreamTrack, readonly
>
>   The associated MediaStreamTrack instance.
>
> kind of type DOMString, readonly
>
>   Can be "audio" or "video".
>
> ssrc of type DOMString, readonly
>
> msid of type sequence
>
>   A sequence of id attributes of the MediaStream instances this track 
> belongs to.
>
> codecs of type sequence
>
>   When setting the codec list for a sending track, the browser must 
> choose the first supported codec in the list.
>
> mediaAttributes of type sequence
>
> rtpExtHeaders of type Object.
>
>   An Object which RTP extension header name and value pairs (useful 
> for the onunknowntrack event usage in RTCConnection.
>
>  3.3.2 Methods
>
>    3.3.2.1 getDescription
>
> Gets the RTCTrackDescription of this RTCTrack.
>
>    3.3.2.2 start
>
> Starts sending the track on the wire (if the RTCConnection is 
> connected, or wait until it becomes connected).
>
>   Parameters: none
>
>    3.3.2.3 stop
>
> Stops sending the track on the wire.
>
>    3.3.2.4 remove
>
> Remove this sending track from the RTCConnection (automatically stops 
> sending it on the wire). This method does not alter the original 
> MediaStream, but just tells the RTCConnection to ignore the track.
>
>  3.3.3 The RTCTrackDescription Object
>
>  dictionary RTCTrackDescription {
>   DOMString                           kind;
>   DOMString                           ssrc;
>   sequence<DOMString>                 msid;
>   sequence<RTCCodec>                  codecs;
>   sequence<RTCMediaAttributes>?       mediaAttributes;
>   Object?                             rtpExtHeaders;
>  };
>
> The meaning of attributes of RTCTrackDescription is the same as in 
> the RTCTrack interface.
>
> When passing a RTCTrackDescription to the receiveTrack method of a 
> RTCConnection, the values in the codecs field tells the browser to be 
> ready to receive RTP with any of the listed codecs.
>
> TODO: RTCConnection.receiveTrack() should throw an exception in case 
> the browser does not support any of the codec in the given 
> RTCTrackDescription.
>
>    3.3.3.1 RTCTrackDescription Example
>
>  {
> kind: "audio",
> ssrc: "1234",
> msid: ["m1"],
> codecs: [
>     {
>         payload-id: 96,
>         name: "opus",
>         clockRate: 48000,
>         numChannels: 2
>     }
> ]
>  }
>
>  3.3.4 The RTCCodec Object
>
>  dictionary RTCCodec {
>   unsigned byte       payload-id;
>   DOMString           name;
>   unsigned int?       clockRate;
>   unsigned int?       numChannels;
>   RTCCodecParam[]     params;
>  }
>
>  dictionary RTCCodecParam {
>   DOMString           name;
>   DOMString?          value;
>  }
>
>  3.3.5 The RTCMediaAttributes Object
>
>  dictionary RTCMediaAttributes {
>   int?        videoMaxWidth;
>   int?        videoMaxHeight;
>  };
>
> TODO: Complete.
>
> 4. The RTCDTMFHandler Class
>
>   4.1 Overview
>
> An RTCDTMFHandler class instance allows sending DTMF tones to the 
> remote peer or receiving them (but not both at the same time): * A 
> sending RTCDTMFHandler is returned by the addDtmfHandler method on 
> the RTCConnection. The method insertDTMF can only be used on a 
> sending RTCDTMFHandler. * A receiving RTCDTMFHandler is generated via 
> the onadddtmfhandler event on the RTCConnection. The event ondtmf can 
> only be set on a receiving RTCDTMFHandler.
>
>   4.2 Interface Definition
>
>  interface RTCDTMFHandler : EventTarget  {
>   readonly    attribute DOMString     id;
>   readonly    attribute DOMString     label;
>   readonly    attribute DOMString     toneBuffer;
>   readonly    attribute long          duration;
>   readonly    attribute long          interToneGap;
>   void insertDTMF (DOMString tones, optional long duration, optional 
> long interToneGap);
>               attribute EventHandler          ondtmf;
>  };
>
>  4.2.1 Events
>
> ondtmf of type EventHandler,
>
>   This event handler, of event handler event type candidate, must be 
> fired to allow a developer's JavaScript to receive a DTMF tone from 
> the remote peer.
>
>   | Event Argument | Description | |--- | --- | |DOMString tone |The 
> received DTMF tone. | }; ```
>
>  4.2.2 Methods
>
>    4.2.2.1 insertDTMF
>
>   Method used for sending 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 70 ms. The default duration is 100 ms for 
> each tone.
>
>   The interToneGap parameter indicates the gap between tones. It must 
> be at least 50 ms. The default value is 50 ms.
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |tones |DOMString | no | no | | |duration |long | 
> no | yes | | |interToneGap |long | no | yes | |
>
>  4.2.3 Audio RTCTrackDescription Example with DTMF
>
> Calling addDtmfHandler method on a RTCConnection (including at least 
> one audio MediaStreamTrack) would enhance the RTCTrack of the audio 
> track as follows:
>
>  {
> kind: "audio",
> ssrc: "1234",
> msid: ["m1"],
> codecs: [
>     {
>         payload-id: 96,
>         name: "opus",
>         clockRate: 48000,
>         numChannels: 2
>     },
>     {
>         payload-id: 101,
>         name: "dtmf"
>     }
> ]
>  }
>
> 5. RTCP Protocol
>
> This specification determines that RTCP packets must be multiplexed 
> with the RTP packets as defined by RFC5761.
>
> 6. RTC Capabilities
>
> ORTC extends the Navigator interface for providing WebRTC 
> capabilities to the developer's JavaScript.
>
>  interface Navigator {
>   RTCCapabilities                     getRTCCapabilities ();
>   RTCCodec                            getRTCCodec ();
>  };
>
>  Methods
>
>    getRTCCapabilities
>
> Get the browser WebRTC capabilities by returning a RTCCapabilities object.
>
>   Parameters: none
>
>    getRTCCodec
>
> Get a RTCCodec object for the given codec name or null if the browser 
> does not support it. The mandatory list of codec names are: opus, 
> alaw, ulaw, dtmf, vp8 and h264.
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |name |DOMString | no | no |The name of the codec 
> (i.e. "opus"). |
>
>  The RTCCapabilities Object
>
>  dictionary RTCCapabilities {
>   sequence<RTCCodec>                  audioCodecs;
>   sequence<RTCCodec>                  videoCodecs;
>  };
>
> TODO: Complete.
>
>    Attributes
>
> audioCodecs of type sequence, readonly
>
>   The list of supported audio codecs.
>
> videoCodecs of type sequence, readonly
>
>   The list of supported video codecs.
>
> 7. Extensions to MediaCapture MediaStream
>
> This specification extends the MediaCapture MediaStream class for 
> remote streams received from the network, by adding/modifying the 
> following methods and events:
>
>  Methods
>
>    addTrack
>
>   This method, already present in the MediaStream class, allows the 
> JS to add a new MediaStreamTrack within the stream. Currently it is 
> unclear whether the given MediaStreamTrack remains the same or it is 
> cloned into the stream (so becomes a new MediaStreamTrack instance 
> (see the reported issue in Chrome browser).
>
>   In case the given MediaStreamTrack is cloned, this specification 
> modifies the addTrack method so instead of returning void it returns 
> the new MediaStreamTrack instance:
>
>   | Parameter | Type | Nullable | Optional | Description | |--- | --- 
> | --- | --- | --- | |track |MediaStreamTrack | no | no | |
>
>   Return value: The cloned MediaStreamTrack instance.
>
> In case it is decided that the addTrack() method does not clone the 
> given track (but keeps the same MediaStreamTrack instance), then that 
> means that the same MediaStreamTrack should not be added to two 
> different MediaStream within the same RTCConnection.
>
> It is unclear the benefit of adding the same track into two media 
> streams, and thus this specification advocates for the cloning 
> solution.
>
>  Events
>
> onconnected of type EventHandler,
>
>   This event handler, of event handler event type connected, must be 
> fired to allow a developer's JavaScript to be notified when a remote 
> MediaStream is connected, which means that RTP for at least one of 
> the tracks in this MediaStream has been received.
>
>   Event arguments: none
>
> ondisconnected of type EventHandler,
>
>   This event handler, of event handler event type disconnected, must 
> be fired to allow a developer's JavaScript to be notified when a 
> remote MediaStream is disconnected, which means that a RTCP BYE has 
> been received or RTP timeout occurred for the last remaining track in 
> this MediaStream.
>
>   Event arguments: none
>
> 8. Extensions to MediaCapture MediaStreamTrack
>
> This specification extends the MediaCapture MediaStreamTrack class 
> for remote tracks received from the network, by adding the following 
> events:
>
>  Events
>
> onconnected of type EventHandler,
>
>   This event handler, of event handler event type connected, must be 
> fired to allow a developer's JavaScript to be notified when a remote 
> MediaStreamTrack is connected, which means that RTP for this track 
> has been received.
>
>   Note that this event is just fired for a remote MediaStreamTrack 
> which MediaStream was already connected (so onaddstream event was 
> called for it).
>
>   Event arguments: none
>
> ondisconnected of type EventHandler,
>
>   This event handler, of event handler event type disconnected, must 
> be fired to allow a developer's JavaScript to be notified when a 
> remote MediaStreamTrack is disconnected, which means that a RTCP BYE 
> has been received or RTP timeout occurred.
>
>   Event arguments: none
>
> 9. Examples
>
>   9.1 Simple Peer-to-peer Example
>
> This example code provides a basic audio&video session between two browsers.
>
>  var signalingChannel = new SignalingChannel();
>  var conn;
>
>
>  // call start() to initiate
>  function start() {
>   conn = new RTCConnection({ iceServers: [{ url: 
> "stun:stun.example.org" }] });
>
>   // send my ICE information to the other peer
>   signalingChannel.send(JSON.stringify({ "iceInfo": { "usernameFrag": 
> conn.local.ice.usernameFrag, "password": conn.local.ice.password } 
> }));
>
>   // apply any local ICE candidate and send it to the remote
>   conn.oncandidate = function (evt) {
>       conn.setLocalCandidate(evt.candidate);
>       signalingChannel.send(JSON.stringify({ "candidate": evt.candidate }));
>   }
>
>   // once remote stream arrives, show it in the remote video element
>   conn.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);
>       conn.addStream(stream);
>       // send tracks description to the peer
>       conn.tracks().forEach(function(track) {
>           signalingChannel.send(JSON.stringify({ "track": 
> track.getDescription() }));
>       });
>   }, logError);
>  }
>
>
>  signalingChannel.onmessage = function (evt) {
>   if (!conn)
>       start();
>
>   var message = JSON.parse(evt.data);
>   if (message.iceInfo) {
>       conn.remote.ice.usernameFrag = message.iceInfo.usernameFrag;
>       conn.remote.ice.password = message.iceInfo.password;
>       conn.connect();
>   }
>   if (message.candidate) {
>       conn.setRemoteCandidate(message.candidate);
>   }
>   if (message.track) {
>       conn.receiveTrack(message.track);
>   }
>  };
>
>
>  function logError(error) {
>   log(error.name + ": " + error.message);
>  }

Received on Sunday, 13 October 2013 21:03:04 UTC