HTML / Element / Initial coverage

<video>要素

状態: 初期Coverage 対象: HTML Living Standard 仕様確認日: 2026-09-24

Technical Summary

videoは、動画データを文書内で再生するembedded content要素であり、共通のHTMLMediaElement処理モデルに参加します。要素固有のposter・動画寸法・playsinlineに加えて、resource選択、network / ready state、再生、seek、時間付きtext trackを関連付けて読む必要があります。

src属性の有無でcontent modelが変わります。play()はPromiseを返し、再生が許可されない場合はNotAllowedErrorでrejectされ得ます。標準の処理モデル、ブラウザーのmedia policy、ファイル・codec対応、native controls、アクセシビリティAPIの観測は別々のEvidenceとして扱います。

Definition / Categories

項目定義
意味動画、必要に応じて関連する音声・text trackを持つmedia resourceを再生する
CategoriesFlow、Phrasing、Embedded、Palpable content。controls属性があればInteractive content
ContextEmbedded contentが期待される場所
Content modelsrcがある場合とない場合で、source・track・transparent contentの順序が異なる
Tag omission開始タグ・終了タグとも省略不可
Content attributesグローバル属性、共通media属性、poster、playsinline、width、height、loading
DOM interfaceHTMLVideoElement。HTMLMediaElementを継承

Content modelとresource selection

videoにsrc属性があるかどうかで、許される子要素の順序が分かれます。どちらの形でも、最後のtransparent contentに子孫media elementを置くことはできません。

条件子要素のモデル
srcあり0個以上のtrack、続いてtransparent content。sourceは置かない
srcなし0個以上のsource、0個以上のtrack、続いてtransparent content
<video controls width="640" height="360" poster="/media/lesson.jpg">
  <source src="/media/lesson.webm" type="video/webm">
  <source src="/media/lesson.mp4" type="video/mp4">
  <track kind="captions" src="/media/lesson.en.vtt"
         srclang="en" label="English captions" default>
  This user agent does not support the video element.
</video>

media element内のsourceは代替media resourceの候補を示します。typeが分かる場合、user agentは対応しないtypeを持つ候補を取得前に飛ばせます。ただし、container / codec / profile対応、network、CORS、server応答が合わなければ再生できる保証はありません。picture内のsourceとは選択モデルが異なります。

video内のtransparent contentは、video elementをサポートしないuser agent向けの内容です。video elementを扱うuser agentでresource取得に失敗したとき、同じfallback本文が必ず表示されるわけではありません。取得失敗時の代替が必要なら、別の直接リンクやtranscriptを用意します。

要素固有属性と共通属性

属性仕様上の役割境界
srcmedia resourceのURL指定時はsource childではなくこのURLを入口にする
postervideo dataを表示できない間に示す代表画像字幕、transcript、代替説明ではない
controlsuser agentに操作UIの表示を要求見た目・操作部品・AAM公開は実装とplatformの観測対象
preload取得するbuffer量についてのauthor hintnone・metadata・autoでも実際の取得量を断定できない
autoplay条件を満たしたときresourceの自動再生を要求user agentはautoplayをサポートする必要がなく、user preferenceを考慮し得る
muted / loopmuted stateの初期化 / 再生終了後に先頭へ戻す指定現在状態は対応するIDL属性と区別して読む
playsinline再生領域内でvideoを表示するよう促すfullscreen動作やUIを全user agentで固定する指定ではない
width / heightplayback areaの寸法属性video resourceのnatural dimensionsとは別の値
crossorigin / loadingrequest mode / loading deferralの処理に関係するresource・poster・text trackごとの取得結果を分けて観測する

posterは、video dataがない間にelementが表す画像として使われます。videoWidthとvideoHeightはvideo resourceのnatural dimensionsを返し、dataがまだないときは0です。表示領域のCSS寸法やposterの寸法と混同しません。

Network stateとready state

networkStateはresource選択・取得の段階を、readyStateは現在どれだけmedia dataを利用できるかを表します。値の意味が異なり、ひとつの単純なloading progressとしてまとめられません。

