Плеер является оболочкой
VideoLAN VLC

BorPas-Soft IP-TV Player

Программа для удобного просмотра IP-телевидения

Содержание

Возможности

История версий

Что такое IPTV

IPTV (оно же DVB-IP или TVoIP) НЕ означает «телевидение, вещающее через сеть Интернет». Начало этой аббревиатуры, IP, значит лишь то, что используется данный протокол передачи данных (в данном частном случае, для передачи видеоконтента), но система целиком с мировой паутиной не связана абсолютно ничем. Услугу IPTV предоставляет вам ВАШ ПРОВАЙДЕР, т.е. та компания, которая проводила вам в квартиру сетевой кабель (Ethernet) или устанавливала ADSL-модем. IPTV напоминает обычное кабельное телевидение, только в дом оно приходит не по коаксиальному кабелю, а по тому же каналу, что и интернет (ADSL модем или Ethernet). Если ваш провайдер не предоставляет такую услугу или предоставляет её только через телеприставку и не публикует список каналов, то плеер вам не нужен.

IPTV представляет собой трансляцию каналов (обычно получаемых со спутников), преимущественно в форматах MPEG2/MPEG4 по транспортной сети провайдера, с последующим просмотром на компьютере или специальной телеприставке (Set-Top Box).

Некоторые провайдеры используют шифрование потока, чтобы определённые каналы можно было смотреть только через телеприставку с использованием идентификационной карты или пин-кода, такой поток плеер воспроизвести не сможет. Если провайдер продаёт услугу только вместе с приставкой и шифрует каналы, то плеер для вас также будет бесполезен.

Сетевые настройки

Практически все файерволы, такие как Agnitum Outpost и Kaspersky Internet Security по умолчанию блокируют IPTV (мультикаст), так как считают его атакой. В общем случае необходимо разрешить в системных правилах протокол IGMP (протокол управления подключениями к мультикаст-группам) и разрешить плееру любую TCP-активность (для скачивания списков каналов и телепрограммы) и UDP-активность (непосредственно для IPTV).

Инструкции с картинками можно посмотреть здесь

Kaspersky Internet Security (вариант 1)

Kaspersky Internet Security (вариант 2) Dr.Web Security Space ESET Smart Security Outpost Firewall Старые версии Outpost Firewall Comodo Firewall

Если в вашем компьютере больше одной сетевой карты или вам предоставляется интернет по VPN или PPPoE, необходимо обязательно указывать в плеере рабочую сетевую карту. Так как IPTV обычно распространяется локально, это будет карта с адресом 192.168.*.*, 172.16.*.* или 10.*.*.*. При первом запуске плеер автоматически выберет первую сетевую карту. Сменить сетевую карту можно так: Настройки → Общие → Сетевой интерфейс.

Обратите внимание, что VPN или PPPoE соединение поднятое поверх локальной сети отключать не нужно (многие провайдеры в своих инструкция пишут что отключать нужно обязательно - это не так!), нужно только правильно выбрать сетевой интерфейс.

В некоторых сетях рекомендуется устанавливать специальное значение параметра VLC network-caching (udp-caching). Это делается так: Настройки → Общие → Кэш (миллисекунды)

Внимание!
Техническую поддержку по услуге IP-телевидения Вам ОБЯЗАН оказывать Ваш провайдер, являющийся поставщиком этой услуги. Именно Ваш провайдер должен обеспечить правильную настройку Вашего оконечного оборудования и сетевого подключения.

Запись

Запись в IP-TV Player действительно является записью, то есть копированием получаемых из сети данных на жёсткий диск практически без нагрузки на процессор. Для сравнения, в случае ТВ-тюнера это кодирование видео, а потом уже запись, что создаёт большую нагрузку на процессор, память и т.д.

Как правило, современное IP-телевидение кодируется в формате MPEG2, поэтому получаемые при записи файлы аналогичны VOB-файлам с бытовых DVD-дисков. Однако, при помощи плеера можно смотреть и записывать любые потоки, такие как Windows Media (mms), MP3-радио и т.д. Для разных источников нужно использовать разные форматы (контейнеры) конечных файлов.

Задаётся в Настройки → Общие → Формат контейнера записи

