Jump to content
Cesbo Community
  • Announcements

    • RadioSintetica

      News!   12/10/17

      If you have any questions related to installation and purchase, please check our documentation https://cesbo.com/en/astra/docs/ and terms of service https://cesbo.com/en/terms/
      Also, we have an official Telegram chat: https://t.me/cesbo_en  you can ask any questions or share your experience with colleagues Если у вас возникли вопросы по установке и покупке, ознакомьтесь пожалуйста с документацией по адресу https://cesbo.com/ru/astra/docs/ и условиями использования https://cesbo.com/ru/terms/
      Так же, обращаю внимание, что у нас есть официальный Телеграмм чат: https://t.me/cesbo_ru в котором можно задать вопросы - или поделиться своим опытом с коллегами
hack

AvProxy

Recommended Posts

TODO

- build for arm, windows x64, freebsd x64

- reimplement ts split stream by segments, because have some problem with scramble streams

- make common m3u8 as optional

- fix DATA stream errors

- append rtsp in/out stream

- no log options to disable any tty/ log streams param in cmd line -Quiet to disable log stream new cmd opt -Trace to enable trace print in console

- static binary without stdc++ depend

- allow choose and use m3u8 bandwidth 

- manual reload input channel

- reload input channel if response 404

- www auth  input/output

- AES decrypt chunks

- add -relay options for simular work like udpxy

- if input channel die, write to output 404 error

 

v2.09 x64 https://www.sendspace.com/file/ru3rod

- add UDP/RTP push target

example config

<Entry Name="test" Url="http://myhttp.com/play/a02h">
        <TsPush Url="rtp://192.168.65.132:8888"/>

        <TsPush Url="udp://192.168.65.134:8888"/>

        <TsPush Url="rtp://192.168.65.135:8888"/>
</Entry>

 

v2.08 x64 https://www.sendspace.com/file/6fed52

- fix DATA stream errors

- static binary without stdc++ depend

- new cmd opt -Trace to enable trace print in console, by default any trace disable

 

v2.07 x64 https://www.sendspace.com/file/hs58b2

 - fix http retry url timeout

 

v2.06 x64 https://www.sendspace.com/file/tow93h

 - refix M3U8 parser for strange playllist 0D 0A sequence

 

v2.05 x64 https://www.sendspace.com/file/imlgrd

 - add reply 404 not found if no channel in Apple/

 - fix m3u8 parser for m3u8 prog list

 

v2.04 x64 https://www.sendspace.com/file/4i8vh3

 - reimprove prev fix and include old fix

 

v2.03 x64 https://www.sendspace.com/file/jehks8

 - fix memory leak after switch to scramble stream

 

v2.02 patchfix x64 https://www.sendspace.com/file/7z0mxm

 - fix fast close tcp session

 

v2.02 x32 ----- нет

         x64 https://www.sendspace.com/file/0glges

 

v2.02

- добавлена простенькая статистика активных обращений http://айпи/Users/'>http://айпи/Users/

- исправлен PartialContent Ranges: bytes=

 

 

v2.01 x32 ------пока нет

         x64 https://www.sendspace.com/file/1roiz7

 

v2.01

- добавлен тег VERSION:3 в hls

- добавлен параметр смены порта по умолчанию, запуск с командной строки -HttpPort 8080 например

- добавлен новый параметр в xml Entry конфиг,  Desc="имя канала", для отображения в m3u плей листе имени канала
- добавлен параметр контроля кеша hls сегментов, что бы сократить постоянное дергания системной malloc/free,

  параметр указывается с командной строки -AppleCache 50 например, по умолчанию он 0, и кеша нет

  при использовании данного параметра нужен хороший запас памяти, единицы измерения параметра ~200кб

 

- исправлена ошибка утечки дескрипторов при использовании -ConfigUrl

- исправлено формирования m3u плей листа с урла по умолчанию, если порт отличается от 80

 

 

 

v2.0 x32 http://rghost.ru/82vPLZW4x

        x64 http://rghost.ru/6Z9CbB7VG

 

mirror https://www.sendspace.com/filegroup/uhd8gFV%2F1WXDkE3FpqskUQ

 

v2.0

- доступны entry с окончаниями имени в урле на .htm .m3u8 .txt .ts

- обращение к entry без раcширения будет выдаваться стрим в обычном http

- правильная нарезка hls на полноценные сегменты

