- From: Peter Thatcher <pthatcher@google.com>
- Date: Thu, 14 Jun 2018 12:34:40 -0700
- To: Harald Alvestrand <harald@alvestrand.no>
- Cc: public-webrtc@w3.org
- Message-ID: <CAJrXDUFe4gS7F9rL43MrAB05tSvZeji3rLOCN9_COSDqySF9dw@mail.gmail.com>
On Thu, Jun 14, 2018 at 6:45 PM Harald Alvestrand <harald@alvestrand.no>
wrote:
> Den 14. juni 2018 19:44, skrev Peter Thatcher:
> <snip>
> >
> > OK, that was a fun brainstorming. The conclusions I would come to at
> > the moment are:
> >
> > 1. Even if we split out the RtpTransport from the
> > RtpSender/RtpReceiver, it seems to make sense to keep the
> > RtpSender/Receiver around for those apps which don't want to do
> > packetization/demuxing on their own.
>
> To my mind, RTPTransport is a multitrack thing (shipping multiple
> tracks), while RTPSender is a single-track thing.
>
Agreed. That makes the connection of many RtpSenders/packetizers to one
RtpTransport tricky using WHATWG streams.
>
> >
> > 2. We need to worry about not just the direction of media flow, but
> > also feedback flow (key frame requests, etc).
>
> Yes. I have looked at the whatwg feedback section several times, and am
> still worried that I don't think I understand it (beyond the simple
> backpressure / buffersize default).
> I'm happy to know that it exists, but I'm not sure how far we can flex it.
>
Backpressure *might* work. But key frame requests? I don't know how.
>
> >
> > 3. A few simple methods to attach objects together might be sufficient
> > to allow apps that don't want to be in the media path not be. WHATWG
> > streams might be as well if we figure out the feedback flow.
>
> I suspect that we could implement the WHATWG stream interface somewhat
> like this (C++ pseudocode):
>
> Promise whateverComponent::pipeTo(otherComponent) {
> if (otherComponent.isOfTypeThatIRecognize) {
> // C++ plumbing, minimal overhead
> sender_function_ = otherComponent.specialReceiverFunction();
> } else {
> sender_function_ =
> JavaScriptLevelFunction(bufferArgumentGoesHere(),
> JavaScriptObjectWrapper(otherComponent.receiver())
> }
> .....
> }
>
> you get the gist - if we know what the fast path is, we can optimize for
> it in the implementation.
>
>
>
>
Received on Thursday, 14 June 2018 19:35:18 UTC