На хабре уже неоднократно упоминался AceStream: технология, предоставляющая пользователю доступ к видеопотокам по закрытому P2P протоколу AceStream, т.н. torrent телевидение. AceStream предоставляет доступ к распределенной сети доставки контента, т.е. просматривая телеканал пользователь передает данные другим пользователям, что позволяет кардинально снизить стоимость услуг.


А теперь хорошая новость для обладателей медиаплеера на основе raspberry (OSMC, LibreELEC): нашлась сборка acestream под arm, что позволило установить его прямо на raspberry pi. В этой статье предлагается инструкция по установке acestream, и всего необходимого для просмотра ТВ в докер-контейнерах под raspberry. На момент написания статьи, предлагаемое решение позволяет смотреть бесплатно большое количество телеканалов, впрочем без гарантий: acestream в любой момент может перестать быть бесплатным.


kodi live tv channels list screenshot


1. Установка docker на raspbian/osmc


Для docker существует родной инсталляционный скрипт: https://get.docker.com/. Он конечно создан для хипстерского метода curl-pipe-bash и я вам его советовать не буду :) К тому же на момент написания он был немного сломан и на RPi не работал. Поэтому надо выполнить несколько команд из-под root:


apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
apt-key adv -k 58118E89F3A912897C070ADBF76221572C52609D 
mkdir -p /etc/apt/sources.list.d
echo deb \[arch=armhf\] http://apt.dockerproject.org/repo raspbian-jessie main > /etc/apt/sources.list.d/docker.list
sleep 3; apt-get update; apt-get install -y -q docker-engine

Таким образом мы добавили в систему новый репозитарий, ключи для него, и установили пакет docker-engine. Теперь, для запуска докер демона можно воспользоваться командой systemctl start docker


2. Установка acestream


Для установки acestream достаточно положить service file в директорию /etc/systemd/system и запустить средствами systemd, например так:


curl -sSL https://raw.githubusercontent.com/aaaler/acestreamproxyvlc-pi/master/acestream.service > /etc/systemd/system/acestream.service
systemctl daemon-reload
systemctl enable acestream
systemctl start acestream

Если при запуске нужный докер-образ не будет найден — докер его скачает сам. поэтому первый запуск сервиса потребует значительного времени. Если хочется видеть прогресс загрузки — можно заранее скачать образ командой docker pull aaaler/acestream-pi.


Теперь AceStream запущен и отвечает на порту 62062. Этого достаточно, например, для работы дополнений к Kodi типа torrent-tv, lostfilm и других приложений, использующих acestream напрямую. Однако можно пойти дальше, и настроить в Live TV в Kodi. Для этого потребуется поднять еще пару контейнеров.


3. Установка aceproxy


Для работы Live TV необходимо передать Kodi список каналов в виде плейлиста, и для этого ValdikSS написал специальный прокси. Он слушает запросы по HTTP и передает их в AceStream, а приходящий из AceStream видеопоток — раздает средствами VLC. Т.к. авторcкий репозиторий давно не обновлялся, для построения образа был выбран этот форк.


Сначала нужно разложить конфиги:


mkdir /etc/aceproxy/
curl -sSl https://raw.githubusercontent.com/aaaler/acestreamproxyvlc-pi/master/etc/torrenttv.py > /etc/aceproxy/torrenttv.py 
curl -sSl https://raw.githubusercontent.com/aaaler/acestreamproxyvlc-pi/master/etc/p2pproxy.py > /etc/aceproxy/p2pproxy.py

Если у вас есть vip аккаунт на torrent-tv — пропишите ссылку на плейлист AceStream (из личного кабинета) в файле /etc/aceproxy/torrenttv.py. Использовать torrent-tv необязательно, есть и другие источники не требующие регистрации.


Кроме того, есть возможность сконфигурировать плагин p2pproxy для просмотра каналов через DNLA.
Теперь скачаем service файл и запустим контейнеры средствами systemd:


curl -sSL https://raw.githubusercontent.com/aaaler/acestreamproxyvlc-pi/master/aceproxy.service > /etc/systemd/system/aceproxy.service
curl -sSL https://raw.githubusercontent.com/aaaler/acestreamproxyvlc-pi/master/vlc-nox.service > /etc/systemd/system/vlc-nox.service
systemctl daemon-reload
systemctl enable aceproxy
systemctl start aceproxy