- .ts чанки в md5 именах

- .ts чанки поддерживают Ranges bytes запросы

- m3u8 список каналов в урл по умолчанию

 

 

тестовый вариант

 

v0.1 http://rghost.ru/8BMMVd6mJ

v0.2 http://rghost.ru/6wNCpnMcF

v0.3 x32 http://rghost.ru/6TRhXLxNs

        x64 http://rghost.ru/7SCdBRsyh

 

TsRecord 

v0.1 udp/rtp http://rghost.ru/7VMQF9XRV

v0.2 udp/rtp/http http://rghost.ru/6ctqJhGMx

 

example usage

./TsRecord-x32 -File "./myTs.ts" -Url "udp://231.1.1.1:1234?KeepAlive=61&Source=192.168.60.129&IFace=192.168.60.129"

or

./TsRecord-x32 -File "./myTs.ts" -Url "http://1.1.1.1:1234"

 

v0.1

 beta

 

v0.2

- fixed rtp header extension

- fixed udp/rtp parser scheme

 

v0.3

- remove apple block limitation

 

v0.2 описание

 

udp/rtp/igmp схема задается как

 

обычная udp или rtp ://айпи адрес:порт

если айпи адрес подходит под класс 3 (D) multicast

то можно задать в url доб параметры, которые не являются обязательными

первый доп параметр через ? 

остальные по правилам xml  &

доб параметры для мультикаста это Source=айпи адресс   IFace=айпи адрес KeepAlive если без значения то 60 секунд, если со значением то оно должно быть больше чем 60 секунд

 

для udp или rtp можно добавить доп параметр, удаленный адрес через параметр  Connect=айпи адрес:порт

 

пример заполнения случайными значениями

<Entry Name="udp" Url="udp://231.1.1.1:1234?KeepAlive=61&Source=192.168.60.129&IFace=192.168.60.129" />

v0.1 описание

 

некий HLS-* свитч 

много HLS ouput,

на каждый HLS output, только один HLS/HTTP/RTP/UDP input, может потом сделаю всякие резервы итд

 

input-ы только SPTS

 

конфигурация задается в xml

может лежать локально если рядом с демоном, можно указать в параметрах запуска как удаленный http:// url

AvProxy-x32 -ConfigUrl http://com.com/file.xml

и тогда оно будет с некой периодичностью проверять и  если версия xml изменилась,

то перенастраивать всю схему output-input, тушить удаленные с конфигурации, создавать новые

 

имя локального конфига AvProxy.xml

формат xml простой

<?xml version="1.0" encoding="GB2312"?>
<AvProxy Ver="1">
<Entry Name="12" Url="http://frosite2.com:8080/url" />
<Entry Name="98" Url="http://frosite3..any.com/url/any" />
<Entry Name="test" Url="http://frosite4.com" />
<Entry Name="any_name" Url="m3u8://frosite5.com/url/test.m3u8" />
</AvProxy>

где Ver это номер версии по которой отслеживается обновился ли файл, меняя ее файл авто обновляется

формат input-ов:

- любой HTTP поток вводится как http:// схема

- для HLS input, схема начинается с m3u8://

- для rtp и udp, соответственно rtp:// или udp://

есть еще параметры мультикаст интерфейса для udp/rtp input итд итп, уточню позже если кому понадобится

 

биндится демон всегда на 80 порт, 

доступен урл по умолчанию будет показывать в броузере text/html список output выходов для наглядности, потом доделаю что бы сразу в m3u8 выдавал.

 

hls выходы для просмотра в плеере доступны через  http://айпи сервера/Apple/имя которые указано в Entry

соответственно выход для первого источника http://айпи сервера/Apple/12

для второго http://айпи сервера/Apple//98 

для последнего http://айпи сервера/Apple//any_name

 

дублирующие Entry Name, т.е. с одинаковыми именами первый добавляется, остальные будут игнорироваться

 

все инпуты сразу активны и подключаются к стримам, пока что нет такой опции как ondeman, т.е. подключать input только по активности подключения к output клиентов

 

бинарник немножко к libstd++ прибит, надеюсь в целом хоть у кого то запустится )))

в будущем отвяжу, что бы была только одна libc+libpthread

 

в консоль много всякого хлама идет, поэтому если что в режиме демона опция -Daemon и

добавит > /dev/null 2>&1 для флуша

Share this post


Link to post
Share on other sites
hex    7

