Услуга IPTV для маленьких или Unicast имеет право жить.

В статье «IPTV стример своими руками на базе Linux и DVB карты TBS6985 DVB-S2 Quad Tuner PCIe Card» мы узнали о том, откуда берется телевидение, как оно может быть доставлено потребителю, а также какие средства существуют для того, чтобы добыть и транслировать в сеть услугу IPTV.

Сегодня мы более подробно познакомимся с практической реализацией IPTV и доставкой его способом, который, по мнению многих, является не самым рациональным, однако позволяет интегрировать новые сервисы без дорогостоящей модернизации сети провайдера.

 

Unicast

Unicast — это доставка пакетов единственному получателю. Можно сказать, что на сегодня, наверное, более 90 процентов сетевого трафика в Интернет это unicast.

С точки зрение IPTV, Unicast  - это один из способов доставки телевидения, при чем стоит отметить, что способ далеко не самый плохой.

Посмотрим какими же достоинствами и недостатками обладает данный способ:

  • + Низкая стоимость реализации
  • + Быстрая интеграция без изменения настройки коммутаторов
  • + Поддержка практически любыми медиаплеерами
  • + Маршрутизируемость
  • + Легкость реализации
  • - Высокая загрузка сети при большом количестве потребителей услуги

 

Разберем плюсы и минусы «по-косточкам». Когда речь идет о низкой стоимости реализации, я подразумеваю то, что данный способом можно реализовать даже если в сети не все коммутаторы управляемые и трафик идет через гирлянду «мыльниц», что конечно в 21 веке встретить довольно сложно. Однако, не стоит забывать, что желающие смотреть IPTV есть и в частном секторе, и в селе, где организовать управляемый доступ зачастую невозможно по ряду причин, в частности, экономических. Даже если представить, что у провайдера все коммутаторы управляемые, то для организации IPTV Unicast не потребуется их перенастройка. Если посмотреть на IPTV с точки зрения потребителя, то сразу встает вопрос о том, что каждый из нас представляет телевидение, как нечто движущееся на экране большого телевизора, висящего на стене напротив мягкого дивана и уж ни как не просиживание в неудобном кресле у компьютера. Но далеко не все медиаплееры поддерживают multicast, а вот c Unicast-ом справляются прекрасно. По скольку Unicast это самый обычный IP протокол, то и с маршрутизацией данного  трафика нет никаких сложностей, т.е. доставить его можно во все подсети большой сети провайдера обычными для это средствами. А вот о легкости реализации мы поговорим чуть позже, когда будем рассматривать пример.

Единственным, на мой взгляд, недостатком этого способа является высокая загрузка сети, когда потребителей услуги становиться действительно много. Ведь если представить, что в пределах одного коммутатора доступа несколько клиентов смотрит один и тот же канал, то от источника поступает каждому из них отдельный поток, несмотря на то, что эти потоки идентичны. Поэтому в действительно крупных сетях этот способ будет не рациональным.

 

Как это работает?

В первой статье мы построили IPTV стример на базе Linux и DVB карты TBS6985 DVB-S2 Quad Tuner PCIe Card, приняли со спутника транспондер, разбили его на каналы и «выплюнули» в сеть Multicast-ом. Но сегодня речь идет о Unicast, поэтому наша задача данный поток преобразовать и сделать доступным нашим клиентам.

Существует ряд способов преобразования Multicast-а в Unicast:

 

Если говорить о VLC, то хотелось бы отметить, что, при всем богатстве возможностей данного проекта, в продакшен выпускать его не представляется возможным в силу его нестабильности.

UDP Proxy -  проект заслуживающий внимания, однако google не советует его с точки зрения производительности. Интернет сообщество и гуру, считают, что при большом количестве подключений производительность данного приложения оставляет желать лучшего, но буду честным, подтвердить или опровергнуть я этого не могу.

А вот проект Relaying многие, из тех кто строит Unicast IPTV, считают наиболее удачным, несмотря на то, что возможности приложения ограничены преобразованием multicast-а в unicast и обратно. Однако, сборка relaying существует только для чуждой мне FreeBSD, правда, с установкой и настройкой этой ОС для наших задач справиться даже школьник.

Стоит отметить, что и сам проект Astra (https://cesbo.com ) умеет транслировать IPTV в Unicast, но здесь есть одно маленькое НО. Представим, что IPTV стример принимает со спутника около 80 каналов SD, каждый SD канал это поток порядка 3-5 Мбит/с., получается, что стример уже обрабатывает порядка 240 — 400 Мбит трафика, что само по себе не мало. А теперь, заставим его обслуживать сотни клиентских потоков, скорее всего, качественно принимать со спутника каналы и выдавать их клиентам вряд ли удастся, так как производительность данного сервера выйдет за возможности существующего   железа. Именно поэтому задачи стриминга и трансляции стоит разделить. А вот как это сделать мы сейчас и узнаем.

Транслируем Unicast

Из предложенных выше способов рассмотрим трансляцию на базе FreeBSD и проекта Relaying.

В первую очередь нам потребуется сервер с парой гигабитных сетевых карточек и установленной на нем FreeBSD. Одну из карт воткнем напрямую в стример, где мы уже настроили вещание каналов в сеть multicast-ом, осталось только поднять между стримером и релеем IP сеть. Вторую сетевушку релеея включаем в сеть и организуем маршрутизацию пользователей к релею. В результате мы должны получить нечто изображенное на картинке:

IPTV streem

И вот последним шагом попробуем организовать трансляцию Unicast Http в сеть. Для это скачаем https://bit.ly/dSspn9 и распакуем архив с Relaying. Для трансляции двух каналов, рассмотренных в первой статье, достаточно написать небольшой скрипт и выполнить его:

#!/bin/sh
./relaying --inudp=239.255.1.90:1234 --outhttp=172.16.253.2:8085/iptv/test --inudpif=172.16.254.2 --stats >> /dev/null &
./relaying --inudp=239.255.1.91:1234 --outhttp=172.16.253.2:8086/iptv/test --inudpif=172.16.254.2 --stats >> /dev/null &

Где --inudp - это адрес multicast группы приходящей с стримера, а --outhttp - это URL, по которому будет доступен IPTV канал в Unicast HTTP.

Теперь, для просмотра транслируемых каналов, достаточно «скормить» любому плэйеру, поддерживающему потоковое видео, плэйлист, примерно, следующего содержания:

#EXTM3U
#EXTINF:5, Первый международный
https://172.16.253.2:8085/iptv/test
#EXTINF:5, EuroNews
https://172.16.253.2:8086/iptv/test