如何使用HTTP流式传输音频

时间:2013-03-14 21:01:07

标签: html5 http audio

我正在处理传统的播客服务,现在似乎是利用HTML5的好时机。我们的用户可以从我们的网站访问此服务,如果这些匿名用户可以通过我们的过渡获得无缝体验,那将会很不错。我打算使用Media Element

我很担心我不知道的事情......似乎就像一切。是否可以使用此论坛询问背景信息?

“流媒体”的定义甚至不清楚。有些人专门使用该术语来指代非持久性数据的直播。我们的播客服务使用静态MP3文件。因此,它的重要价值在于强迫客户在下载时“播放”数据。后台实现这种理想客户行为的魔力是什么?

我刚刚注意到Firefox现在自动执行此魔法。为什么需要20年才能添加这个相当明显的功能?

流式静态数据和传统数据传输之间的最大区别在于能够寻找:如果我将10个音乐曲目组合成一个播放列表文件(我的老派思维的专辑),那么用户应该能够向前跳到没有干预数据的最后一个轨道。这需要在中游发出的请求更改原始响应。这些机制与HTML无关(如在HTML5中)。我猜想除了任何专有的编解码器之外,Flash,RealAudio等必须创建HTTP的专有扩展。如果没有相应的HTTP标准升级,HTML5如何标准化媒体流?

我觉得有点像彼得希格斯定义假设玻色子的属性。显然,存在处理完成这种形式的流所必需的请求/响应的协议。但由于我甚至无法确认它们的存在,因此提出有关服务器操作的问题似乎是推测性的。然而,符合HTML5标准的浏览器在某种程度上与我的旧服务器兼容似乎是一种信念的飞跃。

应该很简单。我错过了什么?

谢谢! 吉姆

3 个答案:

答案 0 :(得分:2)

你说“流媒体”是一个过载的术语是正确的。我倾向于认为绝大多数流媒体内容是通过vanilla HTTP请求提供的。

“我刚刚注意到Firefox现在自动执行此魔法。为什么需要20年才能添加这个相当明显的功能?”

我认为很多浏览器都有能力在一段时间内播放至少简单的音频格式(我认为1995年版本的Netscape会处理一些普通的PCM WAV,AIFF和SND文件)。关于能够本地处理MP3,有长期的法律,许可和专利战争仍在进行中。这增加了摩擦力。到目前为止,我认为大多数主流浏览器都可以通过音频标签本地处理MP3音频。

关于寻求:一个足够智能的客户端可以通过普通的HTTP做到这一点。如果用户发出搜索请求并且尚未下载该部分,则客户端可以关闭HTTP连接,创建新连接并请求特定范围的字节。这只是在整个文件尚未下载的情况下。 Media Element可能已经做了类似的事情。

在播放列表示例中,10首曲目应该是单独的文件,而不是压缩成一个大文件。一旦在第一个轨道上完成播放,JavaScript就会收到一个信号,告诉它更新UI并请求第二个文件进行播放。如果用户在播放音轨1时选择跳到跟踪10,则客户端只请求音轨10。

我希望我能帮到你。我知道你表达的感觉 - 不确定首先要问的正确问题。

答案 1 :(得分:-1)

我不知道如何回答我自己的问题。也许我能做的最好的事情是取消任何荒谬的猜测。

我原帖的摘要:

  1. 后台实现这种理想的客户行为(即时处理多媒体数据)的魔力是什么?
  2. Firefox中发生了什么变化,现在它“即时”播放MP3音频?
  3. 使用什么协议来完成HTTP流媒体?
  4. 根据我如何理解多媒体迈克的答案,浏览器可以“动态”处理数据,如果它可以访问适当的编解码器。所以Q1的答案是提供一个包含编解码器的插件客户端,例如FlashPlayer或SilverStream。换句话说,一切都归结为专有或开放的编解码器。同样,Q2的答案是,为了符合HTML5,Firefox现在包括(通过骗子或钩子)MP3编解码器。

    多媒体迈克建议将播放列表曲目加载为单独的文件并不能专门回答有关底层协议的问题。在我的特定项目中,谨慎的搜索将是功能性的降级,并且可能是不可接受的。

    我目前的假设是,在处理搜索请求时,客户端在TCP级别上不可靠地切断其连接。然后简单地发出一个特殊的“HTTP范围”的新请求。有趣的是,这种解释与我经历的笨重和不可靠的反应是一致的。虽然与其他程序员的一些对话已经足够热烈,但我仍然没有权威的答案。

答案 2 :(得分:-1)

我能想到的最通用的应用是YouTube中的Flash Player。我使用WireShark来检查HTTP请求。出乎意料的是,所有内容都作为URL搜索参数而不是HTTP标头传递。以下是参数列表:

  • ipbits
  • IP
  • CPN
  • 范围
  • MV
  • ratebypass
  • newshard
  • 因子
  • MT
  • 毫秒
  • 存活
  • ID
  • FEXP
  • 算法
  • 突发
  • sparams
  • CP
  • sver
  • ITAG
  • 签名
  • UPN
  • 到期

对于所有检查的数据包:

burst=40
algorithm=throttle-factor

只有范围参数似乎因请求而异:

range=13-1781759
range=1781760-3563519
range=3563520-5345279
range=5345280-7127039
range=7127040-8908799

总而言之,这些发现似乎与本主题中讨论的所有内容一致。因此,虽然我知道这个协议是由拥有flash的公司编写的专有扩展,但HTML 5应该创建一个标准化的替代品。我仍然希望有人会回答这个基本问题:模仿Flash的这些功能的底层协议是什么?可能HTML5不会包含所有这些功能。但这个答案也很重要。

-Jim