4

我已经设置了一个 HTML5 音频标签,其中包含两个源,一个 OGG 文件和一个 MP3 文件,如下所示:

<audio controls="controls" id="audioplayer1">
    <source src="podcast.mp3" type="audio/mpeg" />
    <source src="podcast.ogg" type="audio/ogg" />
</audio>

当在 Chrome 中播放 OGG 文件并寻找未缓冲的位置时,缓冲会在其旧位置停止并从这个新位置继续,因此播放几乎立即继续。这也适用于 Internet Explorer 9 中的 MP3 和 Firefox 14.0.1 和 Opera 12.01 build 1532 中的 OGG。但是,当在 Chrome 中播放 MP3 文件时,缓冲只是从头开始并停止播放,直到缓冲达到新的播放位置。对于大型音频文件,这可能需要一些时间。示例: http: //mvcpeer.be/uhbpmedia/web/test.html

我的服务器应该正确配置:

AddType audio/mpeg mp3
AddType audio/ogg ogg

并且支持字节范围。我比较了浏览器对 OGG 和 MP3 的请求,发现有些奇怪:

对于 OGG,Chrome 首先发出一个包含 的请求Range: bytes=0-,它会收到一个 206 响应,其中包含其标头中的总文件大小(本例中为 136.320.012 字节),如下所示:

要求

GET /audio/podcast.ogg HTTP/1.1
Host: inderdaad.be
Connection: keep-alive
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1
Accept: */*
Referer: http://mvcpeer.be/uhbpmedia/web/web.php
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Range: bytes=0-

回复

HTTP/1.1 206 Partial Content
Date: Mon, 27 Aug 2012 18:18:41 GMT
Server: Apache/2
Last-Modified: Mon, 27 Aug 2012 10:08:56 GMT
ETag: "26016c4-820140c-4c83c837ab335"
Accept-Ranges: bytes
Content-Length: 136.320.012
Vary: Accept-Encoding,User-Agent
Content-Range: bytes 0-136320011/136320012
Keep-Alive: timeout=1, max=100
Connection: Keep-Alive
Content-Type: audio/ogg

当我跳到无缓冲的位置时,对文件末尾的一小部分发出第二个请求,Range:然后属性为bytes=136241821-136255487(可能对于某些元数据,响应为 200),然后是第三个Range:设置为的请求bytes=37340471-136242175(响应 206 )。缓冲现在从这一点开始。

但是对于 MP3,Chrome 只发出一个包含Range: bytes=0-. 当我寻找一个无缓冲的位置时,没有第二个或第三个请求,因此缓冲不能从寻找点开始。

这是 Chrome 的问题吗?(使用 Chrome 21.0.1180.83 m)

非常感谢!

4

0 回答 0