Discussed at today's API OWNERs. LGTM1 on the condition that we make sure there's a flag for rollout so that this can be kill-switched if the compat issues turn out to be problematic for other sites.
Best, Alex On Tuesday, April 1, 2025 at 12:29:50 AM UTC-7 Henrik Boström wrote: > We can discuss lifetimes of other stats objects, but that seems largely > tangential to this I2S thread. Good to hear you are supportive of delating > the outbound RTP stats objects until "stable" which is half of this I2S. > The other half being delaying inbound. > > But I think browser alignment here is looking promising: > - Firefox is positive to this change > <https://github.com/mozilla/standards-positions/issues/1202>. > - I asked Google Meet developer about this change and they said "it really > shouldn't matter". > - Web developers have already had to deal with inbound missing until > packet reception due to Firefox shipping this years ago. > On Monday, March 31, 2025 at 10:12:25 PM UTC+2 philipp...@googlemail.com > wrote: > >> Am Mo., 31. März 2025 um 01:05 Uhr schrieb Henrik Boström < >> h...@chromium.org>: >> >>> That's correct, but getStats() does not really contain any useful >>> information during the period of time where we want to not expose it to the >>> web anymore. All counters in the objects are 0s because they haven't "been >>> used yet". >> >> >> I filed >> https://github.com/w3c/webrtc-stats/issues/804 >> because why are you applying the "no packets no stats" rule to RTP but >> not the underlying transport? >> (which notably is implemented and exposed by Chromium and Safari, Firefox >> still lacks an implementation) >> And since I am in such a joyful mood I also filed >> https://github.com/w3c/webrtc-stats/issues/805 >> which shows datachannel stats also violate the "no packets no stats" rule >> (in Firefox too!) >> May I suggest the WG does an evaluation of whether it would be easier to >> keep the current behavior and make RTP consistent with the rest of the >> specification and implementations? >> >> Not exposing the stats before negotiation happened is generally something >> that I consider a good idea to reduce create-then-delete-churn but 50/50 on >> whether it flies. >> >> >>> So the delta is about whether you have access to the SSRC value or not. >>> The use case that is being affected by this change is "I depend on SSRCs >>> being signalled in the SDP but I don't want to parse the SDP for SSRC >>> information and I need to know them before the first packet is received". >>> So it's a dependency on the UA implementing an RFC that is not mandated to >>> implement, and a use case where the app can work around it by parsing the >>> SSRC values themselves. >>> >> >>> Use cases that don't depend on this RFC are largely unaffected - even if >>> SSRCs are not exposed in the SDP we will continue to expose send-side SSRCs >>> in getStats early, and receive-side SSRCs were never exposed early in this >>> case to begin with so that's a NO-OP change. >>> >> >> I believe you are reopening the 2017 >> https://github.com/w3c/webrtc-pc/issues/1174, in particular the 2019 >> discussion here >> <https://github.com/w3c/webrtc-pc/issues/1174#event-2171339414>. >> but you do it on getStats() instead of doing it on getParameters()? >> >> On Monday, March 31, 2025 at 6:13:35 AM UTC+2 Yoav Weiss wrote: >>> >>>> Just to clarify - currently both Chromium, WebKit and (most?) >>>> deployments in the wild match one behavior and the spec calls for another? >>>> >>>> On Friday, March 28, 2025 at 6:20:28 PM UTC+1 philipp...@googlemail.com >>>> wrote: >>>> >>>>> Am Fr., 28. März 2025 um 08:31 Uhr schrieb Harald Alvestrand < >>>>> h...@google.com>: >>>>> >>>>>> WRT "no SSRC signalling": Of course it's allowed to include RFC 5576 >>>>>> style signalling if you want to. >>>>>> But RFC 8829 (JSEP) has only this reference to 5576: >>>>>> >>>>>> >>>>>> - Any "a=ssrc" attributes MUST be parsed as specified in [RFC5576 >>>>>> <https://datatracker.ietf.org/doc/html/rfc5576>], Section 4.1 >>>>>> <https://www.rfc-editor.org/rfc/rfc5576#section-4.1>, and their >>>>>> values stored.¶ >>>>>> <https://datatracker.ietf.org/doc/html/rfc8829#section-5.8.2-8.6> >>>>>> >>>>>> >>>>>> It never says to generate an a=ssrc attribute. >>>>>> >>>>> >>>>> But if it is parsed and stored it can be used for stats? >>>>> As the fiddle above demonstrates this gets causes the creation of the >>>>> object in the underlying C++ code. >>>>> >>>>> >>>>>> This means that a) we can't depend on JSEP-compatible browsers to >>>>>> generate SSRC attributes, and b) we can't write Web Platform tests that >>>>>> check for the result of SSRC attributes, since none are specified. >>>>>> >>>>> >>>>> Yes and we have >>>>> https://wpt.fyi/results/webrtc/simplecall-no-ssrcs.https.html?label=experimental&label=master&aligned >>>>> >>>>> which is all green. >>>>> >>>>> >>>>>> The various WGs have discussed SSRC signaling many times, and always >>>>>> came down on rejecting it. I even had an internet-draft >>>>>> (draft-alvestrand-mmusic-simulcast-ssrc-01) specifying a way to use it >>>>>> in >>>>>> order to increase backwards compatibility, but the WGs declined to >>>>>> pursue >>>>>> that effort, and I let the draft expire. >>>>>> Hope that this clarifies a bit. >>>>>> >>>>>> Harald >>>>>> >>>>>> >>>>>> >>>>>> On Fri, Mar 28, 2025 at 4:16 PM Henrik Boström <h...@chromium.org> >>>>>> wrote: >>>>>> >>>>>>> Hello Philipp. Philipp is the "vocal member of our community" that I >>>>>>> referenced earlier as you may have guessed. >>>>>>> >>>>>>> Regarding "for what gain?", I think it is good that all browsers >>>>>>> align on behavior to avoid edge case surprises. That is good in and of >>>>>>> itself. Considering the latest spec changes incorporate the use case of >>>>>>> obtaining SSRCs prior to sending, I fail to see any use case that is >>>>>>> hurt >>>>>>> my making the browsers align. >>>>>>> >>>>>> >>>>> This changes Chromium (and by virtue of being a pass-through libwebrtc >>>>> user Safari) to what the WG decided to restrict. Or tried to restrict but >>>>> the issue popped up again and again and again. >>>>> This is a web-facing change. >>>>> >>>>> >>>>>> Regarding code links that filtering is happening in Firefox: when an >>>>>>> object is created in these discussions refers to the point of time that >>>>>>> it >>>>>>> becomes observable in JavaScript for the first time, so whether Firefox >>>>>>> implements this via filtering on top of the libwebrtc or through other >>>>>>> means is an implementation detail that is not observable and is thus >>>>>>> irrelevant to our discussions. >>>>>>> >>>>>>> Harald may have more information about the rationale for why we >>>>>>> don't want to signal SSRCs in the SDP, but it would be good to decouple >>>>>>> that question from the question of when RTP stats objects should be >>>>>>> created >>>>>>> considering they contain 0 useful information during the period of time >>>>>>> that we want them not to be exposed to JavaScript. >>>>>>> >>>>>> >>>>> The information they contain is the mapping from mid to ssrc. Which >>>>> you argued for in https://issues.chromium.org/issues/404853839 for >>>>> outbound-rtp. >>>>> https://jsfiddle.net/fippo/v6jf2cs5/ (outbound-rtp) >>>>> contains the same information as >>>>> https://jsfiddle.net/fippo/vcmnx6wy/ (inbound-rtp) >>>>> We agree that they should not be exposed prior to full negotiation. >>>>> But knowing that you are supposed to receive packets for a SSRC and >>>>> your infrequent polling of getStats shows no change in packetsReceived >>>>> for >>>>> five seconds is more integrated into how getStats is typically used than >>>>> developers keeping track of which mids were negotiated in the SDP (which >>>>> is >>>>> available through getTransceivers()) and then figuring out for which >>>>> receiving mids inbound-rtp stats are missing. >>>>> >>>>> >>>>> On Friday, March 28, 2025 at 4:03:11 PM UTC+1 >>>>>>> philipp...@googlemail.com wrote: >>>>>>> >>>>>>>> >>>>>>>> 4 >>>>>>>> Am Fr., 28. März 2025 um 05:47 Uhr schrieb Henrik Boström < >>>>>>>> h...@chromium.org>: >>>>>>>> >>>>>>>>> Contact emails >>>>>>>>> h...@chromium.org, h...@chromium.org >>>>>>>>> >>>>>>>>> ExplainerNone >>>>>>>>> >>>>>>>>> Specification >>>>>>>>> https://w3c.github.io/webrtc-stats/#the-rtp-statistics-hierarchy >>>>>>>>> >>>>>>>>> Summary >>>>>>>>> >>>>>>>>> RTP stats objects, of type "outbound-rtp" or "inbound-rtp" in this >>>>>>>>> case, represents a WebRTC stream. The identifier of this stream is >>>>>>>>> the SSRC >>>>>>>>> (a number). We should collect stats for streams that "exist", but >>>>>>>>> implementations and spec has disagreed on when the stream should >>>>>>>>> exist: if >>>>>>>>> the SSRC information is conveyed via SDP, does the stream still exist >>>>>>>>> before packets are sent or received? >>>>>>>>> >>>>>>>> >>>>>>>> We have been mulling over this for a while: >>>>>>>> https://github.com/w3c/webrtc-stats/issues/619 >>>>>>>> https://github.com/w3c/webrtc-stats/issues/667 >>>>>>>> https://github.com/w3c/webrtc-stats/issues/781 >>>>>>>> https://github.com/w3c/webrtc-stats/issues/797 >>>>>>>> >>>>>>>> The fact that SSRCs can be signalled in SDP is only done for >>>>>>>>> backwards compatibility reasons >>>>>>>>> >>>>>>>> >>>>>>>> Source for this? RFC 5576 is not deprecated and I keep on looking >>>>>>>> for the rationale that backs Chromiums decision to not include ssrcs >>>>>>>> line >>>>>>>> in the SDP for simulcast (I could not find a source for that as >>>>>>>> presented >>>>>>>> in https://github.com/w3c/webrtc-pc/issues/1174 either) >>>>>>>> For context: Chromium continues to put these lines into the SDP. >>>>>>>> For "backward compat" SDP offers even contain ssrc lines with msid >>>>>>>> related >>>>>>>> to the long-unshipped "plan b". >>>>>>>> >>>>>>>> , yet Chromium-based browsers currently create the "inbound-rtp" >>>>>>>>> stats object if the SSRC is signalled in the SDP, which means you can >>>>>>>>> end >>>>>>>>> up with subtly different behavior depending on which endpoint you are >>>>>>>>> setting up a WebRTC call with (if they include SSRCs or not). >>>>>>>>> >>>>>>>> >>>>>>>> Safari behaves the same as Chromium (which is not surprising): >>>>>>>> >>>>>>>> https://wpt.fyi/results/webrtc-stats/rtp-stats-creation.html?label=experimental&label=master&aligned >>>>>>>> >>>>>>>> What the spec says to do here, which is what Firefox has already >>>>>>>>> implemented, is to delay the creation of the "inbound-rtp" stats >>>>>>>>> object >>>>>>>>> until the first packet is received. This is future-proof, because the >>>>>>>>> packet contains the SSRC information and will always work, while the >>>>>>>>> current behavior can result in "early" creation depending on SSRC >>>>>>>>> signalling. >>>>>>>>> >>>>>>>> >>>>>>>> Firefox notably decided to signal SSRCs even in cases where >>>>>>>> Chromium does not. >>>>>>>> >>>>>>>> >>>>>>>>> - We want Chromium to align with Firefox and spec behavior here. >>>>>>>>> >>>>>>>> >>>>>>>> For what gain? >>>>>>>> >>>>>>>> Firefox decided to filter the result of the underlying >>>>>>>> implementation: >>>>>>>> >>>>>>>> https://searchfox.org/mozilla-central/source/dom/media/webrtc/jsapi/RTCRtpReceiver.cpp#356 >>>>>>>> It would be trivial for Firefox to remove that block (for both >>>>>>>> media kinds) and increase their compat with what web(rtc) developers >>>>>>>> expect. >>>>>>>> >>>>>>>> Notably anything based on libWebRTC will not create a stats report >>>>>>>> until the SSRC is known (which is reasonable): >>>>>>>> https://jsfiddle.net/fippo/vcmnx6wy/ >>>>>>>> The SDP is a source of that information that information is used in >>>>>>>> other parts of the stack already (e.g. to associate the packet with a >>>>>>>> receiver object) >>>>>>>> >>>>>>>> >>>>>>>>> Next up is when to create "outbound-rtp" stats objects. In this >>>>>>>>> case the SSRCs are configured by the local sender and are known >>>>>>>>> whether or >>>>>>>>> not the SSRC information is put in the SDP, so creating them "early" >>>>>>>>> is >>>>>>>>> also future-proof. In this case, we want the stats objects to be >>>>>>>>> created >>>>>>>>> BEFORE packets are sent, because they are needed to know which >>>>>>>>> encoding has >>>>>>>>> which SSRC, see slides >>>>>>>>> <https://docs.google.com/presentation/d/1XOyWSPufsvDpK18GXZvq_j1rF3gs34QvPlOWWyB0CjU/edit?slide=id.g3426753bdd0_1_17#slide=id.g3426753bdd0_1_17> >>>>>>>>> for >>>>>>>>> nerdy details. >>>>>>>>> >>>>>>>> >>>>>>>> Hold a bit here. The original rationale for >>>>>>>> https://github.com/w3c/webrtc-pc/issues/1174 was not not create a >>>>>>>> conflict between ssrc and rid. >>>>>>>> You are now exposing that conflict on the sender? (I never bought >>>>>>>> that argument) >>>>>>>> >>>>>>>> The spec was recently updated to reflect that "outbound-rtp" stats >>>>>>>>> objects should be created before packets are sent, but not until the >>>>>>>>> SDP >>>>>>>>> negotiation has completed. >>>>>>>>> - Chromium is slightly too early here, creating them before O/A >>>>>>>>> has completed, but is almost spec-compliant. >>>>>>>>> - Firefox creates them too late (after first packet is sent which >>>>>>>>> is what the spec previously said). They will also need to update >>>>>>>>> their >>>>>>>>> behavior. >>>>>>>>> >>>>>>>> >>>>>>>> Not quite, Firefox intentionally filters the libWebRTC result here: >>>>>>>> >>>>>>>> https://searchfox.org/mozilla-central/source/dom/media/webrtc/jsapi/RTCRtpSender.cpp#347 >>>>>>>> >>>>>>>> >>>>>>>>> Blink component >>>>>>>>> Blink>WebRTC>PeerConnection >>>>>>>>> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3EWebRTC%3EPeerConnection%22> >>>>>>>>> >>>>>>>>> TAG review >>>>>>>>> N/A >>>>>>>>> >>>>>>>>> Risks >>>>>>>>> >>>>>>>>> Interoperability and Compatibility >>>>>>>>> >>>>>>>>> We are trying to reduce risk of interop by having browsers align. >>>>>>>>> There is a small risk of backwards-compat when the lifetime logic is >>>>>>>>> update, however considering web apps are already dealing with >>>>>>>>> Chrome's "too >>>>>>>>> early" logic and Firefox's "too late" logic, it seems that web apps >>>>>>>>> should >>>>>>>>> be well prepared for updating them to being created at a point in >>>>>>>>> time that >>>>>>>>> is in-between these two extremes. >>>>>>>>> >>>>>>>>> *Gecko*: >>>>>>>>> https://github.com/mozilla/standards-positions/issues/1202 >>>>>>>>> *WebKit*: https://github.com/WebKit/standards-positions/issues/478 >>>>>>>>> >>>>>>>>> *Web developers*: No signals, except for one vocal member of our >>>>>>>>> community who would prefer to see everyone align on Chrome's current >>>>>>>>> behavior, but we are unlikely to get consensus on that. >>>>>>>>> >>>>>>>> >>>>>>>> Oh, you are asking me to ask around? Shall do! >>>>>>>> >>>>>>>> I'll continue to question the WGs decision making but enjoying the >>>>>>>> break I decided to take a year ago. >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> Will this feature be supported on all six Blink platforms >>>>>>>>> (Windows, Mac, Linux, ChromeOS, Android, and Android WebView)? >>>>>>>>> Yes >>>>>>>>> >>>>>>>>> Is this feature fully tested by web-platform-tests >>>>>>>>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md> >>>>>>>>> ? >>>>>>>>> Yes this is fully testable here: >>>>>>>>> https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/external/wpt/webrtc/rtp-stats-lifetime.https.html >>>>>>>>> >>>>>>>>> Anticipated spec changes >>>>>>>>> None >>>>>>>>> >>>>>>>>> Link to entry on the Chrome Platform Status >>>>>>>>> >>>>>>>>> https://chromestatus.com/feature/4580748730040320?gate=5113159150731264 >>>>>>>>> >>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "blink-dev" group. >>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>> send an email to blink-dev+unsubscr...@chromium.org. >>>>>>>>> To view this discussion visit >>>>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/c8b53bd3-6fed-466e-be5d-d53bc31c8dafn%40chromium.org >>>>>>>>> >>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/c8b53bd3-6fed-466e-be5d-d53bc31c8dafn%40chromium.org?utm_medium=email&utm_source=footer> >>>>>>>>> . >>>>>>>>> >>>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "blink-dev" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to blink-dev+unsubscr...@chromium.org. >>>>>>> To view this discussion visit >>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/3e542d12-7e1b-45e4-9129-bace5b1b9840n%40chromium.org >>>>>>> >>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/3e542d12-7e1b-45e4-9129-bace5b1b9840n%40chromium.org?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscr...@chromium.org. To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/a7146450-2c5d-45f7-b62f-040f7c4921e3n%40chromium.org.