Add files via upload
This commit is contained in:
@@ -0,0 +1,945 @@
|
||||
# Xtream Codes API Documentation
|
||||
|
||||
Complete API reference for the Xtream Codes Player API.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Overview](#overview)
|
||||
- [Authentication](#authentication)
|
||||
- [Base URL](#base-url)
|
||||
- [User Info](#user-info)
|
||||
- [Live Channels](#live-channels)
|
||||
- [Get Live Categories](#get-live-categories)
|
||||
- [Get Live Streams](#get-live-streams)
|
||||
- [VOD (Movies)](#vod-movies)
|
||||
- [Get VOD Categories](#get-vod-categories)
|
||||
- [Get VOD Streams](#get-vod-streams)
|
||||
- [Get VOD Info](#get-vod-info)
|
||||
- [Series](#series)
|
||||
- [EPG (Electronic Program Guide)](#epg-electronic-program-guide)
|
||||
- [Get Short EPG](#get-short-epg)
|
||||
- [Get Full EPG](#get-full-epg)
|
||||
- [Response Codes](#response-codes)
|
||||
- [Data Models](#data-models)
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The Xtream Codes Player API provides access to IPTV content including live streams, video on demand (VOD), and electronic program guide (EPG) data.
|
||||
|
||||
### Available Actions
|
||||
|
||||
| Action | Description | Category |
|
||||
|--------|-------------|----------|
|
||||
| *(none)* | Get user account & server info | User Info |
|
||||
| `get_live_categories` | List all live stream categories | Live |
|
||||
| `get_live_streams` | List all live channels | Live |
|
||||
| `get_vod_categories` | List all VOD/movie categories | VOD |
|
||||
| `get_vod_streams` | List all movies | VOD |
|
||||
| `get_vod_info` | Get detailed movie information | VOD |
|
||||
| `get_short_epg` | Get short EPG for a channel | EPG |
|
||||
| `get_simple_data_table` | Get full EPG listing | EPG |
|
||||
|
||||
---
|
||||
|
||||
## Authentication
|
||||
|
||||
All API requests require authentication via `username` and `password` query parameters.
|
||||
|
||||
```
|
||||
?username=YOUR_USERNAME&password=YOUR_PASSWORD
|
||||
```
|
||||
|
||||
### Authentication Failure Response
|
||||
|
||||
```json
|
||||
{
|
||||
"user_info": {
|
||||
"auth": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Base URL
|
||||
|
||||
```
|
||||
http://SERVER_ADDRESS:PORT/player_api.php
|
||||
```
|
||||
|
||||
Replace `SERVER_ADDRESS` and `PORT` with your server details.
|
||||
|
||||
---
|
||||
|
||||
## User Info
|
||||
|
||||
Get account information and server details.
|
||||
|
||||
### Request
|
||||
|
||||
**Endpoint:** `GET /player_api.php`
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
|-----------|------|----------|-------------|
|
||||
| `username` | string | ✅ Yes | Account username |
|
||||
| `password` | string | ✅ Yes | Account password |
|
||||
|
||||
> **Note:** Do not include an `action` parameter to get user info.
|
||||
|
||||
### Example Request
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123"
|
||||
```
|
||||
|
||||
### Example Response
|
||||
|
||||
```json
|
||||
{
|
||||
"user_info": {
|
||||
"username": "john",
|
||||
"password": "secret123",
|
||||
"auth": 1,
|
||||
"message": "",
|
||||
"status": "Active",
|
||||
"exp_date": 1735689600,
|
||||
"is_trial": 0,
|
||||
"active_cons": 1,
|
||||
"created_at": 1704067200,
|
||||
"max_connections": 2,
|
||||
"allowed_output_formats": ["m3u8", "ts"]
|
||||
},
|
||||
"server_info": {
|
||||
"url": "example.com",
|
||||
"port": "8080",
|
||||
"server_protocol": "http",
|
||||
"timezone": "UTC",
|
||||
"timestamp_now": 1703980800,
|
||||
"time_now": "2024-12-31 12:00:00",
|
||||
"rtmp_port": "",
|
||||
"https_port": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### User Status Values
|
||||
|
||||
| Status | Description |
|
||||
|--------|-------------|
|
||||
| `Active` | Account is enabled and not expired |
|
||||
| `Banned` | Account banned by administrator |
|
||||
| `Disabled` | Account is disabled |
|
||||
| `Expired` | Account has passed expiration date |
|
||||
|
||||
### Response Fields
|
||||
|
||||
#### `user_info` Object
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `username` | string | Account username |
|
||||
| `password` | string | Account password |
|
||||
| `auth` | integer | Authentication status (1 = success, 0 = failed) |
|
||||
| `message` | string | System message (if any) |
|
||||
| `status` | string | Account status |
|
||||
| `exp_date` | integer/null | Expiration timestamp (null = never expires) |
|
||||
| `is_trial` | integer | Trial account flag (1 = trial, 0 = regular) |
|
||||
| `active_cons` | integer | Current active connections |
|
||||
| `created_at` | integer | Account creation timestamp |
|
||||
| `max_connections` | integer | Maximum allowed simultaneous connections |
|
||||
| `allowed_output_formats` | array | Allowed streaming formats |
|
||||
|
||||
#### `server_info` Object
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `url` | string | Server URL or IP address |
|
||||
| `port` | string | Server port |
|
||||
| `server_protocol` | string | Protocol (http/https) |
|
||||
| `timezone` | string | Server timezone |
|
||||
| `timestamp_now` | integer | Current server timestamp |
|
||||
| `time_now` | string | Current server time (Y-m-d H:i:s) |
|
||||
| `rtmp_port` | string | RTMP port (if available) |
|
||||
| `https_port` | string | HTTPS port (if available) |
|
||||
|
||||
---
|
||||
|
||||
## Live Channels
|
||||
|
||||
### Get Live Categories
|
||||
|
||||
Retrieve all available live stream categories.
|
||||
|
||||
#### Request
|
||||
|
||||
**Endpoint:** `GET /player_api.php`
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
|-----------|------|----------|-------------|
|
||||
| `username` | string | ✅ Yes | Account username |
|
||||
| `password` | string | ✅ Yes | Account password |
|
||||
| `action` | string | ✅ Yes | `get_live_categories` |
|
||||
|
||||
#### Example Request
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_live_categories"
|
||||
```
|
||||
|
||||
#### Example Response
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"category_id": "1",
|
||||
"category_name": "Sports",
|
||||
"parent_id": 0
|
||||
},
|
||||
{
|
||||
"category_id": "2",
|
||||
"category_name": "News",
|
||||
"parent_id": 0
|
||||
},
|
||||
{
|
||||
"category_id": "3",
|
||||
"category_name": "Entertainment",
|
||||
"parent_id": 0
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
#### Response Fields
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `category_id` | string | Unique category identifier |
|
||||
| `category_name` | string | Category display name |
|
||||
| `parent_id` | integer | Parent category ID (0 = root) |
|
||||
|
||||
---
|
||||
|
||||
### Get Live Streams
|
||||
|
||||
Retrieve all available live channels, optionally filtered by category.
|
||||
|
||||
#### Request
|
||||
|
||||
**Endpoint:** `GET /player_api.php`
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
|-----------|------|----------|-------------|
|
||||
| `username` | string | ✅ Yes | Account username |
|
||||
| `password` | string | ✅ Yes | Account password |
|
||||
| `action` | string | ✅ Yes | `get_live_streams` |
|
||||
| `category_id` | string | ❌ No | Filter by category ID |
|
||||
|
||||
#### Example Request - All Streams
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_live_streams"
|
||||
```
|
||||
|
||||
#### Example Request - Filter by Category
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_live_streams&category_id=1"
|
||||
```
|
||||
|
||||
#### Example Response
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"num": 1,
|
||||
"name": "Sports Channel HD",
|
||||
"stream_type": "live",
|
||||
"stream_id": 101,
|
||||
"stream_icon": "http://example.com/icons/sports.png",
|
||||
"epg_channel_id": "sports.us",
|
||||
"added": "1704067200",
|
||||
"category_id": "1",
|
||||
"tv_archive": 0,
|
||||
"direct_source": "",
|
||||
"tv_archive_duration": 0
|
||||
},
|
||||
{
|
||||
"num": 2,
|
||||
"name": "News 24/7",
|
||||
"stream_type": "live",
|
||||
"stream_id": 102,
|
||||
"stream_icon": "http://example.com/icons/news.png",
|
||||
"epg_channel_id": "news.us",
|
||||
"added": "1704067200",
|
||||
"category_id": "2",
|
||||
"tv_archive": 0,
|
||||
"direct_source": "",
|
||||
"tv_archive_duration": 0
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
#### Response Fields
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `num` | integer | Stream number in list |
|
||||
| `name` | string | Channel display name |
|
||||
| `stream_type` | string | Always `live` for live streams |
|
||||
| `stream_id` | integer | Unique stream identifier |
|
||||
| `stream_icon` | string | Channel logo URL |
|
||||
| `epg_channel_id` | string | EPG channel identifier |
|
||||
| `added` | string | Timestamp when stream was added |
|
||||
| `category_id` | string | Category the stream belongs to |
|
||||
| `tv_archive` | integer | TV archive availability (0/1) |
|
||||
| `direct_source` | string | Direct source URL (if available) |
|
||||
| `tv_archive_duration` | integer | Archive duration in days |
|
||||
|
||||
#### Playing a Live Stream
|
||||
|
||||
To play a live stream, use this URL format:
|
||||
|
||||
```
|
||||
http://SERVER:PORT/USERNAME/PASSWORD/STREAM_ID.EXT
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```
|
||||
http://example.com:8080/john/secret123/101.m3u8
|
||||
http://example.com:8080/john/secret123/101.ts
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## VOD (Movies)
|
||||
|
||||
### Get VOD Categories
|
||||
|
||||
Retrieve all available movie categories.
|
||||
|
||||
#### Request
|
||||
|
||||
**Endpoint:** `GET /player_api.php`
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
|-----------|------|----------|-------------|
|
||||
| `username` | string | ✅ Yes | Account username |
|
||||
| `password` | string | ✅ Yes | Account password |
|
||||
| `action` | string | ✅ Yes | `get_vod_categories` |
|
||||
|
||||
#### Example Request
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_vod_categories"
|
||||
```
|
||||
|
||||
#### Example Response
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"category_id": "10",
|
||||
"category_name": "Action",
|
||||
"parent_id": 0
|
||||
},
|
||||
{
|
||||
"category_id": "11",
|
||||
"category_name": "Comedy",
|
||||
"parent_id": 0
|
||||
},
|
||||
{
|
||||
"category_id": "12",
|
||||
"category_name": "Drama",
|
||||
"parent_id": 0
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Get VOD Streams
|
||||
|
||||
Retrieve all available movies, optionally filtered by category.
|
||||
|
||||
#### Request
|
||||
|
||||
**Endpoint:** `GET /player_api.php`
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
|-----------|------|----------|-------------|
|
||||
| `username` | string | ✅ Yes | Account username |
|
||||
| `password` | string | ✅ Yes | Account password |
|
||||
| `action` | string | ✅ Yes | `get_vod_streams` |
|
||||
| `category_id` | string | ❌ No | Filter by category ID |
|
||||
|
||||
#### Example Request - All Movies
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_vod_streams"
|
||||
```
|
||||
|
||||
#### Example Request - Filter by Category
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_vod_streams&category_id=10"
|
||||
```
|
||||
|
||||
#### Example Response
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"num": 1,
|
||||
"name": "Action Movie 2024",
|
||||
"stream_type": "movie",
|
||||
"stream_id": 5001,
|
||||
"stream_icon": "http://example.com/posters/movie1.jpg",
|
||||
"added": "1704067200",
|
||||
"category_id": "10",
|
||||
"direct_source": "",
|
||||
"rating": 7.5,
|
||||
"rating_5based": 4,
|
||||
"custom_sid": null,
|
||||
"container_extension": "mkv"
|
||||
},
|
||||
{
|
||||
"num": 2,
|
||||
"name": "Comedy Film",
|
||||
"stream_type": "movie",
|
||||
"stream_id": 5002,
|
||||
"stream_icon": "http://example.com/posters/movie2.jpg",
|
||||
"added": "1704153600",
|
||||
"category_id": "11",
|
||||
"direct_source": "",
|
||||
"rating": 6.8,
|
||||
"rating_5based": 3,
|
||||
"custom_sid": null,
|
||||
"container_extension": "mp4"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
#### Response Fields
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `num` | integer | Movie number in list |
|
||||
| `name` | string | Movie title |
|
||||
| `stream_type` | string | Always `movie` for VOD |
|
||||
| `stream_id` | integer | Unique movie identifier |
|
||||
| `stream_icon` | string | Movie poster URL |
|
||||
| `added` | string | Timestamp when movie was added |
|
||||
| `category_id` | string | Category the movie belongs to |
|
||||
| `direct_source` | string | Direct source URL (if available) |
|
||||
| `rating` | float/null | Rating out of 10 |
|
||||
| `rating_5based` | integer | Rating out of 5 (rounded up) |
|
||||
| `custom_sid` | null | Custom stream ID |
|
||||
| `container_extension` | string | File extension (mp4, mkv, avi, etc.) |
|
||||
|
||||
---
|
||||
|
||||
### Get VOD Info
|
||||
|
||||
Retrieve detailed information about a specific movie.
|
||||
|
||||
#### Request
|
||||
|
||||
**Endpoint:** `GET /player_api.php`
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
|-----------|------|----------|-------------|
|
||||
| `username` | string | ✅ Yes | Account username |
|
||||
| `password` | string | ✅ Yes | Account password |
|
||||
| `action` | string | ✅ Yes | `get_vod_info` |
|
||||
| `vod_id` | integer | ✅ Yes | Movie/VOD stream ID |
|
||||
|
||||
#### Example Request
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_vod_info&vod_id=5001"
|
||||
```
|
||||
|
||||
#### Example Response
|
||||
|
||||
```json
|
||||
{
|
||||
"info": {
|
||||
"imdb_id": "",
|
||||
"movie_image": "http://example.com/posters/movie1.jpg",
|
||||
"genre": "Action, Thriller",
|
||||
"plot": "An exciting action movie about a hero saving the world.",
|
||||
"cast": "Actor One, Actor Two, Actor Three",
|
||||
"director": "Famous Director",
|
||||
"rating": 7.5,
|
||||
"releasedate": "2024-01-15",
|
||||
"duration_secs": 7200,
|
||||
"duration": "02:00:00",
|
||||
"bitrate": 4500,
|
||||
"kinopoisk_url": "",
|
||||
"episode_run_time": "",
|
||||
"youtube_trailer": "",
|
||||
"actors": "Actor One, Actor Two, Actor Three",
|
||||
"name": "Action Movie 2024",
|
||||
"name_o": "Action Movie 2024",
|
||||
"cover_big": "http://example.com/posters/movie1.jpg",
|
||||
"description": "An exciting action movie about a hero saving the world.",
|
||||
"age": "",
|
||||
"rating_mpaa": "",
|
||||
"rating_count_kinopoisk": 0,
|
||||
"country": "",
|
||||
"backdrop_path": [],
|
||||
"audio": [],
|
||||
"video": []
|
||||
},
|
||||
"movie_data": {
|
||||
"stream_id": 5001,
|
||||
"name": "Action Movie 2024",
|
||||
"added": "1704067200",
|
||||
"category_id": "10",
|
||||
"container_extension": "mkv",
|
||||
"custom_sid": "",
|
||||
"direct_source": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Response Fields
|
||||
|
||||
##### `info` Object
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `imdb_id` | string | IMDB identifier |
|
||||
| `movie_image` | string | Movie poster URL |
|
||||
| `genre` | string | Movie genres |
|
||||
| `plot` | string | Movie plot/synopsis |
|
||||
| `cast` | string | Cast members |
|
||||
| `director` | string | Director name |
|
||||
| `rating` | float/null | Rating out of 10 |
|
||||
| `releasedate` | string | Release date |
|
||||
| `duration_secs` | integer | Duration in seconds |
|
||||
| `duration` | string | Duration formatted (HH:MM:SS) |
|
||||
| `bitrate` | integer | Video bitrate |
|
||||
| `youtube_trailer` | string | YouTube trailer URL |
|
||||
| `name` | string | Movie title |
|
||||
| `description` | string | Movie description |
|
||||
| `backdrop_path` | array | Backdrop images |
|
||||
| `audio` | array | Audio track information |
|
||||
| `video` | array | Video track information |
|
||||
|
||||
##### `movie_data` Object
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `stream_id` | integer | Stream identifier |
|
||||
| `name` | string | Movie title |
|
||||
| `added` | string | Timestamp when added |
|
||||
| `category_id` | string | Category ID |
|
||||
| `container_extension` | string | File extension |
|
||||
| `custom_sid` | string | Custom stream ID |
|
||||
| `direct_source` | string | Direct source URL |
|
||||
|
||||
#### Playing a VOD Stream
|
||||
|
||||
To play a movie, use this URL format:
|
||||
|
||||
```
|
||||
http://SERVER:PORT/movie/USERNAME/PASSWORD/STREAM_ID.EXTENSION
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```
|
||||
http://example.com:8080/movie/john/secret123/5001.mkv
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Series
|
||||
|
||||
> ⚠️ **Note:** Series endpoints are not available in this API version. The available actions are limited to:
|
||||
> - `get_live_categories`
|
||||
> - `get_vod_categories`
|
||||
> - `get_live_streams`
|
||||
> - `get_vod_streams`
|
||||
> - `get_vod_info`
|
||||
> - `get_short_epg`
|
||||
> - `get_simple_data_table`
|
||||
|
||||
Series functionality may be available in other API endpoints or a different version.
|
||||
|
||||
---
|
||||
|
||||
## EPG (Electronic Program Guide)
|
||||
|
||||
### Get Short EPG
|
||||
|
||||
Retrieve a short EPG listing for a specific channel.
|
||||
|
||||
#### Request
|
||||
|
||||
**Endpoint:** `GET /player_api.php`
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
|-----------|------|----------|-------------|
|
||||
| `username` | string | ✅ Yes | Account username |
|
||||
| `password` | string | ✅ Yes | Account password |
|
||||
| `action` | string | ✅ Yes | `get_short_epg` |
|
||||
| `stream_id` | integer | ✅ Yes | Live stream ID |
|
||||
| `limit` | integer | ❌ No | Number of EPG entries (default: 4) |
|
||||
|
||||
#### Example Request - Default Limit
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_short_epg&stream_id=101"
|
||||
```
|
||||
|
||||
#### Example Request - Custom Limit
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_short_epg&stream_id=101&limit=10"
|
||||
```
|
||||
|
||||
#### Example Response
|
||||
|
||||
```json
|
||||
{
|
||||
"epg_listings": [
|
||||
{
|
||||
"id": "12345",
|
||||
"epg_id": "67890",
|
||||
"title": "TW9ybmluZyBOZXdz",
|
||||
"description": "RGFpbHkgbmV3cyBicm9hZGNhc3Q=",
|
||||
"start": "2024-12-31 08:00:00",
|
||||
"end": "2024-12-31 09:00:00",
|
||||
"start_timestamp": 1704009600,
|
||||
"stop_timestamp": 1704013200
|
||||
},
|
||||
{
|
||||
"id": "12346",
|
||||
"epg_id": "67890",
|
||||
"title": "U3BvcnRzIFVwZGF0ZQ==",
|
||||
"description": "TGF0ZXN0IHNwb3J0cyBoaWdobGlnaHRz",
|
||||
"start": "2024-12-31 09:00:00",
|
||||
"end": "2024-12-31 10:00:00",
|
||||
"start_timestamp": 1704013200,
|
||||
"stop_timestamp": 1704016800
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Response Fields
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `id` | string | EPG entry ID |
|
||||
| `epg_id` | string | EPG channel ID |
|
||||
| `title` | string | Program title (**Base64 encoded**) |
|
||||
| `description` | string | Program description (**Base64 encoded**) |
|
||||
| `start` | string | Start time (Y-m-d H:i:s) |
|
||||
| `end` | string | End time (Y-m-d H:i:s) |
|
||||
| `start_timestamp` | integer | Start time as Unix timestamp |
|
||||
| `stop_timestamp` | integer | End time as Unix timestamp |
|
||||
|
||||
> **Important:** The `title` and `description` fields are **Base64 encoded**. Decode them to get the actual text.
|
||||
|
||||
#### Decoding Example (JavaScript)
|
||||
|
||||
```javascript
|
||||
const title = atob("TW9ybmluZyBOZXdz"); // "Morning News"
|
||||
const description = atob("RGFpbHkgbmV3cyBicm9hZGNhc3Q="); // "Daily news broadcast"
|
||||
```
|
||||
|
||||
#### Decoding Example (Python)
|
||||
|
||||
```python
|
||||
import base64
|
||||
title = base64.b64decode("TW9ybmluZyBOZXdz").decode('utf-8') # "Morning News"
|
||||
```
|
||||
|
||||
#### Decoding Example (PHP)
|
||||
|
||||
```php
|
||||
$title = base64_decode("TW9ybmluZyBOZXdz"); // "Morning News"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Get Full EPG
|
||||
|
||||
Retrieve a complete EPG listing for a specific channel (up to 1000 entries).
|
||||
|
||||
#### Request
|
||||
|
||||
**Endpoint:** `GET /player_api.php`
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
|-----------|------|----------|-------------|
|
||||
| `username` | string | ✅ Yes | Account username |
|
||||
| `password` | string | ✅ Yes | Account password |
|
||||
| `action` | string | ✅ Yes | `get_simple_data_table` |
|
||||
| `stream_id` | integer | ✅ Yes | Live stream ID |
|
||||
|
||||
#### Example Request
|
||||
|
||||
```bash
|
||||
curl -X GET "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_simple_data_table&stream_id=101"
|
||||
```
|
||||
|
||||
#### Example Response
|
||||
|
||||
```json
|
||||
{
|
||||
"epg_listings": [
|
||||
{
|
||||
"id": "12345",
|
||||
"epg_id": "67890",
|
||||
"title": "TW9ybmluZyBOZXdz",
|
||||
"description": "RGFpbHkgbmV3cyBicm9hZGNhc3Q=",
|
||||
"start": "2024-12-31 08:00:00",
|
||||
"end": "2024-12-31 09:00:00",
|
||||
"start_timestamp": 1704009600,
|
||||
"stop_timestamp": 1704013200,
|
||||
"now_playing": 1,
|
||||
"has_archive": 0
|
||||
},
|
||||
{
|
||||
"id": "12346",
|
||||
"epg_id": "67890",
|
||||
"title": "U3BvcnRzIFVwZGF0ZQ==",
|
||||
"description": "TGF0ZXN0IHNwb3J0cyBoaWdobGlnaHRz",
|
||||
"start": "2024-12-31 09:00:00",
|
||||
"end": "2024-12-31 10:00:00",
|
||||
"start_timestamp": 1704013200,
|
||||
"stop_timestamp": 1704016800,
|
||||
"now_playing": 0,
|
||||
"has_archive": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### Additional Response Fields
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `now_playing` | integer | Currently playing indicator (1 = yes, 0 = no) |
|
||||
| `has_archive` | integer | Archive availability (1 = yes, 0 = no) |
|
||||
|
||||
> **Note:** The first entry in the response has `now_playing: 1` to indicate it's the current program.
|
||||
|
||||
---
|
||||
|
||||
## Response Codes
|
||||
|
||||
### HTTP Status Codes
|
||||
|
||||
| Code | Description |
|
||||
|------|-------------|
|
||||
| 200 | Success |
|
||||
| 400 | Bad Request |
|
||||
| 401 | Unauthorized (invalid credentials) |
|
||||
| 500 | Server Error |
|
||||
|
||||
### Authentication Response
|
||||
|
||||
| `auth` Value | Description |
|
||||
|--------------|-------------|
|
||||
| `1` | Authentication successful |
|
||||
| `0` | Authentication failed |
|
||||
|
||||
---
|
||||
|
||||
## Data Models
|
||||
|
||||
### User Object
|
||||
|
||||
```json
|
||||
{
|
||||
"username": "string",
|
||||
"password": "string",
|
||||
"auth": "integer",
|
||||
"message": "string",
|
||||
"status": "string (Active|Banned|Disabled|Expired)",
|
||||
"exp_date": "integer|null",
|
||||
"is_trial": "integer",
|
||||
"active_cons": "integer",
|
||||
"created_at": "integer",
|
||||
"max_connections": "integer",
|
||||
"allowed_output_formats": ["string"]
|
||||
}
|
||||
```
|
||||
|
||||
### Category Object
|
||||
|
||||
```json
|
||||
{
|
||||
"category_id": "string",
|
||||
"category_name": "string",
|
||||
"parent_id": "integer"
|
||||
}
|
||||
```
|
||||
|
||||
### Live Stream Object
|
||||
|
||||
```json
|
||||
{
|
||||
"num": "integer",
|
||||
"name": "string",
|
||||
"stream_type": "live",
|
||||
"stream_id": "integer",
|
||||
"stream_icon": "string",
|
||||
"epg_channel_id": "string",
|
||||
"added": "string",
|
||||
"category_id": "string",
|
||||
"tv_archive": "integer",
|
||||
"direct_source": "string",
|
||||
"tv_archive_duration": "integer"
|
||||
}
|
||||
```
|
||||
|
||||
### VOD Stream Object
|
||||
|
||||
```json
|
||||
{
|
||||
"num": "integer",
|
||||
"name": "string",
|
||||
"stream_type": "movie",
|
||||
"stream_id": "integer",
|
||||
"stream_icon": "string",
|
||||
"added": "string",
|
||||
"category_id": "string",
|
||||
"direct_source": "string",
|
||||
"rating": "float|null",
|
||||
"rating_5based": "integer",
|
||||
"custom_sid": "null",
|
||||
"container_extension": "string"
|
||||
}
|
||||
```
|
||||
|
||||
### EPG Entry Object
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "string",
|
||||
"epg_id": "string",
|
||||
"title": "string (Base64)",
|
||||
"description": "string (Base64)",
|
||||
"start": "string (Y-m-d H:i:s)",
|
||||
"end": "string (Y-m-d H:i:s)",
|
||||
"start_timestamp": "integer",
|
||||
"stop_timestamp": "integer",
|
||||
"now_playing": "integer (only in get_simple_data_table)",
|
||||
"has_archive": "integer (only in get_simple_data_table)"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Stream URL Formats
|
||||
|
||||
### Live Stream URL
|
||||
|
||||
```
|
||||
http://SERVER:PORT/USERNAME/PASSWORD/STREAM_ID.EXTENSION
|
||||
```
|
||||
|
||||
**Extensions:** `m3u8`, `ts`
|
||||
|
||||
**Example:**
|
||||
```
|
||||
http://example.com:8080/john/secret123/101.m3u8
|
||||
```
|
||||
|
||||
### VOD/Movie URL
|
||||
|
||||
```
|
||||
http://SERVER:PORT/movie/USERNAME/PASSWORD/STREAM_ID.EXTENSION
|
||||
```
|
||||
|
||||
**Extensions:** `mp4`, `mkv`, `avi` (as specified in `container_extension`)
|
||||
|
||||
**Example:**
|
||||
```
|
||||
http://example.com:8080/movie/john/secret123/5001.mkv
|
||||
```
|
||||
|
||||
### Series Episode URL
|
||||
|
||||
```
|
||||
http://SERVER:PORT/series/USERNAME/PASSWORD/STREAM_ID.EXTENSION
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference
|
||||
|
||||
### Complete API Endpoints Summary
|
||||
|
||||
| Endpoint | Method | Action | Required Params | Optional Params |
|
||||
|----------|--------|--------|-----------------|-----------------|
|
||||
| `/player_api.php` | GET | User Info | `username`, `password` | - |
|
||||
| `/player_api.php` | GET | `get_live_categories` | `username`, `password` | - |
|
||||
| `/player_api.php` | GET | `get_live_streams` | `username`, `password` | `category_id` |
|
||||
| `/player_api.php` | GET | `get_vod_categories` | `username`, `password` | - |
|
||||
| `/player_api.php` | GET | `get_vod_streams` | `username`, `password` | `category_id` |
|
||||
| `/player_api.php` | GET | `get_vod_info` | `username`, `password`, `vod_id` | - |
|
||||
| `/player_api.php` | GET | `get_short_epg` | `username`, `password`, `stream_id` | `limit` |
|
||||
| `/player_api.php` | GET | `get_simple_data_table` | `username`, `password`, `stream_id` | - |
|
||||
|
||||
---
|
||||
|
||||
## Example Workflow
|
||||
|
||||
### 1. Authenticate and Get User Info
|
||||
|
||||
```bash
|
||||
curl "http://example.com:8080/player_api.php?username=john&password=secret123"
|
||||
```
|
||||
|
||||
### 2. Get Live Categories
|
||||
|
||||
```bash
|
||||
curl "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_live_categories"
|
||||
```
|
||||
|
||||
### 3. Get Streams in a Category
|
||||
|
||||
```bash
|
||||
curl "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_live_streams&category_id=1"
|
||||
```
|
||||
|
||||
### 4. Get EPG for a Stream
|
||||
|
||||
```bash
|
||||
curl "http://example.com:8080/player_api.php?username=john&password=secret123&action=get_short_epg&stream_id=101"
|
||||
```
|
||||
|
||||
### 5. Play the Stream
|
||||
|
||||
```
|
||||
http://example.com:8080/john/secret123/101.m3u8
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Documentation generated based on Xtream Codes Player API source code.*
|
||||
Reference in New Issue
Block a user