From b03c1298cfd9b9327eb52255e2bf850c8e70f48c Mon Sep 17 00:00:00 2001 From: Robin Raymond Date: Wed, 25 Mar 2015 12:23:52 -0400 Subject: [PATCH] - Added Section 8.3.1 on RTP matching rules, as noted in: Issue #48 - Revised the text relating to RTCDtlsTransport.start(), as noted in: Issue #168 - Clarified pruning of local candidates within the RTCIceGatherer, as noted in: Issue #174 - Clarified handling of incoming connectivity checks by the RTCIceGatherer, as noted in: Issue #170 - Added Section 9.3.2.1, defining DTMF capabilities and settings, as noted in: Issue #177 - Clarified pre-requisites for insertDTMF(), based on: Issue #178 - Added Section 8.3.2 and updated Section 9.5.1 to clarify aspects of RTCP sending and receiving, based on: Issue #180 --- images/BigPictureUpdate.png | Bin 52673 -> 0 bytes images/icestates.png | Bin 12293 -> 0 bytes images/icestates.svg | 512 ------------------ images/ortc-big-picture.svg | 4 - ...-big-picture.png => ortc-bigy-picture.png} | Bin ortc.html | 384 ++++++++----- 6 files changed, 250 insertions(+), 650 deletions(-) delete mode 100644 images/BigPictureUpdate.png delete mode 100644 images/icestates.png delete mode 100644 images/icestates.svg delete mode 100644 images/ortc-big-picture.svg rename images/{ortc-big-picture.png => ortc-bigy-picture.png} (100%) diff --git a/images/BigPictureUpdate.png b/images/BigPictureUpdate.png deleted file mode 100644 index e2986bebacce389ae98460077098cd6d6e3efeef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52673 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 z 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 diff --git a/images/icestates.png b/images/icestates.png deleted file mode 100644 index 2622107897e913005c1c2717bcbb474ca9da543f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12293 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 diff --git a/images/icestates.svg b/images/icestates.svg deleted file mode 100644 index 8836789..0000000 --- a/images/icestates.svg +++ /dev/null @@ -1,512 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -new - -disconnected - - -checking - -connected - -completed - -closed(reachable fromany state) - - \ No newline at end of file diff --git a/images/ortc-big-picture.svg b/images/ortc-big-picture.svg deleted file mode 100644 index 5373445..0000000 --- a/images/ortc-big-picture.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/images/ortc-big-picture.png b/images/ortc-bigy-picture.png similarity index 100% rename from images/ortc-big-picture.png rename to images/ortc-bigy-picture.png diff --git a/ortc.html b/ortc.html index a6b8144..30cdf95 100644 --- a/ortc.html +++ b/ortc.html @@ -77,6 +77,16 @@ , status: "13 January 2015. Internet Draft (work in progress)" , publisher: "IETF" }, + "RFC3264": { + title: "An Offer/Answer Model with the Session Description Protocol" + , href: "https://tools.ietf.org/html/rfc3264" + , authors: [ + "J. Rosenberg" + , "H. Schulzrinne" + ] + , status: "July 2002. RFC" + , publisher: "IETF" + }, "RFC4585": { title: "Extended RTP Profile for RTCP-Based Feedback (RTP/AVPF)" , href: "https://tools.ietf.org/html/rfc4585" @@ -449,7 +459,7 @@ "Harald Alvestrand", "Varun Singh" ] - , status: "21 October 2014 (work in progress)" + , status: "06 February 2015 (work in progress)" , publisher: "W3C" } } @@ -507,7 +517,7 @@

Overview

whereas vertical arrows denote interactions via methods and events.

-The non-normative ORTC Big Picture Diagram +The non-normative ORTC Big Picture Diagram

Terminology

@@ -584,53 +594,54 @@

Interface Definition

RTCDtlsParameters? getRemoteParameters()
-

Obtain the current DTLS parameters of the remote RTCDtlsTransport.

+

Obtain the current DTLS parameters of the remote RTCDtlsTransport. +

sequence<ArrayBuffer> getRemoteCertificates()

Obtain the certificates used by the remote peer.

void start(RTCDtlsParameters remoteParameters)
-

Start DTLS transport negotiation with the parameters of the remote DTLS transport, - then once the DTLS transport session is established, negotiate a DTLS-SRTP [[!RFC5764]] session to +

