Icecast Audio из источника проходит через все точки монтирования

У меня есть сервер Icecast2 с 6 монтированиями, на которые Ices2 обслуживает прерывистый аудиопоток .ogg. Когда поток не отправляется Ices2, у него есть резервное подключение к молчанию.ogg, которое поддерживает поток до тех пор, пока Ices2 снова не подключится к подключению.

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

Вот мой icecast.xml:

<icecast>
<location>Toronto</location>
<admin>[email protected]</admin>

<limits>
    <clients>100</clients>
    <sources>10</sources>
    <queue-size>524288</queue-size>
    <client-timeout>30</client-timeout>
    <header-timeout>15</header-timeout>
    <source-timeout>100</source-timeout>
     <burst-size>65535</burst-size>
</limits>

<authentication>
    <!-- Sources log in with username 'source' -->
    <source-password>hackme</source-password>
    <!-- Relays log in username 'relay' -->
    <relay-password>hackme</relay-password>

    <!-- Admin logs in with the username given below -->
    <admin-user>admin</admin-user>
    <admin-password>changeMe</admin-password>
</authentication>

<hostname>sound.example.com</hostname>

<!-- You may have multiple <listener> elements -->
<listen-socket>
    <port>8000</port>
    <ssl>1</ssl>
</listen-socket>
<listen-socket>
    <port>8001</port>
</listen-socket>

<relays-on-demand>0</relays-on-demand>

<mount> 
    <mount-name>/mount1.ogg</mount-name> 
    <max-listeners>5</max-listeners> 
    <max-listener-duration>36000</max-listener-duration> 
    <burst-size>65536</burst-size>
    <fallback-mount>/silent.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>  
        <public>0</public>    
</mount> 
<mount> 
     <mount-name>/mount2.ogg</mount-name> 
    <max-listeners>5</max-listeners> 
    <max-listener-duration>36000</max-listener-duration> 
    <burst-size>65536</burst-size>      
    <fallback-mount>/silent.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>      
        <public>0</public>    
</mount> 
<mount> 
    <mount-name>/mount3.ogg</mount-name> 
    <max-listeners>5</max-listeners> 
    <max-listener-duration>36000</max-listener-duration> 
    <burst-size>65536</burst-size>      
    <fallback-mount>/silent.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>      
        <public>0</public>    
</mount> 
<mount> 
    <mount-name>/mount4.ogg</mount-name> 
    <max-listeners>5</max-listeners> 
    <max-listener-duration>36000</max-listener-duration> 
    <burst-size>65536</burst-size>      
    <fallback-mount>/silent.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>      
        <public>0</public>    
</mount> 
<mount> 
    <mount-name>/mount5.ogg</mount-name> 
    <max-listeners>5</max-listeners> 
    <max-listener-duration>36000</max-listener-duration> 
    <burst-size>65536</burst-size>      
    <fallback-mount>/silent.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>      
        <public>0</public>    
</mount>     

<fileserve>1</fileserve>

<paths>
    <!-- basedir is only used if chroot is enabled -->
    <basedir>/usr/share/icecast2</basedir>

    <!-- Note that if <chroot> is turned on below, these paths must both
         be relative to the new root, not the original root -->
    <logdir>/var/log/icecast2</logdir>
    <webroot>/usr/share/icecast2/web</webroot>
    <adminroot>/usr/share/icecast2/admin</adminroot>
    <ssl-certificate>/etc/icecast2/fullchain.pem</ssl-certificate>

    <alias source="/" destination="/status.xsl"/>
</paths>

<logging>
    <accesslog>access.log</accesslog>
    <errorlog>error.log</errorlog>
    <!-- <playlistlog>playlist.log</playlistlog> -->
    <loglevel>4</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
    <logsize>10000</logsize> <!-- Max size of a logfile -->
</logging>

<security>
    <chroot>0</chroot>

</security>


person Victor    schedule 25.08.2017    source источник


Ответы (1)


Все монтирования возвращаются в один и тот же поток (или это файл?): /silent.ogg

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

В Icecast все клиенты не имеют состояния в контексте точки монтирования. Это означает, что как только слушатель переносится из /mountX.ogg в /silent.ogg, нет никакого представления об исходной точке монтирования, которая могла бы повлиять на последующее поведение. Это означает, что если сейчас /mountY.ogg подключится к сети, он захватит всех текущих клиентов /silent.ogg из-за переопределения.

Один из способов распутать такую ​​​​установку — иметь непересекающиеся цепочки откатов. например с /mountX.ogg по /silentX.ogg и т. д.

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

person TBR    schedule 25.08.2017
comment
Спасибо! это помогло, но немного некрасиво. Вы упомянули настройку переопределения, как это влияет? Я использовал пример запасных вариантов, приведенный в документации, но не нашел удовлетворительного описания того, что сделал параметр переопределения. - person Victor; 26.08.2017
comment
Override - это немного неправильное название. Это позволяет монтированию передавать всех текущих прослушивателей резервного монтирования самому себе при подключении исходного клиента. АКА обратное направление. Я думаю, это делает более очевидным, почему обычный запасной вариант - не лучший выбор. - person TBR; 26.08.2017