Отправка SPTS по мультикасту¶
При работе с IPTV часто приходится иметь дело с видео, передающимся мультикастом. В подавляющем большинстве случаев, в мультикасте передается MPEG-TS контейнер (по 7 188-байтных пакетов в одном UDP пакете). Реже в сеть передается RTP протокол, внутри которого идет тот же MPEG-TS. RTP нужен для того, чтобы можно было отслеживать потери. В RTP пакете есть 16-битный счетчик, использующийся для отслеживания порядкового номера.
Краткие основы мультикаста¶
Мультикаст — это UDP пакеты, передающиеся от одного источника группе подписчиков. Адрес, по которому посылаются такие пакеты, обычно находится в диапазоне от 224.0.0.0 до 239.255.255.255, однако 224.0.0.0/8 не рекомендуется из-за большого количества специализированных адресов.
В правильно настроенной сети мультикаст-трафик идет до ближайшего роутера, а роутер уже сам выбирает, какому клиенту какой трафик послать на основании пожеланий клиентов. Пожелания передаются по протоколу IGMP, по которому передаются сообщения о включении в группу рассылки какого-то адреса или исключения из группы.
Таким образом, для того чтобы Flussonic рассылал мультикаст клиентам, надо чтобы он слал пакеты в нужный интерфейс (локальная сеть оператора), а роутер был настроен на правильную работу с мультикастом.
Обратная ситуация с захватом мультикаста описана в статье: Прием мультикаста
Предварительные требования¶
Убедитесь в том, что Flussonic синхронизирует время с NTP-сервером. Это важно для стабильного формирования мультикаста: временные метки во входном и выходном потоке будут синхронизированы.
Настройка Flussonic¶
Настроить мультикаст-рассылку можно в конфигурационном файле либо через веб-интерфейс.
Для настройки мультикаст-рассылки в конфигурационном файле укажите опцию push
в конфигурации потока и IP-адрес, куда отправлять MPEG-TS поток:
stream origin {
input fake://fake;
}
stream example {
input hls://localhost:80/origin/index.m3u8;
push udp://239.0.0.1:1234;
}
Для настройки мультикаст-рассылки через веб-интерфейс:
- Создайте поток в веб-интерфейсе и укажите адрес источника на вкладке Input.
-
Перейдите на вкладку Output в настройках потока и укажите URL для мультикаст-рассылки (например,
udp://239.0.0.1:1234
) в разделе Push live video to certain URLs. -
(Необязательно) Укажите значения параметров average bitrate, bitrate, PMT, PNR, standby, multicast loop для выходящего MPEG-TS потока. Для этого кликните на кнопку Options и перейдите к редактированию параметров. Укажите необходимые значения для параметров и кликните Save, чтобы применить настройки. Это также можно сделать в настройках шаблона конфигурации потоков.
Выбор дорожек¶
Можно выбрать дорожки на отправку:
stream origin {
input fake://fake;
}
stream example {
input hls://localhost:80/origin/index.m3u8;
push udp://239.0.0.1:1234?tracks=v1a1;
}
Где:
v1
— это первая видеодорожка;a1
— это первая аудиодорожка.
Maximum bitrate¶
Flussonic может отправлять мультикаст с заполнением значения maximum bitrate
(максимальный битрейт) в PMT (англ. Program Map Table, таблица структуры программ) для каждого ES (англ. Elementary Stream, элементарный поток). Для того, чтобы включить эту опцию, необходимо вставить строку es_max_bitrate=default
в строку запроса (англ. query string). Таким образом, конфигурация может иметь следующий вид:
stream example {
input file://vod/STREAM_NAME.ts;
push udp://239.0.0.1:1234?cbr=6000&tracks=v1a1&es_max_bitrate=default;
transcoder vb=5000k fps=25 preset=fast hw=cpu ab=192k;
}
Указание интерфейса¶
Если IP адрес интерфейса для рассылки мультикаста неудобно указывать по какой-то причине (например, он менялся и вы его не помните), то можно указать его название:
push udp://eth0@239.0.0.1:1234
вместо
push udp://239.0.0.1:1234/10.0.0.5
Пример:
stream example {
input hls://provider.iptv/stream/index.m3u8;
push udp://eth0@239.0.0.1:1234;
}
Здесь eth0
— это название интерфейса, к которому подключена локальная сеть.
Возврат потока, отправленного в мультикаст, на отправляющий хост Flussonic¶
Если вы отправляете поток из Flussonic в UDP мультикаст рассылку, можно использовать опцию мультикаст-сокета multicast_loop
, которая включает прием отправленных UDP данных на хосте-отправителе:
stream example_push {
input hls://provider.iptv/stream/index.m3u8;
push udp://239.0.0.1:1234 multicast_loop;
}
stream example_ingest {
input udp://239.0.0.1:1234;
}
Опция позволяет захватывать отправленный поток обратно на Flussonic средствами Flussonic или с помощью какого-либо другого приложения.
Настройка сервера¶
После того, как вы настроили мультикаст-вещание потока, с большой вероятностью ничего не заработает, потому что часто из-за настроек сервера мультикаст-трафик пойдет в первый интерфейс, который как правило смотрит в интернет. Таким образом, необходимо, чтобы Flussonic начал отправлять трафик в тот интерфейс, который смотрит в локальную сеть.
route add -net 239.0.0.0/8 dev eth2
Где eth2
— это название интерфейса, к которому подключена локальная сеть. После такого прописывания роутинга мультикаст с Flussonic польется в нужный интерфейс и его можно будет увидеть на роутере, а следовательно и на клиенте.
Настройка PID-ов¶
При отправке MPEG-TS в UDP мультикаст (push udp://
) для указания PID-ов используйте опцию mpegts_pids.
По-другому можно указать PID-ы так:
stream example {
input hls://provider.iptv/stream/index.m3u8;
push udp://239.1.2.4:1235 bitrate=7000 pnr=2 vb=6000 pmt=2000 v1=2011 a1=2021;
}
Сигнализация AC-3 аудиопотока в MPEG-TS¶
MPEG-TS, содержащий элементарные AC-3 аудиопотоки, регулируется моделью STD (System Target Decoder) в System A (ATSC) или System B (DVB). Форматы сигнализации в System A и System B существенно различаются. Поэтому уникальная идентификация (сигнализация) аудиопотоков AC-3 используется не только для однозначного указания на то, что поток AC-3 действительно является AC-3, но и на то, к какой системе (A или B) он принадлежит.
Flussonic может прочитать различные форматы сигнализации AC-3 аудиопотока в PMT MPEG-TS и пробросить исходный формат на выход MPEG-TS в UDP мультикаст или изменить его в соответствии с System A или System B. Это делается с помощью опции mpegts_ac3
. Она указывается в настройках потока/шаблона и может принимать следующие значения:
mpegts_ac3=keep
— сохранить исходный формат сигнализации об AC-3 аудиопотоке и пробросить его на выход MPEG-TS;mpegts_ac3=system_a
— изменить исходный формат сигнализации об AC-3 аудиопотоке на соответствующий System A;mpegts_ac3=system_b
— изменить исходный формат сигнализации об AC-3 аудиопотоке на соответствующий System B;
Note
Если у вас на входе и на выходе аудиопоток в формате AC-3, то вам не нужно включать транскодирование, чтобы использовать опцию mpegts_ac3
.
Рассмотрим следующий пример:
stream example-stream {
input udp://MULTICAST-IP-1:PORT-1 programs=2;
push udp://MULTICAST-IP-2:PORT-2 bitrate=6800 mpegts_ac3=keep;
}
Здесь Flussonic захватывает UDP-поток с AC-3 аудиопотоком и отправляет UDP-поток с исходным форматом сигнализации аудио на выход.