Автор разбирает странный мир мультикаста — где пакеты доставляются больше чем одному получателю, а маршрутизация строится по «обратной» таблице. На примере раздачи живого ТВ (вдохновившись старым видео @TallPaulTech) он показывает, как мультикаст может резко улучшить сеть в нишевых сценариях.
В локальной сети всё довольно просто. Если клиенты умеют декодировать формат, можно гонять видео без перекодирования и совсем не грузить CPU. Для этого берётся файл, треки аудио и видео просто копируются, упаковываются в транспортный поток MPEG-TS и отправляются по UDP на мультикаст-адрес. Команда выглядит так:
ffmpeg -re -i bbb.mov -c:v copy -c:a copy -f mpegts "udp://[ff02::69@eth0]:5001?pkt_size=1200"
Если формат не поддерживается плеерами (хотя VLC ест почти всё), включается перекодирование в x264 + AAC с похожей подачей на тот же адрес, но с другими параметрами кодеков.
Когда нужно раздавать эфирное ТВ, автор использует финского национального вещателя YLE, но подчёркивает, что доступ из других стран может отсутствовать. Сам он запускает утилиту yle-dl, которая получает HLS-плейлист канала tv1, и направляет поток через pipe в ffmpeg. Тот в реальном времени перепаковывает всё в MPEG-TS и льёт на локальный мультикаст-адрес ff02::69%eth0 с портом 5003.
Для сетей с несколькими подсетями и VLAN разворачивается routed multicast. Автор выбирает source-specific multicast (SSM) — с ним проще, чем с any-source, и не нужны рендеву-пойнты. На роутере с FRR поднимается PIM для IPv6, на downstream-интерфейсе включается MLD версии 2, настраиваются интервалы запросов. Префикс-лист ssm6 пропускает только диапазон ff3e::/16 с длиной префикса не меньше 16, а опционально можно фильтровать конкретные группы и источники через access-лист. Теперь любой из прежних link-local примеров можно пустить в маршрутизируемую сеть. В аргументах ffmpeg меняется адрес на ff35::69 и добавляется ограничение на число хопов — аналог TTL:
ffmpeg -re -i bbb.mov -c:v copy -c:a copy -f mpegts "udp://[ff35::69]:5004?hops=32&pkt_size=1200"
Так один поток долетает до всех подписчиков за пределами одного широковещательного домена, не умножая трафик.