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>
425 lines
9.5 KiB
Markdown
425 lines
9.5 KiB
Markdown
# 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);
|
|
```
|