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

发布于 2024-10-03 19:19:26 字数 649 浏览 6 评论 0原文

我有一个长 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 中是否可行吗?

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

多谢。

I have a long mp3 file hosted on a standard apache server (30 minutes long so far, but I would like it to work with longer sounds too).

I'd like to start playback of this audio within at a specified point.

When attempting to use Flash Actionscript 3, my basic tests show that ALL the audio from the start to the position I choose is buffered before playback (Sound.bytesLoaded was my friend here). If I start one second in, it takes about 3 seconds to start playback, 30 seconds in, takes about 25 seconds.
Obviously with a really long mp3, like skipping playback to the middle of a 3-hour audiobook, this isn't going to be practical.

Here's the ActionScript 3.0 code I'm using:

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.
} 
);

Anyone know if this is even possible in Flash?

If not, is it even possible to do this from a web page without installing any server-side solution?

Thanks a lot.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

记忆之渊 2024-10-10 19:19:26

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

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

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

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

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

As I understand it, it is a question of regular "progressive download" over HTTP vs streaming.

In a standard setup, a regular HTTP server and Flash Player cannot skip past parts of an mp3 or video, all the data up to that point has to be downloaded first, as you describe.

One way to enable skiping/seeking is using a streaming server like Adobe's Flash Media Streaming Server or the open source alternative Red5 to serve the mp3's.

But there are also ways to set up so called "pseudostreaming" on a HTTP server:

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

挽你眉间 2024-10-10 19:19:26

如今,随着 Flash 的出现,媒体片段成为了最好的选择。

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

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

Web 服务器必须支持 HTTP 范围请求才能提高效率在带宽方面。

Today, with Flash out of the equation, the media fragment is the best way to go.

Since 2012, there is a W3C specification recommendation for Media Fragments. The specification proposes a way to restrict the media resource presentation in the client to a subset of the complete media resource. While the specification mentions temporal, spacial, track and id dimensions, the ability to set an offset time for playback is the most interesting part.

Here is a blog post of mine, showing how playback from a point in time works.

The web server must support HTTP range requests to make this efficient in terms of bandwidth.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文