Initial commit: Xtream Codes API Documentation
Comprehensive API documentation for Xtream Codes IPTV Panel v2.9.2 Includes: - Complete endpoint reference for all 8 APIs - Request/response examples with curl commands - Authentication methods documentation - IPTV-specific patterns and integrations - Data models and error codes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
# Xtream Codes API - Quick Endpoint Reference
|
||||
|
||||
## Player API (`/player_api.php`)
|
||||
|
||||
| Action | Method | Required Params | Description |
|
||||
|--------|--------|-----------------|-------------|
|
||||
| (default) | GET | username, password | Get user info & server info |
|
||||
| get_live_categories | GET | username, password | List live TV categories |
|
||||
| get_live_streams | GET | username, password, [category_id] | List live channels |
|
||||
| get_vod_categories | GET | username, password | List VOD/movie categories |
|
||||
| get_vod_streams | GET | username, password, [category_id] | List movies |
|
||||
| get_vod_info | GET | username, password, vod_id | Get movie details |
|
||||
| get_series_categories | GET | username, password | List series categories |
|
||||
| get_series | GET | username, password, [category_id] | List TV series |
|
||||
| get_series_info | GET | username, password, series_id | Get series details & episodes |
|
||||
| get_short_epg | GET | username, password, stream_id, [limit] | Get current EPG for channel |
|
||||
| get_simple_data_table | GET | username, password, stream_id | Get EPG in table format |
|
||||
|
||||
---
|
||||
|
||||
## Panel API (`/panel_api.php`)
|
||||
|
||||
| Action | Method | Required Params | Description |
|
||||
|--------|--------|-----------------|-------------|
|
||||
| (default) | GET | username, password | Get full data (user, server, categories, channels) |
|
||||
| get_epg | GET | username, password, stream_id | Get EPG for stream |
|
||||
|
||||
---
|
||||
|
||||
## Admin API (`/api.php`)
|
||||
|
||||
**Note:** IP-restricted to authorized server IPs only.
|
||||
|
||||
### Server Management
|
||||
| Sub-action | Required Params | Description |
|
||||
|------------|-----------------|-------------|
|
||||
| server/list | - | List all servers |
|
||||
|
||||
### Stream Management
|
||||
| Sub-action | Required Params | Description |
|
||||
|------------|-----------------|-------------|
|
||||
| stream/start | stream_id | Start stream |
|
||||
| stream/stop | stream_id | Stop stream |
|
||||
| stream/list | - | List all streams |
|
||||
| stream/online | - | List online streams |
|
||||
| stream/offline | - | List offline streams |
|
||||
|
||||
### VOD Management
|
||||
| Sub-action | Required Params | Description |
|
||||
|------------|-----------------|-------------|
|
||||
| vod/start | stream_id | Start VOD encoding |
|
||||
| vod/stop | stream_id | Stop VOD encoding |
|
||||
|
||||
### User Management
|
||||
| Sub-action | Required Params | Description |
|
||||
|------------|-----------------|-------------|
|
||||
| user/info | user_id OR username | Get user info |
|
||||
| user/create | username, password, [many optional] | Create user |
|
||||
| user/edit | user_id, [fields to update] | Edit user |
|
||||
|
||||
### STB/MAG Management
|
||||
| Sub-action | Required Params | Description |
|
||||
|------------|-----------------|-------------|
|
||||
| stb/info | mag_id OR mac | Get STB info |
|
||||
| stb/create | mac, user_id | Create STB |
|
||||
| stb/edit | mag_id, [fields to update] | Edit STB |
|
||||
|
||||
### Reseller Management
|
||||
| Sub-action | Required Params | Description |
|
||||
|------------|-----------------|-------------|
|
||||
| reg_user/list | - | List resellers |
|
||||
| reg_user/credits | reg_user_id | Get reseller credits |
|
||||
|
||||
---
|
||||
|
||||
## MAG Portal API (`/portal.php`)
|
||||
|
||||
### STB Actions (`type=stb`)
|
||||
| Action | Required Params | Description |
|
||||
|--------|-----------------|-------------|
|
||||
| handshake | mac | Initial handshake, get token |
|
||||
| get_profile | - | Get device profile |
|
||||
| get_modules | - | Get available modules |
|
||||
| get_localization | - | Get language strings |
|
||||
| get_locales | - | Get available locales |
|
||||
| get_timezones | - | Get timezones |
|
||||
| get_preload_images | gmode | Get theme images |
|
||||
| get_settings_profile | - | Get settings |
|
||||
| set_volume | vol | Set volume |
|
||||
| set_locale | locale | Set locale |
|
||||
| set_parent_password | pass, repeat_pass | Set parental password |
|
||||
| set_playback_buffer | playback_buffer_bytes, playback_buffer_size | Set buffer |
|
||||
|
||||
### ITV Actions (`type=itv`)
|
||||
| Action | Required Params | Description |
|
||||
|--------|-----------------|-------------|
|
||||
| get_genres | - | Get live categories |
|
||||
| get_ordered_list | [genre, sortby, fav] | Get channel list |
|
||||
| get_all_channels | - | Get all channels |
|
||||
| get_all_fav_channels | [genre] | Get favorite channels |
|
||||
| create_link | cmd | Generate stream URL |
|
||||
| get_short_epg | ch_id | Get EPG for channel |
|
||||
| get_epg_info | [period] | Get full EPG |
|
||||
| set_fav | fav_ch | Set favorites (comma-separated) |
|
||||
| get_fav_ids | - | Get favorite IDs |
|
||||
| set_last_id | id | Set last watched |
|
||||
|
||||
### VOD Actions (`type=vod`)
|
||||
| Action | Required Params | Description |
|
||||
|--------|-----------------|-------------|
|
||||
| get_categories | - | Get VOD categories |
|
||||
| get_ordered_list | [category, sortby, search, abc, genre, years, fav] | Get movies |
|
||||
| create_link | cmd, [series] | Generate VOD URL |
|
||||
| set_fav | video_id | Add to favorites |
|
||||
| del_fav | video_id | Remove from favorites |
|
||||
| get_years | - | Get available years |
|
||||
| get_abc | - | Get alphabet filter |
|
||||
|
||||
### Series Actions (`type=series`)
|
||||
| Action | Required Params | Description |
|
||||
|--------|-----------------|-------------|
|
||||
| get_categories | - | Get series categories |
|
||||
| get_ordered_list | [category, sortby, search, movie_id] | Get series |
|
||||
| set_fav | video_id | Add to favorites |
|
||||
| del_fav | video_id | Remove from favorites |
|
||||
|
||||
### Watchdog Actions (`type=watchdog`)
|
||||
| Action | Required Params | Description |
|
||||
|--------|-----------------|-------------|
|
||||
| get_events | - | Get pending events |
|
||||
| confirm_event | event_active_id | Confirm event |
|
||||
|
||||
---
|
||||
|
||||
## Enigma2 API (`/enigma2.php`)
|
||||
|
||||
| Type | Required Params | Description |
|
||||
|------|-----------------|-------------|
|
||||
| (default) | username, password | Main menu |
|
||||
| get_live_categories | username, password | Live categories |
|
||||
| get_live_streams | username, password, [cat_id] | Live streams |
|
||||
| get_vod_categories | username, password | VOD categories |
|
||||
| get_vod_streams | username, password, [cat_id] | VOD streams |
|
||||
| get_series_categories | username, password | Series categories |
|
||||
| get_series | username, password, [cat_id] | Series list |
|
||||
| get_seasons | username, password, series_id | Season list |
|
||||
| get_series_streams | username, password, series_id, season | Episodes |
|
||||
|
||||
---
|
||||
|
||||
## Streaming Endpoints
|
||||
|
||||
### Live Streaming
|
||||
```
|
||||
GET /live/{username}/{password}/{stream_id}.ts
|
||||
GET /live/{username}/{password}/{stream_id}.m3u8
|
||||
GET /{username}/{password}/{stream_id}
|
||||
```
|
||||
|
||||
### VOD Streaming
|
||||
```
|
||||
GET /movie/{username}/{password}/{stream_id}.{ext}
|
||||
Extensions: mp4, mkv, avi, 3gp, flv, wmv, mov, ts
|
||||
```
|
||||
|
||||
### Series Streaming
|
||||
```
|
||||
GET /series/{username}/{password}/{stream_id}.{ext}
|
||||
```
|
||||
|
||||
### Timeshift/Catchup
|
||||
```
|
||||
GET /timeshift/{username}/{password}/{duration}/{start}/{stream_id}
|
||||
GET /timeshift/{username}/{password}/{duration}/{start}/{stream_id}.m3u8
|
||||
Start format: YYYY-MM-DD:HH-MM or YYYYMMDD-HH
|
||||
```
|
||||
|
||||
### HLS Segments
|
||||
```
|
||||
GET /hls/{username}/{password}/{stream_id}/{segment}.ts
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Other Endpoints
|
||||
|
||||
### XMLTV/EPG
|
||||
```
|
||||
GET /xmltv.php?username={user}&password={pass}&prev_days=1&next_days=3
|
||||
```
|
||||
|
||||
### Playlist Generator
|
||||
```
|
||||
GET /get.php?username={user}&password={pass}&type=m3u_plus&output=ts
|
||||
Types: m3u, m3u_plus, m3u8
|
||||
Outputs: ts, m3u8, rtmp
|
||||
```
|
||||
@@ -0,0 +1,424 @@
|
||||
# Xtream Codes - IPTV Patterns & Integrations
|
||||
|
||||
## 1. Stream URL Patterns
|
||||
|
||||
### Live TV URL Structure
|
||||
```
|
||||
http://{server}:{port}/live/{username}/{password}/{stream_id}.{extension}
|
||||
```
|
||||
|
||||
| Extension | Use Case | Content-Type |
|
||||
|-----------|----------|--------------|
|
||||
| .ts | MPEG Transport Stream (most compatible) | video/mp2t |
|
||||
| .m3u8 | HLS Adaptive Streaming | application/x-mpegurl |
|
||||
|
||||
### VOD URL Structure
|
||||
```
|
||||
http://{server}:{port}/movie/{username}/{password}/{stream_id}.{extension}
|
||||
```
|
||||
|
||||
Container extensions: mp4, mkv, avi, 3gp, flv, wmv, mov, ts
|
||||
|
||||
### Series URL Structure
|
||||
```
|
||||
http://{server}:{port}/series/{username}/{password}/{episode_stream_id}.{extension}
|
||||
```
|
||||
|
||||
### Timeshift/Catchup URL Structure
|
||||
```
|
||||
http://{server}:{port}/timeshift/{username}/{password}/{duration_minutes}/{start_time}/{stream_id}
|
||||
```
|
||||
|
||||
Start time formats:
|
||||
- `YYYY-MM-DD:HH-MM` (e.g., `2025-12-24:10-00`)
|
||||
- `YYYYMMDD-HH` (e.g., `20251224-10`)
|
||||
|
||||
---
|
||||
|
||||
## 2. M3U Playlist Format
|
||||
|
||||
### Standard M3U Plus Format
|
||||
```m3u
|
||||
#EXTM3U
|
||||
#EXTINF:-1 tvg-id="channel.epg" tvg-name="Channel Name" tvg-logo="http://icon.url" group-title="Category",Channel Name
|
||||
http://server:25461/live/user/pass/123.ts
|
||||
```
|
||||
|
||||
### Extended Attributes
|
||||
| Attribute | Description |
|
||||
|-----------|-------------|
|
||||
| tvg-id | EPG channel identifier |
|
||||
| tvg-name | Display name |
|
||||
| tvg-logo | Channel icon URL |
|
||||
| group-title | Category name |
|
||||
| tvg-chno | Channel number |
|
||||
| radio | "true" for radio streams |
|
||||
|
||||
### Catchup Support Tags
|
||||
```m3u
|
||||
#EXTINF:-1 tvg-id="channel.epg" catchup="default" catchup-source="http://server:25461/timeshift/user/pass/{duration:60}/{start}/123.ts" catchup-days="7",Channel Name
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. EPG/XMLTV Integration
|
||||
|
||||
### XMLTV Format
|
||||
```xml
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE tv SYSTEM "xmltv.dtd">
|
||||
<tv generator-info-name="Provider Name">
|
||||
<channel id="channel.epg">
|
||||
<display-name>Channel Name</display-name>
|
||||
<icon src="http://icon.url"/>
|
||||
</channel>
|
||||
<programme start="20251224120000 +0000" stop="20251224130000 +0000" channel="channel.epg">
|
||||
<title lang="en">Program Title</title>
|
||||
<desc lang="en">Description</desc>
|
||||
<category>News</category>
|
||||
</programme>
|
||||
</tv>
|
||||
```
|
||||
|
||||
### EPG URL
|
||||
```
|
||||
http://server:25461/xmltv.php?username={user}&password={pass}
|
||||
```
|
||||
|
||||
### EPG Mapping
|
||||
The `tvg-id` attribute in M3U must match the `channel id` in XMLTV.
|
||||
|
||||
---
|
||||
|
||||
## 4. MAG/Stalker Portal Integration
|
||||
|
||||
### Authentication Flow
|
||||
1. Device sends handshake with MAC address
|
||||
2. Server returns token
|
||||
3. Device includes token in all subsequent requests
|
||||
4. Watchdog keeps session alive
|
||||
|
||||
### Required Headers
|
||||
```
|
||||
Authorization: Bearer {token}
|
||||
Cookie: mac={mac_address}; timezone={timezone}; locale={locale}
|
||||
X-User-Agent: Model: MAG254; Link: WiFi
|
||||
```
|
||||
|
||||
### Stalker URL Encryption
|
||||
For secure streaming, URLs are encrypted:
|
||||
```php
|
||||
$stalker_key = base64_encode(mc_encrypt("{$mac}={$ip}={$stream_id}={$expire_time}", $secret));
|
||||
```
|
||||
|
||||
### Event Types
|
||||
| Event | Description |
|
||||
|-------|-------------|
|
||||
| send_msg | Display message |
|
||||
| reboot | Reboot device |
|
||||
| reload_portal | Reload portal |
|
||||
| play_channel | Auto-tune to channel |
|
||||
| cut_off | Disconnect device |
|
||||
|
||||
---
|
||||
|
||||
## 5. Enigma2 Integration
|
||||
|
||||
### Service Reference Format
|
||||
Enigma2 uses service references for channels:
|
||||
```
|
||||
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http://server:25461/live/user/pass/123.ts:Channel Name
|
||||
#DESCRIPTION Channel Name
|
||||
```
|
||||
|
||||
### Bouquet File Format
|
||||
```
|
||||
#NAME Provider Bouquet
|
||||
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http://server:25461/live/user/pass/123.ts:Channel 1
|
||||
#DESCRIPTION Channel 1
|
||||
#SERVICE 4097:0:1:0:0:0:0:0:0:0:http://server:25461/live/user/pass/124.ts:Channel 2
|
||||
#DESCRIPTION Channel 2
|
||||
```
|
||||
|
||||
### XML Response Format
|
||||
All Enigma2 API responses use XML with Base64-encoded text:
|
||||
```xml
|
||||
<channel>
|
||||
<title>Q2hhbm5lbCBOYW1l</title> <!-- Base64: "Channel Name" -->
|
||||
<description>RGVzY3JpcHRpb24=</description>
|
||||
<stream_url><![CDATA[http://server/live/user/pass/123.ts]]></stream_url>
|
||||
</channel>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. HLS Streaming
|
||||
|
||||
### Playlist Structure
|
||||
```m3u
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-TARGETDURATION:3
|
||||
#EXT-X-MEDIA-SEQUENCE:1000
|
||||
#EXTINF:3.0,
|
||||
123_1000.ts?token=abc123
|
||||
#EXTINF:3.0,
|
||||
123_1001.ts?token=def456
|
||||
#EXTINF:3.0,
|
||||
123_1002.ts?token=ghi789
|
||||
```
|
||||
|
||||
### Segment Token Validation
|
||||
Each segment URL includes a token:
|
||||
```
|
||||
token = md5(segment_name + username + crypt_key + filesize)
|
||||
```
|
||||
|
||||
### Connection Tracking
|
||||
- HLS connections tracked via `user_activity_now` table
|
||||
- `hls_last_read` timestamp updated per segment request
|
||||
- Inactive HLS connections cleaned up by cron
|
||||
|
||||
---
|
||||
|
||||
## 7. Load Balancing
|
||||
|
||||
### Server Selection
|
||||
Load balancer selects optimal server based on:
|
||||
- Server load (active connections)
|
||||
- Geographic proximity
|
||||
- Server status (online/offline)
|
||||
- Stream availability
|
||||
|
||||
### Redirect Mechanism
|
||||
```nginx
|
||||
location /live/ {
|
||||
proxy_pass http://load_balancer;
|
||||
}
|
||||
```
|
||||
|
||||
### Balance Configuration
|
||||
`nginx/conf/balance.conf`:
|
||||
```nginx
|
||||
upstream streaming_servers {
|
||||
server 192.168.1.1:25461 weight=5;
|
||||
server 192.168.1.2:25461 weight=3;
|
||||
server 192.168.1.3:25461 backup;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. TV Archive/Catchup
|
||||
|
||||
### Archive Storage
|
||||
```
|
||||
/home/xtreamcodes/iptv_xtream_codes/tv_archive/{stream_id}/YYYY-MM-DD:HH-MM.ts
|
||||
```
|
||||
|
||||
### Archive Duration
|
||||
Configured per-stream via `tv_archive_duration` (days).
|
||||
|
||||
### Timeshift Playback
|
||||
```bash
|
||||
# Last 60 minutes from channel 123
|
||||
curl "http://server/timeshift/user/pass/60/2025-12-24:10-00/123"
|
||||
|
||||
# HLS format for player apps
|
||||
curl "http://server/timeshift/user/pass/60/2025-12-24:10-00/123.m3u8"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Multi-Server Architecture
|
||||
|
||||
### Server Roles
|
||||
| Role | Description |
|
||||
|------|-------------|
|
||||
| Main | Database, panel, management |
|
||||
| Load Balancer | Traffic distribution |
|
||||
| Streaming | Stream transcoding/delivery |
|
||||
|
||||
### Inter-Server Communication
|
||||
Via `system_api.php`:
|
||||
- Connection state synchronization
|
||||
- Stream start/stop commands
|
||||
- User activity tracking
|
||||
|
||||
### Server Registration
|
||||
Each server has unique `SERVER_ID` from config file.
|
||||
|
||||
---
|
||||
|
||||
## 10. Authentication & Security
|
||||
|
||||
### User Authentication Checks (in order)
|
||||
1. Username/password validation
|
||||
2. Account expiration check
|
||||
3. Admin enabled check
|
||||
4. User enabled check
|
||||
5. IP whitelist check
|
||||
6. Country restriction check
|
||||
7. User agent validation
|
||||
8. ISP restriction check
|
||||
9. Max connections check
|
||||
10. Bouquet access check
|
||||
|
||||
### Security Features
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| GeoIP | Country-based restrictions |
|
||||
| ISP Lock | Restrict to specific ISPs |
|
||||
| IP Whitelist | Per-user allowed IPs |
|
||||
| UA Whitelist | Per-user allowed user agents |
|
||||
| Max Connections | Concurrent connection limit |
|
||||
| Flood Protection | Rate limiting failed auth |
|
||||
|
||||
### Play Token System
|
||||
For MAG devices:
|
||||
```
|
||||
play_token = random_string:expire_timestamp:stream_id
|
||||
```
|
||||
Validated before streaming to prevent URL sharing.
|
||||
|
||||
---
|
||||
|
||||
## 11. Bouquet System
|
||||
|
||||
### Bouquet Structure
|
||||
Bouquets group streams and categories for user access control.
|
||||
|
||||
```json
|
||||
{
|
||||
"bouquet_id": 1,
|
||||
"bouquet_name": "Basic Package",
|
||||
"bouquet_channels": [1, 2, 3, 4, 5],
|
||||
"bouquet_series": [10, 11, 12],
|
||||
"bouquet_movies": [100, 101, 102]
|
||||
}
|
||||
```
|
||||
|
||||
### User Bouquet Assignment
|
||||
```json
|
||||
{
|
||||
"user_id": 100,
|
||||
"bouquet": [1, 2, 3] // User has access to bouquets 1, 2, and 3
|
||||
}
|
||||
```
|
||||
|
||||
### Category-Based Access
|
||||
Categories can be assigned to bouquets for bulk access control.
|
||||
|
||||
---
|
||||
|
||||
## 12. Reseller System
|
||||
|
||||
### Reseller Hierarchy
|
||||
```
|
||||
Admin
|
||||
├── Reseller 1
|
||||
│ ├── User A
|
||||
│ ├── User B
|
||||
│ └── Sub-reseller 1.1
|
||||
│ └── User C
|
||||
└── Reseller 2
|
||||
└── User D
|
||||
```
|
||||
|
||||
### Credit System
|
||||
Resellers have credits to create/extend users:
|
||||
- 1 credit = 1 month subscription
|
||||
- Credits deducted on user creation/extension
|
||||
- Admin can add credits to resellers
|
||||
|
||||
### Reseller Permissions
|
||||
| Permission | Description |
|
||||
|------------|-------------|
|
||||
| add_user | Can create users |
|
||||
| edit_user | Can modify own users |
|
||||
| delete_user | Can delete own users |
|
||||
| add_mag | Can register MAG devices |
|
||||
| add_e2 | Can register Enigma2 |
|
||||
| allowed_ips | Restrict reseller panel access |
|
||||
|
||||
---
|
||||
|
||||
## 13. Output Formats
|
||||
|
||||
### User-Allowed Formats
|
||||
```json
|
||||
{
|
||||
"allowed_output_formats": ["ts", "m3u8", "rtmp"]
|
||||
}
|
||||
```
|
||||
|
||||
### Format Handling
|
||||
| Format | Handler | Use Case |
|
||||
|--------|---------|----------|
|
||||
| ts | clients_live.php | Direct streaming |
|
||||
| m3u8 | clients_live.php | HLS adaptive |
|
||||
| rtmp | rtmp handler | Flash players |
|
||||
|
||||
### Container Mapping
|
||||
```php
|
||||
$containers = [
|
||||
'ts' => 'video/mp2t',
|
||||
'm3u8' => 'application/x-mpegurl',
|
||||
'mp4' => 'video/mp4',
|
||||
'mkv' => 'video/x-matroska',
|
||||
'avi' => 'video/x-msvideo'
|
||||
];
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 14. Client Activity Tracking
|
||||
|
||||
### Activity Table Structure
|
||||
```sql
|
||||
user_activity_now (
|
||||
activity_id INT PRIMARY KEY,
|
||||
user_id INT,
|
||||
stream_id INT,
|
||||
server_id INT,
|
||||
user_agent VARCHAR,
|
||||
user_ip VARCHAR,
|
||||
container VARCHAR,
|
||||
pid INT,
|
||||
date_start INT,
|
||||
geoip_country_code VARCHAR,
|
||||
isp VARCHAR,
|
||||
external_device VARCHAR,
|
||||
hls_last_read INT,
|
||||
hls_end TINYINT
|
||||
)
|
||||
```
|
||||
|
||||
### Connection Lifecycle
|
||||
1. INSERT on stream start
|
||||
2. UPDATE `hls_last_read` for HLS
|
||||
3. DELETE on stream end
|
||||
4. Archive to `user_activity` for history
|
||||
|
||||
---
|
||||
|
||||
## 15. Error Handling Patterns
|
||||
|
||||
### Graceful Degradation
|
||||
```php
|
||||
// Show alternative video on errors
|
||||
ipTV_streaming::ShowVideo($is_restreamer, 'show_not_on_air_video', 'not_on_air_video_path', $extension);
|
||||
```
|
||||
|
||||
### Video Placeholders
|
||||
| Setting | Description |
|
||||
|---------|-------------|
|
||||
| show_expired_video | Show when user expired |
|
||||
| show_banned_video | Show when user banned |
|
||||
| show_not_on_air_video | Show when stream offline |
|
||||
|
||||
### Client Logging
|
||||
All access attempts logged for debugging:
|
||||
```php
|
||||
ipTV_streaming::ClientLog($stream_id, $user_id, 'ERROR_CODE', $user_ip, $extra_data);
|
||||
```
|
||||
@@ -0,0 +1,118 @@
|
||||
# Xtream Codes IPTV Panel - API Documentation
|
||||
|
||||
This documentation package provides comprehensive analysis of all API endpoints in the Xtream Codes v2.9.2 IPTV panel.
|
||||
|
||||
## Documentation Files
|
||||
|
||||
| File | Description |
|
||||
|------|-------------|
|
||||
| [XTREAM_CODES_API_DOCUMENTATION.md](XTREAM_CODES_API_DOCUMENTATION.md) | **Main Documentation** - Complete API reference with all endpoints, parameters, responses, and examples |
|
||||
| [ENDPOINT_REFERENCE.md](ENDPOINT_REFERENCE.md) | Quick reference table of all endpoints and their parameters |
|
||||
| [IPTV_PATTERNS_AND_INTEGRATIONS.md](IPTV_PATTERNS_AND_INTEGRATIONS.md) | IPTV-specific patterns, integrations, and technical details |
|
||||
|
||||
## API Summary
|
||||
|
||||
### Discovered APIs
|
||||
|
||||
| API | Endpoint | Auth Method | Purpose |
|
||||
|-----|----------|-------------|---------|
|
||||
| Player API | `/player_api.php` | Username/Password | Client applications |
|
||||
| Panel API | `/panel_api.php` | Username/Password | Panel applications |
|
||||
| Admin API | `/api.php` | IP-Based | Server management |
|
||||
| System API | `/system_api.php` | IP-Based | Inter-server communication |
|
||||
| MAG Portal | `/portal.php` | MAC/Token | MAG STB devices |
|
||||
| Enigma2 | `/enigma2.php` | Username/Password | Enigma2 receivers |
|
||||
| EPG/XMLTV | `/xmltv.php` | Username/Password | Program guide |
|
||||
| Playlist | `/get.php` | Username/Password | M3U generation |
|
||||
|
||||
### Streaming Endpoints
|
||||
|
||||
| Type | URL Pattern |
|
||||
|------|-------------|
|
||||
| Live TV | `/live/{user}/{pass}/{stream_id}.{ts\|m3u8}` |
|
||||
| VOD/Movies | `/movie/{user}/{pass}/{stream_id}.{ext}` |
|
||||
| TV Series | `/series/{user}/{pass}/{stream_id}.{ext}` |
|
||||
| Timeshift | `/timeshift/{user}/{pass}/{duration}/{start}/{stream_id}` |
|
||||
| HLS Segments | `/hls/{user}/{pass}/{stream_id}/{segment}.ts` |
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Authenticate
|
||||
```bash
|
||||
curl "http://SERVER:25461/player_api.php?username=USER&password=PASS"
|
||||
```
|
||||
|
||||
### 2. Get Live Channels
|
||||
```bash
|
||||
curl "http://SERVER:25461/player_api.php?username=USER&password=PASS&action=get_live_streams"
|
||||
```
|
||||
|
||||
### 3. Play Stream
|
||||
```bash
|
||||
ffplay "http://SERVER:25461/live/USER/PASS/STREAM_ID.ts"
|
||||
```
|
||||
|
||||
## Key Findings
|
||||
|
||||
### Total API Endpoints Documented
|
||||
- **Player API**: 10 actions
|
||||
- **Panel API**: 2 actions
|
||||
- **Admin API**: 15+ sub-actions
|
||||
- **MAG Portal**: 40+ type/action combinations
|
||||
- **Enigma2 API**: 10 types
|
||||
- **Streaming**: 5 endpoint patterns
|
||||
|
||||
### Authentication Methods
|
||||
1. Username/Password (most common)
|
||||
2. IP-Based (admin APIs)
|
||||
3. MAC Address + Token (MAG devices)
|
||||
4. Play Token (secure streaming)
|
||||
|
||||
### Security Features
|
||||
- GeoIP country restrictions
|
||||
- ISP locking
|
||||
- IP whitelisting
|
||||
- User agent filtering
|
||||
- Rate limiting (20 req/sec)
|
||||
- Flood protection
|
||||
- Max connection limits
|
||||
|
||||
### Output Formats
|
||||
- Transport Stream (TS)
|
||||
- HLS (M3U8)
|
||||
- MP4, MKV, AVI, FLV, WMV, MOV, 3GP
|
||||
- XML (Enigma2, XMLTV)
|
||||
- JSON (Player/Panel APIs)
|
||||
|
||||
## Source Code Analyzed
|
||||
|
||||
```
|
||||
/home/xtream-codes-decoded/
|
||||
├── wwwdir/
|
||||
│ ├── api.php # Admin API
|
||||
│ ├── player_api.php # Player API
|
||||
│ ├── panel_api.php # Panel API
|
||||
│ ├── system_api.php # System API
|
||||
│ ├── portal.php # MAG Portal (1300+ lines)
|
||||
│ ├── enigma2.php # Enigma2 API
|
||||
│ ├── xmltv.php # EPG/XMLTV
|
||||
│ ├── get.php # Playlist generator
|
||||
│ ├── init.php # Bootstrap
|
||||
│ ├── includes/
|
||||
│ │ ├── functions.php
|
||||
│ │ ├── lib.php
|
||||
│ │ ├── streaming.php
|
||||
│ │ └── mysql.php
|
||||
│ └── streaming/
|
||||
│ ├── clients_live.php # Live streaming
|
||||
│ ├── clients_movie.php # VOD streaming
|
||||
│ └── timeshift.php # Catchup
|
||||
└── nginx/conf/
|
||||
└── nginx.conf # URL routing
|
||||
```
|
||||
|
||||
## Analysis Date
|
||||
December 24, 2025
|
||||
|
||||
## Software Version
|
||||
Xtream Codes v2.9.2
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user