пятница, 27 июня 2014 г.

IPTV через Mikrotik по DLNA

Началось все с того, что у меня сломалась домашняя IPTV приставка Aminet. Она была уже достаточно старенькая, HD каналы не умела показывать, поэтому у меня были мысли её заменить на какой-нибудь другой плеер. Незадолго до этого события я поменял домашний маршрутизатор с D-link Dir-300 на Mikrotik RouterBOARD 951G-2HnD.





И тут я подумал, неужели такой роутер как микротик не сможет решить задачку с вещанием IPTV в домашней сети. В качестве IGMP proxy он был настроен сразу при установке в сеть, multicast прекрасно бегает через него и по Wi-Fi  IPTV работает в том числе, но лишь с девайсами, которые понимают multicast.
В домашнем телеке есть DLNA. Называется это у самсунгов AllShare. Да, вот что меня ещё удивило - PS3 не умеет смотреть IPTV, тоже только DLNA.
Итак, я начал изучать интернеты на предмет запуска IPTV через DLNA. Решение найдено. Реализуется это на разных устройствах (в том числе и на Dir-300). На девайс ставится прошивка OpenWRT или DD-WRT, куда запиливается пакет xupnpd.
Непосредственно сам микротик не умеет DLNA, да и пакета похожего не него нет, но у него есть интересная фича - Metarouter. По сути это такой своеобразный гипервизор. Можно поднять внутри роутера виртуалку и поставить на нее прошивку, собранную под архитектуру процессора микротика. Мне показалось это решение интересным. Никаких лишних девайсов.
Почитав мануалы, я скачал исходники OpenWRT используя утилиту svn, выбрал нужную мне архитектуру (в конфиге есть пункт именно для Mikrotik metarouter MIPS), поставил компилиться. Пока это все дело работало, нашел уже собранную версию, которую и начал ставить в микротик.

В этой статье - http://asp24.com.ua/blog/virtualnaja-mashina-metarouter-i-zapusk-openwrt-na-marshrutizatorah-mikrotik/ есть работающий образ и подробная инструкция, как установить виртуалку через графический интерфейс.
В это статье - http://arxont.blogspot.ru/2013/03/openwrt-mikrotik.html инфа, как сделать это через cli.

Опишу свой гибридный способ.

1. Перетягиваем из виндузячей папки в микротик нужный нам образ.


2. Добавляем метароутер. HD каналы перестали залипать, когда я поставил 64 метра оперативы. Тут нужно ещё поэксперементировать.

3. Не забываем добавить "жесткий диск", иначе пакеты не поставить.



4. Добавляем бриджовый интерфейс.



5. Заходим в консоль виртуалки.


Осталось вывести опенрвт в интернеты и поставить нужный нам пакет xupnpd.

uci set network.lan.proto=static
uci set network.lan.ipaddr=192.168.3.2
uci set network.lan.gateway=192.168.3.1
uci commit
rm /etc/resolv.conf
echo "nameserver 8.8.8.8">/etc/resolv.conf
reboot

Можно поставить веб-морду.

opkg update
opkg list
opkg install webif

Далее ставим xupnpd.

root@OpenWrt:/# cd /usr/share/
root@OpenWrt:/usr/share# wget http://tsdemuxer.googlecode.com/files/xupnpd-1_03.tar.gz

Распаковываем.

root@OpenWrt:/usr/share# tar -xzf xupnpd-1_03.tar.gz

Запускаем.

root@OpenWrt:/usr/share# cd xupnpd-rc/
root@OpenWrt:/usr/share/xupnpd-rc# ls
LICENSE                www                    xupnpd_http.lua
config                 xupnpd-ar231x          xupnpd_m3u.lua
playlists              xupnpd-ar71xx          xupnpd_main.lua
plugins                xupnpd-bcm947xx        xupnpd_mime.lua
profiles               xupnpd-bcm947xx-ddwrt  xupnpd_soap.lua
ui                     xupnpd.lua             xupnpd_ssdp.lua
root@OpenWrt:/usr/share/xupnpd-rc# ./xupnpd-ar231x

Проверяем.

root@OpenWrt:/usr/share/xupnpd-rc# netstat -na
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 192.168.3.2:4044        0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      

Заходим через веб, заливаем плейлист, правим настройки.




В настройках нужно указать, что у нас интерфейс br - один на всё.



Добавляем в автозапуск. Я просто сделал соответствующую запись в rc.local.

root@OpenWrt:/usr/share/xupnpd-rc# cat /etc/rc.local 
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

/usr/share/xupnpd-rc/xupnpd-ar231x
exit 0

Перезапускаем процесс и проверяем на телеке. Появился пункт UPnP-IPTV.


Далее заходим в плейлисты, выбираем нужный и вперед.