Итак, для IPTV в MPEG2 нужно использовать контейнер PS - получатся файлы с расширением MPG, аналогичные VOB-ам с DVD. Они могут быть проиграны такими плеерами, как PowerDVD, Media Player Classic и т.д. Преобразовать их в AVI (кодирование в DivX/XviD) можно при помощи программ типа DVD-to-AVI, Gordian Knot, AutoGK и другими, предназначенными для преобразования DVD в AVI. Вырезать из MPG, например, рекламу и сохранить без перекодирования можно при помощи программ AviDemux, Free Video Dub, VideoReDo. Заниматься видеомонтажом с перекодированием можно в VirtualDub-MPEG2, AviDemux, Mpeg Video Wizard DVD, Canopus ProCoder, Adobe Premiere Pro, Edius и других. Для IPTV в H264/AVC лучше использовать контейнер TS.

Поток IPTV-MPEG2 обычно идёт толщиной в 5-6 МБит/с, это порядка 2.5 ГБайт/час, H264 (SD) 2-4 МБит/с.

Для записи потока с несколькими аудио дорожками или если при использовании TS файлы получаются повреждёнными (отсутствует звука/видео), следует использовать контейнер DUMP.

Видеоролик об использовании планировщика и фоновой записи

Список каналов - формат M3U

Пример списка каналов:

#EXTM3U
#EXTINF:-1,Первый канал
udp://@224.10.10.1:8001
#EXTINF:-1,ТВЦ Сибирь
udp://@224.10.10.2:8002
#EXTINF:-1,7 ТВ
udp://@224.10.10.3:8003
#EXTINF:-1,A-One
udp://@224.10.10.4:8004
#EXTINF:-1,REN TV
udp://@224.10.10.5:8005

Директивы #EXTVLCOPT не поддерживаются!

Ну тут всё и так понятно. Хотелось бы отметить, что каналам рекомендуется давать правильные названия (например, канал "ОРТ" правильно называется "Первый канал", а "РТР" - "Россия") и по-русски, а не транслитом. Это важно для того, чтобы плеер автоматически связал с каналами логотипы и файлы телепрограммы.

Кодировка может быть ANSI или UTF8, плеер может загружать списки из файла или по протоколам http, https, ftp.

Рекомендуется использование расширенного формата списка каналов с настройками.

Телепрограмма - форматы JTV, XMLTV и другие

JTV

Формат JTV появился в одноименной программе польского разработчика Ярослава Ковальского для ТВ-тюнеров на базе чипов bt8x8. Это двоичный формат, база телепрограмм JTV обычно является архивом ZIP или RAR, содержащим пары файлов (с расширением NDX и PDT) для каждого телеканала. Новая база обычно выходит каждую неделю по понедельникам. Формат не содержит информации о часовом поясе, поэтому вы должны узнать текущий пояс телепрограммы на сайте источника. Формат JTV в основном распространён на территории бывшего СССР, где и была в 2000-2003 году популярна одноименная программа. Сейчас наиболее популярным ПО, использующим формат JTV, является ПО для тюнеров Beholder и GotView.

Пример источника JTV - http://www.teleguide.info/download/new3/jtv.zip (Московское время)

Разработчики могут разобраться с форматом JTV, ознакомившись с программой GuideGen (генерация JTV из текста на C++ и PHP)

Если Вы самостоятельно генерируете телепрограмму, особенно на Linux сервере, то учтите, что совсем не обязательно давать файлам имена на русском языке. Можно использовать транслит или нумерацию или ещё какие-то идентификаторы, главное связать их с соответствующим каналом через tvg-name.

XMLTV

Телепрограмма в формате XMLTV является XML-файлом, опционально упакованным в архив. Описание формата доступно на сайте xmltv.org.

Внимание! Временные метки в формате XMLTV содержат часовой пояс! Это означает что при отображении времени автоматически учитывается текущий часовой пояс, выбранный в настройках операционной системы пользователя.

Ограничения: не поддерживаются буквенные обозначения таймзон (только ±HHmm), используется только время начала (start), заголовок передачи (title) и описание (desc, только если содержит простой текст).

Если файл XMLTV упакован в архив отличный от GZ, то это должен быть единственный файл в архиве с расширением XML.

Примеры источников XMLTV
 - http://www.teleguide.info/download/new3/xmltv.xml.gz
 - http://epg.in.ua/epg/tvprogram_ua_ru.gz

