- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Mon, 13 Jan 2020 13:31:00 +0100
- To: Youenn Fablet <youenn@apple.com>
- Cc: public-webrtc@w3.org
Den 13.01.2020 11:11, skrev Youenn Fablet: > I like the idea of exposing more things through API. > I am curious about the reasons behind surfacing the API at transceiver > instead of sender/receiver level. My rule of thumb is that APIs that don't depend on SDP negotiation belong to sender/receiver, while APIs that chiefly exist to influence SDP negotiation belong to transceiver. I still have a long term hope that we'll get to a state where we can have sender/receiver objects whose configuration can be managed without reference to SDP (but for the moment, I'm just trying to not make that goal be further away). > >> On 13 Jan 2020, at 10:51, Harald Alvestrand <harald@alvestrand.no >> <mailto:harald@alvestrand.no>> wrote: >> >> For those who like Google docs, there's a document with public >> comments enabled here: >> >> >> https://docs.google.com/document/d/1y1hTsMeav5ijPvoqu1R6U4YC564i1QzgkMeIqWhgiis/edit# >> >> >> On 1/13/20 2:11 AM, Harald Alvestrand wrote: >>> >>> This is a proposal for an extension to the WebRTC-PC specification in >>> order to allow control of which RTP headers are negotiated and used. >>> >>> If time allows, I'll present this at the Tuesday Virtual Interim meeting. >>> >>> If the group finds the proposal reasonable, I'll prepare a pull >>> request against the WebRTC extensions document >>> (https://github.com/w3c/webrtc-extensions) >>> >>> This proposal is NOT meant to be merged with the WEBRTC-PC document >>> that we're currently trying to get to Proposed Recommendation. >>> >>> *Harald* >>> >>> ** >>> >>> >>> *RTP header extension control* >>> >>> * >>> The standard RTP header extension mechanism is described in RFC 8285 >>> <https://tools.ietf.org/html/rfc8285>. >>> >>> We have two issues with RTP headers: >>> >>> * >>> There are so many of them, and so many supported in browsers, >>> that we’re running into issues in SDP parsers with just offering >>> every RTP header extension that there is support for. >>> * >>> There are extensions that we don’t want enabled by default, or >>> not enabled all the time. Sometimes they are alternates and we >>> want to pick one. >>> >>> >>> An extension API is needed for this. It needs to: >>> >>> * >>> Be able to figure out what extensions (by name) the platform supports >>> * >>> Enable the negotiation of these extensions on initial SDP negotiation >>> * >>> Enable or disable these extensions on a specific RTP stream. >>> >>> >>> Proposal >>> >>> This proposal seems to satisfy the requirements above. >>> >>> It consists of two new functions on the RTCRtpTransceiver, to control >>> the SDP negotiation, and one new attribute in >>> RTCRtpHeaderExtensionParameters, which allows the enabling or >>> disabling of an extension using setParameters(). >>> >>> >>> Controlling the SDP negotiation >>> >>> IDL: >>> >>> partial dictionary RTCRtpHeaderExtensionParameters { >>> RTCRtpTransceiverDirection direction = “sendrecv”; >>> // Sendonly, recvonly, sendrecv, inactive, stopped >>> } >>> // This also redefines RTCRtpHeaderExtensionList >>> dictionary RTCRtpHeaderExtensionCapabilityWithDirection >>> : RTCRtpHeaderExtensionCapability { >>> RTCRtpTransceiverDirection direction = “sendrecv”; >>> } >>> >>> partial interface RTCRtpTransceiver { >>> void setOfferedRtpHeaderExtensions( >>> RTCRtpHeaderExtensionCapabilityWithDirection >>> headerExtensionsToOffer); >>> readonly attribute RTCRtpHeaderExtensionList headerExtensionsAccepted; >>> } >>> >>> The “headerExtensionsToOffer” argument will control what is offered >>> in the next negotiation. >>> The following meanings attach to the “direction” attribute: >>> >>> * >>> Sendonly, recvonly, sendrecv, inactive: These will be signalled >>> in the SDP. If the attribute is “sendonly” or “sendrecv”, the >>> attribute will be used by the attached sender on this transceiver. >>> * >>> stopped : Will NOT be signalled in the SDP. >>> >>> >>> The URIs listed in the argument to “setOffered” MUST be a subset of >>> the union of the capabilities listed by sender.getCapabilities / >>> receiver.getCapabilities. If an unrecognized URI is present, >>> “typeError” will be thrown. >>> >>> If any RTP header extension that the platform regards as mandatory to >>> send is set to “recvonly”, “inactive” or “stopped”, or an RTP header >>> extension that the platform regards as mandatory to receive is set to >>> “sendonly”, “inactive” or “stopped”, the call will thrown a >>> “InvalidModificationError”. >>> >>> The “accepted” attribute will be empty until an offer/answer has been >>> completed. >>> >>> >>> Controlling the RTP extensions in use >>> >>> >>> Reporting what’s in use is already handled by the >>> RTCRtpHeaderExtensionParameterselement on the sender/receiver. This >>> also gives the extension numbers, if needed. >>> >>> To figure out what’s available, one can use >>> RTCRtpSender.getCapabilities() and look at the header extensions >>> section; this returns a sequence<RTCRtpHeaderExtensionCapability>. >>> >>> To control what extensions are being sent, modify the “direction” >>> attribute - setting it to “stopped” will prevent the RTP header >>> extension from being sent. >>> For this, one can use the usual getParameters/setParameters functions. >>> Attempting to modify the receiver’s “direction”, or attempting to >>> disable a mandatory parameter, will lead to rejection of the >>> setParameters(). >>> >>> >>> * >
Received on Monday, 13 January 2020 12:31:14 UTC