// the find
videojs/http-streaming
HLS, DASH, and future HTTP streaming protocols library for video.js
VHS is the HLS/DASH engine bundled inside video.js 7+ — it polyfills adaptive streaming in any browser with Media Source Extensions, since only Safari has native HLS. It's for anyone shipping video.js and needing manifest-driven playback (VOD or live) without reaching for a separate player like hls.js or shaka-player.
It's not a side project — this ships by default in video.js and has years of production traffic behind it, which shows in how much edge-case handling exists (gap skipping, live resync, video underflow recovery, error-reload with loop prevention). The rendition selection is genuinely configurable: you can plug in your own selectPlaylist, or just toggle enableLowInitialPlaylist / useDevicePixelRatio / customPixelRatio and get sane defaults without touching the ABR algorithm. The xhr onRequest/onResponse hook system is a clean escape hatch for auth headers, CDN switching, or telemetry without forking internals. Feature coverage is broad and real: fMP4, AES-128, demuxed/alternate audio, CEA-608/708 to native text tracks, in-manifest WebVTT, DASH content steering.
It's pure JS with no shipped type definitions, so TypeScript consumers are on their own or relying on community @types. The internals are a lot to hold in your head — segment-loader, sync-controller, playlist-controller, playback-watcher all interact, and the project maintains a whole separate doc (a-walk-through-vhs.md) just to explain the architecture, which tells you debugging a real playback bug means reading source, not just the README. The 'Known Issues' section is honest but a little concerning for adoption: unresolved fMP4 edge cases, audio-only renditions getting stuck, and DASH SegmentTimeline without a `t` attribute breaking are documented rather than fixed. The README also still carries a Travis CI badge and a Greenkeeper badge, both long-dead services, which suggests parts of the docs lag behind the actual CI setup (GitHub Actions) even though the code itself is actively pushed.