Start DTLS transport negotiation with the parameters of the remote DTLS transport, + then once the DTLS transport session is established, negotiate a DTLS-SRTP [[!RFC5764]] session to establish keys so as protect media using SRTP [[!RFC3711]]. - Since symmetric RTP [[!RFC4961]] is utilized, the DTLS-SRTP session is bidirectional. - If remoteParameters is invalid, throw an InvalidParameter exception. - If start() is called after a previous start() call, throw an InvalidState exception. -

-

While a newly constructed RTCDtlsTransport MUST listen for - incoming DTLS packets before start() is called, to - complete the negotiation it is necessary to verify the remote - fingerprint, which is dependent on remoteParameters, - passed to start(). -

-

Only a single DTLS transport can be multiplexed over an ICE transport. Therefore if - a RTCDtlsTransport object dtlsTransportB is constructed with an - RTCIceTransport object iceTransport previously used to construct - another RTCDtlsTransport object - dtlsTransportA, if dtlsTransportB.start() is called prior to having called - dtlsTransportA.stop(), then throw an InvalidStateError exception. -

+ Since symmetric RTP [[!RFC4961]] is utilized, + the DTLS-SRTP session is bidirectional. + While a newly constructed RTCDtlsTransport + MUST listen for incoming DTLS packets before start() is called, + to complete the negotiation it is necessary to verify the remote fingerprint, which is dependent on remoteParameters, + passed to start().

+

If remoteParameters is invalid, throw + an InvalidParameters exception. If start() is called after a previous start() + call, throw an InvalidStateError exception. + Only a single DTLS transport can be multiplexed over an ICE transport. + Therefore if a RTCDtlsTransport object dtlsTransportB is constructed with an RTCIceTransport + object iceTransport previously used to construct another RTCDtlsTransport object + dtlsTransportA, then if dtlsTransportB.start() is called prior to having called dtlsTransportA.stop(), + then throw an InvalidStateError exception. +

void stop()
-

Stops and closes the DTLS transport object. Since stop() is final, - if start() is called afterwards, - throw an InvalidState exception. -

+

Stops and closes the DTLS transport object. Since stop() is final, + if start() is called afterwards, throw an InvalidStateError exception. +

+
attribute EventHandler? ondtlsstatechange
-

This event handler, of event handler type dtlsstatechange - uses the RTCDtlsStateChangedEvent interface. - It MUST be supported by +

This event handler, of event handler type dtlsstatechange, + uses the RTCDtlsTransportStateChangedEvent interface. + It MUST be supported by all objects implementing the RTCDtlsTransport interface. - It is called any time the RTCDtlsTransportState changes. -

+ It is called any time the RTCDtlsTransportState changes. +

+
attribute EventHandler? onerror
-

This event handler, of event handler type error, +

This event handler, of event handler type error, MUST be supported by all objects implementing the RTCDtlsTransport interface. This event MUST be fired on reception of a DTLS alert. -

+

+
@@ -648,6 +659,7 @@

The RTCDtlsParameters Object

Sequence of fingerprints.

+

The RTCDtlsFingerprint Object

@@ -662,42 +674,40 @@

The RTCDtlsFingerprint Object

The value of the certificate fingerprint in lowercase hex string as expressed utilizing the syntax of 'fingerprint' in [[!RFC4572]] Section 5.

-

enum RTCDtlsRole

RTCDtlsRole indicates the role of the DTLS transport.

auto
-

The DTLS role is determined based on the resolved ICE role: the - 'controlled' role acts as the DTLS client, - the 'controlling' role acts as the DTLS server. Since RTCDtlsRole - is initialized to "auto" on construction of an RTCDtlsTransport, +

The DTLS role is determined based on the resolved ICE role: the + "controlled" role acts as the DTLS client, + the "controlling" role acts as the DTLS server. Since RTCDtlsRole + is initialized to "auto" on construction of an RTCDtlsTransport object, transport.getLocalParameters().RTCDtlsRole will have an initial value of "auto".

client