Текстовые форматы

Вариант 1. Телепрограмма на все каналы в одном TXT файле, формат известен как ListTV/TV.ALL/Интер-ТВ. Первая строка файла обязательно должна быть "tv.all". Если файл TXT упакован в архив, то это должен быть единственный файл в архиве с расширением TXT.

Вариант 2. Архив с TXT файлами по одному на канал (аналогично JTV). Поддерживается множество форматов даты/времени (например "yyyy-MM-dd HH:mm передача" или с разделением по дням: один раз "yyyy-MM-dd" и далее блок "HH:mm передача")

Архивы

Форматы ZIP и GZ плеер может распаковать самостоятельно. Для распаковки RAR/7Z необходимо, чтобы в системы был установлен WinRAR или 7-Zip.

Настройка плеера с нуля (если у вас есть только список каналов)

Запустите плеер, выбрав в качестве преднастройки "Пустой профиль", загрузите каким-либо образом список каналов через Настройки → Общие → Адрес списка каналов (с веб-сайта или из файла). При необходимости предварительно отредактируйте список каналов блокнотом, следуя вышеописанным рекомендациям.

Не торопитесь начинать просмотр каналов! Сначала в Настройки → Канал установите параметры по-умолчанию (будут применены ко всем каналам), например, для IPTV Деинтерлейс Blend, Соотношение сторон 4:3 и т.д. Выбрав умолчания, нажмите кнопку Применить и Закрыть диалога настроек.

Выберите в Меню Телепрограмма → Автоматическая настройка - плеер попытается выбрать наиболее подходящие логотипы и файлы телепрограммы для всех каналов по очереди. После завершения автонастройки "пройдитесь руками" по всем каналам и поправьте ошибки, при необходимости выберите соответствующие звуковые дорожки.

Для провайдеров → Сборка дистрибутива

Вы можете самостоятельно собрать дистрибутив плеера, содержащий ваши настройки и логотипы, и предложить абонентам вашей компании абсолютно бесплатно!

Конфигурация

