Jump to content
Калькуляторы

msd Lite - тестируем Замена udpxy если у кого оно ещё осталось

Все, поборол! Засада была в /etc/login.conf - там было прописано ограничение на locked memory = 64k - рудимент от многочисленных апгрейдов ядра. После снятия ограничений msd_lite заработала.

 

П.С. По первым впечатлениям msd явно получше udpxy. Все проблемные для udpxy каналы msd ретранслирует идеально. Автору респект!

Edited by nemo_lynx

Share this post


Link to post
Share on other sites

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

Для HD рекомендую прекеш 8 мегабайт, а для SD 4 мегабайта.

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

Share this post


Link to post
Share on other sites

добрый день.

 

2016-09-13 23:39:58] main, line 420: setpriority() error 13: Permission denied^M

[2016-09-13 23:39:58]: Thread 7 started...^M

[2016-09-13 23:39:58]: Bind thread 5 to CPU 5^M

[2016-09-13 23:39:58]: Thread 6 started...^M

[2016-09-13 23:39:58]: Bind thread 7 to CPU 7^M

[2016-09-13 23:39:58]: Bind thread 6 to CPU 6^M

[2016-09-13 23:39:58]: hostname: *^M

[2016-09-13 23:39:58] http_srv_acc_add, line 502: io_net_is_tcp_cc_avail() fail, this is not fatal. error 22: Invalid argument^M

[2016-09-13 23:39:58]: bind 10.254.0.3:1234 , backlog = 2048, cc_name = htcp^M

[2016-09-13 23:39:58]: Thread 0 started...^M

[2016-09-13 23:39:58]: Bind thread 4 to CPU 4^M

[2016-09-13 23:39:58]: Bind thread 0 to CPU 0^M

[2016-09-13 23:39:59]: /udp/239.0.0.87:4000@vlan1708: Created. (fd: 12)^M

[2016-09-13 23:39:59]: /udp/239.0.0.87:4000@vlan1708 - 10.4.0.3:55255: attached, cli_count = 1^M

[2016-09-13 23:39:59] str_src_r_buf_alloc, line 985: ... error 1: Operation not permitted^M

[2016-09-13 23:39:59] str_src_recv_mc_cb, line 873: on receive error 1: Operation not permitted^M

[2016-09-13 23:39:59]: /udp/239.0.0.87:4000@vlan1708 - 10.4.0.3:55255: deattached, cli_count = 0^M

[2016-09-13 23:39:59]: /udp/239.0.0.87:4000@vlan1708: Destroyed.^M

 

FreeBSD 9.3 amd64

 

а на 10.2 работает

 

решил

на 9 cc_htcp не загружалось....

Edited by ser970

Share this post


Link to post
Share on other sites

Попробуй:

- увеличить sysctl vm.max_wired

- запускай от рута

- убедись что /tmp это md/tmpfs фс достаточного объёма с правами на запись

 

выше уже пару раз обсуждалось что ещё можно подкрутить в таком случае, в частности в login.conf бывали рудименты.

Share this post


Link to post
Share on other sites

Можно вопросы по возможностям?

 

Протокол трансляции только MPEG-TS over HTTP? Планируется ли поддержка HLS?

 

Авторизация абонентов есть? Увидел, что упомянут Radius, это как то связано?

 

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

 

Я, случаем, не хочу чего то странного?

Share this post


Link to post
Share on other sites

Это уже не в лайт версии явно :)

 

Рабочий пока только mpeg2-ts@http.

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

 

С радиусом я застрял на схемах http авторизации, если забить и сделать просто по IP то можно быстрее.

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

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

 

Но сейчас у меня время уходит на прикручивание тюнеров.

Я хочу помимо скучного статического приёма (когда один тюнер всегда принимает один транспондер и стримит его) сделать возможность динамически принимать по запросу, те допустим есть два тюнера и 4 транспондера, в конфиге прописаны все каналы со всех транспондеров и к любому из них можно в любой момент подключится. При обращении к каналу тюнер настраивается на нужный транспондер и начинает забирать все каналы с него. Если в это время кто то ещё захочет посмотреть каналы с др транспондера то его обслужит второй тюнер. Если приходит запрос на каналы с тарнспондера на который нет свободного тюнера то облом, если же есть тюнер который стримит каналы которые никто не смотрит то он пере настроится...

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

Share this post


Link to post
Share on other sites

Бинарник, для скачивания у вас на сайте, под какую ОС(Freebsd)/32/64 собран?