The DTLS client role. - A transition to "client" will occur if - start(remoteParameters) is called with remoteParameters.RTCDtlsRole - having a value of "server". If RTCDtlsRole had previously had a value of "server" (e.g. due to + A transition to "client" will occur if + start(remoteParameters) is called with remoteParameters.RTCDtlsRole + having a value of "server". If RTCDtlsRole had previously had a value of "server" (e.g. due to the RTCDtlsTransport having previously received packets from a DTLS client), then the - DTLS session is reset prior to transitioning to the "client" role. + DTLS session is reset prior to transitioning to the "client" role.

server
-

The DTLS server role. If RTCDtlsRole has a value of "auto" and the RTCDtlsTransport receives a DTLS client_helo packet, - RTCDtlsRole will transition to "server", even before start() is called. A transition from "auto" +

The DTLS server role. If RTCDtlsRole has a value of "auto" and the RTCDtlsTransport receives a DTLS client_helo packet, + RTCDtlsRole will transition to "server", even before start() is called. A transition from "auto" to "server" will also occur if start(remoteParameters) is called with remoteParameters.RTCDtlsRole - having a value of "client". + having a value of "client".

enum RTCDtlsTransportState

-

RTCDtlsTransportState indicates the state of the DTLS transport. -

+

RTCDtlsTransportState indicates the state of the DTLS transport.

new

The RTCDtlsTransport object has been created and has not started negotiating yet.

@@ -717,7 +727,7 @@

enum RTCDtlsTransportState

RTCDtlsTransportStateChangedEvent

-

The dtlsstatechange event of the RTCDtlsTransport object uses +

The dtlsstatechange event of the RTCDtlsTransport object uses the RTCDtlsTransportStateChangedEvent interface.

Firing an @@ -727,25 +737,22 @@

RTCDtlsTransportStateChangedEvent

which does not bubble (except where otherwise stated) and is not cancelable (except where otherwise stated), and which uses the RTCDtlsTransportStateChangedEvent interface with the - state attribute set to the new RTCDtlsTransportState, + state attribute set to the new RTCDtlsTransportState, MUST be created and dispatched at the given target.

-
readonly attribute RTCDtlsTransportState state
-

The state attribute is the new - RTCDtlsTransportState + RTCDtlsTransportState that caused the event.

-
+
RTCDtlsTransportState? state

The state attribute is the new @@ -754,7 +761,7 @@

RTCDtlsTransportStateChangedEvent

-
+
@@ -810,9 +817,9 @@

Interface Definition

setRemoteCandidates must be called to add the remote candidates back or replace them.

If a newly constructed RTCIceGatherer object is passed as an argument when start() is called again, an ICE restart as defined in [[!RFC5245]] Section 9.2.1.1 occurs. - If an RTCIceGatherer with RTCIceGathererState of "completed" is passed as an - argument to start(), the existing (unpruned) local candidates are reused and the - ICE ufrag and password remain unchanged. However, other aspects of the behavior are not currently defined. + Since start() does not change the ufrag/password of gatherer, if start() is called again with the same value of gatherer, + the existing (unpruned) local candidates are reused and the ICE ufrag/password remains unchanged. + However, other aspects of the behavior are not currently defined.

void stop()
@@ -827,7 +834,7 @@

Interface Definition

If called more than once for the same component, throw an InvalidStateError exception. If called when component is "RTCP", - throw a SyntaxError exception. + throw an InvalidStateError exception.

void addRemoteCandidate(RTCIceGatherCandidate remoteCandidate)
@@ -1288,7 +1295,7 @@

Interface Definition

or at the end if index is not specified. If index is greater than the current number of RTCIceTransports with a component of "RTP", - throw an InvalidParameter exception. + throw an InvalidParameters exception. If transport has already been added to another RTCIceTransportController object, or if the component is "RTCP", throw an InvalidStateError exception. @@ -1523,18 +1530,15 @@

Overview

As noted in [[!RFC5245]] Section 7.1.2.3, an incoming connectivity check utilizes the remote ufrag and the local password, whereas an outgoing connectivity check utilizes the local ufrag and the remote password. Therefore an RTCIceGatherer possesses the information necessary to -validate incoming connectivity checks and MAY respond to them +validate incoming connectivity checks and MUST respond to them before an RTCIceTransport is constructed or iceTransport.start() is called.

Since initiating connectivity checks requires the remote password, an RTCIceTransport can only initiate checks after iceTransport.start() is called. To enable an RTCIceTransport to initiate connectivity checks to peers that had previously -sent connectivity checks, or to indicate to an RTCIceTransport that a connectivity -check had previously been received (and whether it was responded to), the RTCIceGatherer +sent connectivity checks, the RTCIceGatherer MUST store information from incoming connectivity checks (such as -the remote ufrag) along with an indication of whether it responded, and provide this to -associated RTCIceTransport objects so that they can respond if the -RTCIceGatherer did not, and can initiate their own connectivity checks. +the remote ufrag) and provide this to associated RTCIceTransport objects so that they can initiate their own connectivity checks.