API観測するもの主な値・境界
networkStateresource selectionとdata取得NETWORK_EMPTY、NETWORK_IDLE、NETWORK_LOADING、NETWORK_NO_SOURCE
readyState現在位置のmedia dataの利用可能性HAVE_NOTHINGからHAVE_ENOUGH_DATAまで。値は飛び越して変化し得る
currentTime / durationmedia timeline上の再生位置 / resourceの長さseek、範囲外、長さ未確定、終了時点を別に扱う。長さが未確定のlive resourceはInfinityになり得る
media events取得・metadata・buffer・再生・seekなどの状態変化loadedmetadata、canplay、waiting、playing、seeking、seekedなど。固定の一連の順序とは限らない

preloadはhintで、browser cache、resource、network、user agent policyと合わせて確認します。イベント発火はmedia element taskとして処理され、ready stateが途中のすべての値を通る保証はありません。

再生要求とautoplay

HTMLMediaElement.play()はPromiseを返します。再生が許可されていない場合はNotAllowedError、対応可能なresourceが見つからない場合はNotSupportedErrorでrejectされ得ます。呼び出しだけで再生開始を断定せず、Promiseの結果とmedia eventを観測します。

const video = document.querySelector('video');

video.play().then(() => {
  console.log('playback started');
}).catch((error) => {
  console.log('playback did not start:', error.name);
});

HTML Standardはuser agentにautoplayの対応を義務付けていません。また、自動再生を使う場合も利用者が上書きできるようにし、自動再生を使わない方法を検討するようauthorsに勧めています。実装ごとのpolicy、muted条件、user activation、OS設定の結果はSPECの主張と分けて記録します。

Text trackと動画のアクセシビリティ

trackはmedia elementに外部の時間付きtext trackを関連付けます。kindにはsubtitles、captions、descriptions、chapters、metadataがあります。track cueはmedia timeline上の開始・終了時刻を持ちます。各track kindの意味、default、言語選択は本文で個別に確認し、すべてのtext trackを字幕と同一視しません。

HTML-AAMはvideoをcomputed role html-videoに対応付け、platform accessibility APIのmappingを定めています。controlsがある場合のUI公開はplatformごとに異なり得ます。仕様上のmapping、browser Accessibility Tree、platform API、支援技術での結果は同一のEvidenceではありません。

HTMLのtrackを用意することと、動画コンテンツがアクセシビリティ要件を満たすことは別の判断です。WCAG 2.2の時間依存メディア基準は、 prerecorded / live、音声・映像の情報、media alternativeとして明示されているかなどに応じて適用範囲が変わります。

DOM Interface

API概要条件・境界
width / height要素のdimension attributesCSSで計算された描画サイズとは別
videoWidth / videoHeightvideo resourceのnatural dimensionsmedia data未取得時は0
poster / playsInlineposter URL / inline再生のIDL surface反映属性の値と、実際のrender・再生挙動を分ける
play() / pause()再生・停止要求play()はPromise。成功・拒否のどちらも処理する
currentTime / duration / seekabletimeline、seek position、seekable rangelive・streaming resourceでは有限のdurationや先頭からの完全なseekを仮定しない
networkState / readyState / errorresource取得と現在の再生準備状態異なる状態機械のsurfaceとして記録する
textTracks / addTextTrack()関連text trackと追加API子track、script追加、resource内部tracksの由来を分ける

Fact / Evidence(主張 / 根拠)

HTML Standard、HTML-AAM、WCAGに基づく主張と適用条件を示します。ブラウザー挙動の実測は下のImplementation Evidenceに分け、未実施の項目は確認済みとは扱いません。

