Смотрим multicast IPTV каналы в Ubuntu без бубна и камлания

На форумах некоторых интернет-провайдеров, что предоставляют услугу IPTV в режиме multicast, регулярно поднимаются вопросы неработоспособности части каналов из их плейлиста при просмотре под Ubuntu. Причем под Windows все показывается, что обычно ставит в тупик службу техподдержки, предлагающую, как обычно, радикальные меры - либо поменять роутер, либо купить дорогую ТВ-приставку у них же. Что же делать?

Для начала нужно попробовать открыть плейлист в любом текстовом редакторе и найти номера портов, с которых идет вещание. Скорее всего, такие провайдеры для определенных мультикаст IPTV-каналов используют порты с номером меньше 1024. К примеру, компания Seven Sky (она же ИскраТелеком и ГорКом) использует порт 1001 для вещания многих каналов IPTV.

#EXTINF:0,1) Первый канал 
udp://@233.34.28.1:1001

Попытка смотреть каналы, задействующие 1001 порт, в любых видеоплеерах оборачивается неудачей. И это понятно, ведь во всех *NIX системах - будь то Linux, BSD или Mac OS - все порты с номерами меньше 1024 имеют привилегированный статус, что подразумевает их доступность только под root.

Для решения такой проблемы конечно можно запускать плеер и под root, но к сожалению не все плееры это подерживают. Например, популярный VLC не стартует вообще. В такой ситуации проще всего перенаправить поток данных с порта 1001 на любой другой, но с номером больше 1024.

В Ubuntu это можно сделать утилитой командной строки iptables, для подмены порта 1001 на порт 5500, например. Открываем терминал и в его окне выполняем следующие команды:

sudo iptables -t nat -A PREROUTING -p udp -m udp --dport 1001 -j DNAT --to-destination :5500
sudo iptables -t nat -A POSTROUTING -p udp -m udp --dport 5500 -j SNAT --to-source :1001

Тем самым задается перенаправление входящего потока данных с порта 1001 на 5500 и наоборот. Однако такие правила будут действовать лишь до выключения системы.

К счастью, в всех *ubuntu ситемах - как в Debian и иже с ними - доступен удобный пакет iptables-persistent, который с помощью одноименного скрипта восстанавливает правила после запуска системы. Установить пакет можно командой:

sudo apt-get install iptables-persistent

В процессе установки скрипт спросит о сохранении текущих правил. Необходимо согласиться с этим, иначе после перезагрузки правила не будут применены и придется снова выполнить команды iptables (см. выше), после чего уже сохранить правила командой:

sudo service iptables-persistent save

Только тогда, при следующей загрузке нужные правила будут применены.

И в заключение остается отредактировать плейлист провайдера, заменив в нем все упоминания порта 1001 на 5500.

Было:  udp://@233.34.28.1:1001
Стало: udp://@233.34.28.1:5500