null

Просмотр IPTV через WiFi

Сегодня многие интернет провайдеры обеспечивают услугу Интернет-телевидение (Internet Protocol TeleVision, IPTV) в своих сетях передачи данных. Для того, чтобы начать просмотр телевизионных программ, достаточно запустить программу видеопроигрыватель и подписаться на групповое вещание. Процесс усложняется, если Ваш компьютер для подключения к провайдеру использует беспроводное соединение. Например, Ваш домашний роутер подключен к провайдеру при помощи Fast Ethernet или ADSL, а Вы подключаетесь к роутеру, используя беспроводную сеть. IPTV в качестве транспортного пртокола использует UDP, сооветственно надежность передачи данных и обработка ошибок передачи обеспечивается на строне клиента. Когда IPTV клиент использует проводное соединение, проблем не возникает - потерь пакетов нет, задержка между приемом пакетов примерно одинакова. Беспроводное соединение вносит свои корективы - задержки и потери пакетов, искажения сигнала приводят к тому, что просмотр программ становится некомфортным - картинка дергается и искажается, пропадает звук. В качестве решения такой проблемы можно использовать преобразование групповой рассылки (рассылающей данные подписчикам по протоколу UDP) в клиентское TCP соединение. Т.е. Ваш домашний роутер по запросу беспроводного клиента подписывается на необходимый клиенту канал, получает данные при помощи multicast рассылки и отдает их клиенту, используя TCP соединение. Для преобразования протоколов передачи на роутере должна выполнятся программа proxy, например, udpxy. Рассмотрим процесс ее установки и настройки для организации домашнего IPTV. Мой домашний роутер работает под управлением OC FreeBSD, поэтому описанный ниже процесс установки и настройки применим только для этой ОС, для других операционных систем он может отличаться. Готовый пакет udpxy не входит в состав ОС FreeBSD, но его можно собрать самостоятельно, используя коллекцию портов. Мантейнером порта net/udpxy является Ваш покорный слуга и если у Вас есть мысли о том, как сделать пакет udpxy еще лучше, я буду рад услышать любые пожелания. Установка пакета udpxy из коллекции портов ничем не отличается от установки любого другого пакета:

# cd /usr/ports/net/udpxy
# make install
# pkg_info udpxy*
Information for udpxy-1.0.16:

Comment:
UDP-to-HTTP multicast traffic relay daemon


Description:
udpxy is a UDP-to-HTTP multicast traffic relay daemon:
it forwards UDP traffic from a given multicast subscription
to the requesting HTTP client.

WWW: http://udpxy.sourceforge.net/


Настройки udpxy просты и понятны - конфигурационных файлов нет, все параметры передаются в коммандной строке:

# udpxy
udpxy 1.0-Chipmunk (build 16) standard
usage: udpxy [-vTS] [-a listenaddr] -p port [-m mcast_ifc_addr] [-c clients] [-l logfile] [-B sizeK] [-n nice_incr]
    -v : enable verbose output [default = disabled]
    -S : enable client statistics [default = disabled]
    -T : do NOT run as a daemon [default = daemon if root]
    -a : (IPv4) address/interface to listen on [default = 0.0.0.0]
    -p : port to listen on
    -m : (IPv4) address/interface of (multicast) source [default = 0.0.0.0]
    -c : max clients to serve [default = 3, max = 16]
    -l : log output to file [default = stderr]
    -B : buffer size (65536, 32Kb, 1Mb) for inbound (multicast) data [default = 2048 bytes]
    -R : maximum messages to store in buffer (-1 = all) [default = 1]
    -H : maximum time (sec) to hold data in buffer (-1 = unlimited) [default = 1]
    -n : nice value increment [default = 0]
    -M : periodically renew multicast subscription (skip if 0 sec) [default = 0 sec]
Examples:
  udpxy -p 4022
    listen for HTTP requests on port 4022, all network interfaces
  udpxy -a lan0 -p 4022 -m lan1
    listen for HTTP requests on interface lan0, port 4022;
    subscribe to multicast groups on interface lan1

  udpxy and udpxrec are Copyright (C) 2009 Pavel V. Cherenkov and licensed under GNU GPLv3


Единственный обязательный параметр - номер порта, на котором udpxy будет принимать соединения от клиентов. В соответствии с идеологией FreeBSD определим все необходимые для запуска приложения параметры, используя файл /etc/rc.conf (или /etc/rc.conf.local или /etc/conf.d/udpxy):

udpxy_enable="YES"
udpxy_flags="-S -a wlan0 -m vge0 -M 300"


Где:
 

  • wlan0 - беспроводной интерфейс для обслуживания домашней сети
  • vge0  - ethernet интерфейс подключения к провайдеру

Запустим приложение:

# /usr/local/etc/rc.d/udpxy start
Starting udpxy.
# /usr/local/etc/rc.d/udpxy status
udpxy is running as pid 4561.


Проверим, что udpxy слушает на нужных интерфейсах и портах:

# netstat -an | grep LISTEN | grep 4022
tcp4       0      0 10.1.1.1.4022         *.*    LISTEN


Статистику использования и активные подключения можно увидеть, если открыть в браузере ссылку:

http://10.1.1.1:4022/status




На это настройка серверной части закончена.

На стороне клиента необходимо установить медиапроигрыватель, подерживающий потоковое воспроизведение с использованием HTTP протокола. Я использую vlc и mplayer. Перед тем как загрузить плейлист IPTV, полученный у провайдера, его необходимо преобразовать. В оригинальном плейлисте присутствуют адреса, протоколы и порты провайдера, которые необходимо заменить на локальный адрес домашнего роутера, используя нехитрый однострочник:

$ sed 's|^udp://@|http://10.1.1.1:4022/udp/|' channels.m3u > new-channels.m3u


Открываем преобразованный плейлист, выбираем канал и смотрим:



Просмотр потока с использованием HTTP менее чувствителен к задержкам и потерям, что позволяет смотреть телевизионные каналы гораздо более комфортно.

Не делайте из еды культа!

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

Ничего не найдено. n is 0