При запуске aceproxy все необходимые компоненты будут запущены автоматически. Теперь нам доступны для скачивания обычные m3u плейлисты соответствующих плагинов:


playlist url service
http://127.0.0.1:8000/torrenttv/playlist.m3u torrent-tv.ru
http://127.0.0.1:8000/torrent-telik torrent-telik.ru
http://127.0.0.1:8000/allfon allfon.org

Более подробно про использование aceproxy можно почитать у ValdikSS в Wiki


4. Настройка плеера KODI


Все вышеописанное используется мной для просмотра TV в плеере KODI. В нем есть функция показа Live TV, она включается в SYSTEM > Settings > TV > General.


kodi settings enable live tv screenshot


После этого Kodi сообщит, что требуется включить PVR addon, и покажет их список. (Если этого не произошло, список PVR аddons можно найти в SYSTEM > Add-ons > My add-ons). Выберите PVR IPTV Simple Client, включите его (enable), и укажите в настройках playlist url выбраного плагина.


kodi settings live tv playlist screenshot


В разделе EPG Settings можно указать ссылку на программу передач — epg. Я использовал http://api.torrent-tv.ru/ttv.xmltv.xml.gz


Кроме того, переключение каналов в acestream может занимать значительное время, так что рекомендую увеличить таймаут на переключение каналов в экспетном режиме настроек SYSTEM > Settings > TV


kodi settings timeout channel switch screenshot


После подтверждения опций, рекомендуется перезапустить kodi. При следующем запуске, должны подгрузиться каналы и появится раздел TV в главном меню.


kodi settings live tv playlist screenshot

