HTML 音频

前言

  • 声音在 HTML 中可以以不同的方式播放。

  • 直到现在,仍然不存在一项旨在网页上播放音频的标准。

  • 今天,大多数音频是通过插件(比如 Flash)来播放的。然而,并非所有浏览器都拥有同样的插件。

  • HTML5 规定了在网页上嵌入音频元素的标准,即使用 audio 元素。

1、多媒体标签

标签 描述 备注 🔗
<embed /> 定义内嵌对象。HTML4 中不赞成,HTML5 中允许 H5 新加 🔗
<object> </object> 定义内嵌对象 🔗
<param /> 定义对象的参数 🔗
<audio> </audio> 定义了声音内容 H5 新加 🔗
<video> </video> 定义一个视频或者影片 H5 新加 🔗
<source /> 定义了 media 元素的多媒体资源(<video><audio>) H5 新加 🔗
<track /> 规定 media 元素的字幕文件或其他包含文本的文件 (<video><audio>) H5 新加 🔗

2、内联的声音说明

  • 当您在网页中包含声音,或者作为网页的组成部分时,它被称为内联声音。

  • 如果您打算在 web 应用程序中使用内联声音,您需要意识到很多人都觉得内联声音令人恼火。同时请注意,用户可能已经关闭了浏览器中的内联声音选项。

  • 我们最好的建议是只在用户希望听到内联声音的地方包含它们。一个正面的例子是,在用户需要听到录音并点击某个链接时,会打开页面然后播放录音。

3、音频格式

  • 目前 <audio> 元素支持三种音频格式文件: MP3,Wav 和 Ogg。
格式 MIME-type 描述
MP3 audio/mpeg
Ogg audio/ogg
Wav audio/wav
  • 浏览器对视频格式的支持
浏览器
MP3 YES YES YES YES YES
Wav YES NO YES YES YES
Ogg YES NO YES NO YES

4、属性

4.1 < audio > 标签属性

属性 描述 备注 🔗
autoplay autoplay 如果出现该属性,则音频在就绪后马上播放 H5 新加 🔗
controls controls 如果出现该属性,则向用户显示音频控件(比如播放/暂停按钮) H5 新加 🔗
loop loop 如果出现该属性,则每当音频结束时重新开始播放 H5 新加 🔗
muted muted 如果出现该属性,则音频输出为静音 H5 新加 🔗
preload auto
metadata
none
规定当网页加载时,音频是否默认被加载以及如何被加载 H5 新加 🔗
src URL 规定音频文件的 URL H5 新加 🔗

4.2 < source > 标签属性

属性 描述 备注 🔗
media media_query 规定媒体资源的类型,供浏览器决定是否下载 H5 新加 🔗
src URL 规定媒体文件的 URL H5 新加 🔗
type MIME_type 规定媒体资源的 MIME 类型 H5 新加 🔗

4.3 < track > 标签属性

属性 描述 备注 🔗
default default 规定该轨道是默认的。如果用户没有选择任何轨道,则使用默认轨道 H5 新加 🔗
kind captions
chapters
descriptions
metadata
subtitles
规定文本轨道的文本类型 H5 新加 🔗
label text 规定文本轨道的标签和标题 H5 新加 🔗
src URL 必需的。规定轨道文件的 URL H5 新加 🔗
srclang language_code 规定轨道文本数据的语言。如果 kind 属性值是 “subtitles”,则该属性是必需的 H5 新加 🔗

5、播放音频

  • 在 HTML 中播放音频并不容易!

  • 需要谙熟大量技巧,以确保您的音频文件在所有浏览器中(Internet Explorer, Chrome, Firefox, Safari, Opera)和所有硬件上(PC, Mac , iPad, iPhone)都能够播放。

  • 在本章,总结了问题和解决方法。

5.1 使用 < embed > 标签

  • <embed> 标签定义外部(非 HTML)内容的容器。这是一个 HTML5 标签,在 HTML4 中是非法的,但是所有浏览器中都有效。

  • 下面的代码片段能够显示嵌入网页中的 MP3 文件。

  • 示例

    1
    <embed src="https://demo.qianchia.com/media/audio/demo1.mp3" width="300" height="150" />
  • 效果

  • 问题

    • <embed> 标签在 HTML 4 中是无效的。页面无法通过 HTML 4 验证。
    • 不同的浏览器对音频格式的支持也不同。
    • 如果浏览器不支持该文件格式,没有插件的话就无法播放该音频。
    • 如果用户的计算机未安装插件,无法播放音频。
    • 如果把该文件转换为其他格式,仍然无法在所有浏览器中播放。

