• Уважаемые пользователи! Сообщаем Вам, что у нашего форума появился официальный чат в Телеграм - https://t.me/forumtv_telegram в котором будут публиковаться все важные новости и изменения проекта
  • И так дорогие друзья, всем привет! Долгожданное свершилось! Не секрет, что многие плотно сидят на яблочных устройствах. И как мы знаем сторонние приложения - это до сегодняшнего дня было вообще под запретом. Но с начала 2004 года всё изменилось. И так, мы создали тему, как один из разработчиков, в данный момент, создаёт известные всем приложения для Apple tv И соответственно для поддержки и развития текущих и будущих приложений можно к нему обратиться. Найти тему можно ниже в разделе софта Всем удачи

HTTP прокси для Ace Stream

  • Автор темы Автор темы Dogerty
  • Дата начала Дата начала
в этом контексте это экспертно, другими словами конкретно по работе прокси на уровне специалиста в этой теме

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

Проблема очень проста, клиент (не VLC) проигрывает контент полученный от прокси которая получает от acestream. Пока асе справляется и работает без проблем, пока пакеты в сети провайдера не опаздывают и не теряются все замечательно работает. Но так бывает редко. UDP reordering , lost'ы, падения пиров и соответственно пропажа фрагментов, не стабильный поток от асе. Все это в моем случае привело к тому, что прокси сбрасывает соединение с клиентом. Поскольку все было завязано на соединение с клиентом, то одновременно закрывались и соединения с асе, асе получала сигнал стоп отключалась от трекера и пиров. Часть клиентов получая close просто не предпринимали дальнейших действий а другие переподключались но не стабильно. Это все выглядело как странное отключение от прокси. Как выяснилось были минимум 2 причины. Первая клиент сам закрывал соединение и другая была связанна со скоростью соединения с прокси. Клиент на скорости > 40мбпс выкачивал буфер, а он был > 15 сек, и прокси не видя активности клиента его отключала и останавливала поток у асе. Вот такая версия прокси была в первый раз.

Так как моя цель была отказаться от кабельного тв но получить качество как у кабельного :) вот я и начал капать проблему.

Я отделил по потокам соединение клиента и получение данных от асе. Получилось, но мне не понравилось то, что после реконекта были повторы > 30 сек.. Особенно на SD каналах. Тогда я создал виртуального клиента. Реальный находил по хэшу виртуального и подключался с того момента, как было разорвано соединение. Повторы пропали, но теперь все нативные плееры стали активно реконектится в случаи если у их буфера оставалось на < 1-2 сек потока. Такое случалось из-за того, что клиент выкачивал из прокси на скорости 70 мбпс и долго ждал. Prebuff и размер буфера на это поведение не влияли. Клиент очень прожорлив. Вот тут пришлось мне придумать как ограничить скорость отдачи клиенту. Благо у асе есть статистика. Стало смотреть на много комфортнее. Практически нет реконектов, на обнуление буфера у прокси клиенты нормально реагируют. Но не идеально.

Я понимаю, что так быть не должно и может даже не стоит тратить ресурсы сервера не плохих клиентов, а их теперь требуется много. Но клиентов много и они кривые а смотреть надо без нервов. Есть каналы очень стабильные , но бывают ужасные. Вот на таких особенно видно улучшение.

От управления потоком на основе событий от асе я отказался, как и от реконектов. Нет смысла да и повторы гарантированны. Как только пойдут данные, они сразу будут переданы плееру. А он уж как решит так и будет.

Вот пока писал этот текст был только один затык на евроспорте 720p. Раньше было их штук 50. Польза точно есть.

Ну и более конкретно:
Oопределение размера картинки, скорости потока и другие вещи, они нужны для фильтрации плохих каналов с помойки и более точного управления выдачей буфера клиенту. Много каналов где картинка про плохой ключ. У многих есть зашита по ип адресу, когда поток отдается первые 10 сек. Как их фильтровать и переключать cid автоматически ? Ну и желательно выбрать из всех cid те, у которых выше разрешение и стабильнее поток. Вот эти проблемы и хочется решить.

Наверное самое простое это пробовать ffmpeg. Там вроде есть такая возможность.

Eсть задумка сделать tsclient. Но тут проблема с hls, а простых все меньше остается. Пока не тестировал, а простой способ, который работал раньше я видимо сломал.

Все это задумки не для "raspberry". Нужен нормальный сервер.

Моя прокси привязана к mysql и к web панели управления. Полностью открыть доступ не могу. Возможно выложу код , но и вас он много качественнее.