Поделиться с друзьями
-->

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


  1. vjjvr
    27.11.2016 11:51

    Каналов-то много?
    Пользователи активны?

    Имеет ли смысл заморочиться себе делать?
    Практическое использование уже возможно?

    Или только на поиграться?


  1. aaaler
    27.11.2016 11:55

    Каналов-то много?

    например в плагине torrent-telik — 674 канала.
    Имеет ли смысл заморочиться себе делать?
    Практическое использование уже возможно?

    На мой взгляд вполне. Иногда каналы притормаживают немного сразу после переключения — это особенность acestream, он после переключения ищет пиры.


  1. baka_cirno
    27.11.2016 12:14

    На маке приходится запускать этот Acestream через wine. В основном для футбола.


    1. storoj
      27.11.2016 22:12

      а я привык смотреть на ntv-plus.ru за 75р матч. смотрю нечасто, но забыл уже про забанивающиеся каналы и другие проблемы


  1. VioletGiraffe
    27.11.2016 12:41

    Может кто-нибудь популярно объяснить, что такое Docker и зачем он здесь нужен? Прочитал описание на Гитхабе и всё равно почти ничего не понял.


    1. aaaler
      27.11.2016 12:56
      +1

      чтотакое Docker

      тут недавно неплохо переводили
      и зачем он здесь нужен

      Во-первых непонятно откуда взятый бинарный дистрибутив — это крайне не доверенное приложение, ему не стоит предоставлять лишних привилегий. Докер неплохо решает вопрос изоляции этого палева от остальной системы.
      А во-вторых, если какой-то из компонентов рухнет с ошибкой (что с acestream случается) — докер перезапустит контейнер.


      1. VioletGiraffe
        27.11.2016 14:08

        Спасибо за ссылку.
        То есть вы использовали Докер исключительно как песочницу для приложения, которые бы и так запустилось?


        1. Lsh
          27.11.2016 14:18

          Думаю, что для данных целей вполне можно обойтись отдельным пользователем и/или AppArmor'ом/SELinux'ом.


          1. aaaler
            27.11.2016 21:17

            можно обойтись даже без этого)
            Изначально найденная сборка — она явно для андроида, не для линукс. Для решения проблем с путями к ней прилагался скрипт запускающий ее в chroot окружении. Мне показалось, что в конце 2016 года можно придумать что-то по веселее, да и новости недавно намекали.
            Docker вообще не предлагает никакой уникальной функциональности. Все что в нем сделано — может быть сделано и без него.


        1. aaaler
          27.11.2016 14:19

          Все так.


    1. vjjvr
      28.11.2016 05:10
      +3

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

      Основная идея в том, что на этапе отладки и на этапе боевого применения — приложения работают в полностью идентичной среде.

      Программа запускаемая внутри Docker-контейнера, не зависит от настроек операционной системы и сама не влияет на настройки операционной системы.

      Докер-контейнер несёт внутри себя саму программу и все её зависимости (требуемые дополнительные библиотеки, вспомогательные программы и т.п.

      Строго говоря — это все делает не сам Докер-контейнер, а LXC в Linux и Jail в FreeBSD, а Докер — это несколько очень удобных инструментов для работы со всем этим хозяйством.

      Из инструментов:

      — удобная утилита для управления всем этим хозяйством из командной строки.
      — это локальный и глобальный общемировой registry, где хранятся уже готовые образы.
      — это многослойность образов, когда небольшие изменения позволяют не создавать контейнер заново, а просто накатывать сверху на него тонкий «слой», содержащий только изменения. В частности при запуске 100 программ на одном компьютере физически они будут занимать не очень много места, т.к. базовые слои во всех 100 контейнеров, скорее всего, будут одни и те же, что экономит место.
      и пр.

      Докер является сейчас стандартом де-факто,
      посему куча сторонних инструментов расширяют его функционал.

      Например, для запуска приложений (как локально, так и на кластерах из сотен и тысяч компьютеров) удобным образом можно использовать Dokku, Kubernetes, Flynn, Deis…
      Все эти инструменты используют, в конечном итоге, именно Docker.

      При отладке локально на компьютере рекомендуется использовать точно такой же Docker-контейнер.
      Что позволяет гарантировать идентичность.
      Что никакая библиотека или утилита или файл конфигурации, различающиеся на компьютере разработчика и боевом сервере, не повлияет на иное поведение программы на боевом сервере, отличающееся от поведения программы на компьютере разработчика.

      Кроме того, идеология Докера предполагает что неплохо было бы следовать «12factor»
      https://12factor.net/ru/


  1. jfhs
    27.11.2016 12:42
    +1

    А какое у вас железо? У меня RPi B+, и так не очень шустро работает, вот думаю потянет ли Ace Stream?


    1. aaaler
      27.11.2016 12:44

      У меня RPi 3. Греется, но едет довольно быстро.


  1. Lsh
    27.11.2016 13:25
    +2

    и для этого ValdikSS написал специальный прокси. Он слушает запросы по HTTP и передает их в AceStream, а приходящий из AceStream видеопоток — раздает средствами VLC

    ЕМНИП, AceStream с версии 3.чего.то.там имеет свой прокси для HTTP. А тут получается дополнительный лаг, т.к. ещё даже и целый VLC сначала пропускает через себя поток.

    А вообще надо развивать свободные аналоги. Есть даже стандарт на это дело: RFC 7574
    https://datatracker.ietf.org/doc/rfc7574/
    И есть несколько проектов на начальной стадии
    github.com

    Тогда торрент телевидение будет под любую платформу. Хоть на роутере с MIPS его гоняй, если мощи хватит.
    Будет лежать прямо в репозитории любимого дистрибутива. И не надо будет никакого докера для огороживания.

    Кстати, разработчики AceStream одно время вели себя очень скотским образом. То исходники зажимали, нарушая GPL:
    «я попросил у Constantin исходники Ace Player, т.к. он основан на VLC и лицензирован по GPLv2, а он мне отказал, сказал, что я нарушил их лицензию, и забанил меня. Теперь на моем IP Ace Stream не работает. Я написал об этом всем администраторам — ответа нет. Написал об этом в VLC, сейчас еще на gpl-violations напишу.»
    Подробнее тут
    А то и всякое наглое вирусоподобное AdWare пихали в своё ПО, а потом жалобно просили Касперского не детектировать их как заразу.
    Подробнее тут


    1. aaaler
      27.11.2016 13:33

      ЕМНИП, AceStream с версии 3.чего.то.там имеет свой прокси для HTTP. А тут получается дополнительный лаг, т.к. ещё даже и целый VLC сначала пропускает через себя поток.

      Все так, имеет, но качество прокси оставляет желать лучшего. Он отдает поток с «рывками», отчего плееры заметно чаще тупят. Приведенная мной конфигурация, имхо, работает стабильнее. И можно тащить один поток в два места например :) если придумаете зачем.


    1. inoyakaigor
      27.11.2016 19:49
      +1

      всякое наглое вирусоподобное AdWare пихали в своё ПО

      Я помню в какой-то момент мне надоело это смотреть и бороться толком не получалось и я решил, что хватит это терпеть и настроил битторрент на последовательное скачивание, чтобы можно было смотреть кино пока качается. И, знаете, я теперь всем рекомендую так сделать.


      1. Lsh
        27.11.2016 23:53

        Да, это прикольно. Но это не тоже самое. Телевидение так не посмотришь.


    1. erlyvideo
      27.11.2016 20:15
      +1

      восхитительная ссылка, спасибо большое.

      Я, честно говоря, и не знал, что AceStream это черная рекламная сеть.


  1. Miffer
    27.11.2016 13:33
    +2

    Вот бы такую же инструкцию, но для серверной Ubuntu


  1. DeXPeriX
    27.11.2016 17:34

    Хочу! Именно то, что хочу от малины!
    Интернет у меня поднят на модеме, к которому подключаюсь по Wi-Fi. Список каналов torrent-telik и allfon увидело корретно. Torrent-Tv без модификации конфига не работает? Мб добавьте это в статью…
    Видео не загружает. Поставил лимит сначала 30 секунд, потом 45. Ведёт себя одинаково: надпись «Подождите» секунд 7-15, и потом возврат как будто на канал не нажимал…
    На torrent-tv.ru нашёл, что нужно пробросить порт 8621 с модема на мою малину. Сделал через NAT модема, так же делал для других торрент-клиентов, в т.ч. под андроид. В этот раз не помогло. Возможно, нужен диапазон портов? Какой именно?


    1. aaaler
      27.11.2016 20:47

      Проверьте сначала функциональность acestream отдельно от остального: можно для этого использовать torrent-tv.ru kodi addon или какую-нибудь другую фигню которая умеет ходить в acestream напрямую.
      Никаких портов у меня снаружи на rpi не прокинуто.
      На какие-то мысли могут навести логи acestream:
      docker exec acestream tail -f /acestream/acestream.log


      1. DeXPeriX
        28.11.2016 14:31

        Да, видимо проблема с Acestream. Установил Пазл ТВ, из образовательных уверенно показало English Club TV и ещё несколько с источника #2. Аналогичная ситуация и на ноуте (Arch Linux), где Acestream вообще не установлен :-(


  1. Incognito4pda
    27.11.2016 17:54

    Скажите, а на Amazon Fire TV можно в Kodi запустить эту шляпу?


    1. aaaler
      27.11.2016 20:48

      Если у него внутри linux armv7l то вероятно да.


    1. xel
      28.11.2016 11:35

      Не уверен насчёт Kodi, но в MxPlayer/LazyIPTV Acestream на данном устройстве запускают.


  1. StraNNicK
    27.11.2016 20:36

    Во-первых, спасибо за проделанную работу. Любители Kodi (к которым я себя отношу) оценят.

    Во-вторых, в дополнение, не могу не отметить, что если Kodi, как таковой не нужен, то связка AceStream + TorrentTV (первое приложение ставится из Google Play, второе — с сайта TorrentTV) просто работает, не требуя дополнительной установки и настройки чего-либо. Если нужно только ТВ, то под андроидом это самый простой вариант.


  1. Listrigon
    28.11.2016 13:48

    Подскажите несведущему в этом всём. То, что описано в этой статьие это самый простой способ смотреть ТВ и русские каналы на малинке или есть варианты проще?


    1. foxyovovich
      28.11.2016 14:59

      Самый простой — это найти готовый m3u плейлист iptv и указать его в PVR IPTV Simple Client. Просто нет гарантий, что найденный плейлист на следующий день он будет работать, да и качество может хромать


  1. Strizh0
    28.11.2016 20:15
    +1

    Спасибо большое. На raspberry pi 2 работает отлично, пока, на всякий случай установил кулер. Давно искал подобное решение.