5.2 使用 < object > 标签

  • <object> 标签也可以定义外部(非 HTML)内容的容器。

  • 下面的代码片段能够显示嵌入网页中的 MP3 文件。

  • 示例

    1
    <object data="https://demo.qianchia.com/media/audio/demo1.mp3" width="300" height="150"></object>
  • 效果

  • 问题

    • 不同的浏览器对音频格式的支持也不同。
    • 如果浏览器不支持该文件格式,没有插件的话就无法播放该音频。
    • 如果用户的计算机未安装插件,无法播放音频。
    • 如果把该文件转换为其他格式,仍然无法在所有浏览器中播放。

5.3 使用 < audio > 标签

  • HTML5 <audio> 标签定义了一个音频。

  • <audio> 元素在所有现代浏览器中都支持。

  • 以下我们将使用 <audio> 标签来描述 MP3 文件(Internet Explorer、Chrome 以及 Safari 中是有效的),同样添加了一个 OGG 类型文件(Firefox 和 Opera 浏览器中有效)。

  • 示例

    1
    2
    3
    4
    5
    6
    <audio controls>
    <source src="https://demo.qianchia.com/media/audio/demo1.mp3" type="audio/mpeg" />
    <source src="https://demo.qianchia.com/media/audio/demo2.ogg" type="audio/ogg" />

    您的浏览器不支持 HTML5 audio 标签。
    </audio>
  • 效果

  • 解析

    • controls 属性供添加播放、暂停和音量控件。
    • <audio></audio> 之间你需要插入浏览器不支持的 <audio> 元素的提示文本。
    • <audio> 元素允许使用多个 <source> 元素。<source> 元素可以链接不同的音频文件,浏览器将使用第一个支持的音频文件。
  • 问题

    • <audio> 标签在 HTML 4 中是无效的。您的页面无法通过 HTML 4 验证。
    • 您必须把音频文件转换为不同的格式。
    • <audio> 元素在老式浏览器中不起作用。

5.4 最好的 HTML 解决方法

  • 下面的例子使用了两个不同的音频格式。HTML5 <audio> 元素会尝试以 mp3 或 ogg 来播放音频。如果失败,代码将回退尝试 <embed> 元素。

  • 示例

    1
    2
    3
    4
    5
    6
    7
    8
    <audio controls>
    <source src="https://demo.qianchia.com/media/audio/demo1.mp3" type="audio/mpeg" />
    <source src="https://demo.qianchia.com/media/audio/demo2.ogg" type="audio/ogg" />

    <object data="https://demo.qianchia.com/media/audio/demo1.mp3" width="300" height="150">
    <embed src="https://demo.qianchia.com/media/audio/demo1.mp3" width="300" height="150" />
    </object>
    </audio>
  • 效果

  • 问题

    • 必须把音频转换为不同的格式。
    • <embed> 元素无法回退来显示错误消息。

5.5 使用超链接

  • 如果网页包含指向媒体文件的超链接,大多数浏览器会使用 “辅助应用程序” 来播放文件。

  • 以下代码片段显示指向 mp3 文件的链接。如果用户点击该链接,浏览器会启动”辅助应用程序”,来播放该文件。

  • 示例

    1
    <a href="https://demo.qianchia.com/media/audio/demo1.mp3">播放音频文件</a>
  • 效果

    播放音频文件

5.6 使用插件

  • 浏览器插件是一种扩展浏览器标准功能的小型计算机程序。

  • 插件可以使用 <object> 标签 或者 <embed> 标签添加在页面上。

  • 这些标签定义资源(通常非 HTML 资源)的容器,根据类型,它们即会由浏览器显示,也会由外部插件显示。

6、DOM 属性、方法、事件

  • HTML5 DOM 为 <audio><video> 元素提供了方法、属性和事件。

  • 这些方法、属性和事件允许您使用 JavaScript 来操作 <audio><video> 元素。

6.1 音频/视频 属性