17 комментариев:

  1. http://openwrt.pantele.com.ua/trunk/metarouter/openwrt-metarouter-rootfs.tgz dead link!

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Автор выкинь образ виртуалки плз. По ссылкам недоступно.

    ОтветитьУдалить
  4. Поднял openwrt запустил xupnpd.Всё работает.
    Натолкните на мысль как сделать чтоб с openwrt траф шёл на один только порт,а не раскидывал на все порты.
    Или надо ещё один dhcp и бридж.Буду признателен за совет.

    ОтветитьУдалить
    Ответы
    1. Не совсем понятен вопрос. Для чего вы хотите так сделать? О каком трафике речь?

      Удалить
    2. Да, нужен ещё один бридж или делать это через VLAN :)

      Удалить
  5. Добрый день!

    Коллега, подскажите, а то зашел в тупик )
    Имеется RB951Ui-2Hnd. Метаротуер поставил. Xupnp тоже поставил, на веб морду попадаю. Плейлист добавил. И его даже видно на устройствах. Но изображения нет. Не могу понять в чем затык.
    Можете натулкнуть на мысль ? -)

    ОтветитьУдалить
    Ответы
    1. Посмотри с помощью tcpdump, улетают ли джоины с метарутера, настроен ли IGMP proxy на самом микроте, улетают ли джоины с него.
      В общем - дампы решают, так что не ленись снифать.

      Удалить
    2. Да,на микротике igmp proxy установелен.
      Я его настраивал что хоть как-то смотреть iptv (multicast) по вайфай. Но лагает жутко.

      Почитал что можно попробовать или udpxy или вот xupnpd. Но в основном все примеры, которые встречал, предполагают что эти пакеты установлены на сам роутер. А тут получается, что роутер в роутере ))
      Инет от провайдера заходит в микротик, а не совсем понимаю как OpenWRT получает поток чтоб его отдавать (
      Что-то я запутался в интефейсах (особенно если учесть что в микротике и опенВРТ они по разному называются)

      МОгу я уточнить, где именно что смотреть через tcpdump ? Не очень в этом силен.Спасибо.

      Удалить
    3. Зависит от сборки OpenWRT. Бинарник tcpdump. В микроте тоже есть снифер в инструментах.
      У опенврт я делал бридж. В нем и смотреть. У микрота тоже у соотвествующего бриджа, если на нем терминируется L3. Ели IP назначен на ethernet интерфейсе, то на нём.
      Вообще, хочу сказать, что данная схема с метароутером именно на железке 951HnG не особо жизнеспособна, ибо при просмотре HD каналов (поток около 8 мбит) начинает сильно лагать. Нужен хост посильнее.
      В результате я поставил OpenWRT на dir300 ревизии B, там поднял xupmp. Так и работает это сейчас.

      Удалить
    4. Мне бы сперва хоть SD Каналы смотреть )

      Неужель дир-300 производительнее ?? У него ж 32 мб памяти оперативной.
      Я хотел еще попробовать не xupnpd ..а через udpxy .. Но тоже пока не добился результата ...

      Получается у меня так.

      Есть один порт на микротике, в который приходит инет - ether1
      порты ether2(master) по ether5 + wlan01 в бридже. Инет работает, вопросов нет.

      Далее, я установил метароутер, и он создал вируальный интерфейс vif01
      Этот интерфейс тоже добавлен бридже.

      адрес роутера микротика 192.168.1.1
      адрес метароутера с ОпенВРТ 192.168.1.20

      в метароутере инет есть, все пингается и внутри сети сети и наружу.

      Опять же таки, не совсем понял какой бридж смотреть )

      и как все это увязать, чтоб мультикаст поток попадал на опенВРТ. Хотя, я так понимаю, что приходит мультикаст от провайдера, далее он и так попадает в бридж, а соответсвенно и на виртуальный интерфейс.

      может в настройках самого xupnpd поиграться. Хотя с чем?
      br-lan - не совсем понял за что отвечает.

      Короче я в тупике.

      Удалить
  6. Добрый день!

    Как быть с MIKROTIK HAP AC, у него используется Flash ROM 16mb. Возможно ли установить на внешний хард(флешку)?

    ОтветитьУдалить
    Ответы
    1. Можно воткнуть флешку в USB через OTG.

      Удалить
    2. Если через OTG openwrt поставится на USB флешку(по умолчанию все ставится на внутренний Flash ROM)?

      Удалить
    3. Надо пробовать :) Я в результате, все же, перешел на dir-300. Поставил OpenWRT на него т.к. OpenWRT, которую я тогда ставил, периодически на микроте висла.

      Удалить
  7. Уважаемый k4, не скажете какой ревизии ваш dir-300?
    Спасибо.

    ОтветитьУдалить
    Ответы
    1. Увидел, что вы уже писали про ревизию. Извиняюсь. ;)

      Удалить