Edited by Brainiac

Share this post


Link to post
Share on other sites

root@convert:/usr/home/admin/msd_lite-1.08 # uname -a
FreeBSD convert 8.4-RELEASE-p35 FreeBSD 8.4-RELEASE-p35 #0: Tue Jul 28 10:55:26 UTC 2015     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64

root@convert:/usr/home/admin/msd_lite-1.08 # make
...
depbase=`echo src/core_log.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`; gcc -DHAVE_CONFIG_H -I.     -I ./include/ -pipe -O2 -DNDEBUG -DHTTP_SRV_XML_CONFIG -fstack-protector -fomit-frame-pointer -fPIE -ffast-math  -MT src/core_log.o -MD -MP -MF $depbase.Tpo -c -o src/core_log.o src/core_log.c && mv -f $depbase.Tpo $depbase.Po
depbase=`echo src/core_helpers.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`; gcc -DHAVE_CONFIG_H -I.     -I ./include/ -pipe -O2 -DNDEBUG -DHTTP_SRV_XML_CONFIG -fstack-protector -fomit-frame-pointer -fPIE -ffast-math  -MT src/core_helpers.o -MD -MP -MF $depbase.Tpo -c -o src/core_helpers.o src/core_helpers.c && mv -f $depbase.Tpo $depbase.Po
src/core_helpers.c: In function 'mmalloc_fd':
src/core_helpers.c:93: error: 'MAP_ALIGNED_SUPER' undeclared (first use in this function)
src/core_helpers.c:93: error: (Each undeclared identifier is reported only once
src/core_helpers.c:93: error: for each function it appears in.)
*** Error code 1

Stop in /usr/home/admin/msd_lite-1.08/src.
*** Error code 1

Stop in /usr/home/admin/msd_lite-1.08/src.
*** Error code 1

Stop in /usr/home/admin/msd_lite-1.08.

 

Или все-таки надо под 9 или 10кой ставить?

Из описания для лайт не понятно под какую версию ОС собирать

Share this post


Link to post
Share on other sites

Под 8х можно собрать, нужно вот эту MAP_ALIGNED_SUPER удалить - это ничего не сломает.

Следующую версию можно будет и под 7х собрать, но это никому видимо не надо уже :)

Share this post


Link to post
Share on other sites

Убрал как сказали, теперь следующее:

 

...
epbase.Tpo $depbase.Po
src/core_helpers.c: In function 'mmalloc_fd':
src/core_helpers.c:95: error: expected expression before ')' token
*** Error code 1

Stop in /usr/home/admin/msd_lite-1.08/src.
*** Error code 1

Stop in /usr/home/admin/msd_lite-1.08/src.
*** Error code 1

Stop in /usr/home/admin/msd_lite-1.08.

 

Кстати, под FreeBSD 9.3-RELEASE-p42 собралось все отлично, но хотелось бы под 8ку

Edited by Brainiac

Share this post


Link to post
Share on other sites

| MAP_ALIGNED_SUPER - вертикальную палочку тоже удалять надо :)

Share this post


Link to post
Share on other sites

Ну вот, не знаю таких тонкостей. Теперь собралось.

Share this post


Link to post
Share on other sites

Что-то пошло не так...

 

msd.conf

 

 

<?xml version="1.0" encoding="utf-8"?>

<msd>
       <log>
               <file>/var/log/msd.log</file>
       </log>


       <threadPool>
               <threadsCount>0</threadsCount> <!-- 0 = auto -->
               <fBindToCPU>yes</fBindToCPU> <!-- Bind threads to CPUs. -->
               <fCacheGetTimeSyscall>yes</fCacheGetTimeSyscall> <!-- Cache gettime() syscalls.. -->
               <timerGranularity>100</timerGranularity> <!-- 1/1000 sec -->
       </threadPool>


       <systemResourceLimits> <!-- "unlimited"  - value valid only in this section! -->
               <maxOpenFiles>8192</maxOpenFiles> <!-- Numbers only! -->
               <maxCoreFileSize>unlimited</maxCoreFileSize>
               <processPriority>-10</processPriority> <!-- Program scheduling priority. setpriority(). Hi: -20, Low: 20, Default: 0 -->
       </systemResourceLimits>


       <!-- HTTP server -->
       <!-- Sizes in kb, time in seconds -->
       <HTTP>
               <!-- HTTP server settings. -->
               <skt>
                       <rcvBuf>4</rcvBuf>
                       <sndBuf>256</sndBuf>
                       <rcvTimeout>30</rcvTimeout>
                       <sndTimeout>30</sndTimeout>
               </skt>

               <ioBufInitSize>4</ioBufInitSize> <!-- HTTP request receive buf initial size. -->
               <ioBufMaxSize>4</ioBufMaxSize> <!-- HTTP request receive max buf size. -->

               <bindList>
                       <bind>
                               <address>10.3.1.30:7088</address>
                               <backlog>2048</backlog>
                               <fAcceptFilter>yes</fAcceptFilter> <!-- Set SO_ACCEPTFILTER(httpready)/ TCP_DEFER_ACCEPT. -->
                               <congestionControl>htcp</congestionControl> <!-- TCP_CONGESTION: replace cc from OS default -->
                       </bind>
               </bindList>

               <hostnameList> <!-- This host names for all addresses. -->
                       <hostname>*</hostname>
               </hostnameList>
       </HTTP>