主要Factと根拠位置
種別Fact / 主張条件・範囲状態根拠
SPECvideoはFlow・Phrasing・Embedded・Palpable contentであり、controlsがあればInteractive contentにも属します。embedded contentが期待される場所で使用。DOM interfaceはHTMLVideoElement。確認済みHTML Standard: the video element
SPECsrc属性の有無がsource・track・transparent contentの順序を決めます。srcがあるcontent modelではsource childは含まれず、いずれのmodelも子孫media elementを除外します。確認済みHTML Standard: video content model
SPECposterはvideo dataが利用できない間にvideo elementが表す代表画像です。poster frame、natural dimensions、playback-area renderingを区別する。確認済みHTML Standard: poster and rendering
SPECnetworkStateとreadyStateは異なるmedia element stateを表し、ready stateは連続した順序で変化するとは限りません。resource fetching、metadata、buffer、playback state changeとtask/event処理。確認済みHTML Standard: media elements
SPECplay()はPromiseを返し、再生が許可されない場合はNotAllowedErrorでrejectされます。resource unsupported時の失敗、user agent playback permission、autoplay supportと混同しない。確認済みHTML Standard: playing media
SPECtrackはmedia elementにexternal timed text trackを指定します。captions、subtitles、descriptions、chapters、metadataは異なるtrack kind。cueはtimelineに結び付く。確認済みHTML Standard: the track element
AAMHTML-AAMはvideoのcomputed roleをhtml-videoとし、controls UIのplatform mappingを定めます。spec mappingと個別browser / platform / assistive technologyの実測を分離する。仕様確認済みHTML-AAM: video
SPECWCAG時間依存メディア要件は、HTML elementの有無だけで決まらず、media type・内容・live / prerecorded等の適用条件に依存します。WCAG 2.2 SC 1.2.2、1.2.3、1.2.5などを個別の成功基準として確認する。確認済みWCAG 2.2: Captions (Prerecorded); Audio Description or Media Alternative (Prerecorded)

Evidence

  1. HTML Standard: The video element — categories、content model、attributes、poster、HTMLVideoElement
  2. HTML Standard: Media elements — resource selection、network / ready states、playback、seeking、events、autoplay
  3. HTML Standard: The track element and timed text tracks — track kinds、cues、language、default、text track API
  4. HTML Accessibility API Mappings: video — computed role and platform control mapping
  5. WCAG 2.2 SC 1.2.2 and SC 1.2.3 — prerecorded synchronized media criteria and conditions
  6. Web Platform Tests: the-video-element and media-elements — test discovery entry points; no results are claimed here

Implementation Evidence

仕様上の主張とブラウザー実装、WPT、Accessibility Treeの観測を分けて登録しています。選定した実測とtestを実施済みです。各行の記録に観測環境と未確認の範囲を示します。

実測fixture: video-v1を作成し、Chrome 153の単一環境で動画読込・再生・字幕表示とAccessibility Treeを観測しました。WPTは選定8ファイルを実行しました。詳細は下記Evidence行を参照してください。全browser・全test suite・platform accessibility mappingの網羅は引き続き未完了です。

