Всё началось с того, что любимая супруга попросила полноценное ТВ (дело в том, что мы не живем в России). Понятно, что IPTV в наше время не является проблемой, но подключать спутник ради пары каналов никакого желания не было, а смотреть ТВ на ПК супруга сразу отказалась. Как нельзя кстати, под рукой оказалась Raspberry Pi B+. О ней и пойдёт речь далее.

В качестве основного дистрибутива для «малинки» был выбран Raspbmc (теперь называется OSMC). Не буду детально описывать процесс установки, поскольку он банально прост и заключается в разворачивании архива на Micro SD карточку. А с настройкой самой «малинки» для выхода в сеть справится любой айтишник.

Забегая вперёд не могу не упомянуть, что на Хабре уже была статья про Torrent-TV на базе XBMC, но там совсем иная реализация и, как мне показалось, она менее удобна:

  • каналы идут общим списком;
  • нет программы передач;
  • нет архива прошедших передач.

Что ж, переходим к более интересной части.

Проблема


Казалось бы, всё проще некуда — берем инструкцию и радуемся, но не тут то было! Именно здесь и начинаются подводные камни. Теперь по порядку:

  1. Ace Engine — не работает на Raspberry;
  2. Ace Engine работает только с localhost.

С ними и будем разбираться.

Камень №1 принимаем «as is» и двигаемся к камню №2.

Если кратко, Ace Engine работает на двух портах — 6878 для управления потоком и произвольный порт, для непосредственно стриминга видео. Первый формально слушает все интерфейсы, но команды принимает только с localhost, второй изначально слушает только 127.0.0.1. А для подключения с «малинки» нам нужен доступ на оба порта.

Поэтому, другого выхода кроме как использовать клиент-сервер («малинка» — ПК) вариантов нет. С моделью определились, идём дальше.

Настройка ПК


Конечно, в первую очередь ставим сам AceStream. Можно поставить всё (движок+плеер+плагин для браузера), я же поставил только сам движок. Смотреть ТВ на ПК я не собираюсь.

Теперь нам нужно сделать port forwarding. Самый очевидный вариант netsh, к сожалению, не умеет делать portproxy на 127.0.0.1. А городить на Windows 7 полноценный NAT с forward никакого желания не было. Спасение нашлось на просторах интернета в виде порта unix утилиты rinetd под ОС Windows.
Итак, нам нужно перенаправить два порта, один мы знаем, второй обновляется при каждом запуске Ace Engine и прописывается в файле acestream.port (в папке, где установлен AceStream). В моем случае, Ace будет работать постоянно, так что вполне устроит вариант с автозапуском вместе с ПК.

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

start /d "c:\Users\Lexs\AppData\Roaming\ACEStream\engine\" ace_engine.exe
ping 127.0.0.1 -n 10 > nul
cd "c:\Users\Lexs\AppData\Roaming\ACEStream\engine\"
set /p port=<acestream.port
@echo 10.100.0.50 36001 127.0.0.1 6878 > rinetd.conf
@echo 10.100.0.50 36002 127.0.0.1 %port% >> rinetd.conf
start /d "c:\Users\Lexs\AppData\Roaming\ACEStream\engine\" rinetd.exe

10.100.0.50 — адрес ПК в домашней сети. С настройкой ПК закончили, идём дальше.

Настройка плагина


IP адрес для подключения к AceStream можно задать через GUI настройку плагина, а с портами придется сделать «грязный хак». Берём в руки напильник SSH и подключаемся к «малинке». Далее нам нужно отредактировать Python'овский скрипт, расположенный по адресу:

/home/pi/.kodi/addons/script.torrent-tv.ru/ts.py

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

    239         if defines.ADDON.getSetting('web_port'):
    240             self.webport = defines.ADDON.getSetting('webport')
    241         else:
    242             self.webport = '36001'
    243         if defines.ADDON.getSetting('port'):
    244             self.aceport = int(defines.ADDON.getSetting('port'))
    245         else:
    246             self.aceport = 36002

Сохраняем, перезапускаем плагин Torrent-TV и наслаждаемся полноценной работой плагина на «малинке»!

Комментарии (6)


  1. nesmit
    26.11.2015 14:35

    Как показала практика, глючат и отваливаются каналы.
    Такая схема, но на linux проработала пол года и не прижилась.
    Все прокси виды aceproxy, а так же попытка проброса порта с нормальной машины только частично решают проблему.
    Проблема в глючности движка.


  1. xRay
    26.11.2015 15:57
    +1

    На linux использую github.com/ValdikSS/aceproxy от ValdikSS
    Работает отлично + сам запускает AceStream Engine.
    Для борьбы с рывками в aceproxy можно использовать запущенный в фоне VLC. Подробнее описано в wiki проекта.
    Можно и не на linux использовать проект написан на Python и в wiki описано как под Windows его запускать.


  1. ValdikSS
    27.11.2015 08:17

    rinetd не нужен, просто запускайте движок с параметром --bind-all.


    1. 27.11.2015 12:40

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


  1. kay
    27.11.2015 11:27

    Разработчики Ace Engine так и не открыли исходный код?


    1. 27.11.2015 12:40

      Насколько мне известно — нет.