Audio 什么';移动和网络直播音频(无线电)流的最佳协议是什么?

Audio 什么';移动和网络直播音频(无线电)流的最佳协议是什么?,audio,streaming,protocols,shoutcast,internet-radio,Audio,Streaming,Protocols,Shoutcast,Internet Radio,我正在尝试为互联网电台建立一个网站和移动应用程序(iOS、Android)。 网站用户播放他们的音乐或广播,移动用户只需收听广播电台并与其他听众聊天 我搜索了一周,在AmazonEC2上用Wowza引擎(使用HLS和RTMP)和SHOUTcast服务器制作了一个原型 使用HLS有5秒的延迟,但RTMP和SHOUTcast有2秒的延迟。 根据这个结果,我认为我应该选择RTMP或SHOUTcast 但我不确定RTMP和SHOUTcast是否是最好的协议:( 我应该选择什么协议? 我需要提供一个覆盖所

我正在尝试为互联网电台建立一个网站和移动应用程序(iOS、Android)。 网站用户播放他们的音乐或广播,移动用户只需收听广播电台并与其他听众聊天

我搜索了一周,在AmazonEC2上用Wowza引擎(使用HLS和RTMP)和SHOUTcast服务器制作了一个原型

使用HLS有5秒的延迟,但RTMP和SHOUTcast有2秒的延迟。 根据这个结果,我认为我应该选择RTMP或SHOUTcast

但我不确定RTMP和SHOUTcast是否是最好的协议:(

我应该选择什么协议?
我需要提供一个覆盖所有平台的各种协议吗?

直接流式
音频/mpeg
(mp3数据包)在我尝试过的任何地方都有效。

这是一个非常广泛的问题。让我们从分发协议开始

流协议 HLS的优点是允许用户以最适合其连接的比特率获取流。客户端可以无缝地向上/向下扩展,而不停止播放。这对于视频尤其重要,但对于音频,即使是移动客户端也可以在大多数区域播放128kbit流。如果您打算使用各种比特率es可用,并希望更改质量的中流,那么HLS是一个很好的协议

HLS的缺点是兼容性。iOS支持HLS,但仅此而已。Android支持HLS,但它仍然存在缺陷。(也许再过一两年,一旦所有的Android 3.0用户都离开了,这就不会有太大的问题了。)JWPlayer有一些技巧让HLS在Flash中为桌面用户工作

除非你只关心Flash用户,否则我不会为RTMP操心

使用HTTP的纯渐进式流媒体是我几乎总是选择的路线。任何东西都可以播放它(甚至是我的Palm Pilot 12年前的默认媒体播放器)。它实现简单,易于理解

SHOUTcast实际上是HTTP,但它的实现很差,存在兼容性问题,特别是在移动设备上。它的响应中有一个非标准的状态行,这破坏了许多客户端。Icecast是一个很好的替代方案,我建议今天在生产中使用。作为另一个选择,我创建了自己的streaming服务名为AudioPump,也是HTTP,专门用于修复与古怪移动客户端的兼容性,例如旧硬件上的本地Android播放器。目前还不能普遍使用,但您可以通过以下地址与我联系:brad@audiopump.co如果你想试试的话

延迟 您提到需要2秒的延迟。如果您使用SHOUTcast获得2秒的延迟,则有问题。您不希望延迟太低,尤其是在向移动客户端流式传输时。我通常从至少20秒的缓冲区开始,它会尽快刷新到客户端。这允许立即开始流播放(因为它填满了客户端缓冲区,所以可以开始解码)同时提供一些保护,防止因网络条件而导致缓冲区不足。移动用户在大楼拐角处走动并失去其良好的信号质量并不罕见。您希望您的流能够尽可能地保持这种状态,因此,如果您已经发送了数据以覆盖辍学情况,则用户不必知道或不知道注意他们的关系在短时间内变得平庸

如果您确实需要低延迟,那么您完全看错了技术。有关低延迟,请查看WebRTC

您当然可以调整传统的internet收音机设置以减少延迟,但这很少是一个好主意

编解码器 编解码器的选择比其他任何东西都更能决定你的兼容性。MP3是最容易兼容的,AAC也不落后。如果你使用AAC,你可以在给定的比特率下获得更高质量的音频。大多数人使用它来减少他们的带宽账单

MP3有许可费,AAC也可能有许可费,具体取决于您使用的编解码器。请咨询律师。我不是,许可极其复杂

其他编解码器包括Vorbis和Opus。如果您可以使用Opus,请在许可证完全开放且带宽质量良好的情况下使用。不过,这里的客户端兼容性是Opus的杀手(也许几年后会更好)。Vorbis是一个普通的编解码器,但免费且清晰

在极端情况下,我有一些电台使用FLAC进行流媒体传输。这是无损音频质量,但您要支付的带宽是使用中等质量MP3电台的8倍。FLAC over HTTP流媒体兼容性目前不是代码,但在VLC中可以正常工作

为流支持多个编解码器是很常见的。根据您的预算,如果您不能做到这一点,最好使用MP3

最后,在编码方面,如果可以的话,不要从一个有损编解码器转到另一个有损编解码器。尽量使输出流尽可能接近输入。如果重新编码音频,每次都会丢失质量

从浏览器录制 您提到用户通过浏览器进行流媒体传输。几年前,我使用Web Audio API构建了类似的东西,在这里捕获音频,然后对其进行编码并发送到Icecast/SHOUTcast服务器。请查看此处:此处简要介绍了其工作原理:


无论如何,我希望这能帮助你入门。

如果你正在开发一个应用程序,那么就使用AAC,如果你只是通过网络浏览器播放,那么你需要一个HTML5实现,即MP3。所有自定义协议,如RTMP或SHOUTcast,都需要构建额外的UI。开源世界中有一些第三方播放器。你可以他们要么使用它们,要么坚持使用HTML5 MP3/OGG,因为现在大多数人都在使用chrome浏览器或其他HTML5浏览器