W3C home > Mailing lists > Public > public-webrtc@w3.org > April 2014

Re: [Bug 25497] New: RTCRtpSender / Receiver objects need to be added to the specification

From: Cullen Jennings (fluffy) <fluffy@cisco.com>
Date: Wed, 30 Apr 2014 20:27:25 +0000
To: "bugzilla@jessica.w3.org" <bugzilla@jessica.w3.org>
CC: "public-webrtc@w3.org" <public-webrtc@w3.org>
Message-ID: <DFD91FA8-0234-4F91-8630-680635A0C3A1@cisco.com>

I think this needs a lot more discussion before we start making bugs for it. 


On Apr 29, 2014, at 3:43 AM, bugzilla@jessica.w3.org wrote:

> https://www.w3.org/Bugs/Public/show_bug.cgi?id=25497
> 
>            Bug ID: 25497
>           Summary: RTCRtpSender / Receiver objects need to be added to
>                    the specification
>           Product: WebRTC Working Group
>           Version: unspecified
>          Hardware: PC
>                OS: Linux
>            Status: NEW
>          Severity: normal
>          Priority: P2
>         Component: WebRTC API
>          Assignee: public-webrtc@w3.org
>          Reporter: harald@alvestrand.no
>                CC: public-webrtc@w3.org
> 
> The proposal for RTCRtpSender /Receiver sent to the mailing list on April 28 is
> reproduced below. The April 28 meeting seemed to agree that this is a sensible
> direction, but details may need adjusting before integrating.
> 
> I suggest we call the SendDoohickeys RTCRtpSenders and the corresponding
> receive-side objects RTCRtpReceivers. These objects allow control of how a
> MediaStreamTrack is encoded and sent on the wire, including "hold" state,
> prioritization, and multiple encodings (e.g. simulcast).
> 
> You get a RTCRtpSender as a return value from AddTrack (which replaces
> AddStream). You get a RTCRtpReceiver as an argument to the new onaddtrack
> callback (which replaces onaddstream). The actual track object can be obtained
> as a property from the RTCRtpReceiver (see below).
> 
> For getting access to ICE/DTLS info, both RTCRtpSenders and RTCRtpReceivers can
> also have a reference to a RTCDtlsTransport object, which will have its own
> state variables, including the RTCIceConnectionState of that particular
> transport, and the .remoteCertificates for the DTLS connection. This allows
> applications to monitor the state of individual transports, as well as inspect
> the certificates for individual transports.
> 
> The actual interface is as follows:
> 
> // used with RTCRtpSender
> 
> interface RTCDtlsTransport {
> 
> attribute RTCIceConnectionState state;
> 
> sequence<ArrayBuffer> getRemoteCertificates();
> 
> //... more stuff as needed
> 
> };
> 
> // used with RTCRtpSender
> 
> interface RTCRtpEncodingParams {
> 
>   double               priority = 1.0;  // relative priority of this encoding
> 
>   unsigned int       maxBitrate = null;  // maximum bits to use for this
> encoding
> 
>   boolean             active;  // sending or "paused/onhold"
> 
> };
> 
> // the "send" doohickey
> 
> interface RTCRtpSender {
> 
> readonly attribute MediaStreamTrack track;
> 
> readonly attribute RTCDtlsTransport transport;
> 
> // 1-N encodings; in the future, N can be > 1, for simulcast or layered coding
> 
> // Each EncodingParams specifies the details of what to send (e.g. bitrate)
> 
> sequence<RTCRtpEncodingParams> getEncodings();
> 
> };
> 
> // the "receive" doohickey
> 
> interface RTCRtpReceiver {
> 
> readonly attribute RTCDtlsTransport transport;
> 
> readonly attribute MediaStreamTrack track;
> 
> // more stuff as needed
> 
> };
> 
> // parameter to the onaddtrack event
> 
> interface RemoteTrackEvent : Event {
> 
> readonly attribute RtpReceiver receiver;
> 
> readonly attribute MediaStreamTrack track;
> 
> readonly attribute MediaStream stream;
> 
> };
> 
> partial interface RTCPeerConnection {
> 
> // because a track can be part of multiple streams, the id parameter
> 
> // indicates which particular stream should be referenced in signaling
> 
> RtpSender addTrack(track, streamId);  // replaces addStream
> 
> 
> 
> void removeTrack(RtpSender);  // replaces removeStream
> 
> sequence<RtpSender> getSenders();
> 
> sequence<RtpReceiver> getReceivers();
> 
> EventHandler onaddtrack;  // replaces onaddstream; event object is
> RemoteTrackEvent.
> 
>                                        // note that onremovestream is not
> needed, since tracks are 'removed'
> 
>                                        // simply by progressing to the ENDED
> state
> 
> };
> 
> For backcompat, addStream, removeStream, getLocalStreams, getRemoteStreams, and
> onaddstream can be trivially polyfilled in JS, so there is minimal impact on
> current applications.
> 
> All together, the pipeline looks like this:
> 
> Source ---> MST ---> RtpSender ---> DtlsTransport ---> (The Internet) --->
> DtlsTransport ---> RtpReceiver ---> MST ---> <video/>
> 
> Each RtpSender/Receiver references a single MST, although a single
> RtpSender/Receiver can send/receive multiple encodings (e.g. simulcast).
> 
> There are N RtpSenders/Receivers per DtlsTransport; N is controlled by the
> policy specified for BUNDLE.
> 
> -- 
> You are receiving this mail because:
> You are on the CC list for the bug.
> You are the assignee for the bug.
> 
> 
Received on Wednesday, 30 April 2014 20:27:55 UTC

This archive was generated by hypermail 2.3.1 : Monday, 23 October 2017 15:19:38 UTC