воскресенье, 28 июня 2015 г.

Ace Stream прокси своими руками, просмотр Torrent TV на XBMC

У меня на хате уже 4 XBMC точки (и 5-я на подходе), у всех общая мультимедиа база (общее mysql-подключение), и на всех я хотел бы смотреть ТВ с сайта torrent-tv.ru (есть аддон для XBMC), но пока что приходится настраивать (и обновлять при случае) руками на каждой точке отдельно. Это установка Ace Stream, втыкание плагина torrent-tv в XBMC, в принципе на этом всё, но все же лениво. Не всегда получается с первого раза, сейчас вот на одной точке вылезла проблема обновления плагина с резолюцией "Dependencies not met", а аналогичный плагин (официальный) вообще помечен как Broken. Ace Stream на тот момент в репозиториях не было, приходилось руками ставить. К тому же системы разные, где виндов$, где линух, а где то вообще андроид. На телефон, к примеру, AceStream сервер не поставишь, и порт по ssh не пробросишь. Потому захотелось поднять на домашнем сервере единую точку раздачи торрент-тв, а в общей папке мультимедиа разместить плейлист со ссылками на каналы.

Задачу я решил, более того - в последующих версиях написанной программы реализовал просмотр фильмов прямо с трекера без скачивания, да еще и запуск голосовой командой. Но обо всем по порядку


Известный ресурс torrent-tv.ru имеет множество телеканалов, которые можно смотреть с использованием плагина на XBMC или с использованием их сервиса TS-Proxy (не пробовал).
Нам от них понадобится только список каналов и соответствующие им PID. Купите подписку всего за 2р в день и у вас в распоряжении будет такой готовый плейлист, из которого легко можно будет надергать пары "PID-Название".

Как это работает

Если рассматривать windows систему, то после установки Ace Stream в системе появляется фоновая служба, и регистрируется обработчик ссылок вида acestream://<pid>, по клику на которую у службы запрашивается воспроизведение контента с заданным PID. Ссылки acestream:// обрабатывает специально обученный плеер наподобие VLC - TS Player, устанавливающийся вместе с Ace Stream. Он коннектится к Ace Stream, передает ему команду на запуск PID, дожидается ответа со ссылкой на поток и воспроизводит его. Как и откуда Ace Stream берет видео по PID - тема отдельной статьи. Сейчас важно одно - мы даем PID на вход Ace Stream и получаем от него ссылку на видеопоток.

На телевизор, как и на андроид, все это не установишь. Чтобы ТВ каналы можно было смотреть на телевизоре потребуется промежуточный софт, формирующий удобные и понятные телевизору HTTP-ссылки на потоки, каковым является TS-Proxy от torrent-tv.ru. Однако эта услуга у них тоже стоит денег, да еще и на каждый ТВ отдельно. Если у меня в хате 3 телевизора - это около 360р, а на 5-6 XBMC-точек вообще дорого.
Подобный TS-Proxy можно организовать самостоятельно, желательно под Linux. Потребуется все тот же Ace сервер и софт, наподобие TS Player, который будет слушать обращения клиентов, запрашивать у сервера ссылку и выдавать ее содержимое клиенту, например телевизору.

Поехали

Установка AceStream описана по ссылке (у меня Debian), тут пояснять нечего
http://wiki.acestream.org/wiki/index.php/Streaming

Запуск из консоли (можно не из-под рута)
acestreamengine --client-console --log-file /tmp/acestream.log &

Коннект для проверки работы AceStream
telnet localhost 62062
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
^]

telnet> quit
Connection closed.
Отзывается, хорошо.

Я еще не говорил, что софтина будет консольной и написана на PHP? Вот и сказал. Т.е. работать с Ace Stream, нам придется, что называется, ручками.
Вперед! Изучать API и делать первые шаги.
http://wiki.acestream.org/wiki/index.php/Engine_API

Как оказалось, существует такая вещь, как AceProxy от ValdikSS.
Но к моменту, когда я решил написать свое, я уже имел весомый список претензий к этому софту.

Отличия от AceProxy

