iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 2
0
Modern Web

Web x Sound - 用 Web 玩轉聲音系列 第 2

Day02 - 使用 HTML 播放音檔 - 內建播放器

  • 分享至 

  • xImage
  •  

今天先來談談怎麼用 HTML 播放音樂。

Simple Usage

內建播放器 - 單一音檔

<audio src="https://s3-ap-northeast-1.amazonaws.com/dazedbear-assets/Bluebird.mp3" controls>
	<h3>遇到不支援的瀏覽器會出現這行字</h3>
</audio>

Demo on CodePen

attribute description example
autoplay 自動播放 <audio autoplay>
controls 顯示瀏覽器預設的播放器 <audio controls>
crossorigin 跨網域存取 (cors),值可以為 anonymous (request 不夾帶 cookie、X.509 憑證) / use-credentials <audio crossorigin="use-credentials">
loop 循環播放 <audio loop>
muted 靜音 <audio muted>
preload 是否預先載入音檔,分成 none(不預先載入) / metadata(只載入必要資訊) / auto (套用瀏覽器預設行為,各家都不一樣) <audio preload="auto">

這是最簡單的使用方式, <audio> 一定有開始、結尾標籤,標籤裡面是 fallback 顯示的內容,當瀏覽器不支援 render audio 標籤、或是無法解析播放檔案時顯示。

內建播放器 - fallback

每個瀏覽器支援的音檔格式不同,比較保險的做法是多給幾種檔案類型,讓瀏覽器自己選擇可以處理的音檔,這時候就需要 <source> 標籤。

<audio controls>
	<source src="https://s3-ap-northeast-1.amazonaws.com/dazedbear-assets/Bluebird.flac">
	<source src="https://s3-ap-northeast-1.amazonaws.com/dazedbear-assets/Bluebird.wav" type="audio/wav">
	<source src="https://s3-ap-northeast-1.amazonaws.com/dazedbear-assets/Bluebird.mp3" type="audio/mpeg">
	遇到不支援的瀏覽器會出現這行字
</audio>

Demo on CodePen

attribute description example
src 檔案路徑 <source src="...">
type 說明檔案格式 (斜線前面) 與 codec (斜線後面) <source type="audio/wav">

解析順序是由上到下,取第一個能成功解析者下載與播放。使用不同瀏覽器預覽 demo,從開發者工具可以發現瀏覽器自己下載了能解析的檔案類型。(而且每家瀏覽器內建播放器都長不一樣)

Firefox 62.0.2
Firefox 62.0.2

Edge 17
Edge 17

Chroem 69
Chroem 69

瀏覽器用 type 屬性判斷是否支援檔案格式,如果判斷不支援就不會試圖下載檔案,直接檢查下一個 <source>。如果沒有提供 type ,瀏覽器會試圖下載檔案,透過 response 的 content-type 判斷是否支援,不支援就檢查下一個 <source>

舉 IE 11 當例子,下面兩張圖分別為有無提供 type 的 request 行為,可以看到沒有提供 type 的情況下,IE 11 會先下載 flac 判斷不支援,再檢查下一個。

IE 11
IE 11 source 有加 type

IE wothout type
IE 11 source 沒有加 type

至於各家瀏覽器支援的格式,可以從下面查詢,這部分日後會再細談:


今天時間不夠就先到這邊吧!明天再來談談怎麼自製一個播放器。

Reference


上一篇
Day01 - Introduction
下一篇
Day03 - 使用 HTML 播放音檔 - 自製播放器 (1)
系列文
Web x Sound - 用 Web 玩轉聲音13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言