---
sidebar_position: 4
title: Get Live Streams
description: Get list of live TV channels
---
# Get Live Streams
Returns a list of live TV channels/streams available to the user.
## Endpoint
```
GET /player_api.php?action=get_live_streams
```
## Parameters
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `username` | string | Yes | User's login username |
| `password` | string | Yes | User's login password |
| `action` | string | Yes | Must be `get_live_streams` |
| `category_id` | string | No | Filter by category ID |
## Response
```json
[
{
"num": 1,
"name": "BBC One HD",
"stream_type": "live",
"stream_id": 123,
"stream_icon": "http://example.com/icons/bbc1.png",
"epg_channel_id": "bbc.one.uk",
"added": "1609459200",
"category_id": "1",
"custom_sid": "",
"tv_archive": 1,
"direct_source": "",
"tv_archive_duration": 7
},
{
"num": 2,
"name": "CNN International",
"stream_type": "live",
"stream_id": 124,
"stream_icon": "http://example.com/icons/cnn.png",
"epg_channel_id": "cnn.international",
"added": "1609459200",
"category_id": "2",
"custom_sid": "",
"tv_archive": 0,
"direct_source": "",
"tv_archive_duration": 0
}
]
```
### Response Fields
| Field | Type | Description |
|-------|------|-------------|
| `num` | integer | Channel number/order |
| `name` | string | Channel display name |
| `stream_type` | string | Always "live" for live streams |
| `stream_id` | integer | Unique stream identifier |
| `stream_icon` | string | URL to channel logo |
| `epg_channel_id` | string | EPG mapping ID |
| `added` | string | Timestamp when added |
| `category_id` | string | Category this channel belongs to |
| `custom_sid` | string | Custom service ID |
| `tv_archive` | integer | 1 = catchup available, 0 = no |
| `direct_source` | string | Direct source URL (if enabled) |
| `tv_archive_duration` | integer | Days of catchup available |
## Stream URL Format
To play a live stream, construct the URL:
```
http://server:25461/live/{username}/{password}/{stream_id}.{extension}
```
### Supported Extensions
| Extension | Description |
|-----------|-------------|
| `.ts` | MPEG Transport Stream |
| `.m3u8` | HLS Adaptive Streaming |
## Code Examples
### cURL
```bash
# Get all live streams
curl -X GET "http://server:25461/player_api.php?username=demo&password=test123&action=get_live_streams"
# Get streams by category
curl -X GET "http://server:25461/player_api.php?username=demo&password=test123&action=get_live_streams&category_id=1"
```
### Python
```python
import requests
def get_live_streams(server, username, password, category_id=None):
"""Get live TV channels."""
params = {
"username": username,
"password": password,
"action": "get_live_streams"
}
if category_id:
params["category_id"] = category_id
response = requests.get(f"{server}/player_api.php", params=params)
return response.json()
def get_stream_url(server, username, password, stream_id, extension="ts"):
"""Generate stream URL."""
return f"{server}/live/{username}/{password}/{stream_id}.{extension}"
# Usage
server = "http://server:25461"
streams = get_live_streams(server, "demo", "test123")
for stream in streams[:5]: # First 5 channels
url = get_stream_url(server, "demo", "test123", stream['stream_id'])
print(f"{stream['name']}: {url}")
```
### PHP
```php
$username,
'password' => $password,
'action' => 'get_live_streams'
];
if ($categoryId) {
$params['category_id'] = $categoryId;
}
$url = "{$server}/player_api.php?" . http_build_query($params);
$response = file_get_contents($url);
return json_decode($response, true);
}
function getStreamUrl($server, $username, $password, $streamId, $extension = "ts") {
return "{$server}/live/{$username}/{$password}/{$streamId}.{$extension}";
}
// Usage
$server = "http://server:25461";
$streams = getLiveStreams($server, "demo", "test123");
foreach (array_slice($streams, 0, 5) as $stream) {
$url = getStreamUrl($server, "demo", "test123", $stream['stream_id']);
echo "{$stream['name']}: {$url}\n";
}
?>
```
### JavaScript
```javascript
async function getLiveStreams(server, username, password, categoryId = null) {
const url = new URL(`${server}/player_api.php`);
url.searchParams.set('username', username);
url.searchParams.set('password', password);
url.searchParams.set('action', 'get_live_streams');
if (categoryId) {
url.searchParams.set('category_id', categoryId);
}
const response = await fetch(url);
return await response.json();
}
function getStreamUrl(server, username, password, streamId, extension = "ts") {
return `${server}/live/${username}/${password}/${streamId}.${extension}`;
}
// Usage
const server = "http://server:25461";
const streams = await getLiveStreams(server, "demo", "test123");
streams.slice(0, 5).forEach(stream => {
const url = getStreamUrl(server, "demo", "test123", stream.stream_id);
console.log(`${stream.name}: ${url}`);
});
```
## Playing Streams
### VLC Media Player
```bash
vlc "http://server:25461/live/demo/test123/123.ts"
```
### FFplay
```bash
ffplay "http://server:25461/live/demo/test123/123.ts"
```
### HTML5 with HLS.js
```html
```
## Notes
- Results are filtered based on user's bouquet assignments
- The `tv_archive` field indicates if catchup/timeshift is available
- Use `epg_channel_id` to match with XMLTV EPG data