属性 描述 备注 🔗
audioTracks 返回表示可用音频轨道的 AudioTrackList 对象 🔗
autoplay 设置或返回是否在加载完成后随即播放音频/视频 🔗
buffered 返回表示音频/视频已缓冲部分的 TimeRanges 对象 🔗
controller 返回表示音频/视频当前媒体控制器的 MediaController 对象 🔗
controls 设置或返回音频/视频是否显示控件(比如播放/暂停等) 🔗
crossOrigin 设置或返回音频/视频的 CORS 设置
currentSrc 返回当前音频/视频的 URL 🔗
currentTime 设置或返回音频/视频中的当前播放位置(以秒计) 🔗
defaultMuted 设置或返回音频/视频默认是否静音 🔗
defaultPlaybackRate 设置或返回音频/视频的默认播放速度 🔗
duration 返回当前音频/视频的长度(以秒计) 🔗
ended 返回音频/视频的播放是否已结束 🔗
error 返回表示音频/视频错误状态的 MediaError 对象 🔗
loop 设置或返回音频/视频是否应在结束时重新播放 🔗
mediaGroup 设置或返回音频/视频所属的组合(用于连接多个音频/视频元素) 🔗
muted 设置或返回音频/视频是否静音 🔗
networkState 返回音频/视频的当前网络状态 🔗
paused 设置或返回音频/视频是否暂停 🔗
playbackRate 设置或返回音频/视频播放的速度 🔗
played 返回表示音频/视频已播放部分的 TimeRanges 对象 🔗
preload 设置或返回音频/视频是否应该在页面加载后进行加载 🔗
readyState 返回音频/视频当前的就绪状态 🔗
seekable 返回表示音频/视频可寻址部分的 TimeRanges 对象 🔗
seeking 返回用户是否正在音频/视频中进行查找 🔗
src 设置或返回音频/视频元素的当前来源 🔗
startDate 返回表示当前时间偏移的 Date 对象 🔗
textTracks 返回表示可用文本轨道的 TextTrackList 对象 🔗
videoTracks 返回表示可用视频轨道的 VideoTrackList 对象 🔗
volume 设置或返回音频/视频的音量 🔗

6.2 音频/视频 方法

方法 描述 备注 🔗
addTextTrack() 向音频/视频添加新的文本轨道 🔗
canPlayType() 检测浏览器是否能播放指定的音频/视频类型 🔗
load() 重新加载音频/视频元素 🔗
play() 开始播放音频/视频 🔗
pause() 暂停当前播放的音频/视频 🔗

6.3 音频/视频 事件

事件 描述 备注 🔗
abort 当音频/视频的加载已放弃时触发 🔗
canplay 当浏览器可以开始播放音频/视频时触发 🔗
canplaythrough 当浏览器可在不因缓冲而停顿的情况下进行播放时触发 🔗
durationchange 当音频/视频的时长已更改时触发 🔗
emptied 当目前的播放列表为空时触发
ended 当目前的播放列表已结束时触发 🔗
error 当在音频/视频加载期间发生错误时触发 🔗
loadeddata 当浏览器已加载音频/视频的当前帧时触发 🔗
loadedmetadata 当浏览器已加载音频/视频的元数据时触发 🔗
loadstart 当浏览器开始查找音频/视频时触发 🔗
pause 当音频/视频已暂停时触发 🔗
play 当音频/视频已开始或不再暂停时触发 🔗
playing 当音频/视频在因缓冲而暂停或停止后已就绪时触发 🔗
progress 当浏览器正在下载音频/视频时触发 🔗
ratechange 当音频/视频的播放速度已更改时触发 🔗
seeked 当用户已移动/跳跃到音频/视频中的新位置时触发 🔗
seeking 当用户开始移动/跳跃到音频/视频中的新位置时触发 🔗
stalled 当浏览器尝试获取媒体数据,但数据不可用时触发 🔗
suspend 当浏览器刻意不获取媒体数据时触发 🔗
timeupdate 当目前的播放位置已更改时触发 🔗
volumechange 当音量已更改时触发 🔗
waiting 当视频由于需要缓冲下一帧而停止时触发 🔗

7、浏览器支持

元素
audio 支持 9.0 支持 支持 支持
  • 表格中的数字表示支持该元素的第一个浏览器版本号。
文章目录
  1. 1. 前言
  2. 2. 1、多媒体标签
  3. 3. 2、内联的声音说明
  4. 4. 3、音频格式
  5. 5. 4、属性
    1. 5.1. 4.1 < audio > 标签属性
    2. 5.2. 4.2 < source > 标签属性
    3. 5.3. 4.3 < track > 标签属性
  6. 6. 5、播放音频
    1. 6.1. 5.1 使用 < embed > 标签
    2. 6.2. 5.2 使用 < object > 标签
    3. 6.3. 5.3 使用 < audio > 标签
    4. 6.4. 5.4 最好的 HTML 解决方法
    5. 6.5. 5.5 使用超链接
    6. 6.6. 5.6 使用插件
  7. 7. 6、DOM 属性、方法、事件
    1. 7.1. 6.1 音频/视频 属性
    2. 7.2. 6.2 音频/视频 方法
    3. 7.3. 6.3 音频/视频 事件
  8. 8. 7、浏览器支持
隐藏目录