W3C home > Mailing lists > Public > public-webrtc@w3.org > June 2021

Re: Draft notes from today's meeting

From: Harald Alvestrand <harald@alvestrand.no>
Date: Mon, 28 Jun 2021 10:50:47 +0200
To: public-webrtc@w3.org
Message-ID: <fd412cf7-e102-9c83-e979-63ff0ffdc81b@alvestrand.no>
Since the google.com domain doesn't permit sharing to "everyone", here's 
a copy of the minutes.

On 6/22/21 10:25 PM, Bernard Aboba wrote:
> Thank you to Guido for taking notes at today's meeting:
> https://docs.google.com/document/d/1y2LEGdGxZqpKfACjVlHzaiI5e38DZRM0T8Odnftcl0I/ 
> <https://docs.google.com/document/d/1y2LEGdGxZqpKfACjVlHzaiI5e38DZRM0T8Odnftcl0I/>
> Please send comments/additions/deletions to me.


*Notes from WebRTC Meeting. 2021-06-22.*


Dan Sanders (Google)presents why WebCodecs decided not to use streams 
and why VideoTrackReader was removed in favor of mediacapture-transform.


    The streams control/states is not a good fit for codecs state machines.


    Required knowledge about lots of minor details of streams


Any other benefits or downsides apart from optimized transferring?

A: Clean model for transferring. Buffering.