@@ -1548,7 +1552,7 @@

Operation

Interface Definition

-
+
readonly attribute RTCIceGathererState state

The current state of the ICE gatherer.

RTCIceParameters getLocalParameters()
@@ -1563,7 +1567,7 @@

Interface Definition

attribute EventHandler? ongathererstatechange

This event handler, of event handler type gathererstatechange, - uses the RTCIceGathererStateChangedEvent interface. + uses the RTCIceGathererStateChangedEvent interface. It MUST be supported by all objects implementing the RTCIceGatherer interface. It is called any time the RTCIceGathererState changes. @@ -1578,8 +1582,9 @@

Interface Definition

attribute EventHandler? onlocalcandidate
-

This event handler, of event handler event type icecandidate, - MUST be supported by all objects implementing the +

This event handler, of event handler event type icecandidate, uses + the RTCIceGathererEvent interface. + It MUST be supported by all objects implementing the RTCIceGatherer interface. It receives events when a new local ICE candidate is available. Since ICE candidate gathering begins once an RTCIceGatherer object is created, @@ -1815,7 +1820,7 @@

Interface Definition

void setTrack(MediaStreamTrack track)

Set the track. If track.kind is changed, or if the new track has different peerIdentity constraints, - throw an InvalidParameter Exception. + throw an InvalidParameters Exception.

static RTCRtpCapabilities getCapabilities(optional DOMString kind)

Obtain the sender capabilities, based on kind. If kind is @@ -2112,18 +2117,17 @@

Operation

An RTCRtpListener instance is constructed from an RTCDtlsTransport object.

-
-

Matching rules

- -

+

+

RTP matching rules

+

When the RTCRtpListener object receives an RTP packet over an RTCDtlsTransport, the RTCRtpListener attempts to determine which RTCRtpReceiver object to deliver the packet to, based on the values of the SSRC and payload type fields in the RTP header, as well as the value of the MID RTP header extension, if present.

-

The RTCRtpListener maintains four tables in order to facilitate matching: the ssrc_table which maps SSRC +

The RTCRtpListener maintains three tables in order to facilitate matching: the ssrc_table which maps SSRC values to RTCRtpReceiver objects; the muxId_table which maps values of the MID header extension -to RTCRtpReceiverobjects, the pt_table which maps payload type values to -RTCRtpReceiver objects, and the receiver_table which keeps track of payload types supported by each receiver.

+to RTCRtpReceiverobjects and the pt_table which maps payload type values to +RTCRtpReceiver objects.

For an RTCRtpReceiver object receiver, table entries are added when receiver.receive() is called, and are removed when receiver.stop() is called. @@ -2151,17 +2155,17 @@

Matching rules

parameters.codecs[j].payloadType is unset for any value of j from 0 to the number of codecs, then receiver.receive() will throw an InvalidParameters exception.

-

Receiver table: receiver_table[receiver] is set to an array of payload types, parameters.codecs[j].payloadtype, -where j varies from 0 to the number of codecs. -

When an RTP packet arrives, if ssrc_table[packet.ssrc] is set: set packet_receiver to ssrc_table[packet.ssrc] and check -whether the value of packet.pt is included in any of the entries in -receiver_table[packet_receiver]. If so, route the packet to packet_receiver. If packet.pt does not match, +whether the value of packet.pt is equal to one of the values of parameters.codecs[j].payloadtype for packet_receiver, +where j varies from 0 to the number of codecs. +If so, route the packet to packet_receiver. If packet.pt does not match, fire the unhandledrtp event.

Else if packet.muxId is set: If muxId_table[packet.muxId] is unset, fire the unhandledrtp event, else set -packet_receiver to muxId_table[packet.muxId] and check whether the value of packet.pt is included in any of the entries in -receiver_table[packet_receiver]. If so, set ssrc_table[packet.ssrc] to packet_receiver and route the packet to packet_receiver. +packet_receiver to muxId_table[packet.muxId] and check +whether the value of packet.pt is equal to one of the values of parameters.codecs[j].payloadtype for packet_receiver, +where j varies from 0 to the number of codecs. +If so, set ssrc_table[packet.ssrc] to packet_receiver and route the packet to packet_receiver. If packet.pt does not match, fire the unhandledrtp event.

