25. 媒體元素 (Media Elements)

HTML 提供原生元素,讓網頁直接播放音訊及影片。

主要媒體元素包括:

元素用途
<audio>嵌入音訊
<video>嵌入影片
<source>提供替代媒體資源
<track>提供字幕等定時文字
<video controls width="640">
  <source src="media/html-introduction.mp4" type="video/mp4">
  <track
    src="media/html-introduction-zh-Hant.vtt"
    kind="captions"
    srclang="zh-Hant"
    label="繁體中文"
    default
  >
  你的瀏覽器不支援嵌入影片。
</video>

提供無障礙替代內容,讓訪客自行控制播放,並考慮下載大小及瀏覽器相容性。

25.1 <audio> 元素

錄音、音樂、口頭說明及其他聲音內容可以使用 <audio>:

<audio controls src="media/course-introduction.mp3">
  你的瀏覽器不支援嵌入音訊。
</audio>

controls 要求瀏覽器提供播放介面。

視乎瀏覽器,介面可能包括:

  • 播放及暫停。
  • 跳至其他播放位置。
  • 音量調整。
  • 播放速度。
  • 其他播放選項。

沒有 controls 時,音訊元素不會提供一般可見的播放介面。你需要提供其他無障礙操作方式。

<audio> 不是空元素,需要結束標籤。

25.2 <video> 元素

使用 <video> 嵌入影片:

<video
  controls
  width="640"
  height="360"
  poster="images/html-introduction-poster.jpg"
>
  <source src="media/html-introduction.mp4" type="video/mp4">
  你的瀏覽器不支援嵌入影片。
</video>

在這個例子中:

  • controls 提供原生播放控制項。
  • width 和 height 設定顯示尺寸。
  • poster 提供適用情況下在影片播放前顯示的圖片。
  • <source> 識別媒體檔案。

預覽圖片不能取代字幕、文字稿或重要視覺資訊的描述。

與 <img> 不同,<video> 不使用 alt 屬性提供無障礙替代內容。

25.3 常見媒體屬性

音訊及影片都支援多個播放相關屬性:

屬性用途
src媒體資源 URL
controls要求提供原生播放控制項
preload建議初始載入多少媒體資料
autoplay要求自動播放
loop重複播放
muted設定初始靜音狀態
crossorigin設定跨來源資源請求方式

影片也支援:

屬性用途
poster播放前顯示的圖片
width / height顯示尺寸
playsinline要求在網頁內播放,而不是自動進入全螢幕

布林屬性只要存在,就表示啟用:

<!-- 這仍然會要求自動播放。 -->
<video autoplay="false"></video>

如果不想要求自動播放,應移除該屬性。

25.4 提供多個來源

使用 <source> 提供替代媒體檔案:

<audio controls preload="metadata">
  <source src="media/course-introduction.mp3" type="audio/mpeg">
  <source src="media/course-introduction.ogg" type="audio/ogg">
  你的瀏覽器不支援嵌入音訊。
</audio>

影片範例:

<video controls preload="metadata">
  <source src="media/html-introduction.webm" type="video/webm">
  <source src="media/html-introduction.mp4" type="video/mp4">
  你的瀏覽器不支援嵌入影片。
</video>

瀏覽器按文件次序考慮來源,並嘗試選擇適合的資源。

type 有助瀏覽器在下載每個檔案之前判斷支援情況。

應選擇以下其中一種方式:

  • 在媒體元素上使用 src。
  • 使用子 <source> 元素選擇來源。

不要同時使用兩者,並期望子來源會成為媒體元素自身 src 的替代來源。

<source> 是空元素,沒有結束標籤。

25.5 容器格式、編解碼器與相容性

媒體檔案的副檔名不能完整描述其內容。

兩個重要概念是:

  • 容器格式(container):封裝媒體串流及中繼資料,例如 MP4 或 WebM。
  • 編解碼器(codec):編碼及解碼音訊或影片串流。

MP4 檔案可以包含不同編解碼器,並非每個瀏覽器都支援所有組合。

來源類型可以包含編解碼器資訊:

<source
  src="media/html-introduction.mp4"
  type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'
>

只應指定與實際檔案相符的編解碼器資訊。

應在目標使用者的瀏覽器及裝置上測試媒體。支援情況可能取決於瀏覽器、作業系統及可用的解碼能力。

25.6 字幕與 <track> 元素

使用 <track> 將定時文字與媒體關聯:

<video controls>
  <source src="media/html-introduction.mp4" type="video/mp4">

  <track
    src="media/html-introduction-zh-Hant.vtt"
    kind="captions"
    srclang="zh-Hant"
    label="繁體中文"
    default
  >
</video>

重要屬性包括:

屬性用途
src定時文字檔案 URL
kind文字軌類型
srclang文字軌語言
label顯示給使用者的文字軌名稱
default要求在適當情況下預設啟用此文字軌

常見文字軌類型包括:

類型用途
captions對白及相關非語音聲音
subtitles對白轉錄或翻譯
descriptions視覺資訊的文字描述
chapters供導覽使用的章節標題
metadata供應用程式使用的資料

無障礙字幕應按需要包含重要聲音及說話者身分,而不只是說話內容。

不同文字軌類型的顯示及使用支援有所不同。尤其是 descriptions 文字軌,不能可靠地取代附有口述影像的版本。

<track> 是空元素,沒有結束標籤。

25.7 編寫 WebVTT 檔案

HTML 文字軌通常使用 WebVTT 檔案。

簡單字幕檔案如下:

WEBVTT

00:00:00.000 --> 00:00:03.500
歡迎觀看 HTML 入門介紹。

00:00:03.500 --> 00:00:07.000
今天我們會建立一個簡單網頁。

00:00:07.000 --> 00:00:09.500
[鍵盤打字聲]

檔案包含:

  • WEBVTT 標頭。
  • 開始及結束時間戳記。
  • 字幕文字。
  • 分隔字幕項目的空白行。

使用 UTF-8 儲存檔案,並以適當的 text/vtt 媒體類型提供。

應檢查時間、準確性、可讀性及說話者識別。自動產生的字幕應經過檢查及修正。

25.8 文字稿與視覺描述

文字稿為音訊內容提供文字替代:

<audio controls src="media/course-introduction.mp3"></audio>

<section aria-labelledby="audio-transcript-heading">
  <h2 id="audio-transcript-heading">音訊文字稿</h2>
  <p>歡迎參加 HTML 課程。不需要任何相關經驗。</p>
</section>

影片的描述性文字稿可以同時包含說話內容及必要視覺資訊。

例如:

講者建立名為 index.html 的檔案,然後輸入標題及段落。

視乎內容及適用的無障礙要求,影片也可能需要口述影像或附有口述影像的版本。

應分別考慮不同需要:

  • 字幕提供相關聲音資訊。
  • 描述提供重要視覺資訊。
  • 文字稿提供可閱讀的替代內容。

對具有重要音訊的影片,單靠文字稿不能取代同步字幕。

25.9 後備內容與錯誤處理

<audio> 或 <video> 內的內容,可以為不支援該元素的瀏覽器提供後備文字:

<video controls>
  <source src="media/html-introduction.mp4" type="video/mp4">
  你的瀏覽器不支援嵌入影片。
</video>

不過,支援播放器的瀏覽器如果無法載入或解碼檔案,後備文字不是可靠的錯誤訊息。

應在媒體元素之外提供有用替代方式:

<p>
  <a href="media/html-introduction.mp4">開啟影片檔案</a>
  或<a href="#video-transcript">閱讀文字稿</a>。
</p>

即使播放器存在但播放失敗,這些替代方式仍然可用。

25.10 自動播放、靜音與動態內容

避免自動播放聲音。

自動播放可能:

  • 打斷閱讀或螢幕閱讀器操作。
  • 令訪客感到意外。
  • 消耗不必要的流動數據。
  • 在共用或安靜環境中造成困擾。

瀏覽器通常限制有聲音的自動播放。靜音影片可能獲准播放,但政策各有不同。