Точнее было бы озаглавить "Почему я решил написать свое". Итак.
  1. m3u плейлист со ссылками на AceProxy открывался жуть как долго. XBMC не просто открывает содержимое плейлиста, он делает по 2 запроса на каждый элемент, инфу пробивает (HEAD и Range=0-0). Уже не помню, секунду или две занимает каждый запрос, но плейлист из 10 ссылок уже нереально открывать. А тормозной софт - самая ненавистная мне вещь.
  2. Из-за этой же причины остановка потока превращается в муки - ждем пока XBMC опросит плейлист снова. Он ведь не кэширует результат.
  3. При запуске ссылки XBMC замирает на лишние 3-4 секунды, все по той же причине.
  4. Остановить зависший поток (кончился инет, умерла трансляция) это очень долго, XBMC не реагирует на команды, видимо ожидая хоть байта из потока. Часто приходилось ребутать малинку (Raspberry Pi).
  5. Для трансляции на несколько клиентов одного потока нужен VLC. Но с ним стабильность вообще никакая.
  6. На кривой/мертвый урл софт не выдает внятного ответа и XBMC делает попытки открыть урл снова
  7. Тормоза и обрывы, булькающий звук без видеоряда в режиме VLC, рассыпающаяся картинка и другие глюки, раздражающие, бесящие и сподвигающие на свершения! Трансляции обрывались довольно часто, некоторые каналы раз в 5-7 минут. Около 15 сек на запуск канала, где-то через минуту обязательный перерыв на подкачку буфера, в общем злоба и ненависть!
На данный момент мое приложение избавлено от всех этих недостатков. Каналы открываются за 3-5 секунд. Дополнительные клиенты на ту же трансляцию стартуют за 1 секунду. Перерывов на буферизацию нет. Если AceServer падает, трансляция прозрачно перезапускается без дисконнекта клиентов. Память 30Мб на трансляцию (размер буфера настраивается), от числа клиентов не зависит. А еще имеет гламурный ncurses-интерфейс :)
Полюбоваться и скачать Проект AcePHProxy на GitHub

Порядок работы с Ace Stream

Ace Stream поставили, коннект проверили - надо опробовать API.
Каждая сессия выглядит так - коннект, авторизация, команды, выход. Для авторизации нам понадобится ключ. Для тестов можно использовать публичный ключ
kjYX790gTytRaXV04IvC-xZH3A18sj5b1Tf3I-J5XVS1xsj-j0797KwxxLpBl26HPvWMm
Как из него сформировать response_key можно прочитать тут http://wiki.acestream.org/wiki/index.php/Product_key

А вот PHP скрипт для формирования ответного ключа по ключу продукта + ключу из HELLOTS. В качестве аргумента скрипту передается значение key= из HELLOTS
<?php
if (!isset($argv[1])) {
        die('Go to hell!' . PHP_EOL);
}
$prodkey = isset($argv[2]) ? $argv[2] : 'kjYX790gTytRaXV04IvC-xZH3A18sj5b1Tf3I-J5XVS1xsj-j0797KwxxLpBl26HPvWMm'; // public by default
$inkey = $argv[1];
# signature = hex(sha1(request_key + product_key)); // сгенерировать подпись запроса
# x = product_key.split("-")[0];                    // вырезаем все символы до первого знака "-" из ключа продукта
# response_key = x + "-" + signature;               // отправляем движку вырезанную на предыдущем этапе строку и подпись, разделенные знаком "-"
$shakey = sha1($inkey . $prodkey);
$prod_part = reset(explode('-', $prodkey));
$ready_key = $prod_part . '-' . $shakey;
echo $ready_key . PHP_EOL;
Итак, коннектимся на порт 62062 (для linux).
Авторизация (рукопожатие):
>> HELLOBG version=2
<< HELLOTS version=2.1.6 key=b0f14cc3ed тут запускаем скрипт, передавая ему b0f14cc3ed, получаем ключ для READY
>> READY key=kjYX790gTytRaXV04IvC-d01fbd4d1883d729df2a18badb6eb204da13a69a
<< AUTH 0
AUTH 0 похоже выдается для публичного ключа. Хотя позже это не подтвердилось, проблема в чем-то другом. На виртуалке, где я пробовал поднять все это в первый раз, выдается AUTH 1, что для публичного ключа, что для ключа от XBMC плагина torrent-tv. Потом, когда стало ясно, что с виртуалки UPnP виден не будет (там другая подсеть), перенес все на шлюз. И тут я всегда получал AUTH 0. Поначалу вообще наблюдались проблемы авторизации, выдавало NOT READY, пока не разрешил все исходящие коннекты с локалхоста в файрволле.