Вот такая моя ситуация. Линк пришлю в личку, так как сервер имеет ограничение по трафику да и у нас это не рекомендовано :D
 
Последнее редактирование:
Из всего этого эссе я не понял следующие моменты:
1) Какой плеер-клинет используется ? Иначе я ЭТО аж никак не могу проверить или посмотреть , дабы сравнить описанное выше поведение , и тут не важно в какой проксе Вашей или нашей, от этого поведение плеера-клиента - не меняется .....
2) Следует понимать что на основе AceStream Engine + Proxy - "отраслевое" решение не построишь. ИДЕОЛОГИЯ другая.... как ни крути AceStream должен стоять на стороне клиента, задумка такая. Local proxy - то для вкусностей того что не позволяет встроенная прокся в движок, ну или мало-мало расширяет ее возможности или удобство пользования. Какое отношение прокся или движок имеет к латентности сети Вашего провайдера? И почему прокся или движок должны это исправлять ? Тем более не понятно как исправлять "случайности" ... Но тут тоже непонятка. Многие используют прокси на VPS-ах вместе с движком, смотрят сами и "соседям" разрешают ... Где от них жалобы на описанную Вами ситуацию?
3) Я так и не понял зачем и как ограничивается отдача из буфера ? При всех раскладах и ссылках на RFC есть всего два варианта развития событий : или клиент поддерживает "transfer-encoding: chunked" или НЕТ ... Вы знаете еще варианты ? Поделитесь .... И самое главное: где брать данные , если движок РЕГУЛЯРНО впадает в BUFF ? И рано или поздно наступит момент когда в буфере прокси - НОЛЬ как бы Вы не ограничивали "выдачу" клиенту, и клиент все равно должен ждать .... в чем логика ? Чтобы Ваш один конкретно взятый клиент ( см п1) помер чуть позже ? или в надежде на то что движок "отдуплится" и успеет "качнуть" до того как плеер помрет ? Так это того ... борьба с "вероятностями" ... с "ветряными мельницами" :) Не проще клиента сменить на что-то более адекватное ?

Задача с "плохими" клиентами решена гораздо проще .. Ну во первых каждый клиент имеет свой "собственный" буфер на проксе , т.е. не один буфер на трансляцию , а каждый подключившийся к трансляции имеет свой буфер данной трансляции, работают они "параллельно" и не зависимо друг от друга. В кратце реализовано вот так
Код:
from gevent.queue import Queue
class BroadcastQueue(object):
    def __init__(self):
        self._queues = []

    def register(self):
        q = Queue()
        self._queues.append(q)
        return q

    def broadcast(self, val):
        for q in self._queues:
            q.put(val)

def setter(bqueue):
    while 1:
        bqueue.broadcast(chunk)

def waiter(arg, bqueue):
    queue = bqueue.register()

    while 1:
        val = queue.get()
В данном случае вообще по "барабану" с какой скоростью читает данные из буфера каждый отдельно взятый клиент :) .... Более того данные от движка тоже читаются "параллельно" и никак не зависят от скорости чтения клиентов ... тупо "сосем" чанки от движка на максимальной скорости c которой он их в состоянии отдавать и "суем" в буфер клиентов подключенных к данной трансляции ... Прелестная фича от gevent.queue - http://www.gevent.org/api/gevent.queue.html
Много каналов где картинка про плохой ключ. У многих есть зашита по ип адресу, когда поток отдается первые 10 сек. Как их фильтровать и переключать cid автоматически ?
НИКАК .... Переключать на какой CID ? На первый попавшийся или следующий другой трансляции? И самое веселое , а что прокладка между диваном и теликом не может на пульте сама переключить канал ? Зачем прокся за нее это должна делать ? Чтоб "прокладку" не раздражало :) ?
 
Последнее редактирование:
Многие используют прокси на VPS-ах вместе с движком

да, так тоже юзаем, канал толстенный, латентность в норме, доступно везде и всюду и на всех пациентах

364

365
366

*плейлист из соседней ветки уже "в коробке"
 
Последнее редактирование:
Ich bin ... но там "по барабану" amlogic, rockchip и т.д. ;)http://t.me/AceStreamMOD юзайте на здоровье ... Только бродкаст "поломан" в андроедовых версиях, соответственно и в "переделках" - тоже . Разрабы - в курсе , как и остальной "списочек" багов им отправлен и зафиксирован .... а вот когда поправят - الله أكبر
 