попробовал , все ок работает, ровно то что и заявлено..

только не пойму зачем астра делает тоже самое..

Share this post


Link to post
Share on other sites

Ну как зачем)) что бы зарабатывать деньги.

Могу еще RTSP input/output добавить,

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

ну и транскодинг на ffmpeg

поддержку DVB пока не планирую, разве что поддержку MPTS на input

если такое кому то интересно, да еще и готовы будут покупать, то есть смысл развивать дальше,

а если нет, отложу в копилку, и без этого есть чем заниматься 

Share this post


Link to post
Share on other sites

чанки в памяти

64 можно, но нет пока времени настроить виртуалку что бы собрать

можно будет и статик, правда толще бинарь получится, мне нравится компактность

Share this post


Link to post
Share on other sites

чанки в памяти

64 можно, но нет пока времени настроить виртуалку что бы собрать

можно будет и статик, правда толще бинарь получится, мне нравится компактность

толще - то неважно) зато либы не надо подбирать)

и еще, если можно, чанки нумеровать <random>.ts

где <random> любой мусор, хоть md5(time())

Share this post


Link to post
Share on other sites

Думаю можно будет добавить рандомные имена в чанки, посмотрим. 

Но текущий hls очень простой, и чанки там для вида, какой бы по номеру не запросить, возьмется последний из нарезанного в памяти.

Даже сами чанки практически не нарезаются на сегменты, просто берется определенный ts кусочек для отдачи.

 

В следующем hls будет правильно нарезанный на фреймы по синхрону.

Резать каждый чанк как полноценный ts h264 кей фрейм -  такого пока наверное не будет, только в todo

 

Так же надеюсь добавить rtsp input,

и исправить мелкий баг по rtp input если там rtpextension как c пчелайном было у астры.

 

Еще надеюсь добавлю запись лога в файл но имени канала в Entry, на каждое имя свой лог.

И выбор выбранной программы с MPTS input

 

Мой интерес с этим проектом только коммерческий, поэтому на совсем большую халяву просьба не расчитывать, какие нибудь ограничения придумаю.

Что бы можно было попробовать, но в продакшине для коммерциализации это было неюзабельно без покупки полноценной версии.

Share this post


Link to post
Share on other sites
>./AvProxy-x32-2() [0x804d406]

[Heap]  p=0xff823138 Size=962560 Exp=[] [:0] []

>./AvProxy-x32-2() [0x8052685]

>./AvProxy-x32-2() [0x808265b]

>./AvProxy-x32-2() [0x8082a99]

>./AvProxy-x32-2() [0x8082df0]

>./AvProxy-x32-2() [0x8077f97]

>./AvProxy-x32-2() [0x806cade]

>./AvProxy-x32-2() [0x807e141]

>./AvProxy-x32-2() [0x80719de]

>./AvProxy-x32-2() [0x8061bdb]

>./AvProxy-x32-2() [0x806234d]

>./AvProxy-x32-2() [0x8062bef]

>./AvProxy-x32-2() [0x804d2d2]

>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74964d3]

>./AvProxy-x32-2() [0x804d406]

[Heap]  p=0xff923008 Size=962560 Exp=[] [:0] []

>./AvProxy-x32-2() [0x8052685]

>./AvProxy-x32-2() [0x808265b]

>./AvProxy-x32-2() [0x8082a99]

>./AvProxy-x32-2() [0x8082df0]

>./AvProxy-x32-2() [0x8077f97]

>./AvProxy-x32-2() [0x806cade]

>./AvProxy-x32-2() [0x807e141]

>./AvProxy-x32-2() [0x80719de]

>./AvProxy-x32-2() [0x8061bdb]

>./AvProxy-x32-2() [0x806234d]

>./AvProxy-x32-2() [0x8062bef]

>./AvProxy-x32-2() [0x804d2d2]

>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74964d3]

>./AvProxy-x32-2() [0x804d406]

[Heap]  p=0xffa0f008 Size=962560 Exp=[] [:0] []

>./AvProxy-x32-2() [0x8052685]

>./AvProxy-x32-2() [0x808265b]

>./AvProxy-x32-2() [0x8082a99]

>./AvProxy-x32-2() [0x8082db1]

>./AvProxy-x32-2() [0x8077f97]

>./AvProxy-x32-2() [0x806cade]

>./AvProxy-x32-2() [0x807e141]