Перед первым запуском контента надо сначала установить USERDATA.
>> USERDATA [{"gender": 1}, {"age": 3}]
Age=3 -> 18-24 года

Далее пытаемся запустить какой-то контент. Например по PID.. например от канала 2x2.
Откуда я его взял? Ctrl+T, torrent-tv.ru/torrent-online.php?translation=390, Ctrl+U, Ctrl+F -> "loadPlay" -> вуаля. 
>> LOADASYNC 1 PID 4e7123f9c468116c3188a14e4af92f862971b58c
<< STATUS main:loading
<< LOADRESP 1 {"status": 1, "files": [["2x2%20%28torrent-tv.ru%29", 0]], "infohash": "5fe1bfd3d6bdf7e9909a417ade293ac0ac568baa", "checksum": "45d3489534095ae5e3fb3bc1ba793bbcc00b5ffa"}
<< STATUS main:idle
Судя по непустому массиву files, контент жив. Пробуем запускать (обратите внимание на неприметный 0 в хвосте команды)
>> START PID 4e7123f9c468116c3188a14e4af92f862971b58c 0
получаем ошибку
<< STATE 1
<< STATUS main:starting
<< STATE 0
<< STATUS main:idle
<< STATUS main:err;0;No ADs option must be activated to use this product
Где-то надо активировать некое "no ads option" или же публичный ключ не катит
запросил персональный ключ через форму на сайте..
...прошло несколько лет...
Ключа от команды Ace Stream я походу не дождусь, нашел в  XBMC плагине Torrent TV такой
n51LvQoTlJzNGaFxseRK-uvnvX-sD4Vm5Axwmc4UcoD-jruxmKsuJaH0eVgE
Пробуем!
$ telnet localhost 62062
>> HELLOBG version=2
<< HELLOTS version=2.1.6 key=b24dae3cd3
>> READY key=n51LvQoTlJzNGaFxseRK-d03b26bc27888e0da491bb9062b066319835cfaf
<< AUTH 0 почему то
>> LOADASYNC 1 PID 4e7123f9c468116c3188a14e4af92f862971b58c
<< STATUS main:loading
<< LOADRESP 1 {"status": 1, "files": [["2x2%20%28torrent-tv.ru%29", 0]], "infohash": "5fe1bfd3d6bdf7e9909a417ade293ac0ac568baa", "checksum": "45d3489534095ae5e3fb3bc1ba793bbcc00b5ffa"}
<< STATUS main:idle
>> START PID 4e7123f9c468116c3188a14e4af92f862971b58c 0
<< STATE 1
<< STATUS main:starting
<< STATUS main:prebuf;0;2147483648;0;0;0;0;0;2;0;0;0;0
<< STATUS main:prebuf;6;2147483648;0;0;242;0;0;8;0;540672;0;0
<< START http://127.0.0.1:6878/content/5fe1bfd3d6bdf7e9909a417ade293ac0ac568baa/0.0917762803648 stream=1
<< STATE 2
<< STATUS main:dl;1;0;803;0;0;8;0;2621440;0;0
<< EVENT livepos last=1395 live_first=453 pos=592 first_ts=1397293600 last_ts=1397293720 is_live=1 live_last=611 buffer_pieces=22
<< STATUS main:dl;1;0;660;0;0;8;0;2834432;0;0
<< EVENT livepos last=1395 live_first=453 pos=592 first_ts=1397293602 last_ts=1397293722 is_live=1 live_last=612 buffer_pieces=22
<< STATUS main:dl;1;0;566;0;0;8;0;3014656;0;0
<< EVENT livepos last=1395 live_first=456 pos=592 first_ts=1397293602 last_ts=1397293722 is_live=1 live_last=614 buffer_pieces=22
<< STATUS main:dl;1;0;505;0;0;8;0;3211264;0;0
<< EVENT livepos last=1395 live_first=457 pos=592 first_ts=1397293604 last_ts=1397293724 is_live=0 live_last=615 buffer_pieces=22
<< STATUS main:dl;1;0;461;0;0;8;0;3407872;0;0
<< EVENT livepos last=1395 live_first=457 pos=592 first_ts=1397293603 last_ts=1397293724 is_live=0 live_last=617 buffer_pieces=22
>> STOP
<< STATE 0
<< STATUS main:idle
Работает матьиво! Ответ от движка START это то, чего мы ждем. Он содержит одноразовую ссылку на трансляцию потока. Ее и надо открывать плеером. Можно даже проверить, скопировав ее сразу и открыв в VLC, но только с того же хоста, где запущен Ace Stream, ибо адрес 127.0.0.1.

