
M3U and M3U8 are both text playlist formats, but the safest practical distinction is this: M3U is the broader playlist convention, while M3U8 conventionally identifies a UTF-8-encoded playlist and is the standard extension used for HTTP Live Streaming manifests. That does not mean every file ending in .m3u8 is an HLS stream, or that changing .m3u to .m3u8 performs a real conversion.
The confusing part is that the two names overlap. Both can start with #EXTM3U, contain comments and place a path or URL on its own line. An ordinary M3U may list songs, local videos, internet radio stations or hundreds of IPTV channels. An HLS M3U8 can instead describe alternate quality renditions or the short media segments that make one live or on-demand presentation play.
I decide which file I am looking at from its contents and delivery context, not from the suffix alone. UTF-8 decoding, #EXT-X- tags, the kind of URI on each line and the server’s Content-Type header provide stronger evidence. That approach prevents three common mistakes: corrupting international names, importing one stream manifest as a channel catalogue, and assuming a renamed file has been converted.
Use the quick table as a starting point, then inspect the file before editing or migrating it.
| Choose or expect | When it usually fits |
|---|---|
| M3U | A general playlist, a legacy player, local paths, an IPTV channel catalogue or software that specifically requests the .m3u extension |
| M3U8 | Unicode names, an HLS multivariant or media manifest, web delivery, or a player and server that follow the HLS convention |
| Inspect first | The source is unknown, the extension and HTTP header disagree, or the file contains both catalogue-style metadata and nested HLS URLs |
What M3U and M3U8 Actually Mean
M3U is a line-oriented playlist convention. A basic file may contain only media locations, one per line. Extended M3U adds the #EXTM3U header and metadata such as #EXTINF before the location it describes. The referenced item can be a local song, a network file, an internet radio stream, an IPTV channel or another playlist. The playlist is an index; it normally does not contain the audio or video bytes.
M3U8 is not an unrelated container format. The final “8” conventionally signals UTF-8 text, which preserves characters outside older local code pages. It is also the familiar filename extension for HLS playlists. Context therefore matters: one .m3u8 may be a Unicode music list, while another is a rigorously structured HLS manifest that a browser, television or streaming application repeatedly downloads.
- Shared ancestry: Both formats are readable text and may use the extended M3U header and
#EXTINF. - Encoding signal: M3U8 conventionally tells software to decode the text as UTF-8.
- HLS role: HLS uses M3U-derived syntax plus case-sensitive tags beginning with
#EXT-X-. - Not media: The playlist usually points to media files, streams, keys or other playlists rather than embedding them.
- Suffix is evidence: The extension helps a client choose a parser, but the content still has to be valid for that parser.
M3U vs M3U8: Technical Differences at a Glance
The comparison below separates a general convention from the stricter HLS use of M3U8. Some applications accept either extension for the same simple UTF-8 playlist. Others use the suffix and HTTP header to decide whether to apply an HLS parser, a legacy playlist parser or no parser at all. Treat compatibility claims as application-specific rather than universal.
| Comparison point | M3U | M3U8 |
|---|---|---|
| Usual meaning | General M3U playlist | UTF-8 M3U playlist; commonly an HLS manifest |
| Character encoding | May depend on the creator, player or local code page | Conventionally UTF-8; HLS requires UTF-8 |
| Typical contents | Media paths, radio URLs or an IPTV channel catalogue | Unicode entries, HLS variant playlists or HLS media-segment references |
| Distinctive tags | #EXTM3U, #EXTINF and application-specific metadata | Same base plus HLS tags such as #EXT-X-STREAM-INF or #EXT-X-TARGETDURATION |
| Common MIME type | audio/mpegurl | application/vnd.apple.mpegurl for HLS |
| Streaming behaviour | Player opens the listed item when selected | HLS client may choose a rendition and repeatedly request changing segment lists |
| Conversion risk | Legacy characters may be damaged if decoded incorrectly | Renaming alone cannot create valid UTF-8 or HLS structure |
Encoding Is the Clearest Naming Difference
A playlist can look correct when it contains only English letters and still fail as soon as a channel name uses French accents, Arabic, Devanagari, Chinese characters or an emoji. A legacy .m3u file may have been saved in Windows-1252 or another local encoding. If a player assumes UTF-8, invalid byte sequences can become replacement symbols, garbled names or a parse error.
For HLS, the rule is clearer. RFC 8216 defines master and media playlists as UTF-8 text and restricts invalid control characters. A UTF-8 byte-order mark is not a substitute for correct bytes and can confuse strict clients. When converting an ordinary playlist, decode the original correctly first, then save the resulting text as UTF-8. Do not interpret already-corrupted characters and save them again.
- Check the source: Ask which encoding created the file instead of guessing from the extension.
- Inspect non-ASCII names: Accents and non-Latin scripts reveal decoding errors faster than plain URLs.
- Choose UTF-8 explicitly: Use a text editor that displays and controls the output encoding.
- Avoid repeated saves: Each wrong decode-and-save cycle can destroy more of the original text.
- Test another parser: A file that fails in one player may expose an encoding assumption rather than a broken stream.
HLS Makes M3U8 More Than a Filename Convention
HTTP Live Streaming uses playlists to describe a presentation delivered over ordinary HTTP. A multivariant, historically called master, playlist points to alternative renditions that may differ by bandwidth, resolution, codec, audio language or subtitles. A media playlist points to the timed segments for one rendition. The client selects a suitable rendition, requests its segments in order and may switch when network conditions change.
Apple’s current HLS documentation provides example M3U8 files and validation tools. HLS syntax is not free-form: tags are case-sensitive, a playlist must be a valid master or media playlist, and certain tag families cannot be mixed. A live media playlist can change as new segments appear and older ones leave the available window; a static song list normally does not behave that way.
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1800000,RESOLUTION=1280x720
video/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=750000,RESOLUTION=640x360
video/360p.m3u8
This small example is a multivariant playlist because each URI leads to another playlist. A media playlist would instead include timing tags and URIs for media segments. The names are illustrative; no real stream or credential is included.
Playlist Catalogue, Manifest and Media Segments Are Different Layers