Else if pt_table[packet.pt] is set: set packet_receiver to pt_table[packet.pt], set ssrc_table[packet.ssrc] to packet_receiver, set pt_table[packet.pt] to null @@ -2170,7 +2174,6 @@

Matching rules

TODO: Revise this paragraph based on the outcome of the discussion on FEC/RTX/RED.

-

Interface Definition

@@ -2320,7 +2323,7 @@

dictionary RTCRtpCodecCapability

RTCRtpCodecCapability.preferredPayloadtype.

unsigned long maxptime
-

The maximum packetization time supported.

+

The maximum packetization time supported by the RTCRtpReceiver.

unsigned long numChannels

The number of channels supported (e.g. stereo). For video, this will be unset.

@@ -2345,6 +2348,44 @@

Codec capability parameters

The capability parameters for commonly implemented codecs are provided below.

+ +
+

DTMF

+

The following capabilities and settings are defined for DTMF, as noted in [[!RFC4733]] Section 2.4:

+ + + + + + + + + + + + + + + + + + + + +
Property NameValuesNotes
events + DOMString + An indication of what telephony events are supported (or configured). + Events are listed as one or more comma-separated + elements. Each element can be either a single integer providing the + value of an event code or an integer followed by a hyphen and a + larger integer, presenting a range of consecutive event code values. + The list does not have to be sorted. No white space is allowed in + the argument. The union of all of the individual event codes and + event code ranges designates the complete set of event numbers + supported by the implementation. +
+
+

Opus

The following capabilities are defined for Opus, as noted in [[!OPUS-RTP]] Section 6.1:

@@ -2508,7 +2549,9 @@

dictionary RTCRtcpParameters

RTCRtcpParameters provides information on RTCP settings.

unsigned long ssrc
-

The SSRC to be used in the Receiver Report "SSRC of packet sender" field as defined in [[!RFC3550]] Section 6.4.2. +

The SSRC to be used in the "SSRC of packet sender" field defined in [[!RFC3550]] Section 6.4.2 (Receiver Report) + and [[!RFC4585]] Section 6.1 (Feedback Messages), as well as the "SSRC" field defined in [[!RFC3611]] Section 2 (Extended Reports). + This is only set for an RTCRtpReceiver. If unset, ssrc is chosen by the browser, and the chosen value is not reflected in RTCRtcpParameters.ssrc. If the browser chooses the ssrc it may change it in event of a collision, as described in [[!RFC3550]].

DOMString cname
@@ -2543,7 +2586,9 @@

dictionary RTCRtpCodecParameters

unsigned long clockRate

Codec clock rate expressed in Hertz, null if unset.

unsigned long maxptime
-

The maximum packetization time supported.

+

The maximum packetization time set on the RTCRtpSender. + Not specified if unset. +

unsigned long numChannels

The number of channels supported (e.g. stereo). If unset for audio, use the codec default. For video, this can be left unset.

@@ -2626,7 +2671,8 @@

dictionary RTCRtpEncodingParameters

boolean active=true

Whether the sender or receiver is active. If false, don't send any media right now. Disable is different than omitting the encoding; it can keep resources - available to re-enable more quickly than re-adding. Plus, it still sends RTCP. If unset, the default is assumed.

+ available to re-enable more quickly than re-adding. As noted in [[RFC3264]] Section 5.1, RTCP is still sent, regardless of the value of the active attribute. + If unset, the default is assumed.

DOMString encodingId

An identifier for the encoding object. This identifier should be unique within the scope of the @@ -3013,7 +3059,12 @@

Interface Definition

void insertDTMF(in DOMString tones, optional long duration, long interToneGap)
-
+
Insert DTMF tones. Since DTMF tones cannot be sent without configuring the DTMF codec, + if insertDTMF() is called prior to sender.send(parameters), or if + sender.send(parameters) was called but + parameters did not include the DTMF codec, + throw an InvalidStateError exception. +
readonly attribute RTCRtpSender sender

The RTCRtpSender instance

@@ -3071,7 +3122,7 @@

RTCDTMFToneChangeEvent

tone, MUST be created and dispatched at the given target.

+ "[Constructor(DOMString type, RTCDTMFToneChangeEventInit eventInitDict)] interface RTCDTMFToneChangeEvent : Event">
readonly attribute DOMString tone

