For development or to get the latest unreleased features:
Build from source (Node.js 22+)
bash
git clone https://github.com/bishaldahal/M3U8-HLS-Player-with-Custom-Controls.git
cd M3U8-HLS-Player-with-Custom-Controls
npm ci
npm run fetch:vendor # pinned, hash-verified player libraries
npm run build # outputs dist/chrome and dist/firefox
# Or download prebuilt zips from releases
# https://github.com/bishaldahal/M3U8-HLS-Player-with-Custom-Controls/releases
chrome
1Navigate to chrome://extensions
2Enable Developer Mode (toggle in top-right)
3Click 'Load unpacked' and select dist/chrome
edge
1Navigate to edge://extensions
2Enable Developer Mode (toggle at bottom)
3Click 'Load unpacked' and select dist/chrome
firefox
1Navigate to about:debugging#/runtime/this-firefox
2Click 'Load Temporary Add-on'
3Select dist/firefox/manifest.json
Built For Everyone
Whether you're streaming, developing, or testing — we've got you covered.
IPTV Users
Watch your favorite IPTV channels with enhanced controls, keyboard shortcuts, and picture-in-picture mode.
Multi-quality supportLive DVRChannel switching
Developers
Test and debug HLS streams during development without complex setup or external tools.
Press ? while the player is focused to toggle the shortcuts panel.
Space / kPlay / Pause
←Seek -10s
→Seek +10s
↑Volume up
↓Volume down
fFullscreen
mMute
pPIP mode
<Speed -0.1
>Speed +0.1
-Speed -0.5
+Speed +0.5
jSeek -5s
lSeek +5s
PExit PIP
,Prev frame
.Next frame
0-9Seek %
HomeStart
EndEnd
?Shortcuts
EscClose
Error States
Blocked Stream (403)
The host only serves the stream to its own site. The error explains why and offers a Site headers button to add a Referer/Origin for that host, or turn on stream detection and open it from the popup.
DRM Key-System Error
Encrypted DASH streams prompt for a Widevine license URL, optional headers and robustness level (Chromium only). You can remember them per host.
Auto-Recovery
Only fatal playback errors show an overlay; the player recovers from transient errors and buffer stalls.
Frequently Asked Questions
Quick answers to common questions about the extension.
Yes, completely free and open source! There are no premium features, no subscriptions, and no hidden costs. You can even contribute to the codebase on GitHub.
No. There is no analytics or tracking. Settings, watch history and any site headers you save stay in your browser's local extension storage. The extension only contacts the streams you open and any DRM license server you configure.
M3U8/HLS (via hls.js) and MPD/DASH (via dash.js), both VOD and live, with adaptive bitrate switching.
Some hosts only serve a stream to requests that look like they came from their own page. Turn on 'Detect streams on pages' (off by default), start the video on the site, then pick it from 'On this page' in the toolbar popup. Or save Referer/Origin headers for that host from Settings or the 'Site headers' button on the player error.
Widevine DASH streams are supported on Chromium browsers. When a key-system error occurs, the player asks for a license URL, optional request headers and robustness level, and can remember them per host. Other DRM schemes and HLS DRM are not supported.
The extension was rebuilt in TypeScript and adds opt-in stream detection, per-site request headers, live buffering while paused, and clearer error messages. Updating asks for the new declarativeNetRequest permission, which is used to send site headers from the player tab only. See the Changelog page for full release notes.
Yes! The extension works great for IPTV streams. Just paste your M3U8 channel URL and enjoy watching with all the advanced controls and keyboard shortcuts.
Yes. Subtitles embedded in the stream are supported, and you can style them (size, color, background, font and edge style) from Settings.
You can open an issue on our GitHub repository. We welcome bug reports, feature requests, and pull requests from the community.
Yes! Press 'p' to enter Picture-in-Picture and watch your stream while browsing other tabs. Press 'Shift+P' to exit.
Still have questions?
Check out our GitHub repository for more documentation and community support.
YouTube-like keyboard shortcuts — Space to pause,
arrow keys for seeking, J/K/L for 10s skip, number keys for position
jumping.
Picture-in-Picture (PIP) — Press P to pop the video
out and watch while browsing other tabs.
Frame-by-frame navigation — Press comma (,) and
period (.) to step through frames when paused.
Adaptive bitrate switching — Manually choose stream
quality or let the player auto-select the best quality for your
connection.
Speed control — Playback speed from 0.25× to 16×
using keyboard shortcuts.
Volume control — Fine-grained volume adjustment
with up/down arrow keys.
Fullscreen — Press F to toggle fullscreen mode.
Mute toggle — Press M to mute or unmute instantly.
Completely free & open source — MIT licensed,
no tracking, no data collection.
Use Cases
IPTV Viewing — Watch IPTV channels directly in your
browser with full keyboard control.
Live Stream Monitoring — Monitor security cameras,
live events, or any HLS live stream.
Video Development & Testing — Test M3U8
playlists and HLS streams during development with frame-level
precision.
Sports Streaming — Watch live sports with adaptive
bitrate for smooth playback on any connection.
Education & Training — Step through
instructional videos frame by frame for detailed study.
Frequently Asked Questions
Is this extension free to use?
Yes, completely free and open source! There are no premium features,
no subscriptions, and no hidden costs. You can even contribute to the
codebase on GitHub.
Does the extension collect any user data?
No. We don't collect, store, or transmit any user data. The extension
runs entirely in your browser and doesn't communicate with any
external servers except to load the streams you provide.
What video formats are supported?
The extension supports M3U8 playlists and HLS (HTTP Live Streaming)
protocol. This includes both VOD (Video on Demand) and live streams
with adaptive bitrate switching.
Can I use this for IPTV?
Yes! The extension works great for IPTV streams. Just paste your M3U8
channel URL and enjoy watching with all the advanced controls and
keyboard shortcuts.
Is Picture-in-Picture supported?
Yes! Press 'P' to enable Picture-in-Picture mode and watch your stream
while browsing other tabs. Press 'Shift+P' to exit PIP mode.
Supported Browsers
Google Chrome, Microsoft Edge, Mozilla Firefox, Brave, Opera, and
Vivaldi. Works on any Chromium-based or Firefox-based browser.