video要素の実装Evidence登録表
種別再現確認の範囲記録する条件状態
IMPL src / source candidate selection、poster・寸法、networkState / readyState、play() Promise・media events、text track、controlsのAccessibility Tree 2026-09-24 / Chrome 153.0.8010.50 / Windows NT 10.0.26200.0。video-v1のVP8 / Opus WebM(320×180、3.008秒)を127.0.0.1:4173で計測。未対応MIME候補を飛ばしてsample.webmを選択し、loadstart → loadedmetadata → loadeddata → canplay、networkState 2→1、readyState 0→1→4、videoWidth / videoHeightを確認。音声付きfixtureへのuser activation前のplay()はNotAllowedErrorでrejectし、専用button操作後はresolveしてplaying / pauseを観測。captions trackは1 cueを読み込み、描画を確認。未対応MIME候補だけの別videoはnetworkState 3 / error nullで、play Promiseは1.5秒で未settle。NotSupportedError条件、他browser・codecは未確認。 2026-09-25 / Chrome 153.0.8010.50 / Codex In-app Browserでfixtureを再実行。別button testはpassし、click handler内でnavigator.userActivation.isActive=true、play Promise resolve、playing発火を確認(volume=0、muted=false)。activationなし試行直前はisActive=false / hasBeenActive=falseだが、このvolume=0 fixtureではPromise resolveとplaying発火も観測。WPT元testの既定音量条件とは異なる追加観測として記録し、前回wpt.liveの結果は置き換えない。 部分実施(Chrome 153 / 1環境)
WPT video element、resource selection、media state / playback、poster、track / timed textに対応するtest 2026-09-24 / Chrome 153.0.8010.50 / Windows NT 10.0.26200.0 / wpt.live。選定8ファイルで17/17 pass: networkState_initial.html (2/2)、src_reflects_attribute_not_source_elements.html (2/2)、readyState_initial.html (2/2)、event_loadedmetadata_noautoplay.html (4/4)、event_canplay_noautoplay.html (4/4)、video-loading-eager.html (1/1)、track-load-from-src-readyState.html (1/1)、track-default-attribute.html (1/1)。追加のevent_playing_noautoplay.htmlは4件中2 pass・2 Not Run(runner上のscripted play()がuser activationなしでNotAllowedError)。test sourceはaudio/video各1件のsetupを同期実行し、各async testはplaying eventを待つ。Promiseを処理せずactivationなしで再生を始めるため、今回のChromeでは2つのsetupのみpassし、拒否された再生に対応する2つのasync testは未完了となった。これは再生後eventの不具合ではなく、testの再生許可前提と通常のwpt.live実行条件の不一致。event経路を再試験するならWebDriver runnerのtest_driver.bless()でuser activationを与え、再生拒否policyはPromise rejectionを検証する別testに分ける。track-mode.html、error-sequence.html、video-poster-clone-template.htmlは最終Harness summaryを取得できず未集計。選択範囲のみで、他browser・全directoryは未実施。 研究fixtureにtest_driver.bless()を使うuser-activation付きWPT候補をbuild-config/yugien/research-results/video-v1/wpt/event_playing_after_user_activation.htmlへ追加したが、WebDriver環境での実行は未実施。

実測時のテスト版は未記録です。リンク先の内容は変わることがあり、当時と同じテストで再確認できるとは限りません。

部分実施(選定17/17 pass)
AAM videoのcomputed role / accessible name、native controls、captions・text trackのAccessibility Tree公開 2026-09-24 / Chrome 153.0.8010.50 / Windows NT 10.0.26200.0。Chrome tabのAccessibility Tree snapshotでは、video surfaceがcontainer / Description Atlas video-v1 test clipとして現れ、buffer status、native control buttons、seek slider、popup buttonを確認。slider labelは動画シークバー。caption cueは映像上に描画されたが、snapshotでは独立nodeとして現れなかった。Windows platform accessibility API、Narrator / NVDA等の支援技術、他browserは未観測。 部分実施(Chrome Tree)

codec、media file、network、user activation、user preference、browser、OS、native controls、platform API、支援技術による結果を分けて記録し、単一環境の結果を横断的な共通動作として一般化しません。

Coverage / Open Issues

  • 確認済み意味、Categories、Context、src別content model、主要属性、poster、HTMLVideoElement
  • 確認済みshared media resource selection、network / ready state、playback promise、event modelの仕様上の入口
  • 確認済みtext track、HTML-AAM、WCAG時間依存メディア基準の根拠位置と適用境界
  • 未完了Chrome、Firefox、Safariでのsource fallback、codec、network / ready state、event、poster、寸法の比較
  • 未完了autoplay policy、user activation、preload、lazy loading、CORS、range request、media fragment、live streamの詳細実装比較
  • 未完了他browserとの実測比較、全WPT directory、HTML-AAMの全platform mapping、OS accessibility APIと支援技術、字幕表示・選択の差

このページは初期Coverageです。仕様上の入口と根拠を整理したものであり、video全体の完全な検証、すべてのbrowserでの再生、またはすべてのmediaがアクセシビリティ基準を満たすことを主張しません。

Related surface

初心者向けの再生UI、字幕、poster、代替説明はYugienのvideo要素ページを参照してください。audioとの共通media modelはaudio要素で比較できます。sourceの親要素別候補選択はsource要素、時間付きテキストの仕様・WebVTT・Evidenceはtrack要素ページで確認できます。画像resource選択の比較にはpicture要素とimg要素、別文書の埋め込みとの境界にはiframe要素も確認できます。