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

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

Edited by MESB

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

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

Share this post


Link to post
Share on other sites

проверьте на udpxy - если будет та же картина, делаем выводы

Share this post


Link to post
Share on other sites

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

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

Решилось прописыванием на сетевой карте куда льется мультикаст любого "левого" ип вместо обычного ifconfig_igbX="UP".

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Все сталкивались.

tcpdump -s0 -nnvvei "интерфейс" igmp

Share this post


Link to post
Share on other sites

Кверир в свиче покрутить, чтобы по агрессивнее стал.

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