>./AvProxy-x32-2() [0x80719de]

>./AvProxy-x32-2() [0x8061bdb]

>./AvProxy-x32-2() [0x806234d]

>./AvProxy-x32-2() [0x8062bef]

>./AvProxy-x32-2() [0x804d2d2]

>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74964d3]

>./AvProxy-x32-2() [0x804d406]

[Heap]  p=0xffbae008 Size=962560 Exp=[] [:0] []

>./AvProxy-x32-2() [0x8052685]

>./AvProxy-x32-2() [0x808265b]

>./AvProxy-x32-2() [0x8082a99]

>./AvProxy-x32-2() [0x8082db1]

>./AvProxy-x32-2() [0x8077f97]

>./AvProxy-x32-2() [0x806cade]

>./AvProxy-x32-2() [0x807e141]

>./AvProxy-x32-2() [0x80719de]

>./AvProxy-x32-2() [0x8061bdb]

>./AvProxy-x32-2() [0x806234d]

>./AvProxy-x32-2() [0x8062bef]

>./AvProxy-x32-2() [0x804d2d2]

>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74964d3]

>./AvProxy-x32-2() [0x804d406]

[Heap]  p=0xffc9a008 Size=962560 Exp=[] [:0] []

>./AvProxy-x32-2() [0x8052685]

>./AvProxy-x32-2() [0x808265b]

>./AvProxy-x32-2() [0x8082a99]

>./AvProxy-x32-2() [0x8082db1]

>./AvProxy-x32-2() [0x8077f97]

>./AvProxy-x32-2() [0x806cade]

>./AvProxy-x32-2() [0x807e141]

>./AvProxy-x32-2() [0x80719de]

>./AvProxy-x32-2() [0x8061bdb]

>./AvProxy-x32-2() [0x806234d]

>./AvProxy-x32-2() [0x8062bef]

>./AvProxy-x32-2() [0x804d2d2]

>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74964d3]

>./AvProxy-x32-2() [0x804d406]

[Heap]  p=0xffd86008 Size=962560 Exp=[] [:0] []

>./AvProxy-x32-2() [0x8052685]

>./AvProxy-x32-2() [0x808265b]

>./AvProxy-x32-2() [0x8082a99]

>./AvProxy-x32-2() [0x8082df0]

>./AvProxy-x32-2() [0x8077f97]

>./AvProxy-x32-2() [0x806cade]

>./AvProxy-x32-2() [0x807e141]

>./AvProxy-x32-2() [0x80719de]

>./AvProxy-x32-2() [0x8061bdb]

>./AvProxy-x32-2() [0x806234d]

>./AvProxy-x32-2() [0x8062bef]

>./AvProxy-x32-2() [0x804d2d2]

>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74964d3]

>./AvProxy-x32-2() [0x804d406]

[Heap]  p=0xffe72008 Size=962560 Exp=[] [:0] []

>./AvProxy-x32-2() [0x8052685]

>./AvProxy-x32-2() [0x808265b]

>./AvProxy-x32-2() [0x8082a99]

>./AvProxy-x32-2() [0x8082df0]

>./AvProxy-x32-2() [0x8077f97]

>./AvProxy-x32-2() [0x806cade]

>./AvProxy-x32-2() [0x807e141]

>./AvProxy-x32-2() [0x80719de]

>./AvProxy-x32-2() [0x8061bdb]

>./AvProxy-x32-2() [0x806234d]

>./AvProxy-x32-2() [0x8062bef]

>./AvProxy-x32-2() [0x804d2d2]

>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74964d3]

>./AvProxy-x32-2() [0x804d406]

[Heap]  Active=4335(4150769924) Total=6662(4267469912) Max=4335(4150769924)

[OnExit]        ?????

 

 

примерно через 10 минут работы, что на хттп, что на удп

Share this post


Link to post
Share on other sites

Это при скольки входящих потоков и активных смотрящих клиентов ?  :)

я оставлял ограничение на то что чанки не удаляются из памяти, на 32 битах она израсходовалась 4,150,769,924

но что бы съесть 4 гига нужно очень постараться, она израсходуется не так активно даже на 3 инпутах и пару смотрящих

Share this post


Link to post
Share on other sites

один инпут и один клиент ВЛЦ, спецом для теста ставил

система Linux coder2 3.8.0-23-generic #34~precise1-Ubuntu SMP Wed May 29 21:12:31 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Share this post


