Cordova 脱机/断开连接几分钟后是否继续播放流式音频?

Cordova 脱机/断开连接几分钟后是否继续播放流式音频?,cordova,audio,mp3,audio-streaming,internet-radio,Cordova,Audio,Mp3,Audio Streaming,Internet Radio,我找了几天,似乎找不到解决办法。我希望这里有人能给我指出正确的方向 我正在使用Cordova/Angular构建一个radio iOS应用程序,我有一个mp3流()正在使用HTML5播放 我想找到一种方法来继续流,即使设备失去连接几分钟,如果连接返回,继续正常流。目前,如果我关闭wifi,或将设备打开“飞行模式”,它会立即停止流 我对音频行业还比较陌生,希望有经验的人能帮我 HTTP渐进式流传输的工作原理是,只需在一个连续流中发送数据,而接收端在数据进入时播放数据。网络的本质是数据以块的形式出现

我找了几天,似乎找不到解决办法。我希望这里有人能给我指出正确的方向

我正在使用Cordova/Angular构建一个radio iOS应用程序,我有一个mp3流()正在使用HTML5播放

我想找到一种方法来继续流,即使设备失去连接几分钟,如果连接返回,继续正常流。目前,如果我关闭wifi,或将设备打开“飞行模式”,它会立即停止流


我对音频行业还比较陌生,希望有经验的人能帮我

HTTP渐进式流传输的工作原理是,只需在一个连续流中发送数据,而接收端在数据进入时播放数据。网络的本质是数据以块的形式出现,而不是连续出现,因此播放音频的客户端有一个几秒钟的缓冲区,以便在周期性的数据突发中生存

为了在一分钟内逃过一劫,客户机将来必须接收超过一分钟的数据。这是通过在服务器上缓冲一分钟的数据,然后在连接时尽快将缓冲区刷新到客户端来实现的。虽然它不会同时到达客户机,但它应该以相当快的速度到达客户机,然后您将拥有能够在断开连接后生存的缓冲区。也就是说,如果您的服务器比客户端提前一分钟,并且具有完整1分钟缓冲区的客户端失去了连接,那么它可以在退出之前继续播放大约一分钟

但这只是问题的一半。重新连接时,您会做什么?客户端如何与服务器同步?不幸的是,没有支持同步方式的公共服务器执行实时HTTP progressive。我自己做了一些试验,试验了
范围
标题以及哪些不起作用,但需要自定义客户端。(但VLC确实有效…)

<>你也必须考虑你的音频立即停止的原因。如果您试图通过打开飞行模式来模拟网络断开或减速点,这不是一个合适的测试。操作系统禁用网络接口,网络接口会立即断开任何TCP连接,并立即终止到应用程序的管道。大多数应用程序将在此时停止播放,除非它们有一些额外的缓冲区,而不管网络连接如何。在网络连接质量受到影响的情况下,TCP连接很少真正断开。。。数据包被延迟,导致音频最终在缓冲区耗尽时停止

根据您的需要,有两种解决方案:

在网络质量变化的情况下,TCP连接仍然有效 这很简单。增加刷新到客户端的服务器端缓冲区。我通常用20秒

请注意,并非所有客户端都会接受如此大的缓冲区。有些会降低TCP窗口大小,防止服务器发送过多的音频数据

(注意:如果您不知道如何使用我创建的现有流媒体服务器执行此操作。它目前还不普遍可用,但您可以通过以下地址向我发送电子邮件:brad@audiopump.co试试看。)

在IP地址更改后,TCP连接肯定会丢失 对于这个场景,您需要一个全新的流协议。这就是你想要的

HLS的工作原理是对流进行分段,无论如何,这些流必须由多个HTTP请求请求。因此,客户端可以更改地址(例如从移动网络转到WiFi),并且流仍然可以工作


不幸的是,HLS没有得到客户端的很好支持,但是服务器端很容易。在大多数情况下,任何HTTP服务器都可以。编码器是需要更改的,用于编码和上传片段。

如果是没有实时内容的正常流,您可以将其转换为字节数组(2倍速度),然后以正常速度播放。但这样做有点复杂

布拉德,非常感谢你的回复,这是非常有用和信息丰富的。我现在就给你发一封电子邮件。