Thank you for the review and approval, Alex!
Best,
Hongchan
On Tue, Feb 10, 2026 at 1:49 PM Alex Russell
<[email protected]> wrote:
Hey Hongchan,
This is helpful and explains why it should be different. LGTM1,
and thanks for your patience.
Best,
Alex
On Monday, February 9, 2026 at 11:50:28 AM UTC-8 Hongchan Choi wrote:
Hello Alex,
Perhaps my explanation on different paradigms between <audio>
(HTMLMediaElement) and Web Audio was not effective:
1. Pull Model: WebAudio uses a pull model. The system's audio
callback demands a buffer of data at a precise interval. If
the application fails to provide it in time, you get an
underrun (a literal gap in the output stream). This is a
real-time performance failure.
2. Push Model: The <audio> element follows a push model
(streaming). When data is missing, the element enters a
waiting state, pauses playback, and fires a waiting event
<https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/waiting_event>.
This is considered 'buffering,' which is an expected behavior
of network-based streaming, not necessarily a failure of the
audio engine itself.
3. Existing events: We already have ways to monitor <audio>
stalls via the waiting, stalled
<https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/stalled_event>,
and playing events to signal the streaming/networking problems.
The another important distinction is the developer's ability
to respond to it:
1. For WebAudio, an underrun is typically a CPU/scheduling
issue where the audio thread cannot keep up with the graph
load/complexity. For the <audio> element, 'stalled/watiing'
status are mostly network-related.
2. This API is very useful for WebAudio apps because it
provides the signal needed for load balancing. If a developer
sees underruns increasing, they can dynamically simplify
their DSP graph, reduce voices, or bypass expensive effects
to restore real-time stability.
3. In contrast, for the <audio> element, the browser
automatically handles the 'lack of audio frames' by pausing
and entering a waiting state. There is no 'internal logic'
for the developer to adjust other than waiting for the
network data to arrive.
Hopefully this answer your question!
Best,
Hongchan
On Monday, February 9, 2026 at 11:15:57 AM UTC-8 Alex Russell
wrote:
I'm a little confused about why we think playback
contexts like <audio> don't have similar issues when
streaming. E.g., I understand that <audio> can point at a
source which isn't fully loaded, which will lead to
underruns and skipping during playback. Shouldn't we
cover that case with a uniform API?
Best,
Alex
On Wednesday, February 4, 2026 at 10:22:39 AM UTC-8
Hongchan Choi wrote:
Thanks for your response, Yoav.
> Can you elaborate a bit more on any risks, if any?
- fhernqvist@ published this detailed self-review
<https://docs.google.com/document/d/1wGv_mr7Lgg2w-6PuKDrcScoa8IvYAOW3PMTFW85O3Gw/edit?tab=t.0>
in 2024.
- There was also a discussion about the covert
channeling
<https://github.com/WICG/audio-context-playout-stats?tab=readme-ov-file#cross-site-covert-channeling>,
but the mitigation was designed/implemented after the
privacy/security team's approval.
> Can you file for signals for both Gecko and WebKit?
https://www.chromium.org/blink/launching-features/wide-review/#standards-positions
Done:
Gekco:
https://github.com/mozilla/standards-positions/issues/1351
WebKit:
https://github.com/WebKit/standards-positions/issues/610
> Any feedback from the OT?
The current partner mentioned that "The metrics
collected from are continuously used for the
experimentation, we would not be able to verify the
quality without them."
Hopefully this answers your question!
Best,
Hongchan
On Tue, Feb 3, 2026 at 8:25 PM Yoav Weiss (@Shopify)
<[email protected]> wrote:
On Monday, February 2, 2026 at 9:38:43 PM UTC+1
Hongchan Choi wrote:
Thanks for reviewing the intent, Alex.
Regarding unified behavior with
RTCAudioSourceStats, I don't believe this API
serves the same goal. WebAudio’s stats are
centered specifically around audio stream
quality, so I am unsure about achieving
unified behavior across these different APIs.
As for getting similar stats from the <audio>
element or WebRTC contexts, both
HTMLAudioElement and WebRTC's audio systems
are "push-based." By design, they should not
experience audio sample dropouts or glitches
in the same way. The WebAudio (pull-based)
playback stats are specifically designed to
catch dropouts so developers can estimate the
user's audio quality and experience.
Hopefully this answers your question!
Best,
Hongchan
On Mon, Feb 2, 2026 at 12:14 PM Alex Russell
<[email protected]> wrote:
Hey Hongchan,
This looks extremely useful!
I'm a little surprised to see that the
TAG didn't ask about alignment with other
APIs in the space, e.g.:
https://developer.mozilla.org/en-US/docs/Web/API/RTCAudioSourceStats
<https://developer.mozilla.org/en-US/docs/Web/API/RTCAudioSourceStats>
Will we get unified behaviour here? Will
it be possible to get similar stats from
an <audio> element or WebRTC contexts, e.g.?
Best,
Alex
On Friday, January 30, 2026 at 7:27:33 AM
UTC-8 Chromestatus wrote:
*Contact emails*
[email protected],
[email protected], [email protected]
*Explainer*
https://github.com/WICG/web_audio_playout
<https://github.com/WICG/web_audio_playout>
*Specification*
https://webaudio.github.io/web-audio-api/#AudioPlaybackStats
<https://webaudio.github.io/web-audio-api/#AudioPlaybackStats>
*Summary*
This feature adds an
AudioContext.playbackStats attribute
which returns an AudioPlaybackStats
object. This object provides audio
playback statistics such as average
latency, minimum/maximum latency,
underrun duration, and underrun
count. This API allows web
applications to monitor audio playout
quality and detect glitches. Note:
This feature was previously tracked
as AudioContext.playoutStats. It has
been renamed to
AudioContext.playbackStats to align
with the final Web Audio API
specification. The old name is
supported as a deprecated alias for
backward compatibility.
*Blink component*
Blink>WebAudio
<https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3EWebAudio%22>
*Web Feature ID*
web-audio
<https://webstatus.dev/features/web-audio>
*Motivation*
There is currently no way to detect
whether WebAudio playout has glitches
(gaps in the played audio, which
typically happens due to
underperformance in the audio
pipeline). There is an existing way
to measure the instantaneous playout
latency using
AudioContext.outputLatency, but no
simple way to measure
average/minimum/maximum latency over
time. With this API, we want to
propose a way to be able to measure
the delay of that audio and the
glitchiness of the audio.
*Initial public proposal*
https://github.com/WICG/proposals/issues/142
<https://github.com/WICG/proposals/issues/142>
*TAG review*
Early TAG review request:
https://github.com/w3ctag/design-reviews/issues/939
<https://github.com/w3ctag/design-reviews/issues/939>
*TAG review status*
Issues addressed
*Origin Trial Name*
Playout Statistics API for WebAudio
*Chromium Trial Name*
AudioContextPlayoutStats
*Origin Trial documentation link*
https://github.com/WICG/web_audio_playout
<https://github.com/WICG/web_audio_playout>
*WebFeature UseCounter name*
kAudioContextPlayoutStats
*Risks*
*Interoperability and Compatibility*
/No information provided/
Can you elaborate a bit more on any risks, if any?
/Gecko/:
Positive
(https://github.com/WebAudio/web-audio-api/pull/2645
<https://github.com/WebAudio/web-audio-api/pull/2645>) The
spec PR was reviewed and approved by
a Mozilla engineer.
/WebKit/: No signal
Can you file for signals for both Gecko and
WebKit?
https://www.chromium.org/blink/launching-features/wide-review/#standards-positions
/Web developers/:
Positive
(https://github.com/WICG/proposals/issues/142#issuecomment-1981012486
<https://github.com/WICG/proposals/issues/142#issuecomment-1981012486>)
/Other signals/:
*WebView application risks*
Does this intent deprecate or change
behavior of existing APIs, such that
it has potentially high risk for
Android WebView-based applications?
None.
*Debuggability*
Can be tested by creating an
AudioContext and evaluating
context.playoutStats in the console.
*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
https://wpt.fyi/results/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-playoutstats.html?label=experimental&label=master&aligned
<https://wpt.fyi/results/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-playoutstats.html?label=experimental&label=master&aligned>
These will be updated if the API
shape changes.
*Flag name on about://flags*
/No information provided/
*Finch feature name*
AudioContextPlayoutStats
*Rollout plan*
Will ship enabled for all users
*Requires code in //chrome?*
False
*Tracking bug*
https://g-issues.chromium.org/issues/475838360
<https://g-issues.chromium.org/issues/475838360>
*Launch bug*
https://launch.corp.google.com/launch/4308993
<https://launch.corp.google.com/launch/4308993>
*Availability expectation*
Feature is available only in Chromium
browsers for the foreseeable future.
*Adoption expectation*
Feature is used by specific
partner(s) to provide functionality
within 12 months of launch in Chrome.
*Adoption plan*
Nothing specific planned.
*Non-OSS dependencies*
Does the feature depend on any code
or APIs outside the Chromium open
source repository and its open-source
dependencies to function?
None.
*Estimated milestones*
Shipping on desktop146 Origin trial
desktop first131 Origin trial desktop
last136 Origin trial extension 1 end
milestone145 Origin trial extension 2
end milestone142 Origin trial
extension 3 end milestone139 DevTrial
on desktop129 Shipping on Android146
Shipping on WebView146
Any feedback from the OT?
*Anticipated spec changes*
Open questions about a feature may be
a source of future web compat or
interop issues. Please list open
issues (e.g. links to known github
issues in the project for the feature
specification) whose resolution may
introduce web compat/interop risk
(e.g., changing to naming or
structure of the API in a
non-backward-compatible way).
None.
*Link to entry on the Chrome Platform
Status*
https://chromestatus.com/feature/5172818344148992?gate=5078819495215104
<https://chromestatus.com/feature/5172818344148992?gate=5078819495215104>
*Links to previous Intent discussions*
Intent to Prototype:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CACazmWW4MYVa_iGjN%3DK4O9B1DE3rt4_2Vkqnq6sKswHFjn6BzQ%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CACazmWW4MYVa_iGjN%3DK4O9B1DE3rt4_2Vkqnq6sKswHFjn6BzQ%40mail.gmail.com>
Intent to Experiment:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CACazmWWV6S6Ba%3Dd%3DgvjhERm1OnPyBMRJx5fbkP%3Df9zb3k%3DrNDA%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CACazmWWV6S6Ba%3Dd%3DgvjhERm1OnPyBMRJx5fbkP%3Df9zb3k%3DrNDA%40mail.gmail.com>
Intent to Extend Experiment 1:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/691455eb.2b0a0220.e30ce.7e1f.GAE%40google.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/691455eb.2b0a0220.e30ce.7e1f.GAE%40google.com>
Intent to Extend Experiment 2:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/686d135c.2b0a0220.3a1521.0081.GAE%40google.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/686d135c.2b0a0220.3a1521.0081.GAE%40google.com>
Intent to Extend Experiment 3:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CACazmWVkWb8DJM_aCRGOFpskBs-7h%3DO_yggKc3YBUkiieEO-UA%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CACazmWVkWb8DJM_aCRGOFpskBs-7h%3DO_yggKc3YBUkiieEO-UA%40mail.gmail.com>
This intent message was generated by
Chrome Platform Status
<https://chromestatus.com>.
--
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 [email protected].
To view this discussion visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAGJqXNs6LMOXKSrQAq6qX3hmrC6ojvkQDHH8QJ336ZUm31gBDw%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAGJqXNs6LMOXKSrQAq6qX3hmrC6ojvkQDHH8QJ336ZUm31gBDw%40mail.gmail.com?utm_medium=email&utm_source=footer>.