Последнее редактирование:
А можно уточнить тогда один вопрос )
У меня (3.1.33 ) спотыкается на некоторых линках, путём ковыряния логов пришёл к выводу, что это происходит когда нет пиров и движок пытается достучаться к hls источнику из манифеста. И если в манифесте прописан домен:порт то похоже пытается искать домен вместе с портом как название и получает ошибку. Если ип:порт или просто домен, то всё ок.
Собственно вопрос где собака порылась, двигло глюкавое и нужно новее или ещё чего может быть виновато.
 
И если в манифесте прописан домен:порт то похоже пытается искать домен вместе с портом как название и получает ошибку. Если ип:порт или просто домен, то всё ок.
ЛОГ где с примером ? + ссылка на трансляцию чтобы у себя повторить ... нафига мне вся та лирика ?
 
@Pepsik,

acestream.rar - там 2 файла, стартовый кусок (для себя делал чтоб легче искать) и полный с неудачной попыткой старта линка.

Ну и уточню сразу что на пк с виндой он открывается, пк и коробка с одного роутера ходят, DNS гугловские.
 

Вложения

В ПК - да ... а вот в "коробке", те что я мод движка прописал (там пятерка самых шустрых в мире) ... гугловый тоже есть , но там принцип кто быстрее резолвнул "того и тапочки" .... ОК .. лог гляну, по CID попробую у себя "воспроизвести" ....

p.s. Упростите мне задачу ... По сути Вы пытаетесь смотреть вот эту трансляцию
Код:
http://highvolume03.streampartner.nl:1935/vleugels_hd4/livestream/playlist.m3u8
С вот этим гордым именем live трансляции XITE 1 (ttvrip) :) В "быту" - XITE 1 ? Верно ? Напрямую оно без проблем играет .... сча гляну что там "внутри" прилетает ... Просто в логе Вашем нифига не видно :)
Во как надо логи снимать :)
Код:
019-04-25 18:22:37,360|MainThread|acestream.SocketHandler.InterruptSocket|bound on 127.0.0.1:44522
2019-04-25 18:22:37,363|MainThread|acestream.SocketHandler.SocketHandler|bind: socket bound: host=0.0.0.0 port=62062
2019-04-25 18:22:37,364|Instance2InstanceThread-26|acestream.APIServer|run: ready to receive remote commands on 62062
2019-04-25 18:22:38,115|Timer-Thread-27|acestream.utils|get_whois_data: missing ipwhois
2019-04-25 18:23:07,389|Instance2InstanceThread-26|acestream.coreapp|external_connection_made: ip=127.0.0.1 port=56863 myip=127.0.0.1 myport=62062 connections=1
2019-04-25 18:23:07,393|BGTaskQueueThread-1|acestream.coreapp|got command: HELLOBG version=3
2019-04-25 18:23:07,397|BGTaskQueueThread-1|acestream.BGInstanceConnection|send HELLOTS version=3.1.37 version_code=3013700 key=b97f4ff382 http_port=6878 bmode=0
2019-04-25 18:23:07,456|BGTaskQueueThread-1|acestream.coreapp|got command: READY key=1mcXu2Ujtsjy9z7k-6dc8c6079f0414e3aeec58549f1ded97e2269d03
2019-04-25 18:23:07,462|BGTaskQueueThread-1|acestream.BGInstanceConnection|send AUTH 197
2019-04-25 18:23:07,470|BGTaskQueueThread-1|acestream.coreapp|got command: SETOPTIONS use_stop_notifications=1
2019-04-25 18:23:07,508|BGTaskQueueThread-1|acestream.coreapp|got command: LOADASYNC 21546786 PID e77815880f9360eb1c6107d49b2313fd4657e3dc
2019-04-25 18:23:07,543|BGTaskQueueThread-1|acestream.BGInstanceConnection|send_load_response: request_id=21546786 response={"status": 1, "files": [["XITE%201%20%28ttvrip%29", 0]], "infohash": "7240a76a8f97417545de97c8ab83aad2c2e70ad6", "checksum": "5a48669af956092feaceb87ff4a941f12d96c7d2"}
2019-04-25 18:23:07,566|BGTaskQueueThread-1|acestream.coreapp|got command: START PID e77815880f9360eb1c6107d49b2313fd4657e3dc 0 output_format=http
2019-04-25 18:23:07,589|BGTaskQueueThread-1|acestream.BGInstanceConnection|send STATE 1
2019-04-25 18:23:07,590|BGTaskQueueThread-1|acestream.coreapp|start_download_wrapper: dlfile=XITE 1 (ttvrip) fileindex=0
2019-04-25 18:23:07,591|BGTaskQueueThread-1|acestream.coreapp|start_download_wrapper: starting new download
2019-04-25 18:23:07,974|BGTaskQueueThread-1|acestream.coreapp|start_download: starting new download: infohash=7240a76a8f97417545de97c8ab83aad2c2e70ad6 tftype=hls provider=None(None) initialdlstatus=None output_format=default pausable=None transcode=(audio=False mp3=False ac3=False)
2019-04-25 18:23:08,166|Timer-Thread-36|acestream.LiveDownloadImpl.7240a76a8f97417545de97c8ab83aad2c2e70ad6|update_manifest: got http error: code=500 msg=None of DNS query names exist: highvolume03.streampartner.nl:1935., highvolume03.streampartner.nl:1935.
2019-04-25 18:23:19,711|BGTaskQueueThread-1|acestream.coreapp|got command: STOP
2019-04-25 18:23:19,714|BGTaskQueueThread-1|acestream.BGInstanceConnection|send STATE 0
2019-04-25 18:23:19,720|BGTaskQueueThread-1|acestream.BGInstanceConnection|cleanup_playback
2019-04-25 18:23:19,728|BGTaskQueueThread-1|acestream.coreapp|got command: SHUTDOWN
2019-04-25 18:23:19,732|BGTaskQueueThread-1|acestream.BGInstanceConnection|send STATE 0
2019-04-25 18:23:19,735|BGTaskQueueThread-1|acestream.BGInstanceConnection|shutdown: shutdownplugin=1
2019-04-25 18:23:19,737|BGTaskQueueThread-1|acestream.BGInstanceConnection|cleanup_playback
2019-04-25 18:23:19,739|BGTaskQueueThread-1|acestream.coreapp|connection_lost: ip=127.0.0.1 port=56863
2019-04-25 18:23:19,744|Timer-Thread-48|acestream.BGInstanceConnection|shutdown: shutdownplugin=1
Ну и ясно видно что какая-то "кака" есть :
Код:
2019-04-25 18:23:08,166|Timer-Thread-36|acestream.LiveDownloadImpl.7240a76a8f97417545de97c8ab83aad2c2e70ad6|update_manifest: got http error: code=500 msg=None of DNS query names exist: highvolume03.streampartner.nl:1935., highvolume03.streampartner.nl:1935.
Ладно сча разберусь от чего и почему .....

