When playing a live audio stream, like web radio, through <audio> or Audio(), the pause event can fire in (at least) three ways:
- user clicks on the pause button (with
<audio controls>) - user clicks the browsers global audio controls
- iOS: Control Center
- Android: browser's notification drawer (at least Chrome, Opera, Firefox)
- Desktop: Media Session API controls, but uninitialized, without explicit
setActionHandler(might be hidden behind a flag as of now)
- a buffer underrun caused by various network conditions
Is it possible to distinguish between 1/2 and 3?
- Ideally, there would be an event property like
isTrusted, which I am missing - I have tried to guess, looking esp. at
readyStateandnetworkState, but both are very inconclusive, especially across browsers (e.g. the interpretation/semantics ofHAVE_FUTURE_DATAvsHAVE_ENOUGH_DATA) - I have shied away from making a "decaying state machine", juggling other events. A buffer underrun is often preceded by
stalledevents, and sometimes followed byendedevents. A cross-browser implementation seems crazy complex and the danger of false positives very high.
Am I out of luck until Media Session lands everywhere?
Note: this question looks like a solution, but unfortunately isn't -- browsers handle live streams' "ends" differently and inconsistently.