В соответствии с описанием формата сформируйте файл списка каналов и загрузите его на ваш веб-сервер (в примере ниже http://ваш.сервер/ваш_список_каналов.m3u).

Сборка

Загрузите сборщик дистрибутива, создайте папку (имя для примера Custom) с описанной ниже структурой. Запустите сборщик и укажите ему эту папку.

Готово! Не забывайте периодически обновлять ваш дистрибутив.

Сборка вручную (старый способ)

Простая сборка онлайн

Простая сборка онлайн-дистрибутива плеера

Описание Provider.ini

;--- стандартный вариант -------------------------------------------
[List]
Count=1
1name="Название Компании"
1um3u=http://ваш.сервер/ваш_список_каналов.m3u

;--- вариант с выбором ---------------------------------------------
[List]
; кол-во пунктов
Count=2
1name="Название Компании - Пакет1"
1um3u=http://ваш.сервер/ваш_список_каналов_1.m3u
2name="Название Компании - Пакет2"
2um3u=http://ваш.сервер/ваш_список_каналов_2.m3u
; 3name и т.д.

;--- вариант с внешним списком -------------------------------------
[List]
list-url=http://ваш.сервер/ваш_список_пакетов.ini

;--- вариант с вложенностью ----------------------------------------
[List]
Count=2
1name="Название Компании - Город1"
1ulst=http://ваш.сервер/список_пакетов_город_1.ini
2name="Название Компании - Город2"
2ulst=http://ваш.сервер/список_пакетов_город_2.ini
; 3name и т.д.

;--- параметры плеера (все параметры необязательны) ----------------
[Settings]
; заголовок окна плеера
;apptitle1="Компания-ТВ Плеер"
; цвета интерфейса (посмотреть можно в IpTvPlayer.User.ini)
;colors=...
; значение VLC network-caching (udp-caching)
;cache=500
; замена ссылки "Справочная информация"
;support-url=http://ваш.сервер/техподдержка

;--- параметры установщика (все параметры необязательны) -----------
[Setup]
; заголовок установщика, имя ярлыка на рабочем столе и в меню "Пуск"
;productname="Компания-ТВ Плеер"
; имя папки в Program Files (обязательно на английском)
;productinstdir="Company-TV Player"
; удалить настройки текущего пользователя при установке
; (не следует использовать при сборке для обновления поверх!)
;resetuserdata=1

;--- файл должен быть строго в кодировке ANSI! ---------------------

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

Для провайдеров → Формат списка каналов с настройками

В список каналов можно добавить необходимые настройки для плеера, в таком случае вид файла будет следующим:

#EXTM3U Общие настройки
#EXTINF:-1 Настройки канала 1 ,Канал 1
адрес-канала-1
#EXTINF:-1 Настройки канала 2 ,Канал 2
адрес-канала-2

Кодировка может быть ANSI или UTF8.

Вставки с настройками должны иметь вид: параметр1=значение1 параметр2=значение2 ...

Параметры для общих настроек:

Параметры для настроек каналов:

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

Пример:

#EXTM3U url-tvg="http://server/jtv.zip" cache=500 deinterlace=1 aspect-ratio=4:3 croppadd=10x10 tvg-shift=0 

#EXTINF:-1 tvg-name="Первый_канал" croppadd=16x8 group-title="Эфирные каналы" ,Первый канал
udp://@239.1.1.1:5000
#EXTINF:-1 tvg-name="ТВ3" tvg-shift=2 ,ТВ3
udp://@239.1.1.2:5000
#EXTINF:-1 tvg-name="Россия_Культура" tvg-logo="Россия К" croppadd=16x8 ,Культура
udp://@239.1.1.3:5000

#EXTINF:-1 tvg-name="Эксперт-ТВ" group-title="Спутниковые" ,Эксперт ТВ
udp://@239.1.1.4:5000
#EXTINF:-1 tvg-name="Eurosport" aspect-ratio=16:9 ,Eurosport
udp://@239.1.1.5:5000
#EXTINF:-1 tvg-name="Ru_TV" croppadd=15x10 ,RuTV
udp://@239.1.1.6:5000

#EXTINF:-1 tvg-logo="-Radio" group-title="Радио" ,Радио-Клаб
http://server:8000/club
#EXTINF:-1 tvg-logo="-Radio" ,Радио-Транс
http://server:8000/trance

Для провайдеров → Сбор статистики просмотра каналов и логов

Сбор статистики просмотра каналов

При сборе статистики плеер раз в ~15 минут формирует пакет данных в формате XML, где отражены периоды времени, в которые пользователь смотрел тот или иной канал. Данные отправляются методом POST в переменной "postdata", на GET-запрос ответ может быть любым. UserId - уникальный идентификатор пользователя, генерируемый плеером при первом запуске, удобен как ключевое поле в случае использования провайдером динамических адресов.

<?xml version="1.0" encoding="utf-8" ?>
<Stat>
<User><Id>03112ba3102496b93284d8aa34033843</Id></User>
<Data><From>2013-03-02 01:09:04</From><To>2013-03-02 01:10:32</To><Mrl>udp://@239.1.2.1:1234</Mrl><Name>2x2</Name></Data>
<Data><From>2013-03-02 01:10:33</From><To>2013-03-02 01:13:24</To><Mrl>udp://@239.1.4.9:1234</Mrl><Name>Universal Channel</Name></Data>
<Data><From>2013-03-02 01:13:24</From><To>2013-03-02 01:13:35</To><Mrl>udp://@239.1.5.2:1234</Mrl><Name>Discovery World</Name></Data>
<Data><From>2013-03-02 01:13:35</From><To>2013-03-02 01:18:11</To><Mrl>udp://@239.1.2.1:1234</Mrl><Name>2x2</Name></Data>
<Data><From>2013-03-02 01:18:11</From><To>2013-03-02 01:24:04</To><Mrl>udp://@239.1.5.2:1234</Mrl><Name>Discovery World</Name></Data>
</Stat>

Приём на PHP:

<?php
if (isset($_POST["postdata"]))
{
  $data=stripslashes($_POST['postdata']);
  ... распарсить $data как XML и сохранить в БД ...
}
?>

Типовой пример SimpleXML+MySQL:

<?php
if (isset($_POST["postdata"])) {
  $data = stripslashes($_POST['postdata']);
  mysql_connect(....);
  mysql_query("SET NAMES 'utf8'");
  $xml = simplexml_load_string($data);
  $uid = mysql_real_escape_string($xml->User->Id);
  foreach ($xml->Data as $data) {
    $user_ip = mysql_real_escape_string($_SERVER["REMOTE_ADDR"]);
    $from = mysql_real_escape_string($data->From);
    $to = mysql_real_escape_string($data->To);
    $mrl = mysql_real_escape_string($data->Mrl);
    $name = mysql_real_escape_string($data->Name);
    $sql = "INSERT INTO iptv_statistics (uid, user_ip, date_from, date_to, mrl, title) ".
           "VALUES ('".$uid."', '".$user_ip."', '".$from."', '".$to."', '".$mrl."', '".$name."')";
    mysql_query($sql);
  }
}
?>

Сбор логов (функция работает только с библиотеками VLC 1.0/1.1)

Сбор логов (речь о стандартных логах VLC уровня "warning") может быть полезен для оценки качества доставки мультикаста до пользователей и выявления проблемных частей сети. Пакет данных в формате XML формируется раз в ~5 минут и отправляется POSTом аналогично статистике. Также при запуске плеера выполняется GET-запрос, в ответе должны содержаться wildcard-маски для фильтрации лога. Если не использовать фильтр (т.е. маска "*") объём данных будет слишком большим и во многом бесполезным.

<?xml version="1.0" encoding="utf-8" ?>
<Log>
<User><Id>03112ba3102496b93284d8aa34033843</Id></User>
<Data><Time>2013-02-25 17:40:32</Time><Mrl>udp://@239.1.15.1:1234</Mrl><Msg>resampling stopped after 9372217 usec (drift: 2491)</Msg></Data>
<Data><Time>2013-02-25 17:42:49</Time><Mrl>udp://@239.1.15.1:1234</Mrl><Msg>discontinuity received 0x5 instead of 0xe (pid=69)</Msg></Data>
<Data><Time>2013-02-25 17:43:31</Time><Mrl>udp://@239.1.15.1:1234</Mrl><Msg>discontinuity received 0xa instead of 0x3 (pid=69)</Msg></Data>
<Data><Time>2013-02-25 17:43:59</Time><Mrl>udp://@239.1.15.1:1234</Mrl><Msg>discontinuity received 0x9 instead of 0x3 (pid=69)</Msg></Data>
<Data><Time>2013-02-25 17:43:59</Time><Mrl>udp://@239.1.15.1:1234</Mrl><Msg>discontinuity received 0x9 instead of 0x8 (pid=68)</Msg></Data>
<Data><Time>2013-02-25 17:44:10</Time><Mrl>udp://@239.1.15.1:1234</Mrl><Msg>resampling stopped after 11014978 usec (drift: -425)</Msg></Data>
</Log>

Приём на PHP:

<?php
if (isset($_POST["postdata"]))
{
  $data=stripslashes($_POST['postdata']);
  ... распарсить $data как XML и сохранить в БД ...
}
else
{
  header("Content-type: text/xml");
  echo("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n");
//echo("<Filter>*</Filter>");
  echo("<Filter>*discontinuity received*, *late picture skipped*, *audio drift is too big*, *stopping resampling*, *mixer start isn*</Filter>");
}
?>

Дополнения и пояснения

Для провайдеров и специалистов → JavaScript-модули

В скриптовой среде плеера полностью или частично эмулируются следующие браузерные объекты:

Также имеется несколько собственных функций:

Модули - это файлы с именем вида IpTvPlayer.*.js, расположенные в папке установки или в профиле пользователя. Имеют следующую структуру:

module.exports={
  data:{},
  supportedURLs:{
    getList:"http://*.сервер1.тест/*/api/*"
    //getMrl:"*",
    //getTvG:"*",
  },
  auth:function(url,prm) {
    if (prm.indexOf("login:")===0) {
      if (prm=="login::") prm="login:demo:demo";
      ...
    }
    // идём дальше только если ранее была авторизация 
    // (проверяем какой-нибудь флажок из this.data)
    if (prm=="timer") {
      ...
    }
    if (prm=="info") {
      ...
    }
    if (prm=="cabinet") {
      ...
    }
    if (prm=="logout") {
      ...
    }
  },
  getList:function(url){},
  getMrl:function(url){},
  getTvG:function(url){}
}

data - из-за многопоточности каждый вызов выполяется в своей копии интерпретатора, поэтому хранить промежуточные данные можно ТОЛЬКО внутри this.data={} - этот объект специально сохраняется и восстанавливается каждый раз.

supportedURLs.getList - wildcard-маска или несколько масок в одной строке через запятую - фильтр URL списка каналов для методов getList и auth. Если не указать свойство, то соответствующие методы не будут вызваны.
Если нужна более точная фильтрация - сделайте дополнительную regex-проверку в самом методе.
Если Вы пишете авторизационный модуль, то никаких других фильтров кроме supportedURLs.getList указывать не нужно, при успешной авторизации на сработавший модуль перенаправляются абсолютно ВСЕ события.

supportedURLs.getMrl/getTvG - аналогично, фильтры URL для методов getMrl/getTvG. В случае использования авторизации указывать НЕ нужно. Выставлять значение "*" рекомендуется только в целях тестирования.

auth(url,prm) - url - адрес списка каналов, prm - несколько вариантов:

getList(url) - url - адрес списка каналов, ответ пустой или фактический адрес (ссылка, string) или сам текст (строка "#EXTM3U...") или в виде объекта {channels:[{name:имя,url:адрес,...},...]} - остальные имена свойств идентичны параметрам M3U ("tvg-id" и т.д.), нулевой канал передаёт общие параметры (его name/url игнорируются).

getMrl(url) - url - адрес канала, ответ пустой или фактический адрес канала (ссылка, string) или "#текст-ошибки". Текст, начинающися с символа "#" выводится в OSD (50-60 символов в одну строку, исчезает через 5 сек) и принудительно вызывается таймер (если ранее был активирован) для возможной переавторизации.

getTvG(url) - url - адрес телепрограммы, ответ пустой или фактический адрес телепрограммы (string) или само тело (текст) телепрограммы в виде XML или текста (НЕ рекомендуется - слишком медленно).

Все стандартные методы не обязательные, Вы можете реализовать все или только один (и соответствующий ему пункт supportedURLs). Можно добавлять свои вспомогательные свойства и методы в любых количествах.

Помимо модулей, Вы можете выполнять код прямо в адресе канала:

#EXTM3U
#EXTINF:-1, Название канала 1
javascript:'http://сервер.пример/api/запрос.json'.httpGet().parseJSON().url.httpGet().parseJSON().primary
#EXTINF:-1, Название канала 2
javascript:var переменная=httpGet('адрес'); if... return другая-переменная;

Также можно вставить код модуля прямо в конце списка каналов (при этом модуль будет способен обработать только getMrl):

...
#EXTINF:-1, Название последнего канала
...
#JAVASCRIPT
module.exports={
  name:'test',
  data:{},
  supportedURLs:{ getMrl:'*' },
  getMrl:function(url) {
    alert(this.name+'.getMrl( "'+url+'" )');
  }
}

Для специалистов → Просмотр эфирного ТВ через ТВ-тюнер

Эфирные каналы имеют адреса вида dshow://номер_канала, например:

#EXTM3U
#EXTINF:-1,Первый канал
dshow://2
#EXTINF:-1,Вести 24
dshow://3
#EXTINF:-1,ТВ3
dshow://4
#EXTINF:-1,ТНТ
dshow://6
#EXTINF:-1,Россия
dshow://8
#EXTINF:-1,НТВ
dshow://10
#EXTINF:-1,СТС
dshow://12

Не поддерживается запись!

Для диапазона кабельных каналов добавьте к номеру "-cable" (пример: dshow://6-cable)

Для специалистов → Сетевые особенности IPTV

Адреса каналов IPTV обычно выглядят как udp://@x.x.x.x:y. IPTV отличается от WebTV (видеотрансляции на сайтах) и MP3-радио тем, что оно распространяется по сети провайдера в виде мультикаста.

Рассмотрим особенности мультикаста "на пальцах": например, вы смотрите IPTV через ADSL-модем или Ethernet-роутер, к которому подключено несколько компьютеров. Если с первого компьютера будет открыт какой-нибудь канал IPTV, то видеопоток пойдёт на все компьютеры - грубо говоря, лампочки будут мигать напротив портов всех компьютеров. Если у вас 10 компьютеров и все они будут запущены на один канал, нагрузка будет такая же, как если бы это был один компьютер.

Однако, этот самый мультикаст плохо влияет на WiFi, и если к модему или роутеру параллельно подключена WiFi-точка доступа, при включении IPTV она "задохнётся" от потока данных и перестанет "раздавать" интернет. Вторым гвоздём в гроб WiFi является то, что IPTV использует протокол UDP, его особенностью является негарантированность доставки. UDP удобен, т.к., например, при проблемах на линии некоторая часть данных может "дропаться" без полной потери картинки. Но при передаче данных по WiFi, даже при достаточной скорости соединения, UDP-пакеты получают низкий приоритет и могут пропускаться.

Тем не менее, сейчас (по состоянию на 2010 год) на рынке появляются роутеры, которые передают мультикаст по WiFi с использованием ряда ухищрений. Один из лучших это D-Link DIR-300/NRU (не путать с просто DIR-300).

Как всё же передать IPTV по WiFi на не поддерживающем данную функцию оборудовании, читайте ниже.

Для специалистов → UDP-to-HTTP Прокси

UDP-to-HTTP Прокси предназначен для преобразования udp-мультикаст трафика IPTV в tcp-юникаст (конкретно http) трафик. Это полезно для комфортного просмотра IPTV через WiFi, NAT, на смартфонах, планшетах, смарт-тв, сетевых плеерах и игровых консолях.

Для просмотра мультикастового udp-потока udp://@x.x.x.x:x через прокси следует использовать адрес http://хост:порт-прокси/udp/x.x.x.x:x или http://хост:порт-прокси/udp://@x.x.x.x:x

Данная утилита предназначена для двух целей:
  1) для передачи IPTV внутрь небольшой локальной сети на базе несерверной версии Windows
  2) для стабильной передачи IPTV по WiFi (или на бытовое устройство) в виде http-трафика

