Skip to content

Отправка 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;
}

Для настройки мультикаст-рассылки через веб-интерфейс:

  1. Создайте поток в веб-интерфейсе и укажите адрес источника на вкладке Input.
  2. Перейдите на вкладку Output в настройках потока и укажите URL для мультикаст-рассылки (например, udp://239.0.0.1:1234) в разделе Push live video to certain URLs.

    Options button in the UI

  3. (Необязательно) Укажите значения параметров average bitrate, bitrate, PMT, PNR, standby, multicast loop для выходящего MPEG-TS потока. Для этого кликните на кнопку Options и перейдите к редактированию параметров. Укажите необходимые значения для параметров и кликните Save, чтобы применить настройки. Это также можно сделать в настройках шаблона конфигурации потоков.

    Options in the UI

Выбор дорожек

Можно выбрать дорожки на отправку:

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 — это первая аудиодорожка.

play-multicast-send-interface

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-поток с исходным форматом сигнализации аудио на выход.