:)ПОЧИНИЛ ... просто "фельдиперсово" обыграю и обновлю на телеге :) "зачетная" находка, я сам бы не нашел такой источник , да и вряд ли стал бы тестировать такой вариант-комбинацию :) КРАСАВЧИК !
 
Последнее редактирование:
Изменения на телеге .... наслаждайтесь ....
Тут такое дело... В общем XITEы теперь открываются, но Viasat Sport HD не хочет.
Код:
2019-04-26 11:02:01,870|Thread-35|acestream.LiveDownloadImpl.dc76b533dcfa6e864bc22fb1f0c2e2526b5b404b|update_manifest: got http error: code=500 msg=<urlopen error [Errno 7] No address associated with hostname>

Сорь за лог, он опять с кучей мусора )
 

Вложения

Ещё другая ошибка... когда на винде открывал, показало пару пиров, но коробке видать не помогло.
Colosal TV HD
Код:
2019-04-26 11:54:34,094|Thread-35|acestream.LiveDownloadImpl.f1cb36c6ba9087cff3fd25508b9e0be3c6d69599|update_manifest: got http error: code=500 msg=<urlopen error timed out>
 

Вложения

. В общем XITEы теперь открываются, но Viasat Sport HD не хочет.
Вам вот такой ответ со стороны "бродккасера" о чем-то говорит ?
Код:
2019-04-26 14:28:30,151|Timer-Thread-36|acestream.LiveDownloadImpl.dc76b533dcfa6e864bc22fb1f0c2e2526b5b404b|update_manifest: got http error: code=403 msg=<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
?? Причем тут движок ?? Или движок должен "предугадывать" что у бродкаcтера есть определенные требования к UA???

