映像(videoタグ)のイベント調べる

説明

HTML 5のvideoタグのイベント発生順序を調べてみました。テストに使ったコードは白石さんのページにあるものです(白石さんのはFirefox 3.5でのテスト。このページでは3.6でテスト)。Firefox用なのでSafari 4, Chrome 4でも動作するように一部変更してテストしました。
まず、映像データが読み込まれる最初の段階では以下のようなイベントが発生します。これを見ると共通して発生するイベントはcanplay, canplaythroughの2つだけです。Firefox 3.6ではloadstartイベント自体発生しません。さらにローカル上にデータがある場合とサーバー上にある場合では発生するイベント自体が異なっています。

映像が読み込まれた時に発生するイベントと、その順序(ローカル上)

Firefox 3.6Safari 4Chrome 4
progressloadstartloadstart
progressdurationchangedurationchange
canplayloadedmetadataloadedmetadata
canplaythroughloadeddataloadeddata
suspendcanplaycanplay

canplaythroughcanplaythrough

loadprogress

load

映像が読み込まれた時に発生するイベントと、その順序(サーバー上)

Firefox 3.6Safari 4Chrome 4
suspendloadstartloadstart
canplaydurationchangesuspend
progressloadedmetadatadurationchange

loadeddataloadedmetadata

canplayloadeddata

progresscanplay

canplaythroughcanplaythrough

loadprogress


suspend

再生中の場合は以下のイベントが発生します。ローカルとサーバーにデータがある場合では発生するイベントが異なります。また、回線状況やユーザー環境によっても発生順序や回数が異なります。下表で色が付いている部分は断続的にイベントが繰り返し発生するということを示しています。これは回線状況によって発生したり発生しなかったりします。

映像再生時に発生するイベントと、その順序(ローカル上)

Firefox 3.6Safari 4Chrome 4
playplayplay
playingplayingplaying
timeupdatetimeupdatetimeupdate
endedendedended

映像再生時に発生するイベントと、その順序(サーバー上)

Firefox 3.6Safari 4Chrome 4
playplayplay
playingplayingplaying
timeupdatetimeupdatetimeupdate
progressendedended
waiting
canplay
playing
canplaythrough
suspend
ended

Firefox 3.6, Safari 4, Chrome 4では再生開始を示すplay、再生中であるplaying、再生が終了したendedあたりしか使えないといいう状態になります。endedも映像のフレーム数などによっては発生しない事もあるらしいのでvideoタグとJavaScriptの組み合わせは、いろいろと注意して作成しないといけないようです。