The tone @@ -3523,9 +3574,9 @@

Statistics API

The Statistics API enables retrieval of statistics relating to RTCRtpSender, RTCRtpReceiver, - RTCDtlsTransport, RTCIceTransport and + RTCDtlsTransport, RTCIceGatherer, RTCIceTransport and RTCSctpTransport objects. - For detailed information on statistics, consult [[!WEBRTC-STATS]]. + For detailed information on the Statistics API, consult [[!WEBRTC-STATS]].

@@ -3542,9 +3593,16 @@

Statistics API

  1. -

    If the object's - RTCRtpParameters.RTCRtpEncodingParameters.active state is false, throw an - InvalidStateError exception.

    +

    For RTCDtlsTransport.getStats(), check whether RTCDtlsTransport.start() has been called; if not, + throw an InvalidStateError exception. + For RTCIceTransport.getStats(), check whether RTCIceTransport.start() has been called; if not, + or if RTCIceTransport.stop() has been called, + throw an InvalidStateError exception. + For RTCRtpSender.getStats(), check whether RTCRtpSender.send(parameters) has been called; if not, + throw an InvalidStateError exception. + For RTCRtpReceiver.getStats(), check whether RTCRtpReceiver.receive(parameters) has been called; if not, + throw an InvalidStateError exception. +

  2. @@ -3652,59 +3710,98 @@

    RTCStats Dictionary

-

enum RTCStatsType

- -
-
inboundrtp
-

Statistics for the inbound RTP stream that is currently - received by this RTCRtpReceiver object. It is +

RTCStatsType DOMString

+

RTCStatsType is equal to one of the following strings defined in [IANA-TOBE]:

+
+
"inboundrtp"
+

Statistics for the inbound RTP stream. It is accessed via the RTCInboundRTPStreamStats defined - in [[!WEBRTC-STATS]] Section 5.3.3.

+ in [[!WEBRTC-STATS]] Section 4.2.3. Local inbound RTP + statistics can be obtained from the RTCRtpReceiver + object; remote inbound RTP statistics can be obtained from the + RTCRtpSender object. +

-
outboundrtp
-

Statistics for the outbound RTP stream that is currently - sent by this RTCRtpSender object. It is +

"outboundrtp"
+

Statistics for the outbound RTP stream. It is accessed via the RTCOutboundRTPStreamStats defined in - [[!WEBRTC-STATS]] Section 5.3.4..

+ [[!WEBRTC-STATS]] Section 4.2.4. Local outbound RTP + statistics can be obtained from the RTCRtpSender + object; remote outbound RTP statistics can be obtained from the + RTCRtpReceiver object. +

-
session
+
"session"

Statistics relating to RTCDataChannel objects. - It is accessed via the RTCPeerConnectionStats and RTCDataChannelStats - defined in [[!WEBRTC-STATS]] Sections 5.4 and 5.6. + It is accessed via the RTCPeerConnectionStats + defined in [[!WEBRTC-STATS]] Section 4.3.

-
track
+
"datachannel"
+

Statistics relating to each RTCDataChannel id. + It is accessed via the RTCDataChannelStats + defined in [[!WEBRTC-STATS]] Section 4.5. +

+ +
"track"

Statistics relating to the MediaStreamTrack object. - It is accessed via the RTCMediaStreamTrackStats defined in [[!WEBRTC-STATS]] Section 5.5.2. + It is accessed via the RTCMediaStreamTrackStats defined in [[!WEBRTC-STATS]] Section 4.4.2.

-
transport
+
"transport"

Transport statistics related to the RTCDtlsTransport object. It is accessed via the RTCTransportStats and RTCCertificateStats - defined in [[!WEBRTC-STATS]] Sections 5.7 and 5.10. + defined in [[!WEBRTC-STATS]] Sections 4.6 and 4.9.

-
candidatepair
+
"candidatepair"

ICE candidate pair statistics related to RTCIceTransport objects. - It is accessed via the RTCIceCandidatePairStats defined in [[!WEBRTC-STATS]] Section 5.9. + It is accessed via the RTCIceCandidatePairStats defined in [[!WEBRTC-STATS]] Section 4.8.

-
localcandidate
+
"localcandidate"

