| 105 | // event (actual playback started) or on `pause`/`error` (state ended). |
| 106 | const playRequested = new WeakSet<HTMLMediaElement>(); |
| 107 | function markPlayRequested(el: HTMLMediaElement): void { |
| 108 | if (playRequested.has(el)) return; |
| 109 | playRequested.add(el); |
| 110 | const clear = () => playRequested.delete(el); |
| 111 | el.addEventListener("playing", clear, { once: true }); |
| 112 | el.addEventListener("pause", clear, { once: true }); |
| 113 | el.addEventListener("error", clear, { once: true }); |
| 114 | } |
| 115 | |
| 116 | // HTMLMediaElement.NETWORK_NO_SOURCE — no usable source (404 / unsupported). |
| 117 | const MEDIA_NETWORK_NO_SOURCE = 3; |