...
В сборке 5.2.1193 добавлена возможность публикации MPEG-TS RTP потока по UDP на WCS, а в сборке 5.2.1253 MPEG-TS поток может быть опубликован по SRT. Данный способ может быть удобен для публикации H264+AAC потока из программного или аппаратного кодировщика, поддерживающего MPEG-TS. В сборке 5.2.1577 добавлена возможность публикации H265+AAC потока.
Протокол SRT является более надежным по сравнению с UDP, поэтому по возможности рекомендуется использовать SRT для публикации MPEG-TS.
Поддержка кодеков
- H264
- H265, начиная со сборки 5.2.1577
- AAC
Схема работы
1. Публикующий клиент отправляет REST API запрос /mpegts/startup
...
Code Block | ||||
---|---|---|---|---|
| ||||
{ "localMediaSessionId": "32ec1a8e-7df4-4484-9a95-e7eddc45c508", "localStreamName": "test", "uri": "srt://test1.flashphoner.com:31014", "status": "CONNECTED", "hasAudio": truefalse, "hasVideo": truefalse, "record": false, "transport": "SRT", "cdn": false, "timeout": 90000, "maxTimestampDiff": 90000 1, "allowedList": [] } |
UDP:
Code Block | ||||
---|---|---|---|---|
| ||||
{ "localMediaSessionId": "32ec1a8e-7df4-4484-9a95-e7eddc45c508", "localStreamName": "test", "uri": "udp://test1.flashphoner.com:31014", "status": "CONNECTED", "hasAudio": truefalse, "hasVideo": truefalse, "record": false, "transport": "UDP", "cdn": false, "timeout": 90000, "maxTimestampDiff": 1, "allowedList": 90000[] } |
4. Публикуем MPEG-TS поток по указанному URI
...
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/mpegts/startup |
|
| 200 - OK 409 - Conflict 500 - Internal error | Начать публикацию MPEG-TS потока | ||||||||||||||
/mpegts/find |
|
| 200 – потоки найдены 404 – потоки не найдены 500 - Internal error | Найти MPEG-TS поток по заданным критериям | ||||||||||||||
/mpegts/find_all |
| 200 – потоки найдены 404 – потоки не найдены 500 - Internal error | Найти все опубликованные MPEG-TS потоки | |||||||||||||||
/mpegts/terminate |
| 200 - поток завершен 404 - поток не найден 500 - Internal error | Завершить MPEG-TS поток |
...
Имя параметра | Описание | Пример |
---|---|---|
localStreamName | Имя, которое будет присвоено опубликованному потоку | test |
transport | Используемый транспорт | srt |
uri | URI для публикации потока | udp://192.168.1.39:31014 |
localMediaSessionId | Идентификатор медиасессии потока | 32ec1a8e-7df4-4484-9a95-e7eddc45c508 |
status | Статус потока | CONNECTED |
hasAudio | Поток содержит аудио | true |
hasVideo | Поток содержит видео | true |
record | Поток записывается | false |
timeout | Максимальное время ожидания медиаданных, мс | 90000 |
maxTimestampDiff | Максимально допустимое изменение метки времени, мсс | 90000 |
Публикация только аудио или только видео
...
1 | ||
allowedList | Список адресов, с который разрешена публикация потока |
|
Публикация только аудио или только видео
Начиная со сборки 5.2.1253, можно начать публикацию только видео или только аудио потока, указав соответствующий параметр REST API запроса /mpegts/startup
...
Code Block | ||||
---|---|---|---|---|
| ||||
sudo nano /usr/local/FlashphonerWebCallServer/bin/webcallserver set-permissions sudo systemctl restart webcallserver |
...
Возобновление публикации после остановки
Под каждую публикацию MPEG-TS выделяется отдельный UDP порт, который ждет входящего соединения (для SRT) и трафика от клиента. В целях безопасности, начиная со сборки 5.2.1299, если клиент остановил публикацию, поток на сервере останавливается, зрители получают и повторно к тому же самому порту подключиться нельзя. Зрители в этом случае получают событие STREAM_STATUS.FAILED
, и повторно к тому же самому порту подключиться нельзя. Для возобновления публикации . Чтобы возобновить публикацию, должен быть использован новый REST API запрос для создания на сервере нового потока, при необходимости с тем же именем.
Ограничение адресов клиентов, с который разрешена публикация
В сборке 5.2.1314 добавлена возможность задать список адресов, с которых разрешена публикация MPEG-TS по UDP, указав соответствующий параметр REST API запроса /mpegts/startup
Code Block | ||||
---|---|---|---|---|
| ||||
{
"localStreamName":"mpegts-stream",
"transport":"udp",
"allowedList": [
"192.168.0.100",
"172.16.0.1/24"
]
} |
В сборке 5.2.1485 аналогичным образом можно ограничить список адресов, с которых разрешена публикация MPEG-TS по SRT:
Code Block | ||||
---|---|---|---|---|
| ||||
{
"localStreamName":"mpegts-stream",
"transport":"srt",
"allowedList": [
"192.168.0.100",
"172.16.0.1/24"
]
} |
В списке могут быть как точные адреса, так и маски адресов. Если такой список содержится в запросе, то опубликовать поток можно будет только с клиентов, чьи адреса соответствуют списку.
Публикация H265
В сборке 5.2.1577 добавлена возможность публикации MPEG-TS потока H265+AAC. Для этого в файле mpegts_agent.sdp
должен быть указан видео кодек H265:
Code Block | ||
---|---|---|
| ||
v=0
o=- 1988962254 1988962254 IN IP4 0.0.0.0
c=IN IP4 0.0.0.0
t=0 0
a=sdplang:en
m=audio 1 RTP/AVP 102
a=rtpmap:102 mpeg4-generic/48000/2
a=sendonly
m=video 1 RTP/AVP 119
a=rtpmap:119 H265/90000
a=sendonly |
Начиная со сборки 5.2.1598, WCS по умолчанию поддерживает публикацию MPEG-TS потока в H264 и H265 без изменений настроек SDP.
Также H265 должен быть добавлен в список поддерживаемых кодеков
Code Block | ||
---|---|---|
| ||
codecs=opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,h264,vp8,flv,mpv,h265 |
и в списки исключений
Code Block | ||
---|---|---|
| ||
codecs_exclude_sip=mpeg4-generic,flv,mpv,h265
codecs_exclude_sip_rtmp=opus,g729,g722,mpeg4-generic,vp8,mpv,h265
codecs_exclude_sfu=alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,flv,mpv,h265 |
Публикация H265 при помощи ffmpeg
Code Block | ||||
---|---|---|---|---|
| ||||
ffmpeg -re -i source.mp4 -c:v libx265 -c:a aac -ar 48000 -ac 2 -b:a 160k -bsf:v hevc_mp4toannexb -keyint_min 120 -profile:v main -preset veryfast -x265-params crf=23:bframes=0 -f mpegts "srt://test.flashphoner.com:31014" |
Warning |
---|
При проигрывании H265 потока любым способом на сервере включается транскодинг из H265 в H264 или VP8! |
Известные проблемы
1. Если публикация MPEG-TS потока по UDP была остановлена на стороне сервера по REST API /mpegts/terminate
, публикующий кодировщик продолжает отправлять медиаданные
...