IPTV Client Example
Example of a custom configured IPTV Android app based on IPTV Core app.
Finctionality of this app is quite similar to IPTV app, but this app is easier to use for the end users because it doesn't require any complicated settings.
Features similar to IPTV:
- M3U and XSPF playlists support
- Grid or list view of TV channels
- EPG support in JTV (zip) or XMLTV (xml, gz) formats
Differences with IPTV:
- Single playlist is used, users can't add custom playlists
- No UDP proxy settings
Building custom IPTV app
To build you custom IPTV app you can do one of the following:
- Clone iptv.example project, change app name, launcher icon, and package name.
- Create new Android project with empty activity and use the code from MainActivity.java
You will also need to set custom playlist URL in MainActivity.onStart().
If you're are new in Android development, you can find some useful tutorials here.
Supported playlists formats
IPTV Core app supports M3U and XSPF playlist formats. Additionally to standard M3U file format it supports extended M3U playlists with custom attrubutes.
Here is an example of extended M3U playlist:
#EXTM3U url-tvg="http://www.teleguide.info/download/new3/xmltv.xml.gz" #EXTINF:-1 group-title="Science", Discovery http://example.com/channel1 #EXTINF:-1 group-title="Sport", Eurosport http://example.com/channel2 #EXTINF:-1 tvg-logo="Eurosport" tvg-name="Eurosport" tvg-shift="+1",Eurosport +1 http://example.com/channel3 #EXTINF:-1 group-title="Custom" tvg-logo="https://cdn1.iconfinder.com/data/icons/Primo_Icons/PNG/128x128/video.png",My Custom channel http://example.com/channel4
- url-tvg - URL for EPG in JTV (zip) or XMLTV (xml, gz) format. Several URLs may be specified separated by comma
- group-title - Title for channels group
- tvg-logo - Channel logo name (from internal database) or URL to the image that will be used as channel logo
- tvg-name - Name of the channel from EPG, should be equal to the value of "display-name" tag in XMLTV
- tvg-id - XMLTV channel id. When both tvg-id and tvg-name are specified for the same channel, tvg-id will be used.
- tvg-shift - Shift in hours for EPG
Intent API which is used for launching IPTV Core from third-party package (launcher app)
Data: Playlist URL Extras (optional): package Type: String Example: intent.putExtra("package", getPackageName()); "package" extra is used for sending package name of your app to IPTV Core. If this extra is set, IPTV Core will be able to show your app name as a title url-tvg (Since IPTV Core 3.3) Type: String Example: intent.putExtra("url-tvg", "<Your EPG URL>"); EPG URL can be set either by "url-tvg" parameter in your playlist or by "url-tvg" extra http_connect_timeout Type: int Example: intent.putExtra("http_connect_timeout", 30 * 1000); // Set http connect timeout to 30 seconds Http connect timeout for loading playlist and EPG (not video streams) http_read_timeout Type: int Example: intent.putExtra("http_read_timeout", 30 * 1000); // Set http read timeout to 30 seconds Http read timeout for loading playlist and EPG (not video streams) http_user_agent (Since IPTV Core 3.3.1) Type: String Example: intent.putExtra("http_user_agent", "<Custom user agent>") Custom value for "User-Agent" http request property which is used for loading playlist and EPG (not video streams) preferred_player_package (Since IPTV Core 3.3.2) Type: String Example: intent.putExtra("preferred_player_package", "org.videolan.vlc"); // Set VLC as preferrred video player Preferred video player should be one of the supported players that can be found in IPTV Core settings. At the first launch the app will check if one of supported players is installed. When no supported players found, the user will be forced to install the preferred video player. By default, the app uses MX Player as preferred player. hide_all_channels_tab (Since IPTV Core 3.9.4) Type: boolean Example: intent.putExtra("hide_all_channels_tab", true); Option to hide "All Channels" tab. This option works only when you have categories in your playlist.
Copyright (C) 2014 Alexander Sofronov Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.