<video autoplay muted loop playsinline>
  <source src="media/decorative-background.mp4" type="video/mp4">
</video>

這些屬性只是要求行為,不保證一定播放。

對非必要的動態內容:

  • 考慮改用靜態圖片。
  • 尊重減少動態效果的偏好。
  • 按需要提供無障礙暫停或停止方式。
  • 避免閃爍內容。

將影片靜音,不代表其動態內容已符合無障礙需要。

25.11 載入與響應式尺寸

preload 是載入提示:

值意思
none建議避免預先載入媒體
metadata建議載入時長等資訊
auto允許更廣泛地預先載入
<video controls preload="metadata">
  <source src="media/html-introduction.mp4" type="video/mp4">
</video>

瀏覽器可以忽略或調整這個提示。自動播放也可能導致額外載入。

響應式影片:

video {
  display: block;
  max-width: 100%;
  height: auto;
}

音訊:

audio {
  display: block;
  width: 100%;
}

不要裁切教學影片而隱藏重要內容。應適當壓縮媒體,並避免不必要地載入大型檔案。

25.12 原生媒體與嵌入式播放器

<audio> 和 <video> 播放瀏覽器可以直接存取的媒體資源。

影片平台網頁通常不能作為影片來源:

<!-- 播放器網頁不是直接媒體檔案。 -->
<video src="video-player.html" controls></video>

第三方播放器通常使用 <iframe> 嵌入,建立獨立的瀏覽環境。

這類嵌入內容需要額外考慮:

  • 框架標題。
  • 鍵盤操作。
  • 字幕及播放器無障礙功能。
  • 私隱及追蹤。
  • 權限及安全。
  • 效能。

這些問題與原生音訊及影片播放有所不同。

25.13 完整範例:附有文字替代的音訊與影片

以下可重用網頁包含原生播放器、繁體中文字幕軌,以及可見文字稿。

媒體路徑只是範例。 請在指定位置加入自己的錄音、影片、預覽圖片及字幕檔案。文字稿也必須更新,與實際錄製內容相符。

