Streaming Protocols Supported by Free-TV/IPTV: HLS, MPEG-DASH, and SMIL Explained

Free-TV/IPTV primarily delivers content via HLS (M3U8) playlists while also supporting MPEG-DASH manifests, SMIL wrappers, and direct transport stream segments within its playlist files.

Free-TV/IPTV is an open-source repository that aggregates IPTV channels into standardized playlist formats. The project generates M3U8 playlists (the HLS format) as its core distribution method, while accommodating multiple underlying streaming protocols. Understanding the streaming protocols supported by Free-TV/IPTV helps developers configure compatible players and troubleshoot playback issues across different network conditions.

How Free-TV/IPTV Structures Its Streaming Architecture

The repository's playlist generation logic resides in make_playlist.py, which processes per-country markdown files stored in the lists/ directory. This script outputs a master playlist.m3u8 file as well as per-country playlists in the playlists/ folder, creating a standardized HLS container that references various underlying streaming technologies.

Primary Streaming Protocols Detailed

HLS (HTTP Live Streaming)

HLS is the dominant protocol in this repository. The master playlist.m3u8 and country-specific variants use the .m3u8 extension, containing URLs that point to streaming endpoints. For example, playlists/playlist_zz_vod_it.m3u8 at line 3 references https://di-g7ij0rwh.vo.lswcdn.net/sportitalia/silive24.smil/playlist.m3u8, demonstrating how SMIL-wrapped HLS streams are included in the aggregation.

MPEG-DASH

While the container format remains M3U8, some entries point directly to DASH manifests (.mpd files). The playlists/playlist_sweden.m3u8 file at line 3 includes entries like https://ed2.cdn.svt.se/ed7/d1/c/se/svt1/manifest.mpd?defaultSubLang=1, enabling players with DASH support to stream these channels natively.

SMIL Wrappers

Many URLs utilize SMIL (Synchronized Multimedia Integration Language) manifests as intermediate wrappers. These .smil files, served by CDNs, resolve to actual HLS or DASH streams. An example from playlists/playlist_italy.m3u8 at line 115 shows https://kk.fluid.stream/KKMulti/smil:KissKissTV.smil/playlist.m3u8, illustrating how broadcasters use SMIL to manage multi-bitrate streams.

Direct Transport Streams and Progressive Media

Some entries bypass manifest files entirely, pointing directly to .ts (MPEG-TS) segments or .mp4 files. The master playlist.m3u8 at line 223 contains entries like http://4ce5e2d62ee2c10e43c709f9b87c44d5.streamhost.cc/m3u8/Belgium/9ef55f75bc15308.ts for raw transport streams. Additionally, line 1539 references progressive download formats like https://dc3.telesveva.com:4433/news24.mp4.

Key Files in the Repository

File Role
make_playlist.py Generates master and per-country M3U8 playlists from markdown source files in lists/
playlist.m3u8 Master HLS playlist containing all channel references
playlists/*.m3u8 Per-country playlists containing localized stream URLs (HLS, DASH, SMIL)
lists/*.md Source markdown files defining channel metadata and URLs used by the generation script

Working with Free-TV/IPTV Playlists

Extracting Stream URLs with Python


# Example: download the master playlist and list all HLS URLs

import requests, re

master_url = "https://raw.githubusercontent.com/Free-TV/IPTV/master/playlist.m3u8"
playlist = requests.get(master_url).text

# Extract all lines that look like a URL (skip comment lines)

streams = [line for line in playlist.splitlines() if line and not line.startswith('#')]
for url in streams:
    print(url)

Playing Streams with VLC


# Play the master playlist with VLC (or any HLS‑compatible player)

vlc https://raw.githubusercontent.com/Free-TV/IPTV/master/playlist.m3u8

Testing DASH Streams with FFmpeg


# Show that a DASH stream can be played with ffmpeg

ffmpeg -i https://ed2.cdn.svt.se/ed7/d1/c/se/svt1/manifest.mpd -c copy -f null -

Summary

  • HLS (M3U8) is the primary container format used by Free-TV/IPTV, generated by make_playlist.py from markdown source files in the lists/ directory.
  • MPEG-DASH manifests are supported through direct .mpd URLs embedded within the M3U8 playlists, as seen in the Sweden playlist entries.
  • SMIL wrappers serve as CDN-level intermediaries that resolve to HLS or DASH streams, commonly found in Italian and sport channel entries.
  • Direct MPEG-TS segments and MP4 files provide alternative delivery methods for specific channels, referenced by absolute URLs in the master playlist.
  • The repository architecture separates data sources (lists/) from generated playlists (playlists/ and playlist.m3u8), maintaining a clean separation between configuration and distribution.

Frequently Asked Questions

Does Free-TV/IPTV support MPEG-DASH?

Yes. While the project standardizes on HLS (M3U8) playlist containers, individual entries may point to MPEG-DASH manifests (.mpd files). Players with DASH capabilities can stream these URLs directly, as evidenced by entries in playlists/playlist_sweden.m3u8 referencing SVT streams with .mpd extensions.

What is the primary playlist format used by Free-TV/IPTV?

The primary format is M3U8 (HLS playlist). The make_playlist.py script generates these files from markdown source data, creating a master playlist.m3u8 and per-country variants in the playlists/ directory. Most IPTV players consume this format natively.

Can I play Free-TV/IPTV streams in VLC?

Yes. VLC supports HLS playlists natively. You can load the master playlist directly using vlc https://raw.githubusercontent.com/Free-TV/IPTV/master/playlist.m3u8 or open any individual .m3u8 file from the repository. VLC will automatically handle HLS streams, DASH manifests, and direct transport stream segments.

What are SMIL wrappers in the context of Free-TV/IPTV?

SMIL (Synchronized Multimedia Integration Language) wrappers are XML-based manifests used by CDNs to describe multimedia presentations. In Free-TV/IPTV, many URLs point to .smil files that resolve to actual streaming protocols like HLS or DASH, particularly for channels distributed through specific CDN networks such as those used by Sportitalia and Kiss Kiss TV.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →