HTML:如何从 URL 中间文件开始声音播放,而不缓冲该点的所有声音数据

问题描述 投票:0回答:2

我有一个很长的 mp3 文件托管在标准 apache 服务器上(到目前为止长 30 分钟,但我希望它也能处理更长的声音)。

我想在指定点开始播放此音频。

当尝试使用 Flash Actionscript 3 时,我的基本测试表明,从开始到我选择的位置的所有音频都会在播放前进行缓冲(Sound.bytesLoaded 是我的朋友)。 如果我开始1秒,大约需要3秒才能开始播放,30秒开始,大约需要25秒。 显然,对于很长的 mp3,比如跳到 3 小时有声读物的中间播放,这是不切实际的。

这是我正在使用的 ActionScript 3.0 代码:

button.addEventListener(MouseEvent.MOUSE_DOWN, function():void {
 var s:Sound = new Sound(); 
 var req:URLRequest = new URLRequest("http://example.com/audio.mp3"); 
 s.load(req); 
 s.play(30 * 60 * 1000); // start 30 seconds in.
} 
);

有人知道这在 Flash 中是否可行吗?

如果没有,是否可以在不安装任何服务器端解决方案的情况下从网页执行此操作?

非常感谢。

actionscript-3 html audio buffer html5-audio
2个回答
1
投票

据我了解,这是一个通过 HTTP 与流媒体进行常规“渐进式下载”的问题。

在标准设置中,常规 HTTP 服务器和 Flash Player 无法跳过 mp3 或视频的过去部分,必须首先下载该点之前的所有数据,正如您所描述的。

启用跳过/搜索的一种方法是使用流媒体服务器,例如 Adobe 的 Flash Media Streaming Server 或开源替代方案 Red5 来提供 mp3 服务。

但是也有一些方法可以在 HTTP 服务器上设置所谓的“伪流”:

http://flowplayer.org/plugins/streaming/pseudostreaming.html


0
投票

如今,随着 Flash 的出现,媒体片段如果得到流媒体服务器的支持,将是最好的选择。

自 2012 年起,W3C 就有了 Media Fragments 规范推荐。该规范提出了一种将客户端中的媒体资源呈现限制为完整媒体资源的子集的方法。虽然规范提到了时间、空间、轨道和 ID 维度,但设置播放偏移时间的能力是最有趣的部分。

这是我的一篇博客文章,展示了从某个时间点播放是如何工作的。

Web 服务器必须支持 HTTP 范围请求,以提高带宽效率。

© www.soinside.com 2019 - 2024. All rights reserved.