Link to post
Share on other sites

Ограничение на старый хлс сниму, пост обновлю, в новом хлс когда соберу, с мд5 чанками, чанки с памяти в демо версии удаляться не будут.

 

гуд, проверим может где то баг закрался.

Share this post


Link to post
Share on other sites

Обновил v0.3 память должна очищаться, 4 гига не должно больше утечь

если что трейс под спойлер прячте

Share this post


Link to post
Share on other sites
>./AvProxy-x32-3() [0x8083e59]
>./AvProxy-x32-3() [0x80841b0]
>./AvProxy-x32-3() [0x8080df2]
>./AvProxy-x32-3() [0x806231b]
>./AvProxy-x32-3() [0x8062a8d]
>./AvProxy-x32-3() [0x806333f]
>./AvProxy-x32-3() [0x804d2d2]
>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74354d3]
>./AvProxy-x32-3() [0x804d406]
[Heap]  p=0xfff47008 Size=192512 Exp=[alloc] [:28] [GetAppleBlock]
>./AvProxy-x32-3() [0x8052775]
>./AvProxy-x32-3() [0x8083a1b]
>./AvProxy-x32-3() [0x8083e59]
>./AvProxy-x32-3() [0x80841b0]
>./AvProxy-x32-3() [0x8080df2]
>./AvProxy-x32-3() [0x806231b]
>./AvProxy-x32-3() [0x8062a8d]
>./AvProxy-x32-3() [0x806333f]
>./AvProxy-x32-3() [0x804d2d2]
>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74354d3]
>./AvProxy-x32-3() [0x804d406]
[Heap]  p=0xfff77008 Size=192512 Exp=[alloc] [:28] [GetAppleBlock]
>./AvProxy-x32-3() [0x8052775]
>./AvProxy-x32-3() [0x8083a1b]
>./AvProxy-x32-3() [0x8083e59]
>./AvProxy-x32-3() [0x80841b0]
>./AvProxy-x32-3() [0x8080df2]
>./AvProxy-x32-3() [0x806231b]
>./AvProxy-x32-3() [0x8062a8d]
>./AvProxy-x32-3() [0x806333f]
>./AvProxy-x32-3() [0x804d2d2]
>/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xf74354d3]
>./AvProxy-x32-3() [0x804d406]
[Heap]  Active=114(17533300) Total=41223(4224334508) Max=134(21383540)
[OnExit]        ?????

походу не помогло, попроьую еще х64 версию попозже

Share this post


Link to post
Share on other sites

Это баг где то, буду искать, память то не утекла, 21 мег это пустяги

С 64 будет тоже самое скорее всего

Share this post


Link to post
Share on other sites

где то похоже баг на TS парсере

 

давайте на AvRelay-x32, запущенным без режима демона и без форегрануд, прямо руками с консоли

AvRelay-x32 -Log Log

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

 

после того как упадет, он не выйдет, будет ждать действий, не надо нажимать Ctrl+C

в том же каталоге создается файл debug_AvProxy_****

в другой консоли, в этой же папке где запущен AvProxy, запустите этот файл debug_AvProxy_*** с параметром g

запустится gdb, если не установлен то установите предварительно gdb

в консоли gdb выполните команду generate-core-file

создастся core.*** файл который мне нужен для анализа

потом можно запустить этот же файл debug_AvProxy_** с параметром t

AvProxy-x32 завершится, и файл debug_AvProxy_** удалится

 

если есть возможность то хотелось бы ts файл этого стрима продолжительностью после которой происходит падение

хотя бы астрой или чем сподручным, если нет, набросаю утилиту для записи потока с мультикаста,

либо допишу возможность записи потоков в файл в самом прокси

Share this post


Link to post
Share on other sites

Набросал мини тулзу для записи raw ts прямо с udp/rtp мультикаста, добавил в шапку

 

 

запишите еще у кого есть MPTS с мультикаста, а то мне негде взять ))

 

добавил в шапку еще версию TsRecord которая поддерживает и http stream и udp/rtp

что бы сразу raw ts писала в файл, может кому пригодится ))

hls она не поддерживает

Share this post


Link to post
Share on other sites

Будем считать халява на этом закончилась  :)

Обновил версию 2.0 без ограничений в шапке.

Она будет поддерживаться в этом виде без улучшений и введения нового функционала какое то время на шару.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×