Frequently Asked Questions
Find answers to the most common questions about M3U8 files, HLS streaming, and using our free online player.
General Questions
What is an M3U8 file?
An M3U8 file is a UTF-8 encoded playlist file used by the HLS (HTTP Live Streaming) protocol developed by Apple. It contains a list of video segment URLs (.ts files) and metadata such as bitrate, resolution, and encryption information.
The player reads this playlist to stream video in small chunks rather than downloading a single large file, enabling adaptive bitrate streaming. M3U8 files are plain text and can be opened in any text editor to inspect the stream structure, variant playlists, and segment URLs.
How do I play an M3U8 stream?
Simply paste your M3U8 URL into the input field on the player page and click Play. You can also:
- Drag and drop a .m3u8 file onto the player page.
- Use a URL parameter:
https://m3u8.linkvideo.org/en/?src=YOUR_M3U8_URL - For local files: Drag the .m3u8 file directly onto the video player area.
The player supports both master playlists (multi-bitrate) and media playlists (single bitrate).
Is the M3U8 Player free?
Yes, the M3U8 Player is completely free to use with no hidden costs. There are no subscriptions, no paid tiers, and no usage limits. You can play unlimited M3U8/HLS streams and MP4 videos at no cost.
The player is supported by minimal, non-intrusive analytics. We do not sell user data, and your video URLs remain private. See our Privacy Policy for details.
Does it work on mobile devices?
Yes! The M3U8 Player works on iOS Safari, Android Chrome, and most modern mobile browsers.
- iOS Safari: Native HLS support since iOS 3.0, with Picture-in-Picture (PiP) and AirPlay support.
- Android Chrome: Plays M3U8 streams via the Video.js HLS decoder built into the player.
- PWA support: Install the player as a home screen app for a native-like experience.
See our Mobile Playback Guide for tips on full-screen mode, clipboard paste, and more.
Technical Questions
Why am I getting a CORS error?
A CORS (Cross-Origin Resource Sharing) error occurs when the video server does not include the Access-Control-Allow-Origin HTTP header. Browsers block cross-origin requests as a security measure.
Quick fixes by server type:
- Nginx:
add_header Access-Control-Allow-Origin *; - Apache:
Header set Access-Control-Allow-Origin "*"in .htaccess - Cloudflare/CDN: Enable CORS in the dashboard or use a Transform Rule.
- Node.js/Express: Use the
corsmiddleware package.
For complete step-by-step solutions, see our Troubleshooting Guide.
What video formats are supported?
Our player primarily supports HLS streaming (.m3u8 playlists with .ts or .m4s segments). It also supports direct MP4, WebM, and Ogg video playback.
Codec compatibility by browser:
- H.264/AAC: Universal — works in Chrome, Firefox, Safari, Edge.
- HEVC/H.265: Safari and Edge only.
- VP8/VP9: Chrome and Firefox.
For the widest compatibility, encode your streams in H.264 video with AAC audio.
Is my video URL private and secure?
Yes. Your video URLs are stored only in your browser's localStorage and are never transmitted to our servers. The M3U8 Player fetches video streams directly from the source server to your browser via the HLS protocol.
We do not proxy, log, or collect your video URLs. Playback history is stored locally and can be cleared at any time using the Clear button. For maximum privacy, you can use the player in incognito/private browsing mode.
Can I embed the player on my website?
Yes! Click the Embed button on the player page to generate an iframe code snippet. Example:
<iframe src="https://m3u8.linkvideo.org/en/?src=YOUR_M3U8_URL" width="640" height="360" allowfullscreen></iframe>
You can customize the width, height, and add the autoplay parameter. The embedded player supports all features including adaptive bitrate, AES-128 decryption, and subtitle tracks. See the player page for the Embed button.
What is Adaptive Bitrate (ABR) streaming?
Adaptive Bitrate (ABR) streaming automatically adjusts video quality based on your internet speed and device capabilities. The M3U8 master playlist lists multiple quality variants (e.g., 360p, 720p, 1080p).
The player monitors your network conditions in real-time and seamlessly switches between quality levels to prevent buffering. When bandwidth drops, it switches to a lower bitrate; when conditions improve, it upgrades to a higher resolution. This happens automatically without user intervention.
Learn more about how ABR works in our About M3U8 & HLS guide.
Playback Issues
Why is my M3U8 stream buffering or stuttering?
Buffering can be caused by several factors:
- Slow source server: The server hosting your .ts files may have limited bandwidth. Consider using a CDN like Cloudflare or BunnyCDN.
- High bitrate, single quality: If your master playlist only includes one high-quality variant, the player cannot downgrade. Ensure your stream has multiple quality levels (360p, 720p, 1080p).
- Network congestion: Test on a different network or use a wired connection to isolate the issue.
- Expired segment URLs: Some streams use time-limited token URLs that expire, causing segment fetch failures.
- Geographic distance: If the server is far from your location, latency increases. Use a CDN with global edge nodes.
For more troubleshooting tips, see our Troubleshooting Guide.
Why does the player show "format not supported"?
The "format not supported" error usually means one of the following:
- Invalid M3U8 URL: Verify the URL returns a proper response with
#EXTM3Uheader. Open the URL in a new tab to check. - Unsupported codec: Your browser may not support the video codec. H.264/AAC is the safest choice for cross-browser compatibility.
- Relative segment URLs: If the M3U8 file contains relative paths for .ts segments, they must resolve correctly from the playlist's URL.
- Unsupported encryption: The stream may use an encryption method beyond AES-128 clear key.
Check your browser's Developer Console (F12) for specific error messages that can help diagnose the issue.
How can I reduce HLS video latency?
Standard HLS has 6-30 seconds of latency. To reduce it:
- Use Low-Latency HLS (LL-HLS): Reduces latency to 2-6 seconds using partial segments. Requires server-side support (Nginx with nginx-rtmp-module, Wowza, or MediaMTX).
- Reduce segment duration: Typical HLS uses 6-second segments; lowering to 2-4 seconds reduces latency at the cost of increased playlist overhead.
- Decrease playlist window: Reduce the number of segments in the live playlist for quicker catch-up.
Note: Video.js 8.x has experimental LL-HLS support. For real-time streaming needs, consider WebRTC as an alternative to HLS.
Advanced
Does the player support DRM (Widevine, FairPlay)?
Our player supports AES-128 clear key encryption for HLS streams natively. For commercial DRM systems:
- Widevine: Supported on Chrome, Firefox, Edge, and Android through EME (Encrypted Media Extensions).
- FairPlay: Supported on Safari and iOS when the stream is properly configured.
DRM support requires the stream server to provide valid license server URLs in the M3U8 playlist using #EXT-X-KEY with KEYFORMAT and KEYFORMATVERSIONS attributes. Most free/public M3U8 streams do not use DRM. For DRM-protected streams, you may need to use the source provider's official player.
How can I build my own HLS streaming server?
Building an HLS server is straightforward and can be done with free, open-source tools:
- Install Nginx with RTMP module:
sudo apt install nginx libnginx-mod-rtmp - Configure RTMP: Add RTMP server block to nginx.conf to accept streams and generate HLS playlists with .ts segments.
- Push a stream with ffmpeg:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://localhost/live/stream - Serve HLS files via HTTP: Expose the HLS output directory through Nginx.
For a complete step-by-step guide with full Nginx configuration examples, RTMP setup, and ffmpeg commands, see our Build an HLS Server with Nginx guide.
Related Articles
📚 About M3U8 & HLS
Learn how M3U8 playlists and HLS streaming work under the hood. Understand adaptive bitrate, variant playlists, .ts segments, and the M3U8 vs MP4 comparison with detailed technical explanations.
🔧 Troubleshooting Guide
Fix common M3U8 playback errors step-by-step: CORS configuration for Nginx/Apache/CDN, buffering diagnosis, format compatibility issues, and stream validation techniques.
📱 Mobile Playback Guide
Complete guide to playing M3U8/HLS on iPhone, iPad, and Android. Covers Safari native HLS support, Android browser compatibility, full-screen tips, and PWA installation.
💻 How to Build an HLS Server
Step-by-step tutorial on setting up your own HLS streaming server with Nginx and the RTMP module. Includes ffmpeg encoding commands, live streaming setup, and CDN integration.