Схема 1. Типовая локальная сеть

    192.168.0.2 ←┐  ←httpudp
    192.168.0.3 ←┤   ┌——————————————————————————┐   ┌———————————┐
    192.168.0.4 ←┼———┤  сервер на базе Windows  ├———┤   модем   │
    192.168.0.5 ←┤   │ 192.168.0.1——192.168.1.2 │   │192.168.1.1│
       .....    ←┘   └——————————————————————————┘   └———————————┘
              ↑                              ↑
    http://192.168.0.1:7781/udp/224.10.10.1:8001udp://@224.10.10.1:8001

В данном примере прокси стоит на компьютере с адресами 192.168.0.1 (в локальную сеть) и 192.168.1.2 (в модем), работает на порте 7781. На схеме также приведён пример преобразования адреса. В плеере (у пользователей локальной сети) в Настройки → Общие → Сетевой интерфейс можно просто вписать 192.168.0.1:7781 — адреса будут преобразовываться автоматически (можно использовать и вариант домен:порт).

Схема 2. Модем или роутер с WiFi

    http://192.168.0.2:7781/udp/224.10.10.1:8001         ноутбук (192.168.0.3)
          ↓                                         подключен по радио
    ┌—————————————┐
    │ 192.168.0.3 │←((•)) WiFi
    └—————————————┘   ↑
    ┌—————————————┐  ←┼———————————————┐
    │ 192.168.0.2 │←→—┤  192.168.0.1  ├—<<<—— xDSL или Ethenet
    │ udp-to-http │  ←┤ роутер с WiFi │
    └—————————————┘  ←┴———————————————┘
          ↑                                       компьютер (192.168.0.2)
    udp://@224.10.10.1:8001                           подключен по проводу

Udpxy

Существует аналог UDP-to-HTTP Прокси для Linux — Udpxy (сторонней разработки), он включён во многие прошивки для роутеров: ASUS (AsusWRT), ZyXEL Keenetic, SNR (WiveNG), Eltex (1-ая серия NTE-RG) и т.д., может быть установлен на DD-WRT и OpenWRT. Это значит, что вы можете напрямую обращаться по http к данным роутерам - http://192.168.1.1:порт-прокси/udp/x.x.x.x:x и прописать в плеере в качестве сетевого интерфейса 192.168.1.1:порт-прокси без выделения отдельного компьютера под сервер (192.168.1.1 - стандартный адрес вашего модема/роутера, если настройки изменены, он может отличаться).

Оригинальная идея, метод преобразования адреса и реализация для Windows - BorPas, август 2006.

Дополнительно → Проекты третьих сторон



borpas.info     support@borpas.info    

← На страницу плеера