【问题标题】:Icecast stream repeats after interruptions on mobile devicesIcecast 流在移动设备上中断后重复
【发布时间】:2019-05-13 20:59:16
【问题描述】:

在 Ubuntu 16.04 上运行 Icecast 2.4.4,工作源安装自 Darkice 默认声卡输入。自从在我们下面的相关配置中启用了安装上的介绍后,我们收到了关于在 Android 或 iPhone 等移动设备上中断后流重复的报告:

<limits>
    <clients>3000</clients>
    <sources>10</sources>
    <queue-size>524288</queue-size>
    <client-timeout>30</client-timeout>
    <header-timeout>15</header-timeout>
    <source-timeout>10</source-timeout>
    <!-- If enabled, this will provide a burst of data when a client
         first connects, thereby significantly reducing the startup
         time for listeners that do substantial buffering. However,
         it also significantly increases latency between the source
         client and listening client.  For low-latency setups, you
         might want to disable this. -->
    <burst-on-connect>1</burst-on-connect>
    <!-- same as burst-on-connect, but this allows for being more
         specific on how much to burst. Most people won't need to
         change from the default 64k. Applies to all mountpoints  -->
    <burst-size>943718</burst-size>
</limits>
<http-headers>
    <header name="Access-Control-Allow-Origin" value="*" />
</http-headers>
<mount>
    <mount-name>/wmnf_high_quality</mount-name>
    <max-listeners>3000</max-listeners>
    <intro>/wmnf_high_quality.mp3</intro>
</mount>

我无法在我的三星 Galaxy s5 上复制该问题,当有来电或短信时,当通话结束或通知结束时,流会从中断处继续。在中断引起的断开/重新连接后,介绍确实会重复,但之后我的流仍然是直播的。报道称流在中断后的最后 5-10 分钟重复播放,他们可以单击暂停/播放按钮在我们的应用中再次接收实时音频。

由于我无法复制,希望这对某些人来说只是电话问题。任何人都可以建议是什么导致流在中断后重复?

我正在等待反馈,看看在移动设备上收听我们的网站播放器时是否会发生这种情况。到目前为止的报告来自我们的 Android/iPhone 应用程序播放器。我没有开发应用程序,所以我不确定播放器。我还要求他们尝试 TuneIn 应用程序中可用的流。同样,我无法复制自己。

【问题讨论】:

  • 这些设备上的监听软件是什么?基于浏览器?客户端库?

标签: mobile icecast internet-radio


【解决方案1】:

我认为这里有两个独立的问题。首先,让我们解决介绍文件。

有很多播放器会在连接失败时自动重新连接。这通常在没有用户干预的情况下发生。连接丢失是移动用户的常见情况。只是在房子里走来走去通过 WiFi 连接,然后移动,然后再回到 WiFi 的情况并不少见。好的播放器会重新连接,音频流中通常不会(或很少)出现故障。但是,添加该介绍文件会产生一个非常严重的感知故障......当这种情况发生时,您的介绍文件会重复播放。因此,强烈建议您不要使用服务器中的介绍文件。如果您希望有一个介绍,您可以在您的网站上播放一个,您可以准确地检测用户是否正在开始新的会话。

第二个问题是您的突发大小非常高。大多数播放器需要缓冲两秒钟的音频数据才能开始播放。播放器还希望在开始播放之前看到一些一致的音频,以确保听众以后不必忍受第二轮缓冲。因此,我通常推荐 5 到 10 秒的突发大小。在您的 128k 情况下,10 秒的缓冲区为 256 KB。您当前的突发大小接近一分钟。这个大缓冲区通常不会以您希望的速度刷新到客户端。原因是播放器应用程序会提供一些背压,导致 TCP 窗口较低,这意味着服务器只能在服务器端缓冲之前推送这么多的缓冲区。

我在您的/wmnf_high_quality 流上使用 Wireshark 进行了一些快速测试:

绘制了两条线...发送的字节数和 TCP 窗口大小。他们大多互相跟随。在连接的最开始,窗口是敞开的,服务器开始将突发缓冲区刷新到客户端。但在 1 秒内,该窗口完全关闭。直到玩家可以在它打开备份之前稍微通过它的初始缓冲区工作。服务器刷新更多的大缓冲区,然后窗口再次关闭。最终我们达到了稳定播放,你可以看到这种尖峰模式出现了。这里发生的情况是播放器端有大量缓冲数据,并且只会接受来自服务器的少量数据。服务器发送它可以发送的所有内容,但窗口大小再次缩小到 ~1 KB。

在此示例中,在稳定播放期间的任何给定时间,我们有一个客户端可能有大约 256 KB - 512 KB 的缓冲数据,而服务器有近 1 MB 的总缓冲区可用,将慢速流勺子馈送到来自此缓冲区中间的客户端。这应该表明突发缓冲区太大,因为客户端无法足够快地消耗它。

现在,可能导致断开连接的复合问题......队列大小。 Icecast 不会在内存中为每个单独的客户端维护单独的缓冲区。它有一个从中读取的缓冲区。 &lt;queue-size&gt; 值设置此缓冲区的大小。如果客户端落后太远,他们的连接将被丢弃。设置更大的queue-size 几乎没有缺点。对于我们所说的大小,服务器上的内存实际上是免费的,因此考虑归结为让用户通过平庸的连接或完全踢掉他们。不过,你的情况有点不同……

通过拥有一个客户端无法使用的大突发大小,您会立即将客户端置于队列大小限制之上,从而迫使它们断开连接。您的听众在反复听到介绍信息时特别意识到这一点,这可能就是他们现在向您报告而以前没有向您报告的原因。

我会推荐以下内容:

  • burst-size 设置为252144(128 kbit * 8 位/字节 * 1024 字节/千字节 * 10 秒 = 256 KB)
  • queue-size 设置为burst-size 的4 倍。
  • 删除介绍文件。通过您的网站上的代码播放简介,而不是在信息流本身中。

【讨论】:

  • 感谢您的详细分析!我将尝试设置更改,但必须查看我们网站的播放器和播放介绍的应用程序。都不是我开发的。如果没有完成或增加报告,我无法取消介绍。我们真的只有一两个,而且大多数人都玩得很好。今晚我将尝试更改设置,看看我们是否有任何明显的改进。甚至在介绍之前,我们就有更多关于重复的报告。我有一份关于旧平板电脑的报告,它只播放介绍,没有后续视频流,只有一个,所以我猜测是设备问题。
  • @rwfitzy 您的旧平板电脑...可能不是设备问题。可能还有其他客户有同样的问题。请记住,Icecast 不会实时发送您的介绍文件。它会尽可能快地读取整个内容并将其刷新到客户端,这与您的突发大小不同,因此可能存在类似的问题。此外,该流不会被重新混合或任何东西,因此如果它附加了诸如 ID3 标记之类的东西,那么您实际上只是在破坏流。如果您可以分享,我很想了解更多有关平板电脑和您在其上运行的软件的详细信息!
  • 不是我的平板电脑,真希望我能复制这个问题。用户报告它是android samsung,我会问型号。他们通过网站收听。我将不得不询问工程师音频输入是否有任何标记,我没有对输入做任何事情,接受安装他提供的输入。我只知道它是通过安装 M Audio Delta 66 的 Delta 接线盒提供的。他还说自从我们添加了这个 Icecast 服务器后他放大了信号,他从端口 8000 上的另一个现有服务器中分离出来。我们需要保护,我m linux/web pro 对服务完全陌生,所以我设置了这个新服务器。
  • 您的音频输入很好,我的意思是如果介绍文件中有任何 ID3 标签。还有……我真的很怀念那个系列的 M-Audio 卡。 :-) 如果我可以为您的项目提供帮助,请告诉我。我可以咨询。 brad@audiopump.co
  • 我知道输入是由一些 Arbitron 设备编码的。
猜你喜欢
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2021-09-03
  • 2016-02-02
  • 1970-01-01
相关资源
最近更新 更多