0

我正在处理一个遗留的播客服务,现在似乎是利用 HTML5 的好时机。我们的用户从我们的网站访问此服务,如果这些匿名用户能够无缝体验我们的过渡,那就太好了。我打算使用Media Element

我担心我不知道的事情……似乎一切。可以用这个论坛询问背景信息吗?

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

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

流式静态数据与传统数据传输的最大区别在于搜索能力:如果我将 10 首音乐曲目组合成一个播放列表文件(我的老派想法的专辑),那么用户应该能够跳到最后一个在没有干预数据的情况下进行跟踪。这需要一个请求,在中途发出,改变原始响应。这些机制与 HTML 无关(如在 HTML5 中)。我猜 Flash、RealAudio 等除了任何专有编解码器之外,肯定还创建了 HTTP 专有扩展。HTML5 如何在不对 HTTP 标准进行相应升级的情况下实现媒体流标准化?

我觉得有点像彼得希格斯定义假设玻色子的性质。显然,有一些协议可以处理完成这种形式的流式传输所需的请求/响应。但是由于我什至无法确认它们的存在,因此询问有关服务器操作的问题似乎是推测性的。尽管如此,兼容 HTML5 的浏览器会以某种方式与我的旧服务器兼容,这似乎是一种信念的飞跃。

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

谢谢!吉姆

4

3 回答 3

3

You're correct that "Streaming Media" is a bit of an overloaded term. I tend to think that the vast majority of streaming media content is delivered via vanilla HTTP requests.

"I just noticed that Firefox now performs this magic automatically. Why did it take 20 years to add this rather obvious feature?"

I think that many browsers have had the capability to play at least simple audio formats natively for sometime (I think versions of Netscape from 1995 would handle some plain PCM WAV, AIFF, and SND files). About being able to handle MP3 natively, there were longstanding legal, licensing, and patent battles that are still in process. That adds to the friction. By now, I think most of the major browsers can handle MP3 audio natively via the audio tag.

Regarding seeking: A sufficiently intelligent client can do that via plain HTTP. If the user issues a seek request and the portion has not been downloaded yet, the client could close the HTTP connection, create a new one, and request a certain range of bytes. And that's only if the entire file hasn't been downloaded already. It's possible that Media Element already does something like this.

In your playlist example, the 10 tracks should be separate files, rather than squashed together into one big file. Once playback finished on the first track, the JavaScript can receive a signal that tells it to update the UI and request the second file for playback. If the user elects to skip to track 10 while playing track 1, then the client just requests track 10.

I hope I've helped. I know the feeling you're expressing-- not sure about the right question to ask in the first place.

于 2013-03-16T01:28:32.353 回答
-1

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

我的原帖摘要:

  1. 实现这种期望的客户端行为(即时处理多媒体数据)的后台魔法是什么?
  2. Firefox 发生了什么变化,现在它可以“即时”播放 MP3 音频?
  3. 什么协议用于通过 HTTP 完成流式传输?

根据我对多媒体迈克回答的理解,如果浏览器可以访问适当的编解码器,则它会“即时”处理数据。所以 Q1 的答案是提供一个包含编解码器的插件客户端,例如 FlashPlayer 或 SilverStream。换句话说,一切都归结为专有或开放的编解码器。同样,Q2 的回答是,为了符合 HTML5,Firefox 现在包括(通过欺骗或钩子)一个 MP3 编解码器。

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

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

于 2013-03-16T20:05:26.813 回答
-1

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

  • 资源
  • ipbits
  • ip
  • cpn
  • 范围
  • MV
  • 速率旁路
  • 新闻碎片
  • 钥匙
  • 因素
  • 公吨
  • 小姐
  • 活着
  • ID
  • fexp
  • 算法
  • 爆裂
  • 垃圾邮件
  • cp
  • 服务器
  • 伊塔格
  • 签名
  • 上一页
  • 到期

对于检查的所有数据包:

burst=40
algorithm=throttle-factor

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

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

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

-吉姆

于 2013-03-25T15:09:06.080 回答