这是一个很好的问题,bluesm
。您完全正确地指出Sergey K
,平台对 ogg/vorbis 的支持与浏览器支持不同。您正在寻找的是对 HTML5 规范定义的音频和视频标签支持的支持,以及特定于各种媒体格式的解码器的实现。
根据此页面http://hpr.dogphilosophy.net/test/
Android 浏览器:所有版本的 Android 都内置了 Ogg Vorbis 音频支持,但直到“Gingerbread”版本(Android 2.3)才添加对 HTML5 标签的支持。出于某种奇怪的原因,Android 浏览器报告它不支持 WebM 音频,但它确实支持。
但是,默认浏览器可能不正式支持 ogg 格式,各种 javascript 检测策略可能会报告浏览器不支持它。但是,我刚刚使用手机上的默认浏览器在该站点上进行了测试,该浏览器是 Android 2.3.7 设备(规格如下)。ogg 格式确实播放了!!
我认为您为 html5test.com 发布的链接通常是一个很好的参考,但在这种情况下,它似乎是错误的。当然,这将取决于在逐个 ROM 基础上安装的默认版本。但在我有限的测试中,Android 2.3 Gingerbread 中的默认浏览器确实支持 ogg/vorbis。
html5test 报告浏览器不支持 ogg 的原因很可能与 javascript 检测不完整有关。HTML5 音频元素支持该canPlayType
功能。您可以向它传递一个 mime 类型,以确定浏览器是否可能能够播放特定格式。
var canPlayOga = audioElement.canPlayType('audio/ogg');
var canPlayAppOgg = audioElement.canPlayType('application/ogg');
在默认浏览器(至少我正在使用的浏览器)中,这对于application/ogg返回“是” ,但对于audio/ogg返回“否” 。因此,即使浏览器可以播放 ogg 文件,它报告它不能,如果只检查audio/ogg。
为了澄清这一点,我应该指出application/ogg是一种 mime 类型,audio/ogg也是如此。浏览器使用此信息来了解特定文件的格式。在没有此信息的情况下,浏览器可以使用与文件扩展名关联的默认 mime 类型。您可能知道,<source>
标签内的<audio>
标签可以包含一个type
带有音频格式的 mime 类型的属性作为浏览器的提示:
<audio>
<source src="horse.ogg" type="audio/ogg">
<source src="horse.mp3" type="audio/mpeg">
</audio>
我的测试表明,浏览器可能无法使用audio/ogg类型分配播放它,但会使用application/ogg类型,如下所示:
<audio>
<source src="horse.ogg" type="application/ogg">
</audio>
读者可以在这里尝试他们自己的设备,并留下关于哪些工作和哪些不工作的评论:http: //hpr.dogphilosophy.net/test/