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

IPTV msd_lite

Затеяли поднять IPTV в сети.

Было принято решение отдавать клиентам unicast-ом все.

Получаем мультикаст. Есть плейлист.

В качестве прокси поставили msd_lite на FreeBSD.

И столкнулись с следующей проблемой.

Одновременно можно смотреть только один канал.

Тоесть два устройства не могут смотреть разные каналы.

Один и тот же - без проблем.

Когда работает только одно устройство - нормально переключается между каналами без проблем.

Сломали себе голову уже куда копать :(

Посоветуйте может кто сталкивался с подобной проблемой и решил.

Share this post


Link to post
Share on other sites

Вот конфиг который используем

 

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

<!--
Sizes in kb, time in seconds
-->

<!--
<skt> <rcvLowat>XXXX</rcvLowat> - DOES NOT WORK on Linux!
man socket(7):
...
The select(2) and poll(2) system calls currently do not respect the SO_RCVLOWAT
setting on Linux, and mark a socket readable when even a single byte of data is
available.
...
-->


<msd>
       <log>
               <file>/var/log/msd_lite.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>0</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>x.x.x.x:1235</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>4096</precache> <!-- Pre cache size. Can be overwritten by arg from user request. -->
                       <sndBlockSize>1</sndBlockSize>  <!-- Send block size. Must be multiple of 4. -->
                       <ringBufSize>32768</ringBufSize> <!-- Stream receive ring buffer size. Must be multiple of sndBlockSize. -->
                       <fZeroCopyOnSend>no</fZeroCopyOnSend>
                       <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 from http req args, http server settings, OS default -->
                       </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>16</rcvLowat> <!-- Actual cli_snd_block_min if polling is off. -->
                               <rcvTimeout>2</rcvTimeout> <!-- STATUS, Multicast recv timeout. -->
                       </skt>
                       <!-- Source connection specific info. -->
                       <multicast> <!-- For: multicast-udp and multicast-udp-rtp. -->
                               <ifName>igb0</ifName> <!-- For multicast receive. -->
                       </multicast>
               </sourceProfile>
       </sourceProfileList>
</msd>

Share this post


Link to post
Share on other sites

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

 

netstat на сервере показывает что принимается только по одному udp потоку и все и второй udp поток не создается.

Share this post


Link to post
Share on other sites

Вопрос стоял не так.

Вы с ноута например, запустить 3 копии влц можете и из мультикаста открыть эти разные каналы одновременно?

 

Просто проверить в обход тазика с БСД.

Edited by MESB

Share this post


Link to post
Share on other sites

Когда работает только одно устройство - нормально переключается между каналами без проблем. Сломали себе голову уже куда копать :( Посоветуйте может кто сталкивался с подобной проблемой и решил.

Что в логах?

Что показывает tcpdump в плане igmp трафика? Что насчёт юдп мультикаста?

 

На тазике вместо msd_lite ставите Cesbo Astra и у вас сразу пропадает геморой.

Да да, вещай дальше Кашпировский :)

Share this post


Link to post
Share on other sites

На тазике вместо msd_lite ставите Cesbo Astra и у вас сразу пропадает геморой.

 

И начнется другой.

 

Откуда берется мультикаст? Такое ощущение, что разрешена подписка только на одну группу на аплинк-порту. Вы там его не воруете случайно у соседнего оператора?

Share this post


Link to post
Share on other sites

Нет возможности это сделать :(((

На фрюше astra --analyze ... сразу два канала че показывает?

 

ЗЫ: может и в msd есть такая утиля

Share this post


Link to post
Share on other sites

Оказывается не решилось. Проходит время и ситуация повторяется (нет закономерности). Решается на время перезагрузкой mpd_lite. Кто сталкивался?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.