<hubProfileList> <!-- Stream hub profiles templates. -->
               <hubProfile>
                       <fDropSlowClients>no</fDropSlowClients> <!-- Disconnect slow clients. -->
                       <fSocketHalfClosed>no</fSocketHalfClosed> <!-- Enable shutdown(SHUT_RD) for clients. -->
                       <fSocketTCPNoDelay>yes</fSocketTCPNoDelay> <!-- Enable TCP_NODELAY for clients. -->
                       <fSocketTCPNoPush>yes</fSocketTCPNoPush> <!-- Enable TCP_NOPUSH / TCP_CORK for clients. -->
                       <precache>512</precache> <!-- Pre cache size. Can be overwritten by arg from user request. -->
                       <sndBlockSize>64</sndBlockSize>  <!-- Send block size. Must be multiple of 4. -->
                       <ringBufSize>256</ringBufSize> <!-- Stream receive ring buffer size. Must be multiple of sndBlockSize. -->
                       <skt>
                               <sndBuf>512</sndBuf> <!-- Max send block size, apply to clients sockets only, must be > sndBlockSize. -->
                               <congestionControl>htcp</congestionControl> <!-- TCP_CONGESTION: this value replace/overwrite(!) all others cc settings: cc f
                       </skt>
                       <headersList> <!-- Custom HTTP headers (sended before stream). -->
                               <header>Pragma: no-cache</header>
                               <header>Content-Type: video/mpeg</header>
                               <header>ContentFeatures.DLNA.ORG: DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000</header>
                               <header>TransferMode.DLNA.ORG: Streaming</header>
                       </headersList>
               </hubProfile>
       </hubProfileList>


       <sourceProfileList> <!-- Stream source profiles templates. -->
               <sourceProfile>
                       <skt>
                               <rcvBuf>512</rcvBuf> <!-- Multicast recv socket buf size. -->
                               <rcvLowat>48</rcvLowat> <!-- Actual cli_snd_block_min if polling is off. -->
                               <rcvTimeout>2</rcvTimeout> <!-- STATUS, Multicast recv timeout. -->
                       </skt>
                       <!-- Source connection specific info. -->
                       <udp> <!-- For: udp, udp-rtp, multicast-udp and multicast-udp-rtp. -->
                               <address>239.255.0.1:1234</address>
                       </udp>
                       <multicast> <!-- For: multicast-udp and multicast-udp-rtp. -->
                               <ifName>vlan10</ifName> <!-- For multicast receive. -->
                       </multicast>
               </sourceProfile>
       </sourceProfileList>
</msd>

 

 

 

 

При запуске в VLC

http://10.3.1.30:7088/udp/239.255.0.1:1234

 

вываливается:

root@convert:/usr/home/admin # msd_lite -v -c /usr/local/etc/msd.conf

[2016-08-25 02:55:50]: Multi stream daemon lite 1.08: started
[2016-08-25 02:55:50]: Build: Aug 24 2016 21:40:11, Release
[2016-08-25 02:55:50]: CPU count: 4
[2016-08-25 02:55:50]: descriptor table size: 11095 (max files)
[2016-08-25 02:55:50]: Thread 2 started...
[2016-08-25 02:55:50]: Thread 1 started...
[2016-08-25 02:55:50]: Thread 3 started...
[2016-08-25 02:55:50]: Bind thread 1 to CPU 1
[2016-08-25 02:55:50]: Bind thread 2 to CPU 2
[2016-08-25 02:55:50]: hostname: *
[2016-08-25 02:55:50]: Bind thread 3 to CPU 3
[2016-08-25 02:55:50] http_srv_acc_add, line 502: io_net_is_tcp_cc_avail() fail, this is not fatal. error 22: Invalid argument
[2016-08-25 02:55:50]: bind 10.3.1.30:7088, backlog = 2048, cc_name = htcp
[2016-08-25 02:55:50]: Thread 0 started...
[2016-08-25 02:55:50]: Bind thread 0 to CPU 0
[2016-08-25 02:56:08] http_srv_new_conn_cb, line 866: error 55: No buffer space available 10.8.20.6:2813: io_net_snd_tune(), this is not fatal.
[2016-08-25 02:56:08] str_hub_create_int, line 502: io_net_rcv_tune() error 55: No buffer space available
ошибка сегментации(core dumped)

 

