2026-05-23 19:31:21 +03:00
# Системный API
2026-03-15 00:02:19 +03:00
2026-05-23 19:31:21 +03:00
Этот API предоставляет различные системные функции, включая управление потоками и VOD, статистику системы, обзор директорий, просмотр логов, управление процессами, перезагрузку EPG/nginx и многое другое.
2026-03-15 00:02:19 +03:00
---
## Расположение файлов
2026-05-23 19:31:21 +03:00
Системный API обрабатывается контроллером:
2026-03-15 00:02:19 +03:00
2026-04-17 19:56:58 +03:00
```text
2026-05-23 19:31:21 +03:00
src/public/Controllers/Api/InternalApiController.php
2026-03-15 00:02:19 +03:00
```
2026-05-23 19:31:21 +03:00
HTTP entry-point: `/api.php` — маршрутизируется nginx на `public/index.php` с параметром `XC_API=internal` .
2026-03-15 00:02:19 +03:00
## Обзор архитектуры API
2026-05-23 19:31:21 +03:00
**Базовый URI:** `http://<host>:<http port>/api.php`
**Аутентификация:** параметр `password` , соответствующий конфигурации `live_streaming_pass`
**Пример:**
`http://<host>:<http port>/api.php?password=<live_streaming_pass>&action=<api endpoint>`
2026-03-15 00:02:19 +03:00
---
## Основные конечные точки API
2026-05-23 19:31:21 +03:00
### 1. Просмотр лога потока
#### **GET** `/api.php?action=view_log`
**Описание:** Возвращает лог ошибок для заданного потока или VOD. Сначала проверяется `STREAMS_PATH` , затем — `VOD_PATH` .
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| --------- | ------- | ---------- | ------------------------------------- |
| stream_id | integer | да | ID потока, для которого нужен лог |
**Ответ:** Содержимое файла `<stream_id>.errors` в виде простого текста, или пустой ответ, если лог отсутствует.
---
### 2. FPM Status
#### **GET** `/api.php?action=fpm_status`
**Описание:** Возвращает страницу состояния PHP-FPM с локального HTTP broadcast-порта сервера.
---
### 3. Перезагрузка EPG
#### **GET** `/api.php?action=reload_epg`
**Описание:** Запускает в фоне перезагрузку EPG (Electronic Program Guide), асинхронно выполняя `console.php cron:epg` .
---
### 4. Восстановление изображений
#### **GET** `/api.php?action=restore_images`
**Описание:** Запускает в фоне восстановление изображений, асинхронно выполняя `console.php tools images` .
---
### 5. Перезагрузка Nginx
#### **GET** `/api.php?action=reload_nginx`
**Описание:** Перезагружает оба процесса nginx — RTMP nginx и основной — отправляя им сигнал перезагрузки.
---
### 6. Использование Ramdisk потоков
#### **GET** `/api.php?action=streams_ramdisk`
**Описание:** Возвращает размеры файлов по каждому потоку из директории ramdisk. Имеет лимит времени 30 секунд.
**Ответ:**
```json
{
"result" : true ,
"streams" : {
"123" : 4096000 ,
"456" : 2048000
}
}
```
---
### 7. Управление VOD
2026-03-15 00:02:19 +03:00
#### **GET** `/api.php?action=vod`
2026-05-23 19:31:21 +03:00
**Описание:** Запускает или останавливает VOD-потоки. При запуске поток сначала останавливается, затем либо запускается принудительно, либо ставится в очередь — в зависимости от параметра `force` .
2026-03-15 00:02:19 +03:00
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| ---------- | ----------------- | ---------- | -------------------------------------------------------------- |
| stream_ids | array of integers | да | Список ID потоков |
| function | string | да | Выполняемое действие (`start` или `stop` ) |
| force | boolean | нет | Если true — запуск немедленно, без очереди (только для start) |
**Ответ:**
```json
{ "result" : true }
```
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 8. Статистика RTMP
#### **GET** `/api.php?action=rtmp_stats`
**Описание:** Возвращает статистику локального RTMP-сервера.
---
### 9. Завершение процесса по PID
#### **GET** `/api.php?action=kill_pid`
**Описание:** Завершает процесс, отправляя SIGKILL (сигнал 9) указанному PID.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------- | ---------- | ------------------------------ |
| pid | integer | да | ID процесса для завершения |
**Ответ:**
```json
{ "result" : true }
```
---
### 10. RTMP Kill
#### **GET** `/api.php?action=rtmp_kill`
**Описание:** Завершает подключение RTMP-публикатора по имени через интерфейс управления nginx RTMP.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ------------------------------------- |
| name | string | да | Имя RTMP-потока для отключения |
---
### 11. Управление live-потоками
2026-03-15 00:02:19 +03:00
#### **GET** `/api.php?action=stream`
2026-05-23 19:31:21 +03:00
**Описание:** Запускает или останавливает live-потоки. При запуске между каждым потоком применяется задержка 50 мс.
2026-03-15 00:02:19 +03:00
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| ---------- | ----------------- | ---------- | ----------------------------------------- |
| stream_ids | array of integers | да | Список ID потоков |
| function | string | да | Выполняемое действие (`start` или `stop` ) |
**Ответ:**
```json
{ "result" : true }
```
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 12. Системная статистика
2026-03-15 00:02:19 +03:00
#### **GET** `/api.php?action=stats`
2026-05-23 19:31:21 +03:00
**Описание:** Получает системную статистику через `SystemInfo::getStats()` .
2026-03-15 00:02:19 +03:00
**Ответ:**
2026-05-23 19:31:21 +03:00
2026-03-15 00:02:19 +03:00
```json
{
"cpu" : 8.32 ,
"cpu_cores" : 56 ,
"cpu_avg" : 8.86 ,
"cpu_name" : "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz" ,
2026-05-23 19:31:21 +03:00
...
2026-03-15 00:02:19 +03:00
}
```
---
2026-05-23 19:31:21 +03:00
### 13. Принудительный источник потока
#### **GET** `/api.php?action=force_stream`
**Описание:** Принудительно переключает поток на указанный источник, записывая force-сигнальный файл.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| --------- | ------- | ---------- | ---------------------------------------------- |
| stream_id | integer | да | ID потока для принудительного переключения |
| force_id | integer | да | ID источника, на который переключить поток |
---
### 14. Закрытие подключения
#### **GET** `/api.php?action=closeConnection`
**Описание:** Закрывает активное подключение по его activity ID.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| ----------- | ------- | ---------- | ----------------------------------- |
| activity_id | integer | да | Activity ID подключения |
---
### 15. Проверка жизненного цикла процессов
2026-03-15 00:02:19 +03:00
#### **GET** `/api.php?action=pidsAreRunning`
2026-05-23 19:31:21 +03:00
**Описание:** Проверяет, выполняются ли указанные PID и соответствуют ли они ожидаемому бинарнику программы.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ----------------- | ---------- | ------------------------------ |
| pids | array of integers | да | Список PID для проверки |
| program | string | да | Ожидаемое имя программы |
**Ответ:**
```json
{
"1234" : true ,
"5678" : false
}
```
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 16. Получение файла
2026-03-15 00:02:19 +03:00
#### **GET** `/api.php?action=getFile`
2026-05-23 19:31:21 +03:00
**Описание:** Скачивание указанного файла. Поддерживает HTTP Range-запросы для частичной загрузки. Разрешены только файлы с расширениями: `log` , `tar.gz` , `gz` , `zip` , `m3u8` , `mp4` , `mkv` , `avi` , `mpg` , `flv` , `3gp` , `m4v` , `wmv` , `mov` , `ts` , `srt` , `sub` , `sbv` , `jpg` , `png` , `bmp` , `jpeg` , `gif` , `tif` .
2026-03-15 00:02:19 +03:00
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ---------------- |
| filename | string | да | Путь к файлу |
**Ответ:** Содержимое файла с типом `application/octet-stream` . Поддерживает заголовок `Range` для частичной загрузки (HTTP 206).
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 17. Рекурсивное сканирование директории
#### **GET** `/api.php?action=scandir_recursive`
**Описание:** Рекурсивно сканирует директорию с помощью `find` , опционально фильтруя по расширению. Имеет лимит времени 30 секунд.
2026-03-15 00:02:19 +03:00
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ----------------------------------------------------------------------- |
| dir | string | да | URL-encoded путь к директории |
| allowed | string | нет | URL-encoded список разрешённых расширений, разделённых `\|` (напр. `mp4\|mkv` ) |
**Ответ:** JSON-массив путей файлов.
---
### 18. Список директории
#### **GET** `/api.php?action=scandir`
**Описание:** Возвращает список файлов и подкаталогов в заданной директории, опционально фильтруя по расширению. Имеет лимит времени 30 секунд.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ----------------------------------------------------------------------- |
| dir | string | да | URL-encoded путь к директории |
| allowed | string | нет | URL-encoded список разрешённых расширений, разделённых `\|` (напр. `mp4\|mkv` ) |
2026-03-15 00:02:19 +03:00
**Ответ:**
2026-05-23 19:31:21 +03:00
```json
{
"result" : true ,
"dirs" : [ "subdir1" , "subdir2" ],
"files" : [ "video.mp4" , "movie.mkv" ]
}
2026-03-15 00:02:19 +03:00
```
---
2026-05-23 19:31:21 +03:00
### 19. Получить свободное место на диске
#### **GET** `/api.php?action=get_free_space`
**Описание:** Возвращает информацию об использовании диска из `df -h` .
**Ответ:** JSON-массив строк вывода `df -h` .
---
### 20. Получить список процессов
#### **GET** `/api.php?action=get_pids`
**Описание:** Возвращает список всех запущенных процессов с деталями (пользователь, PID, CPU%, память% и т.д.).
**Ответ:** JSON-массив строк вывода `ps -e` .
---
### 21. Перенаправление подключения
2026-03-15 00:02:19 +03:00
#### **GET** `/api.php?action=redirect_connection`
2026-05-23 19:31:21 +03:00
**Описание:** Перенаправляет подключение, записывая сигнальный файл, идентифицируемый по UUID.
2026-03-15 00:02:19 +03:00
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| --------- | ------- | ---------- | ------------------------------ |
| uuid | string | да | UUID, идентифицирующий подключение |
| stream_id | integer | да | ID целевого потока |
---
### 22. Очистка временной директории
#### **GET** `/api.php?action=free_temp`
**Описание:** Удаляет все файлы в директории `tmp/` и запускает cron-задачу кэша.
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 23. Очистка директории потоков
#### **GET** `/api.php?action=free_streams`
**Описание:** Удаляет все файлы из директории `content/streams/` .
---
### 24. Отправка сигнала
2026-03-15 00:02:19 +03:00
#### **GET** `/api.php?action=signal_send`
2026-05-23 19:31:21 +03:00
**Описание:** Отправляет сигнальное сообщение подключению, идентифицированному по UUID.
2026-03-15 00:02:19 +03:00
**Параметры:**
2026-05-23 19:31:21 +03:00
| Параметр | Тип | Обязателен | Описание |
| -------- | ------ | ---------- | ------------------------------------- |
| message | string | да | Сигнальное сообщение или команда |
| uuid | string | да | UUID, идентифицирующий подключение |
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 25. Получить информацию о сертификате
#### **GET** `/api.php?action=get_certificate_info`
**Описание:** Возвращает информацию о SSL/TLS-сертификате через `DiagnosticsService::getCertificateInfo()` .
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 26. Принудительный запуск Watch Cron
#### **GET** `/api.php?action=watch_force`
**Описание:** Запускает в фоне cron-задачу watch для конкретного элемента.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------- | ---------- | --------------------- |
| id | integer | да | ID элемента watch |
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 27. Принудительный запуск Plex Cron
#### **GET** `/api.php?action=plex_force`
**Описание:** Запускает в фоне cron-задачу Plex для конкретного элемента.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| -------- | ------- | ---------- | ------------------- |
| id | integer | да | ID элемента Plex |
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 28. Получить файлы архива
#### **GET** `/api.php?action=get_archive_files`
**Описание:** Возвращает список архивных `.ts` -сегментов для заданного потока.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| --------- | ------- | ---------- | ------------- |
| stream_id | integer | да | ID потока |
**Ответ:**
```json
{
"result" : true ,
"data" : [ "/path/to/archive/123/segment001.ts" , "/path/to/archive/123/segment002.ts" ]
}
```
2026-03-15 00:02:19 +03:00
---
2026-05-23 19:31:21 +03:00
### 29. Завершение процессов Watch
#### **GET** `/api.php?action=kill_watch`
**Описание:** Завершает все запущенные процессы модуля watch (основной PID и PID воркеров).
---
### 30. Завершение процессов Plex
#### **GET** `/api.php?action=kill_plex`
**Описание:** Завершает все запущенные процессы модуля Plex (основной PID и PID воркеров).
---
### 31. Probe потока
#### **GET** `/api.php?action=probe`
**Описание:** Зондирует URL потока с помощью FFprobe для получения медиаинформации.
**Параметры:**
| Параметр | Тип | Обязателен | Описание |
| ---------- | ------ | ---------- | ---------------------------------------------- |
| url | string | да | URL зондируемого потока |
| user_agent | string | нет | Пользовательский заголовок User-Agent |
| http_proxy | string | нет | URL HTTP-прокси |
| cookies | string | нет | Строка cookies для отправки с запросом |
| headers | string | нет | Дополнительные HTTP-заголовки |
**Ответ:**
```json
{
"result" : true ,
"data" : { ... }
}
```
2026-03-15 00:02:19 +03:00
---
## Коды ошибок
2026-05-23 19:31:21 +03:00
| Код | Описание |
| -------------------- | ------------------------------ |
| INVALID_API_PASSWORD | Неверный пароль API |
| API_IP_NOT_ALLOWED | IP-адрес не разрешён |
Стандартный ответ для нераспознанного действия:
```json
{ "result" : false }
```
2026-03-15 00:02:19 +03:00
---
## Примечания
2026-05-23 19:31:21 +03:00
* Все запросы должны быть аутентифицированы корректным паролем API (`live_streaming_pass` ).
* IP-адрес запроса должен быть в списке разрешённых IP, возвращаемом `ServerRepository::getAllowedIPs()` .
* Некоторые действия выполняют команды асинхронно в фоне и возвращают результат немедленно.