我已经设置了一个 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)
非常感谢!