Все началось с того, что я обзавелся сетевым накопителем WD My Book Live. Выяснив, что на борту у него хоть и урезанный, но более-менее полноценный Debian, я решил использовать возможности устройства по полной. Первое и вполне логичное — сделать из MBL торрент-качалку. Эта задача легко решается при помощи Transmission — благо интерфейсов для него предостаточно (у меня стоит GUI для Windows и для Android). Второе, вытекающее из первого — это автоматизировать закачку с LostFilm’а новых серий различных сериалов. Тут задача чуть посложнее — установить и настроить FlexGet. Но она тоже решается несложно. Третья мысль по использованию устройства — раздавать с его помощью IPTV-поток, приходящий от провайдера по UDP, на различные устройства сети, например, на SmartTV от Samsung’а.
О варианте решения этой задачи можно прочитать под катом.
После прочтения FAQ по устройству выяснилось, что для него есть несколько различных DLNA-серверов, но у них разная специализация. Штатно на устройстве стоит Twonky v5, но он в обновлениях поддерживаться не будет, а новые версии стоят денег. Да и в работе он мне как-то не очень понравился — часто пропадала связь с ним. Хотя может быть это не в нем дело, но, как говорится, осадок остался. Mediatomb мне понравился больше — он более конфигурабелен, и вроде как более стабилен. Но, к сожалению, заточен больше под раздачу локальных файлов. Раздавать потоки он тоже умеет, но для этого нужно специально править плейлисты, а также скрипт, который эти плейлисты парсит (по умолчанию потоки он парсит как музыкальные). Зато потоки прекрасно умеет раздавать XUPNPD, но он хуже работает с локальными файлами (например, не умеет просматривать каталоги рекурсивно).
В общем, я пришел к мысли, что идеальный вариант — это иметь на устройстве одновременно оба сервера, и Mediatomb (для локальных файлов), и xupnpd (для IPTV). Но проблема в том, что DLNA использует фиксированный UDP-порт 1900 для анонса своего присутствия в сети. Поэтому первый стартовавший сервер оккупирует порт и будет анонсироваться единолично.
Тем не менее, способ завести оба сервера разом есть. Способ этот называется aliased interface. Он позволяет привязать к существующему физическому интерфейсу (eth0) еще один IP-адрес, и обращаться к нему как к отдельному сетевому интерфейсу (eth0:1). Для этого в файл /etc/network/interfaces надо добавить несколько строк:
auto eth0:1 iface eth0:1 inet static address 192.168.1.99 netmask 255.255.255.0
К сожалению, мне не удалось найти способ получать IP-адрес для этого интерфейса динамически, через DHCP. Попытка установить для этого интерфейса locally administered MAC успехом не увенчалась. Так что если кто знает способ — буду рад увидеть описание в комментариях.
Тем не менее, на устройстве таким образом получается отдельный интерфейс с отдельным IP-адресом, и в настройках xupnpd можно указать его в качестве интерфейса для вещания. Далее достаточно залить плейлист с IPTV-каналами провайдера в xupnpd — и можно смотреть. Да, у xupnpd есть свои особенности распознавания записей плейлистов (например, он понимает указание группы для канала в #EXINFO, но группу надо указывать для каждого канала отдельно — группа из предыдущего канала по умолчанию не подбирается), но в остальном он у меня заработал практически без возни с настройками.
Не смотря на то, что настройка вроде бы простая — вы ее делаете на свой страх и риск. В процессе экспериментов (заранее скажу, что они все-таки закончились успешно — иначе бы я не стал писать этот пост) с установкой двух серверов на одном устройстве мне каким-то образом удалось сломать порядок начальной загрузки, в результате чего основной интерфейс eth0 поднимался и пинговался, но вторичный интерфейс и сетевые сервисы (в частности, apache и ssh) не поднялись, в результате чего было невозможно получить доступ к настройкам устройства. Пришлось устройство разбирать, извлекать диск, подключать его к компьютеру, и далее восстанавливать прошивку, загружаясь с SystemRescueCD. Но это уже другая история…
UPD:
Кстати, одно из возможных решений задачи — установить xupnpd на роутер. У меня стоит DLink DIR-825, на котором установлен OpenWRT, и в принципе можно было бы использовать в качестве DNLA-сервера для раздачи IPTV его. Но я подключен к домашнему интернету Билайн, а у Билайна доступ в интернет осуществляется через L2TP. Я не замерял, насколько на максимальных скоростях (60 мбит) грузится процессор роутера, но предполагаю, что L2TP вместе с DLNA-сервером загрузит его по полной.
ссылка на оригинал статьи http://habrahabr.ru/post/170673/
Добавить комментарий