我已经设置了一个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中的OGG&amp; Opera 12.01 build 1532.然而,当在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字节),如下所示:
REQUEST
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-
RESPONSE
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)
非常感谢!