diff options
Diffstat (limited to 'src/hls-player.js')
| -rw-r--r-- | src/hls-player.js | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/hls-player.js b/src/hls-player.js new file mode 100644 index 0000000..d0878e2 --- /dev/null +++ b/src/hls-player.js @@ -0,0 +1,17 @@ +// HLS where the browser has none of its own (Firefox): hls.js feeds the +// <video> through Media Source. Chrome and Safari play the playlist as a +// plain src, so this file is fetched only when needed. The single-file +// build replaces it with a stub (attachHls → null): no stream there. +export async function attachHls(video, src) { + const { default: Hls } = await import('hls.js'); + if (!Hls.isSupported()) return null; + const hls = new Hls({ lowLatencyMode: true, backBufferLength: 30 }); + hls.loadSource(src); + hls.attachMedia(video); + hls.on(Hls.Events.ERROR, (_, d) => { + if (!d.fatal) return; + if (d.type === Hls.ErrorTypes.MEDIA_ERROR) { hls.recoverMediaError(); return; } + video.dispatchEvent(new Event('hlsfatal')); + }); + return hls; +} |