ICE local candidates, related to - the RTCIceTransport objects. - It is accessed via the RTCIceCandidateAttributes defined in [[!WEBRTC-STATS]] Section 5.8. + RTCIceGatherer objects. + It is accessed via the RTCIceCandidateAttributes defined in [[!WEBRTC-STATS]] Section 4.7.

-
remotecandidate
+
"remotecandidate"

ICE remote candidate, related to - the RTCIceTransport objects. - It is accessed via the RTCIceCandidateAttributes defined in [[!WEBRTC-STATS]] Section 5.8. + RTCIceTransport objects. + It is accessed via the RTCIceCandidateAttributes defined in [[!WEBRTC-STATS]] Section 4.7.

- -
+
+
+

RTCP matching rules

+

+Since statistics are retrieved from objects within the ORTC API, and information within RTCP packets +is used to maintain some of the statistics, the handling of RTCP packets is important to the operation +of the statistics API. +

+

+RTCP packets arriving on an RTCDtlsTransport are decrypted and a notification is sent to all +RTCRtpSender and RTCRtpReceiver objects utilizing +that transport. +RTCRtpSender and RTCRtpReceiver objects then +examine the RTCP packets to determine the information relevant to their operation and the statistics +maintained by them. +

+

+RTCP packets should be queued for 30 seconds and all RTCRtpSender and RTCRtpReceiver +objects on the related RTCDTlsTransport have access to those packets until the packet is removed from the queue, +should the RTCRtpSender or RTCRtpReceiver objects need to examine them. +

+

+

Relevant SSRC fields within selected RTCP packets are summarized +within [[!RFC3550]] Section 6.4.1 (Sender Report), +Section 6.4.2 (Receiver Report), Section 6.5 (SDES), +Section 6.6 (BYE), [[!RFC4585]] Section 6.1 (Feedback Messages), +and [[!RFC3611]] Section 2 (Extended Reports). +

+

Example

@@ -4199,7 +4296,7 @@

Event summary

received a DTLS Alert. - dtlsstatechange + dtlsstatechange RTCDtlsTransportStateChangedEvent The RTCDtlsTransportState changed. @@ -4538,12 +4635,37 @@

Change Log

This section will be removed before publication.

+
+

Changes since 22 January 2015

+ +
    +
  1. Updated Section 8.3 on RTP matching rules, as noted in: + Issue 48
  2. +
  3. Further updates to the Statistics API, reflecting: + Issue 85
  4. +
  5. Added support for maxptime, as noted in: + Issue 160
  6. +
  7. Revised the text relating to RTCDtlsTransport.start(), as noted in: + Issue 168
  8. +
  9. Clarified handling of incoming connectivity checks by the RTCIceGatherer, as noted in: + Issue 170
  10. +
  11. Added Section 9.3.2.1, defining DTMF capabilities and settings, as noted in: + Issue 177
  12. +
  13. Clarified pre-requisites for insertDTMF(), based on: + Issue 178
  14. +
  15. Added Section 13.4 and updated Section 9.5.1 to clarify aspects of RTCP sending and receiving, based on: + Issue 180
  16. +
  17. Fixed miscellaneous typos, as noted in: + Issue 183
  18. +
  19. Added informative reference to [[RFC3264]] Section 5.1, as noted in: + Issue 184
  20. +
+
+

Changes since 14 October 2014

    -
  1. Updated Section 8.3 to reflect proposed matching rules, reflecting: - Issue 48
  2. Update to the Statistics API, reflecting: Issue 85
  3. Update on 'automatic' use of scalable video coding, as noted in: @@ -4552,8 +4674,6 @@

    Changes since 14 October 2014

    Issue 158
  4. Update to the 'Big Picture', as noted in: Issue 159
  5. -
  6. Added support for maxptime, as noted in: - Issue 160
  7. Changed 'RTCIceTransportEvent' to 'RTCIceGathererEvent' as noted in: Issue 161
  8. Update to RTCRtpUnhandledEvent as noted in: @@ -4564,10 +4684,6 @@

    Changes since 14 October 2014

    Issue 166
  9. Added text relating to DTLS interoperability with WebRTC 1.0, as noted in: Issue 167
  10. -
  11. Revised the text relating to RTCDtlsTransport.start() as noted in: - Issue 168
  12. -
  13. Clarified handling of incoming connectivity checks by the RTCIceGatherer as noted in: - Issue 170
  14. Added a reference to the ICE consent specification, as noted in: Issue 171