А что? Конфиг немного правил под себя тот, что прилагается с исходниками.

Edited by Brainiac

Share this post


Link to post
Share on other sites

Закинул копипасту, нормально, пошло, для теста пока хватит.

 

Что интересно, на udpxy без крутилок взлетело, вот только как он было бы под большой нагрузкой - не знаю.

 

Ну и под 8 тоже надо /sbin/kldload cc_htcp

Edited by Brainiac

Share this post


Link to post
Share on other sites

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

Большая нагрузка для этого начинается после 10г.

Share this post


Link to post
Share on other sites

Потестил. На клиентах где vlc вроде все четко, единственная проблема с дюной, почему то, были время от времени задержки(~0.1мс) в картинке и звуке. Хотя, тут же, переводя дюну на мультикаст, все выравнивалось. Буфера в настройках дюны крутил - бесполезно.

 

И еще, я так и не понял, для кольцевого буфера, в лайте, можно менять место расположения или там жестко прописано?

Кольцевой буфер, он должен быть в виде файлов, я так понимаю?

Edited by Brainiac

Share this post


Link to post
Share on other sites

На каком этапе были задержки?

На старте или заикалось уже во время просмотра?

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

 

Можно, но нужна будет перекомпиляция.

Лайт демонстрирует основной принцип и плюс конфиг у него по проще - не все хотят читать мануалы а профит от зерокопи показать охота :)

В полной версии с кольцевым буфером сложнее:

- можно выключить ZeroCopyOnSend и тогда он будет всегда в памяти, на всех системах, но нагрузка на систему как минимум немного вырастет и вероятно чуть меньше будут использоваться оффлоадинги вида TSO в сетевухах

при включённом ZeroCopyOnSend

- на фре начиная с 10 оно создаёт "файлы" в памяти (не tmp и не md фс) (shm вариант)

- на линуксе shm всегда падает в tmpfs раздел который система сама создаёт

- вместо shm можно указать любой путь на фс, я обычно /tmp указываю

Share this post


Link to post
Share on other sites

На каком этапе были задержки?

На старте или заикалось уже во время просмотра?

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

Во время просмотра такие микрозатыки, картинка не сыпется, а на милисекунду притормаживается что-ли со звуком.

Что-то сразу не додумался, надо еще на маге будет потестить.

 

Под влц более-менее сносно время задержки между переключениями каналов,

на дюне довольно существенно дольше, до 7-10 секунд доходит.

Но это скорее всего ограничения лайт версии?

Share this post


Link to post
Share on other sites
Во время просмотра такие микрозатыки, картинка не сыпется, а на милисекунду притормаживается что-ли со звуком.

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

Чуть позже напишу какие крутилки крутить в мсд.

 

Можно в качестве временной меры повесить wget чтобы канал стримил всегда в /dev/null и проверить, тогда кольцевуй буфер будет всегда доступен и задержек быть не должно.

Share this post


Link to post
Share on other sites

Если используется конфиг http://www.netlab.linkpc.net/download/software/msd/lite/msd_lite.conf

<hubProfileList> / <hubProfile> /

<sndBlockSize> = 1

<ringBufSize> = 32768

 

<sourceProfileList> / <sourceProfile> / <skt> /

<rcvLowat> = 16

 

Это выровняет исходящий траф но увеличит нагрузку на проц.

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Никак.

Лайт версия в содержимое вообще даже не смотрит, не говоря о модификации.

В полной версии в планах, сразу после работы с тюнерами.

Share this post


Link to post
Share on other sites

Спасибо, Иван, ждём, готовы приобрести платную версию. Сейчас сравниваем с астрой, скорость переключениея каналов у msd быстрее в среднем на 30-40%

По срокам не сообщите?

Edited by gebs

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