- From: Peter Thatcher <pthatcher@google.com>
- Date: Wed, 30 May 2018 09:29:20 -0700
- To: Sergio Garcia Murillo <sergio.garcia.murillo@gmail.com>
- Cc: public-webrtc@w3.org
- Message-ID: <CAJrXDUHyRRrQCMBVkRBu8iwTJ8y4+i-70HnhsiQj0kMDfaP2_g@mail.gmail.com>
This gets to my question I want to cover at the f2f (and which we now have agenda time for): how low-level an API do we want? With a low-level RTP transport object, a JS/wasm app could implement a high-level RtpSender on top. But is that the right balance between flexibility and ease of use? How much do we want to rely on libraries to fill in the higher-level stuff? I feel like providing low-level components and letting the js/wasm libraries fill in the higher-level stuff is the right way to go for most things, but finding the right line is a bunch of tradeoffs and I think there's a lot of the WG to consider. On Tue, May 29, 2018 at 3:24 AM Sergio Garcia Murillo < sergio.garcia.murillo@gmail.com> wrote: > I fail to see what would be the benefits of adding the media frame API to > the RTP objects, especially if we intend to provide a lower raw rtp API. > > In order to be able to implement this API on the browser, the codec > packetization of the encoded stream must be known by the browser. Also, it > is not possible to modify the frame, for example applying end to end media > encryption, as packetization requires to have access to the raw data or add > metadata for the very same reason. > > If the API would only alow to forward the frames from an encoder/decoder > (or another media source/sink) to the rtp objects, I would prefer a higher > level API that deals with streams and not individual packets. > > Best regards > > Sergio > > On 29/05/2018 8:30, Harald Alvestrand wrote: > > *Access to encoded streams* > > > > > > > * A similar interface can be added to RTPSender and RTPReceiver, > respectively (and similar APIs for other transports, when defined). Here > the buffers would contain encoded video / audio data, and the control block > parameters would have to have enough information to let the RTP packet > headers be constructed - or, on the receiver, the info from the RTP packet > headers be represented. Partial interface RTPSender { > promise<encodedBuffer> injectData(encodedBuffer); } Partial interface > RTPReceiver { promise<encodedBuffer> extractData(encodedBuffer); } > Interface encodedBuffer : Buffer { Long rtpTimestamp; Long frameId; > sequence<long> dependsOnFrames; // more fields TBD } On this > interface, frames do have interdependencies, so dropping packets is much > more problematic. The “dependsOnFrames” member is intended to help deciding > on sensible handling - it would tell the other side of the API that “if you > dropped one of these frames, you might as well drop this frame too”. * > > >
Received on Wednesday, 30 May 2018 16:29:57 UTC