Теперь можно оформить наработки в софт, слушающий запросы от клиентов на порту 8000, и сформировать плейлист со ссылками на трансляции, этакий прокси-сервер.
Например так, ТВ обращается к прокси по ссылке http://10.0.0.77:8000/pid/4e7123f9c468116c3188a14e4af92f862971b58c, где 10.0.0.77 адрес компа с установленным прокси. Прокси обрабатывает запрос, извлекает PID, коннектится к Ace Stream, дает ему команду на запуск, дожидается события START http, берет ссылку и копирует поток из нее, выдавая клиенту.
Кстати вызов LOADASYNC необязателен.
Работа с Ace была сведена к командам авторизации (HELLOBG, READY) и START/STOP.

Первый результат

В итоге у меня родилось приложение-демон, некий аналог TS-Proxy от torrent-tv, версия 0.1. Поначалу для проверки концепта я зашил один PID в код и выдавал всем клиентам одну и ту же трансляцию. Когда дело пошло, код стал здорово видоизменяться, рефакториться, обрастать функционалом, и на данный момент софтина обзавелась приятным ncurses-интерфейсом, избавилась от тонны багов, умеет слать уведомления на XBMC узлы (например о том, что интернет упал, и трансляция сейчас вероятно прервется) и позволяет кроме просмотра torrent-tv запускать торренты (фильмы) с rutracker.org.

Немного о последнем.
В API Ace Stream для команды START есть вариант "START TORRENT" и "START RAW".
Суть та же, что и для "START PID" - запуск видео, но уже по торрент-файлу.
Первый вариант принимает в качестве аргумента ссылку на .torrent файл для запуска. Катит для случая, когда для скачивания torrent-файла не требуется авторизация на трекере.
Второй вариант пригодится в ином случае. Он принимает в качестве аргумента base64-кодированное содержимое torrent-файла. Задача получения содержимого уже ложится не на Ace Stream, а на сторонний софт.

Теперь о голосовом запуске фильмов.
Параллельно я игрался с распознаванием голоса в хроме, а также у меня имелся класс поиска новинок на рутрекере. И решил я все объединить.
Пример JavaScript скрипта, распознающего голос в Google Chrome и отправляющего запрос на бэк для поиска распознанного на трекере
var rec = new webkitSpeechRecognition;
rec.continuous = false;
rec.interimResults = false; // возвращать промежуточные результаты
rec.onresult = function(event) {
    if (!event.results || event.results.length == 0 || !event.results[0][0]) { return; }
    var cmd = event.results[0][0].transcript;
    var url = '/multimedia/searchTracker/' + encodeURIComponent(cmd);
    $.ajax(url);
}
rec.start();
Бэкендом в данном случае у меня выступает не AcePHProxy, а демон домашней автоматизации (ДДА), о котором у меня как-то было видео. В интерфейсе видны 4 иконки типа монитора. Это XBMC узлы.
Так вот. На бэке работает библиотека поиска по рутрекеру, распознается и ищется, надо сказать, очень неплохо. Я открываю веб-страницу, нажимаю на нужный XBMC, где я хотел бы запустить кино, говорю название фильма, на бэк уходит ajax-запрос, там происходит поиск по рутрекеру, когда раздача найдена я получаю в ajax-ответе всю инфу по раздаче (название, урл на форуме, урл торрент-файла, id и т.д.) и запускаю ее через WebSocket-коннект до XBMC.

