...
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/hls/startup |
| 200 - OK 404 - Stream not found 500 - Internal error | Запустить HLS нарезку указанного потока | |||||||||||||||
/hls/find_all |
|
| 200 – OK 404 – Not found | Найти все потоки, для которых есть HLS нарезки | ||||||||||||||
/hls/terminate |
| 200 – OK 404 – Not found | Завершить или перезапустить HLS нарезку указанного потока | |||||||||||||||
/hls/profiles |
|
| 200 – OK 400 – Bad request 404 – Not found | Получить статистику профиля нарезки HLS | ||||||||||||||
/hls/subscribers |
|
| 200 – OK 400 – Bad request 404 – Not found | Получить список подписчиков на HLS нарезку |
Параметры
...
Имя параметра
...
Описание
...
Пример
...
name
...
Имя потока, опубликованного на сервере
...
test
...
Особенности
1. Если HLS нарезка потока запущена при помощи REST запроса /hls/startup, и нет активных HLS подписчиков, нарезка остановится по истечении интервала в секундах
Code Block | ||
---|---|---|
| ||
hls_manager_provider_timeout=300 |
По умолчанию, интервал составляет 5 минут. То же касается автоматически созданных HLS нарезок при установленной настройке
Code Block | ||
---|---|---|
| ||
hls_auto_start=true |
2. Если HLS нарезка потока останавливается при помощи REST запроса /hls/terminate, и есть активные HLS подписчики, то нарезка будет перезапущена. При этом активные HLS подписчики должны повторно подключиться к потоку.
Отображение сообщений о проблемах с LL HLS потоком
В сборке 5.2.1709 добавлена возможность вывода сообщений о проблемах с LL HLS потоком в ответ на REST API запрос /hls/find_all
:
...
language | js |
---|---|
theme | RDark |
...
/hls/enableRecording |
| 200 – OK 400 – Bad request 404 – Not found 409 - Conflict 500 - Internal server error | Включить запись сегментов HLS-потока на диск | ||||||||
/hls/disableRecording |
| 200 – OK 400 – Bad request 404 – Not found | Остановить запись сегментов HLS-потока на диск |
Параметры
Имя параметра | Описание | Пример |
---|---|---|
name | Имя потока, опубликованного на сервере | test |
hlsId | Имя потока, опубликованного на сервере | test |
profileName | Имя профиля качества, для которого запрашивается статистика | v_test |
offset | Смещение от начала списка потоков в ответе на запрос статистики | 0 |
size | Максимальное количество потоков в ответе на запрос статистики | 10 |
ids | Список имен HLS-потоков, для которых включается/останавливается запись сегментов на диск | [ "test", "test-HLS-ABR-STREAM" ] |
state | Статус HLS нарезки | ACTIVE |
logs | Сообщения о проблемах с LL HLS потоком | [] |
Особенности
1. Если HLS нарезка потока запущена при помощи REST запроса /hls/startup, и нет активных HLS подписчиков, нарезка остановится по истечении интервала в секундах
Code Block | ||
---|---|---|
| ||
hls_manager_provider_timeout=300 |
По умолчанию, интервал составляет 5 минут. То же касается автоматически созданных HLS нарезок при установленной настройке
Code Block | ||
---|---|---|
| ||
hls_auto_start=true |
2. Если HLS нарезка потока останавливается при помощи REST запроса /hls/terminate, и есть активные HLS подписчики, то нарезка будет перезапущена. При этом активные HLS подписчики должны повторно подключиться к потоку.
Отображение сообщений о проблемах с LL HLS потоком
В сборке 5.2.1709 добавлена возможность вывода сообщений о проблемах с LL HLS потоком в ответ на REST API запрос /hls/find_all
:
Code Block | ||||
---|---|---|---|---|
| ||||
{
"test": {
"handler": "com.flashphoner.server.client.handler.wcs4.WCS4Handler@74dbf27b",
"state": "ACTIVE",
"writer": "HLS-test",
"streamStatus": "PLAYING",
"writerStarted": "true",
"logs": [
"2023-07-18T10:22:52.457 WARNING: Playback speed changed to 0.779, segment 49, media type: video",
"2023-07-18T10:22:56.614 WARNING: Gap{from=112000, to=114000, duration=2000}, media type: video",
"2023-07-18T10:22:56.615 WARNING: Fps changed from 30 to 27, segment 50 , media type: video",
"2023-07-18T10:22:56.624 WARNING: Segment 51.1 have no data, pts 112400, duration 400, media type: video",
...
]
}
} |
...
Code Block | ||||
---|---|---|---|---|
| ||||
[ { "id": "192.168.0.83-59000-Mozilla/5.0 (X11; Linux x86_64) Chrome/118.0.0.0", "ip": "192.168.0.83", "port": 59000, "userAgent": "Mozilla/5.0 (X11; Linux x86_64) Chrome/118.0.0.0", "active": true, "metrics": { "profileTime": { "test": 71, "v_test": 541353 }, "requestsNumber": 5930, "requestsStatuses": { "200 OK": 5930 }, "profileSwitches": 1, "maxResponseTime": 29, "minResponseTime": 0, "avgResponseTime": 0.4436762225969646 } } ] |
Здесь:
- id - идентификатор подписчика
- ip - IP адрес подписчика
- port - исходящий порт подписчика
- userAgent - данные заголовка
User-Agent
, переданные подписчиком - active - подписчик активен
- metrics - текущие метрики подписчика:
- profileTime - время, в течение которого подписчик запрашивал данный профиль, указанное для каждого профиля
- requestsNumber - количество запросов от подписчика
- requestStatuses - количество статусов ответов на запросы подписчика, указанное для каждого запроса
- profileSwitches - число переходов подписчика с одного HLS ABR профиля на другой
- maxResponseTime - максимальное время ответа на запрос
- minResponseTime - минимальное время ответа на запрос
- avgResponseTime - среднее время ответа на запроc
Особенности отображения количества подписчиков и количества соединений HLS
В ответ на запросы /hls/find_all
, /hls/profiles
, /hls/subscribers
возвращаются текущие количество и состав HLS подписчиков с точностью до вкладки браузера. Однако количество сетевых соединений для загрузки HLS, которое отображается на странице статистики сервера
Code Block | ||||
---|---|---|---|---|
| ||||
curl -s http://localhost:8081/?action=stat¶ms=connections_hls |
может отличаться от количества подписчиков. В большинстве случаев, HLS подписчики используют HTTP 2 протокол, и все вкладки одного браузера, которые получают HLS потоки с одного WCS сервера, будут использовать одно соединение.
При этом количество соединений, отображаемое параметром connections_hls
, соответствует количеству установленных соединений на HLS порт, отображаемых командой netstat
:
Code Block | ||||
---|---|---|---|---|
| ||||
sudo netstat -np | "200 OK": 5930 }, "profileSwitches": 1, "maxResponseTime": 29, "minResponseTime": 0, "avgResponseTime": 0.4436762225969646 } } ] |
Здесь:
- id - идентификатор подписчика
- ip - IP адрес подписчика
- port - исходящий порт подписчика
- userAgent - данные заголовка
User-Agent
, переданные подписчиком - active - подписчик активен
- metrics - текущие метрики подписчика:
- profileTime - время, в течение которого подписчик запрашивал данный профиль, указанное для каждого профиля
- requestsNumber - количество запросов от подписчика
- requestStatuses - количество статусов ответов на запросы подписчика, указанное для каждого запроса
- profileSwitches - число переходов подписчика с одного HLS ABR профиля на другой
- maxResponseTime - максимальное время ответа на запрос
- minResponseTime - минимальное время ответа на запрос
- avgResponseTime - среднее время ответа на запроc
Особенности отображения количества подписчиков и количества соединений HLS
В ответ на запросы /hls/find_all
, /hls/profiles
, /hls/subscribers
возвращаются текущие количество и состав HLS подписчиков с точностью до вкладки браузера. Однако количество сетевых соединений для загрузки HLS, которое отображается на странице статистики сервера
Code Block | ||||
---|---|---|---|---|
| ||||
curl -s http://localhost:8081/?action=stat¶ms=connections_hls |
может отличаться от количества подписчиков. В большинстве случаев, HLS подписчики используют HTTP 2 протокол, и все вкладки одного браузера, которые получают HLS потоки с одного WCS сервера, будут использовать одно соединение.
При этом количество соединений, отображаемое параметром connections_hls
, соответствует количеству установленных соединений на HLS порт, отображаемых командой netstat
:
Code Block | ||||
---|---|---|---|---|
| ||||
sudo netstat -np | grep ESTABLISHED | grep java | grep 8445 |
...
grep ESTABLISHED | grep java | grep 8445 |
Здесь 8445 - HTTPS HLS порт WCS сервера
Запись сегментов на диск для отладки
В сборке 5.2.1913 добавлена возможность записать сегменты и плейлисты определенного потока, который уже играют подписчики, на диск в целях отладки. Запись производится в каталог, указанный настройкой
Code Block | ||
---|---|---|
| ||
hls_debug_dir=hls-debug |
Запись сегментов определенного потока запускается при помощи REST API запроса /hls/enableRecording
Code Block | ||||
---|---|---|---|---|
| ||||
POST /rest-api/hls/enableRecording HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"ids": [
"test",
"test-HLS-ABR-STREAM"
]
} |
Для остановки записи используется REST API запрос /hls/disableRecording
Code Block | ||||
---|---|---|---|---|
| ||||
POST /rest-api/hls/disableRecording HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"ids": [
"test",
"test-HLS-ABR-STREAM"
]
} |
С записанными сегментами можно работать различными инструментами, предназначенными для разбора и проигрывания медиафайлов: ffmpeg, ffprobe и т.п. Кроме того, записанный поток можно проиграть с сервера по URL с суффиксом -DEBUG
Code Block | ||
---|---|---|
| ||
https://wcs:8445/test-DEBUG/test-DEBUG.m3u8 |
Если поток с определенным именем был записан, а затем опубликован новый поток с таким же именем, запись нового потока будет сделана с удалением предыдущей.
Поддержка HLS ABR
Для потоков с видео (только видео или видео+аудио) WCS поддерживает HLS ABR в CDN (в этом случае качества кодируются на выделенном Transcoder сервере) и на одном узле.
...