Вот ещё радио шансон..
Код:
chanson-video.hostingradio.ru
[<DNS IN A rdata: 82.202.226.227>, <DNS IN A rdata: 46.21.249.124>, <DNS IN A rdata: 95.213.237.217>, <DNS IN A rdata: 92.53.78.178>, <DNS IN A rdata: 92.53.77.70>, <DNS IN A rdata: 82.202.236.249>, <DNS IN A rdata: 212.92.98.146>, <DNS IN A rdata: 92.53.66.201>, <DNS IN A rdata: 82.202.236.109>]
2019-04-26 14:57:14,339|Timer-Thread-36|acestream.LiveDownloadImpl.72891505d2e537fad421518e1e33edd485e12833|update_manifest: got http error: code=404 msg=<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
Походу внимательно читаем предыдущий ответ :) и изучаем что такое ошибка 404 которая прилетает со стороны сервера ....
Ещё другая ошибка...
Код:
2019-04-26 15:00:53,416|BGTaskQueueThread-1|acestream.coreapp|start_download: starting new download: infohash=f1cb36c6ba9087cff3fd25508b9e0be3c6d69599 tftype=hls provider=None(None) initialdlstatus=None output_format=default pausable=None transcode=(audio=False mp3=False ac3=False)
tv.ticosmedia.com
[<DNS IN A rdata: 66.231.246.224>]
2019-04-26 15:01:23,669|Timer-Thread-55|acestream.LiveDownloadImpl.f1cb36c6ba9087cff3fd25508b9e0be3c6d69599|update_manifest: got http error: code=500 msg=<urlopen error timed out>
Тут просто тупо не получаем ответ по url от некого tv.ticosmedia.com .... Что в таком случае делать движку ? Висеть вечно?

Вы весь мусор теперь будете выкладывать из сети acestream на проверку ? Я , походу, пока ошибок движка не вижу в данных примерах , кроме как "кривой" реализации бродкаста .... Пользуйтесь проверенными трансляциями :)
 
Последнее редактирование:
Или движок должен "предугадывать" что у бродкаcтера есть определенные требования к UA???
Ну вот на виндовой встроенной прокси Viasat спокойно открывается. :) хочется так же.
Colosal открывается долго, примерно 20 сек. но открывается и дальше нормально крутит без заиканий и тп.
 
Ну вот на виндовой встроенной прокси Viasat спокойно открывается.
Ну вот в сказки я не верю .. Дело в том что и на андроедовом , а соответственно и на "переделке", он тоже может открыться ... Я Вам выложил типичный ответ прилетающий с сервака бродкастера при запросе manifest .... НО! Если Вы этот попробуете на андроедовом движке в виде старт по content_id , то получите в основном "Filed to get manifest .... и т.д."..... Дело в том что каждая 3-5-7 попытка приводила к старту трансляции Viasat с очень дохлыми пирами .... не уверен я что спокойно открывается на винде ... Но код движка отрабатывает корректно. Принцип там один и тот же ....
Colosal открывается долго, примерно 20 сек
Это не ко мне , это в "первую эскадрилью" , я НЕ имею доступа к коду движка , а соответственно НЕ могу отредактировать строку в его коде поменяв timeout ожидания ответа сервера :) Я могу только констатировать факт получения от него ошибки путем внесения "нехитрых" изменений в исходники самого питона .... Как-то так и ни как иначе... Видно в логах выше что DNS A-record отработало во всех случаях ? Все ! Дальше - это в коде движка, а у меня его НЕТ .... Вам сюда - http://forum.torrentstream.org/
В принципе можете смотреть напрямую , а заодно посмотреть на формат отдаваемого hls и его версию.. .Мало ли там есть специфические теги или теги которые НЕ понимает код движка ... У hls , на сегодняшний день, есть уже аж 7 версий :) в основном отличаются поддерживаемыми тегами ... Apple doc for developers Вам в помощь ... Умеет ли движок "пережевывать" все возможные спецификации hls - мне не ведомо ...
Код:
http://tv.ticosmedia.com:1935/COLOSAL/COLOSAL/playlist.m3u8
 
Последнее редактирование:
не уверен я что спокойно открывается на винде ...
Вообще беспроблемно. Более того, если я запущу трансляцию на винде, то и на коробке (которая в одной локалке) она запустится и можно смотреть тв, при этом если на винде её закрыть то на коробке она виснет через 10 сек и затем отваливается.
 
Вообще беспроблемно. Более того, если я запущу трансляцию на винде, то и на коробке (которая в одной локалке) она запустится и можно смотреть тв, при этом если на винде её закрыть то на коробке она виснет через 10 сек и затем отваливается.
Я указал ссылку для общения со специалистами из "первой эскадрильи" :) .... Чудес - не бывает ... Зачем "коробка" , запустите под андроидовым движком .... С какого раза у Вас там получится беспроблемно ?....
 
Андроид мне лень мучать, но смысл я понял, проблема в двигле ace и тут только ждать обновлений, или забить, или попробовать использовать виндовую прокси.
 
Назад
Сверху