- 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 Youenn: 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). Harald: Question about transferring chunks? A: Chunks not transferable. Issue handled at the C++ layer. Jan-Ivar: 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. Tim: 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. Bernard: Q: How to handle congestion? A (Harald): The demo doesn't handle congestion. END OF SEGMENT 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. END OF SEGMENT 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 transforms. 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. Stream transferability is nowhere, according to the presenter. Piping: Proposal: Make a full comparison and wait for that comparison to make a proposal. 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) Jan-Ivar: 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. END OF SEGMENT 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 information. END OF SEGMENT 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. END OF SEGMENT 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 progress? 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. A: END OF SEGMENT 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. END OF SEGMENT 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. END OF SEGMENT Summary: Bernard (Microsoft) Callbacks vs Stream. Decided to have a concrete presentation for the callback API in the next meeting. 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