Я ржал, когда первый раз придумал эту схему:
"с вебстраницы я говорю название фильма, JS запрашивает у гугла распознавание, затем результат передается ДДА, тот коннектится на рутрекер, ищет фильм по распознанному тексту, берет id (но не торрент-файл, еще рано), формирует спец.ссылку, открывает коннект до XBMC, говорит ему открыть эту ссылку, ссылка ведет на AcePHProxy, тот видит, что в спецссылке закодирована ссылка на получение base64-контента торрент-файла, коннектится к ДДА, тот снова коннектится к рутрекеру, качает торрент-файл, base64-кодирует, выдает AcePHProxy, и тот, наконец-то, со спокойной душой уже может стартовать видеопоток!".

Тут меня ждала засада.
Дефолтный таймаут на открытие потока в XBMC - 30 сек. А торренты стартуют не так быстро, как ТВ-трансляции. Секунд 45 против 4-5 для ТВ.
Я пробовал выдавать HTTP заголовки типа Connection: keep-alive и вполне RFC-шный Keep-Alive: timeout=60,max=100, пробовал имитировать медленный коннект (выдавать заголовки по одному за раз, с паузой в секунду, да еще и фейковыми разбавлять), пробовал выдавать пустые байты (NUL, переносы строк, пробелы), пробовал обмануть, выдавая Transfer-Encoding: chunked с начальным содержимым типа 0\r\n\r\n0\r\n\r\n... нихренашеньки не помогало.
Очень не хотелось мне конфигурировать таймаут на клиентах. Но пришлось.
Что любопытно, помогла отнюдь не опция advancedsettings/network/curlclienttimeout (см. http://kodi.wiki/view/Advancedsettings.xml#network), а advancedsettings/network/curllowspeedtime.
Выставив ее в 60, я добился, что XBMC дожидается буферизации торрента на стороне Ace и начала потока.
Уже потом я подумал, "так если управление XBMC идет через JSONRPC, и AcePHProxy умеет с XBMC по этому RPC общаться, пусть ДДА дает команду на запуск самому AcePHProxy, а тот, когда поток будет готов, пусть цепляет XBMC на готовое, и все дела!".
Записал это в TODO-лист.

Итоги

Вообще штука вышла очень удобная. Вот только перематывать нельзя, обидно, может удастся побороть еще. Но хоть на паузу ставить можно. Теперь ни к чему включать комп, лезть на трекер, качать торрент, ждать пока он скачается (если нет патча последовательной закачки, а с ним кстати тоже перематывать нельзя), просто берешь смартфон, нажимаешь на иконку нужного XBMC и говоришь название фильма. Ждешь 45сек, смотришь.
Можно подключить несколько трекеров.

upd: вышла версия AcePHProxy 0.6.4

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

  1. ничего не понял,
    вот у меня есть хостинг с php5
    как мне на нем запустить прокси и снимать с него трансляции

    ОтветитьУдалить
    Ответы
    1. эта статья дает не рыбку, но удочку и инструкцию к ней.
      а если нужно готовое - AceProxy от ValdikSS можно попробовать

      Удалить
  2. Добрый день, а сколько клиентов удавалось подцепить максимально к 1му торрент файлу? У меня почему-то не получается больше 5 человек подключить. Ограничение ли это самого айсстрима или вашего скрипта?

    ОтветитьУдалить
  3. ограничений нет. йэсстрим вообще думает, что работает с одним клиентом (это прокси).
    если все клиенты прокси - XBMC, то должно работать без проблем, с ним стабильнее всего работает. VLC и другие плейеры я даже не тестировал толком. с VLC может просто не открыться поток или он может отвалится с ошибкой в логе "Close on negative pointer", это означает, что клиент (VLC) до сих пор читает начало буфера, а все остальные уже его весь прочитали и требуют добавки. вот самого отсталого и кикает с трансляции.

    ОтветитьУдалить
  4. Я пытаюсь на приставки раздать подняв проксю, пока клиентов меньше 5 человек (на 1 торрент или на несколько разных) проблем не наблюдается, как только количество чуть по чуть растет начинаются фризы и отвал клиентов, вот поэтому и решил что есть какое-то ограничение.

    ОтветитьУдалить
    Ответы
    1. проблема есть и я ее собираюсь решить в следующей версии 0.6.5

      Удалить
    2. А когда планируется обновление?))

      Удалить
    3. к концу февраля думаю разобраться

      Удалить
  5. А не пробовали прикрутить вот такую штуку для стримминга? https://github.com/steeve/torrent2http (по крайней мере для стриминга торрент фалов) народ для kodi ее юзает и вроде работает стабильно, правда с перемоткой есть проблемы.

    ОтветитьУдалить
    Ответы
    1. не пробовал. похоже, что это client-side расширение для XBMC, а настройка каждого клиента - это то, от чего я хотел уйти. но все ж по ссылке я почерпнул пару интересных сайтов-источников с торрентами для скачивания, спасибо )

      Удалить
    2. ну вообще не совсем клиент сайд, я попробовал на убунте запустить torrent2http и с другого устройства замечательно все проигралось, правда перемотка не работает пока весь файл не качнется, файлы сами хранятся в течение какого-то времени и при закрытии приложения удаляются. Пробовал поднять на виртуалке и удалось запустить 20 влс окон с проигрыванием 1го и того же файла, единственное что не удобно для каждого торрент надо запускать отдельный процесс torrent2http c новым номером порта((

      Удалить
    3. кстати отвал VLC я поборол, версию 0.6.5 скоро выложу.
      20 VLC.. ну так я не жестил, но 10 разных клиентов пробовал :)

      Удалить
  6. Так же если вам интересно будет взгляните в сторону https://github.com/asapach/peerflix-server и https://github.com/mafintosh/peerflix прикольная штука но при перемотке крашится.

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

    ОтветитьУдалить
  8. START PID 4e7123f9c468116c3188a14e4af92f862971b58c 0
    STATE 1
    STATUS main:starting
    STATUS main:prebuf;0;2147483648;0;0;0;0;0;0;0;0;0;0
    STATUS main:prebuf;0;2147483648;0;0;0;0;0;0;0;0;0;0
    ...
    и так до бесконечности этот STATUS main:prebuf. как это можно побороть?

    ОтветитьУдалить
    Ответы
    1. Если правильно понял такое бывает если нет пиров. Хорошо, где и как брать PID каналов?

      Удалить
    2. верно, пиры по нулям, потока нет.
      не знаю как сейчас, раньше плейлист со ссылками acestream:// можно было скачать с torrent-tv.ru.
      либо открыть трансляцию на сайте, например http://torrent-tv.ru/torrent-online.php?translation=5435, и в коде страницы найти loadTorrent.
      раньше там использовались PID, теперь ссылки на файлы .acelive, открывать их надо через команду START TORRENT

      Удалить
    3. Запустил acestream на сервере, там же через telnet получил ссылку, поменял 127.0.0.1 на IP сервера и пробую запускать у себя на компьютере - что-то не идёт (локально работало).
      500 Internal Server Error
      Думал сразу с acestream'а можно тянуть поток. Флаг --service-remote-access не помог. Обязательно нужно пропускать поток через какой-то прокси или можно как-то заставить acestream отдавать данные через интернет?

      Удалить
    4. Запустил один канал на двух компьютерах через nginx - работает только одно устройство. Попробовал ещё раз взять сслыку для второго устройства через telnet, но она не заработала.
      Нужен прокси, который будет кэшировать у себя поток (например, в оперативке) и отдавать из кэша? Или как-то иначе можно сделать?

      Удалить
    5. Понял, что нужен кэширующий прокси.
      Пробовал настраивать proxy_cache_path и proxy_cache в nginx, но не получилось.
      Реально ли nginx настроить или надо писать свой прокси?

      Удалить
  9. несколько клиентов на одну ссылку сервер не разрешает, иначе прокси писать было бы ни к чему. nginx тоже вряд ли поможет, нужно отслеживать клиентов и отправлять команды ace-серверу, сам он трансляции останавливать не будет.
    полученную от сервера ссылку можно открыть с другого компа, если пробросить порт 6878 с локального IP 127.0.0.1 на IP LAN (192.168.x.x обычно).
    под линухом это делается универсальной командой (независимо от адресов)
    ssh -f -N -L 0.0.0.0:6777:127.0.0.1:6878 debuser@localhost
    открываем проброс запросов извне к порту 6777 на локальный порт 6878.
    чтобы каждый раз не спрашивало пароль, нужно скопировать ключ
    ssh-copy-id debuser@localhost

    ОтветитьУдалить
  10. Всё было хорошо и тут началось:
    STATUS main:err;0;Time limit exceeded
    Ключ n51LvQoTlJzNGaFxseRK-uvnvX-sD4Vm5Axwmc4UcoD-jruxmKsuJaH0eVgE
    Он больше не работает? Можно новый взять где-то, купить? Или можно как-то исправить это иначе?

    ОтветитьУдалить
    Ответы
    1. ключ работает. гугл советует удалить папку .ACEStream

      Удалить
  11. VLC медленно переключает каналы (использую HLS). Написал мини программу, чтоб померять как быстро поток прогретых каналов отдаётся плееру. Загрузка данных заняла 200 милисекунд. Значит сам VLC тормозит так как начинает показывать другой прогретый канал примерно через 5-10 секунд. Как-то нереально долго начинается показ, пробовал настройки плеера менять, но не помогло. Что-то с этим можно поделать?

    ОтветитьУдалить
    Ответы
    1. Там где вставляется ссылка поставил кэширование 0 мс. Стало лучше (примерно 3-5 секунд), но на планшете было быстрее.

      Удалить
    2. здесь не могу помочь, оптимизировал под XBMC, под VLC нет

      Удалить
    3. Оказалось плеер медленно работает с HLS. А как называется протокол, по которому acestream отдаёт поток?

      Удалить
    4. Наверное не так выразился. Вроде это progressive download.
      В теории плееру нужно передать метаданные, а потом уже само видео и аудео. Если без метадынных передать поток плееру, то сможет ли он воспроизвести его или нужно как-то скопировать метаданные и при подключении плееров давать сначала метаданные ранее сохранённые, а потом уже сам поток? Если нужны метаданные, то как их взять из потока для сохранения?

      Удалить
    5. Получилось запустить 2 плеера на 1 канал, но первый плеер получил все данные и картинка нормальная, а второй подключился чуть позже и получил не все данные, картинка с помехами, а в консоли плеера ошибки валятся (шттп заголовки отправлял).
      Как второму плееру данные нормально передать, чтоб картинка была без помех?

      Удалить
  12. Как с вами можно связаться? Есть схема, разработан определённый алгоритм, есть реализация в коде, но во втором плеере сейчас почему-то обрыв потока после секунды проигрывания.

    ОтветитьУдалить
  13. Разобрался. Спасибо вам за статью, очень занимательно )

    ОтветитьУдалить
  14. Через некоторое время после запуска acestreamengine 3.0.5.1 (debian) исходящий трафик очень сильно растёт (раз в 15 больше входящего и из-за этого потом могут не включаться каналы; загрузка процессора тоже выростает, но это пока не критично так как есть 8 ядер). Пробовал ограничивать отдачу, но даже такие параметры не помогли --upload-limit 1 --max-upload-speed 1 --max-upload-slots 1 - всё равно виден резкий рост исходящего трафика через некоторое время.

    В интернете видел только то, что порту можно приоритет низкий поставить, но это не спасёт если через другие порты с большим приоритетом мало трафика проходит.

    Кто-то знает как можно ограничить исходящий трафик? Может косяк в указанной версии движка и нужно другую версию пробовать?

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

    ОтветитьУдалить
  16. Пробую запустить просмотр и ничего не происходит, vlc висит с бесконечной загрузкой.
    интерфейс выдает вот такое
    http://i78.fastpic.ru/big/2016/0514/83/93ce739e933292ad435134004c6ded83.png
    где можно посмотреть что отвечает acestreem-engine прокси или как вообще можно диагностировать проблему

    ОтветитьУдалить
  17. Добрый день! Что означает в логе PHP Notice: Undefined variable: streams in /home/kvm/scripts/AcePHProxy/res/modules/class.ui.text.php on line 18

    ОтветитьУдалить