More boilerplate not seen as a blocker (Youenn's wording).


Question about transferring chunks?

A: Chunks not transferable. Issue handled at the C++ layer.


Fetch, WebTransports as other examples of streams. Is it possible to 
polyfill streams on top of WebCodecs?

A: WebCodecs uses streams for ImageDecoder, good integration with Fetch.

A: There are use cases where streams can work well for WebCodecs, where 
a subset of the functionality is used. A Streams wrapper would work well 
in these cases.

Examples that are not good: seeking state transitions are not a good 
match for streams.

Key frames OK with streams.


Two things trying to consume the same stream. Is clone a problem?

A: Implementation does not clone. Tee() can lead to surprises.

Harald reports he wrote an adapter.


Q: How to handle congestion?

A (Harald): The demo doesn't handle congestion.


Harald (Google): Streams or No Streams?

Needs: Efficient media processing, minimum disruption of existing APIs, 
processing off-main thread.

For video, we already had canvas. It worked, but it's a bad idea.

Audio and video are inherently sequenced. In WebRTC timing is carried in 
stamps, not system clock. No need to sync with system clock except to 
play out at the same time they arrive.

The MediaStreamTrack API is strictly a control platform. It does not 
directly interact with the media, but directs how to treat it.

Streams provide good properties.

Not tied to the system clock.

Existing feature.

Tee is a footgun, but a known one.

Non-media events: we don't have a good solution at the moment.

Proposal: Don't solve the problem in the first iteration.

Proposal: Generate stream from track and generate track from stream. 
Stop there, get feedback from the field and then move to control. Decide 
that building on streams is a good idea.


Youenn (Apple):  VIEW OF STREAMS

Backpressure: Mostly unused by existing sources (e.g., microphones, 
cameras, canvas, PC). Maybe some future sources would use it. 
Backpressure might be useful.

Buffering: Streams are good at buffering. Potential footgun for video 
processing. For example, camera capturers that have a buffer pool. Hard 
to know how much is buffered in complex cases with multiple streams and 

It should be left to the application, or be very visible.

Callback-based would not do buffering.

Locking: People may not be familiar with streams. Locking is a mismatch 
with tracks (according to the presenter) which can have multiple sinks.

Tee does not match track cloning. It's a footgun.

There's boilerplate.

Transferability: Streams are transferable.  There is rough consensus on 
making tracks transferable.  It's better to transfer the track than the 

Stream transferability is nowhere, according to the presenter.


Proposal: Make a full comparison and wait for that comparison to make a 

Q: Jan-Ivar: Transferring tracks to workers should be better. He agrees 
with Youennf on this.

Tee is evolving. You can have streams without buffering.  In streams by 
default there is no buffering.

Streams is a good pattern for some things, like promises for backpressure.

MSTP is a platform object, so there is no inherent reason why buffering 
should be a problem.

Jan-Ivar claims that it's pretty obvious if streams are buffering or 
not. High watermark allows you to control that.

Harald: transferring a control surface shouldn't be necessary to 
transfer media for processing.

Buffering is an issue.

Adam Rice:

Streams provide ergonomic benefits. You can write more than you can read 
without losing data, but in some cases such as tracks and WebTransport 
you want to drop old data and keep fresh data. WebTransport uses a 
buffer separate from streams with max age, you always get fresh data.

If you design APIs so that patterns that make sense you avoid the footguns.

A: Wasn't aware of buffering zero, but will look into it. (Note by 
notetaker: it's what MSTP does)


Streams provide a pattern for ensuring that only one thing is processed 
at a time.

Plain callbacks if they don't have promises they may explode the stack. 
Backpressure is good to avoid this.

A: I agree with backpressure being useful. The proposal will deal with that.


There is a poll to get a sense of the room, not a vote, so not a signal 
for consensus, and it might be skewed.

Decision: Not call for a decision.

4 in favor of streams, 5 in favor of callbacks, 4 in favor of need more 


Jan-Ivar (Mozilla): Safer integrated Web presentations.

Reuse site isolation/opt-in header for getViewportMedia in 
getDisplayMedia for preferential treatment. Freeze if there is navigation.

Isolated browser as a new displaySurface. Put warnings when not isolated.

Elad: Proposes to rephrase such that "preferential treatment" is not

A: Agree.

Elad: Freeze might be bad for the user.

  A: The idea is to guarantee that the guarantee is kept.

Youenn: Echo's Elad's idea. Note: Couldn't follow the rest.

A: Rhetorical device for introducing the concept.

Harald: Breaking compatibility with existing behavior based on target 
page properties is bad, bad, bad. If capture asks for safety it's OK to 
modify behavior. If capture doesn't have opinions on safety, it 
shouldn't . Looks like a good idea if a new 
option/method/flag/constraint to signal that you want safety.

Henrik Böstrom: This sounds like something the browser should decide.

Elad: I've proposed a pauseOnNavigation constraint.

A: There have been lots of proposals to try to solve this problem.

The idea is to move in the direction of favoring safer capture of pages 
that have opted-in in being captured.

Harald: There is interest, but without breaking existing behavior.

A: There is no existing behavior.


Screen Capture slide controls

Encourage the WG to standardize a baseline for web presentation controls.

Proposal: Slides controller that allows defining presentation controls, 
and some events to communicate UI events for the controls.

API is secure context, throttled, and requires site isolation.

Youenn: What to do to answer these questions. How do you suggest we make 

A: Submit to the WG for consideration.

Harald: It's out of charter. There's another WG working on this. We have 
no obligation to do something outside our charter. So, let's not do it. 
Anything outside the capture is out of charter.

A: This is in the charter. Web presentations.

Elad: Sounds like an interesting solution. Looks very narrow, just 
next/prev slide, but this is not an argument against capture handle.



Jan-Ivar (Mozilla): Capture of an iframe.

Proposal: Only allow capture of self iframe and have a frame to transfer 
its track to another place. The only options are SELF, TAB.

Elad: Also allow NODE/FRAME to capture a specific iframe in the tab.

Youenn: Why do you not like NODE/FRAME? and what about the default?

A: Frame ID, puts us back to IDs. Tracks are transferable.

Youenn: Don't see a big difference between iframe and just SELF 
implementation wise.

Don't see an issue with capturing a frame.

A: Not a good answer at the moment.


Elad (Google): Conditional focus.

Let the application decide if focus should switch to a captured tab.

Time-limited focus() API to signal focusing to the captured tab or not.

Tim: Messing with focus without the user being involved is a bad idea.

A: We are already doing it.

Tim: It should be a decision of the user (e.g., in the picker).

Youenn: I share Tim's concerns. Once the track is available it's too late.

Maybe provide some hints. Or have a way to influence the focus decision.

Jan-Ivar: There are some security concerns. Flashbacks to web pages that 
open browsers.

Don't think the application knows best what to do.

The use case is presentation, but the tool is a blowtorch.

A: Not clear how the UA knows, or how to produce a sensible UI where a 
checkbox changes depending on what is selected.

Harald: I think this solves a real problem.

Proposal: Continue discussion on github.


Summary: Bernard (Microsoft)

Callbacks vs Stream.

Decided to have a concrete presentation for the callback API in the next 

It would be good to have it before the meeting.

Harald: Maybe it's not either or.

Youenn: Maybe both can be merged.

Tim: neither of them are perfect. Maybe we'll end up with some compromise.

Jan-Ivar: Other things need to be solved apart from the surface. For 
example, main-thread exposure.  We need to continue discussing it.

Received on Monday, 28 June 2021 08:51:08 UTC

This archive was generated by hypermail 2.4.0 : Monday, 28 June 2021 08:51:10 UTC