id: hong-kong-html-media-elements
name: 媒體元素 — 無障礙音訊與影片範本
type: html
content: |-
  <!doctype html>
  <html lang="zh-Hant-HK">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>媒體元素 | HTML 入門介紹</title>
    <style>
      *,
      *::before,
      *::after {
        box-sizing: border-box;
      }

      body {
        margin: 0;
        color: #222;
        background: #f5f7fa;
        font-family: system-ui, sans-serif;
        line-height: 1.8;
      }

      main {
        max-width: 48rem;
        margin-inline: auto;
        padding: 2rem 1rem;
      }

      h1,
      h2,
      h3 {
        color: #005ea8;
        line-height: 1.4;
      }

      .media-section {
        margin-block: 1.5rem;
        padding: 1.25rem;
        border: 1px solid #767676;
        border-radius: 0.5rem;
        background: white;
      }

      .media-section > h2 {
        margin-block-start: 0;
      }

      figure {
        margin: 1rem 0;
      }

      video {
        display: block;
        width: 100%;
        height: auto;
        background: #222;
      }

      audio {
        display: block;
        width: 100%;
      }

      figcaption {
        margin-block-start: 0.75rem;
      }

      .note {
        padding: 1rem;
        border-inline-start: 4px solid #005ea8;
        background: #eaf2f8;
      }

      .transcript {
        margin-block-start: 1.5rem;
        padding-block-start: 1rem;
        border-block-start: 1px solid #767676;
      }

      a {
        color: #005ea8;
        text-decoration: underline;
        text-underline-offset: 0.2em;
      }

      :focus-visible {
        outline: 3px solid #005ea8;
        outline-offset: 3px;
      }

      [id] {
        scroll-margin-block-start: 1rem;
      }
    </style>
  </head>
  <body>
    <main>
      <h1>HTML 入門介紹:媒體範本</h1>

      <p class="note">
        這個範本需要你提供自己的媒體檔案。
        請替換範例資源,並確保字幕及文字稿
        準確對應錄製內容。
      </p>

      <p>
        請提供與錄音及影片內容相符的字幕和文字稿。
        使用者應能自行控制播放。
      </p>

      <section class="media-section">
        <h2 id="audio-heading">音訊介紹</h2>

        <audio
          controls
          preload="none"
          aria-labelledby="audio-heading"
        >
          <source
            src="media/course-introduction.mp3"
            type="audio/mpeg"
          >
          你的瀏覽器不支援嵌入音訊。
        </audio>

        <p>
          <a href="media/course-introduction.mp3">
            開啟音訊檔案
          </a>
          或
          <a href="#audio-transcript-heading">
            閱讀音訊文字稿
          </a>。
        </p>

        <section class="transcript">
          <h3 id="audio-transcript-heading">音訊文字稿</h3>
          <p>
            範例講稿:歡迎參加 HTML 課程。
            不需要任何相關經驗。
            我們會先建立一個簡單網頁。
          </p>
        </section>
      </section>

      <section class="media-section">
        <h2 id="video-heading">建立第一個 HTML 檔案</h2>

        <figure>
          <video
            controls
            playsinline
            preload="none"
            width="640"
            height="360"
            poster="images/html-introduction-poster.jpg"
            aria-labelledby="video-heading"
          >
            <source
              src="media/html-introduction.mp4"
              type="video/mp4"
            >
            <source
              src="media/html-introduction.webm"
              type="video/webm"
            >
            <track
              src="media/html-introduction-zh-Hant.vtt"
              kind="captions"
              srclang="zh-Hant"
              label="繁體中文"
              default
            >
            你的瀏覽器不支援嵌入影片。
          </video>

          <figcaption>
            附有繁體中文字幕的入門示範。
          </figcaption>
        </figure>

        <p>
          <a href="media/html-introduction.mp4">
            開啟 MP4 影片
          </a>
          或
          <a href="#video-transcript-heading">
            閱讀描述性文字稿
          </a>。
        </p>

        <section class="transcript">
          <h3 id="video-transcript-heading">
            影片描述性文字稿
          </h3>
          <p>
            範例講稿:講者開啟程式碼編輯器,
            並建立名為 index.html 的檔案。
          </p>
          <p>
            講者:「今天我們會建立一個簡單網頁。」
          </p>
          <p>
            講者輸入標題及段落,儲存檔案,
            然後在瀏覽器中開啟。
          </p>
        </section>
      </section>
    </main>
  </body>
  </html>

在這個範例中:

  • 原生控制項讓訪客操作播放。
  • 媒體不會自動播放。
  • preload="none" 建議避免初始媒體下載。
  • 影片包含字幕軌。
  • 可見文字稿位於播放器之外,保持可用。
  • 連結提供媒體檔案的直接存取。
  • CSS 讓影片保持在可用寬度之內。
  • 不需要 JavaScript。

影片的 width 及 height 假設錄製比例為 16:9。應按實際媒體調整。

25.14 常見錯誤

錯誤較好的做法
嵌入媒體卻沒有播放控制項提供原生或無障礙自訂控制項
自動播放聲音讓訪客自行開始播放
以為自動播放一定成功考慮瀏覽器限制
使用播放器網頁作為影片來源使用直接媒體資源或適當嵌入方式
以為副檔名保證相容性檢查容器格式、編解碼器及目標瀏覽器
提供未經檢查的自動字幕修正時間及內容
將對白字幕當成完整無障礙字幕包含相關聲音及說話者資訊
只使用後備文字處理載入失敗在播放器之外提供替代方式
為影片加入 alt,而不是提供無障礙替代內容按需要提供字幕、文字稿及描述
以為 preload 是嚴格載入規則將它視為瀏覽器提示
裁切重要教學內容保留必要視覺資訊
發布與錄製內容不符的文字稿保持替代內容準確,並與媒體內容同步更新

本章總結: 使用 <audio> 和 <video> 提供原生播放,使用 <source> 提供替代資源,並使用 <track> 提供定時文字。讓使用者控制播放,提供準確字幕及文字稿、適當視覺描述,以及能在目標瀏覽器和裝置上運作的媒體。

Scroll to Top