An IPTV catalogue often uses extended M3U metadata such as tvg-id, tvg-logo and group-title to build a library of channels. Selecting one entry may send the player to a separate M3U8 HLS manifest. That inner manifest represents one channel or programme, not the entire catalogue. It may then point to another rendition playlist or directly to small .ts, .m4s, AAC or WebVTT resources.
Opening the wrong layer creates misleading results. Importing a channel’s media manifest as a top-level IPTV playlist may show one cryptic item, while pasting a large catalogue into a video element expecting HLS may fail completely. The content tells you the layer: catalogue metadata describes many selectable entries; #EXT-X-STREAM-INF introduces rendition playlists; timing and sequence tags describe segments for playback.
- Catalogue layer: Many channels or media items, often with names, logos, groups and EPG identifiers.
- Multivariant layer: Alternative streams described by bandwidth, codecs, resolution, frame rate, audio or subtitles.
- Media-playlist layer: An ordered, possibly changing list of timed segments for one rendition.
- Media layer: The actual audio, video or subtitle resources retrieved after the playlist is parsed.
- Guide layer: XMLTV or account data may add programme schedules but remains separate from every playlist layer.
Relative and Absolute URLs Change Portability
An absolute URL includes its scheme and host, such as https://media.example.invalid/live/720p.m3u8. A relative URI such as video/720p.m3u8 is resolved against the location of the playlist that contains it. RFC 8216 explicitly permits relative URIs in HLS. They make a deployment easier to move as one directory tree, but only when the base playlist URL remains known.
Local M3U playlists have a similar distinction. A relative path can keep a music folder portable when the playlist moves with the files. An absolute Windows drive path, network share or user-specific folder may fail on another device. Copying only the playlist never copies its referenced media. Converting a remote M3U8 to a local file can also break relative segment, key and subtitle addresses if the original base URL is lost.
- Keep the base: Record the original playlist URL before downloading a manifest that uses relative references.
- Move as a tree: Preserve relative folder structure when migrating local media and playlists together.
- Respect query strings: Signed parameters may be required on playlists, segments, keys or nested manifests.
- Expect redirects: A player may handle authorised redirects differently from a basic text downloader.
- Do not publish tokens: Absolute subscription URLs can expose usernames, passwords or time-limited access keys.
File Extensions and MIME Types Must Agree
A local application often chooses its parser from the filename. A web client also sees the server’s HTTP Content-Type. RFC 8216 allows an HLS playlist to be identified by a path ending in .m3u8 or .m3u, or by the Content-Type application/vnd.apple.mpegurl or audio/mpegurl. In practice, stricter browsers, casting devices and content-delivery systems behave more predictably when the extension and header match the intended use.
Apple’s current HLS authoring guidance recommends application/vnd.apple.mpegurl with m3u8 for HLS playlists and audio/mpegurl with m3u for M3U playlists. A response labelled text/html may actually be a login page, expired-link message or proxy error. Reading the first lines before importing prevents a player from treating that page as playlist data.
| Evidence | What it suggests | Useful response |
|---|---|---|
.m3u plus audio/mpegurl | General M3U playlist | Confirm the actual character encoding |
.m3u8 plus application/vnd.apple.mpegurl | UTF-8 or HLS playlist | Inspect for HLS tag families |
#EXT-X-STREAM-INF | HLS multivariant playlist | Expect nested rendition playlists |
#EXT-X-TARGETDURATION and segment URIs | HLS media playlist | Check timing, sequence and segment reachability |
text/html or an HTML first line | Error, sign-in page or block | Do not import; diagnose authentication and URL expiry |
| Readable entries with broken accents | Encoding mismatch | Reopen the untouched source with the correct decoder |
Compatibility Depends on the Parser and the Delivery Method
Desktop media players often accept both extensions because they inspect the contents. Smart televisions, browser playback libraries, IPTV applications and embedded devices can be less forgiving. A player may support ordinary M3U channel lists but not HLS encryption, low-latency features, uncommon codecs or every segment container. Another may play HLS perfectly yet ignore catalogue-specific attributes such as group-title.
Choose M3U when you are building a general local playlist or the target software specifically documents that format. Choose UTF-8 M3U8 when international text must be preserved and the software recognises it. For HLS, follow the client and server documentation together: use valid HLS structure, compatible codecs, correct MIME types, HTTPS where required and reachable nested resources. A successful import proves parsing, not that every referenced stream is playable.
- Local library: Confirm path syntax and whether the player resolves relative locations from the playlist folder.
- IPTV catalogue: Confirm extended metadata support, EPG mapping and the maximum practical entry count.
- Web HLS: Confirm browser support, CORS policy, HTTPS delivery, codecs and segment MIME types.
- Casting: The receiving device must reach every playlist and segment URL independently.
- Encrypted HLS: The client needs the declared encryption method and authorised access to each key URI.
Inspect and Validate Without Exposing Credentials
Begin with a copy. Use a maintained local text editor to confirm the first line, encoding and line endings. Search for #EXT-X- tags, then classify every non-comment URI as another playlist, a media segment or an ordinary media item. For a remote source, inspect response status and Content-Type without pasting a private address into a public checker. Redact hosts, usernames, passwords, tokens, cookies and query strings before sharing a snippet.
Validation should follow the layer. A simple M3U checker can verify readable lines and reachable media. An HLS validator must understand tag relationships, compatibility versions, target durations, rendition metadata, segment continuity and encryption declarations. Apple publishes a Media Streaming Validator for HLS deployments. Even a syntactically perfect result cannot confirm copyright permission, account entitlement or long-term server reliability.
- Preserve evidence: Keep the untouched original and record the source URL separately from the downloaded copy.
- Classify the file: Distinguish catalogue entries, nested playlists and media segments before choosing a validator.
- Check headers: Record HTTP status, Content-Type, redirects and caching behaviour without disclosing secret parameters.
- Sample safely: Test a small authorised set rather than importing thousands of unknown entries immediately.
- Compare clients: A second maintained player can separate parser limitations from a dead media source.
- Redact before help: Replace every sensitive host or token with an obvious placeholder in screenshots and logs.
Convert or Migrate a Playlist Without Breaking It
For a plain playlist, conversion usually means decoding the original bytes correctly and saving equivalent text as UTF-8. It may also require changing the extension and updating the server header. That can preserve names and simple locations, but it does not turn an ordinary IPTV catalogue into adaptive HLS. Creating HLS requires encoded renditions, segmented media, valid multivariant and media playlists, and a server that delivers every resource correctly.
Work on a duplicate, use a few representative entries and compare the before-and-after text. Preserve relative bases, query strings and the metadata/URI pairs your player needs. The broader M3U playlist guide covers catalogue structure and editing in more depth. If the goal is only to fix garbled names, avoid rewriting unrelated tags or URLs.
| Migration goal | What is required | What is not enough |
|---|---|---|
| Legacy text to UTF-8 | Correctly decode the source, save UTF-8, verify names and line structure | Renaming .m3u to .m3u8 |
| Local playlist to another device | Move media or retain reachable paths and preserve relative structure | Copying the small playlist file alone |
| Remote manifest to local test | Retain the original base URI and authorised access to nested resources | Saving only the top-level text |
| Ordinary media to HLS | Encode renditions, segment media, generate valid playlists and serve correct headers | Adding #EXT-X- lines by hand |
| Change HLS host or CDN | Test nested playlists, segments, keys, subtitles, redirects and CORS | Updating only the first visible URL |
Security, Privacy and Authorised Use
Playlist text can carry more than harmless filenames. Subscription URLs may embed account credentials. HLS manifests can reveal content paths, key locations, analytics parameters and signed tokens. Every host in a playlist learns that a client requested it, while redirects and external artwork can involve additional domains. Use trusted software, HTTPS and the minimum credentials needed. Remove old profiles and cached files before selling or sharing a device.
The extension says nothing about legal permission. A lawful personal playlist can point to media you own, licensed internet radio or streams supplied by an authorised service. The same syntax can also reference redistributed programming without permission. Canada’s Copyright Act includes the right to communicate a work to the public by telecommunication. Confirm the accountable source and territorial rights; this technical guide is not legal advice.
- Use authorised media: A compatible player or working URL does not establish distribution rights.
- Keep URLs private: Treat credential-bearing playlist, guide, key and segment addresses like passwords.
- Avoid unknown converters: A public service can log the complete private playlist submitted to it.
- Review every host: Nested manifests, artwork, subtitles and keys may contact domains beyond the first URL.
- Rotate exposed access: Ask the legitimate source to replace credentials or tokens that entered a public channel.
Final Decision: Choose M3U or M3U8
Choose M3U for a general playlist when the receiving software expects it and the creator’s encoding is known. Choose M3U8 for an explicitly UTF-8 playlist or an HLS workflow that uses valid manifest syntax, compatible media and correct web headers. When both extensions open in the same player, prefer the one documented by the source rather than renaming files casually.
The content remains the decisive evidence. Catalogue metadata points to selectable items; a multivariant HLS playlist points to renditions; a media playlist points to timed segments. Validate the right layer, preserve URI bases and credentials, and test a copy before replacing a working setup. The short answer is not “M3U is old and M3U8 is new.” It is “M3U8 adds a UTF-8 convention and is the normal HLS extension, but syntax and delivery determine what the file really does.”
FAQs
Is M3U8 always an HLS playlist?
No. The extension conventionally identifies UTF-8 M3U text and is strongly associated with HLS, but a file can still be a simple non-HLS playlist. Look for HLS-specific #EXT-X- tags and inspect what its URI lines reference before classifying it.
Can I convert M3U to M3U8 by renaming the file?
Renaming changes only the suffix. A proper text conversion decodes the original correctly and saves UTF-8. A proper HLS conversion additionally creates renditions or segments, valid manifests and correct server behaviour. Always test a copy and preserve the original.
Why does an M3U8 file show only text?
That is expected because M3U8 is a text manifest, not the video itself. A compatible HLS client reads the tags, selects a rendition and requests the referenced media segments. A plain text editor shows the instructions instead of playing them.
Which MIME type should an M3U8 server send?
For HLS, application/vnd.apple.mpegurl is the recommended type. RFC 8216 also recognises audio/mpegurl for identifying a playlist. Matching the extension, Content-Type and valid HLS contents gives strict clients the clearest signal.
Do M3U or M3U8 files contain the video?
Normally no. They contain text that points to media or to other playlists. Moving the playlist does not move local songs, remote video, HLS segments, encryption keys or guide data. Every referenced resource still has to remain reachable and authorised.
Which IPTV players support both M3U and M3U8?
Many maintained media and IPTV players parse both, but support for HLS tags, codecs, encryption and catalogue metadata varies. Check the current documentation for the exact device and app version; our IPTV player comparison can help narrow the options. Test with a small authorised sample before migrating a full playlist.
