Всё началось с того, что любимая супруга попросила полноценное ТВ (дело в том, что мы не живем в России). Понятно, что IPTV в наше время не является проблемой, но подключать спутник ради пары каналов никакого желания не было, а смотреть ТВ на ПК супруга сразу отказалась. Как нельзя кстати, под рукой оказалась Raspberry Pi B+. О ней и пойдёт речь далее.
В качестве основного дистрибутива для «малинки» был выбран Raspbmc (теперь называется OSMC). Не буду детально описывать процесс установки, поскольку он банально прост и заключается в разворачивании архива на Micro SD карточку. А с настройкой самой «малинки» для выхода в сеть справится любой айтишник.
Забегая вперёд не могу не упомянуть, что на Хабре уже была статья про Torrent-TV на базе XBMC, но там совсем иная реализация и, как мне показалось, она менее удобна:
- каналы идут общим списком;
- нет программы передач;
- нет архива прошедших передач.
Что ж, переходим к более интересной части.
Проблема
Казалось бы, всё проще некуда — берем инструкцию и радуемся, но не тут то было! Именно здесь и начинаются подводные камни. Теперь по порядку:
- Ace Engine — не работает на Raspberry;
- 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:UsersLexsAppDataRoamingACEStreamengine" ace_engine.exe
ping 127.0.0.1 -n 10 > nul
cd "c:UsersLexsAppDataRoamingACEStreamengine"
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:UsersLexsAppDataRoamingACEStreamengine" 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 и наслаждаемся полноценной работой плагина на «малинке»!
Автор: lexs