IPappTV

Playlists

M3U and M3U8 playlist player

How M3U differs from M3U8, what IPappTV reads from a playlist, and why some lists do not load correctly

An M3U playlist is a plain text file: for each channel one line of description and one line with the stream address. IPappTV reads such a file from a web address or from a file on the device and turns it into a channel list with logos, groups and a programme guide. The app supplies no playlists - you tell it where to fetch one.

1. M3U vs M3U8 - what is the difference

For a channel list, nothing that matters. M3U8 is M3U saved in UTF-8 encoding, i.e. with accented characters shown correctly in channel names. Today practically every playlist is UTF-8 regardless of extension, and the app reads both the same way.

The confusion comes from .m3u8 also being the extension of an HLS stream - the address of a single channel, which is itself a small list of video segments. In an IPTV playlist the channel addresses often end in .m3u8, and that is normal: an M3U list contains M3U8 streams. So an address from your provider ending in .m3u8 may be either the whole list or one channel. You add a playlist to the app, not a single stream - the address of one channel will load incorrectly (the app would treat its segments as channels).

2. How to add a playlist

"Add list" on the home screen. Two sources:

  • From an address. Paste the URL your provider gave you. The list is downloaded from the server and refreshed automatically - when the provider adds or removes channels, you see the changes after a refresh.
  • From a file. Pick a .m3u or .m3u8 file from your phone or tablet, or from a USB stick on the TV. The app copies it into its own storage; such a list does not refresh - to change it, delete it and add the new file.

When adding, you give a name (anything you like), optionally an EPG address, and whether the list should use the default guide from Settings. If you have no list yet, one button adds the demo playlist with openly licensed material - purely to check that playback works on your device.

One list is free. Several lists at once, with switching between them, is a PRO feature.

3. What the app reads from the file

Besides the channel name and address, the app understands these attributes on the #EXTINF line and in the #EXTM3U header:

AttributeWhat it does
tvg-idChannel identifier in the EPG. The most reliable way to match the schedule.
tvg-nameFallback name when there is nothing after the comma in #EXTINF.
tvg-logoChannel logo address. Without it the logo may come from the EPG.
group-titleChannel group - becomes a category in the list. Alternatively an #EXTGRP: line.
url-tvgIn the header: XMLTV guide address. Also x-tvg-url. With several addresses the first is used.
catchupArchive type: default, append, shift, flussonic, xc.
catchup-sourceArchive address template with {utc}, {utcend}, {lutc}, {duration} placeholders.
catchup-daysHow many days back the archive reaches. Also timeshift and tvg-rec. A type with no number = 7 days.

Attribute names are case-insensitive. A channel without a group goes into the "Inne" (Other) category; a channel without a name gets a number.

Not supported: #EXTVLCOPT and #KODIPROP lines (per-channel HTTP headers and DRM keys) are ignored. DRM-protected streams will not play.

4. Groups, favourites and your own categories

Playlist groups become category tabs in the channel list, in file order. The channel number always comes from the full list, so it does not change when you switch categories and can be dialled with the remote's digits.

Independently of the provider's grouping you can mark favourites (custom order in PRO) and create your own groups (PRO) - these survive a list refresh, because they are stored on the app's side, tied to the channel's identifier or name.

5. Refreshing the list

A list from an address is downloaded again no more often than every 12, 24 or 48 hours - the "Refreshing lists and EPG" setting. Between downloads the app uses the saved copy, so the list opens instantly, even with no connection (the channels themselves still need the network). If the server is unreachable at refresh time, the older copy is used. Manually: "Refresh list and EPG" in the channel list menu.

Less frequent refreshing means a lower risk of limits - some providers block an account after too many playlist downloads in a short time.

6. Stream formats and provider panels

The app plays what Android plays: HLS (.m3u8), MPEG-TS over HTTP (.ts, addresses without an extension), and plain video files (MP4, MKV). http and https addresses; redirects between them are allowed, because panels often redirect streams to unencrypted servers.

Xtream Codes: the app has no separate username/password login. Use the M3U playlist address the panel provides (usually .../get.php?username=…&password=…&type=m3u_plus). The archive of such panels (catchup="xc") is supported.

Not supported: Stalker/MAC portals, DASH, RTMP and UDP/multicast, DRM-protected streams.

7. Backup

Settings → backup saves your lists, favourites, groups, parental lock, scheduled programmes and settings to a single file. Nothing leaves the device - you move the file yourself, e.g. from the phone to the TV.

8. When the list does not load

  • 0 channels after adding. The address returns an HTML page (login, account-expired notice) rather than an M3U list. Open the address in a browser: it should download a text file starting with #EXTM3U.
  • The list is there, channels do not start. That is a stream problem, not a list problem - see the TV page, sections 4 and 7.
  • Garbled accented characters. The file is not UTF-8. For a list from an address ask the provider for the M3U8 variant; for a file, re-save it as UTF-8.
  • No groups. The list has neither group-title nor #EXTGRP; everything lands in "Inne". Make your own groups (PRO) or ask the provider for the m3u_plus variant.
  • No guide. See IPTV EPG.

Anything else: kontakt@ipapptv.com - with the first lines of the file (without addresses containing a username and password).