ユーザーフレンドリーな動画プレイヤーの作成
警告
自動再生は、すべてのユーザーまたはすべてのブラウザで必ず動作するとは限りません。
ウェブサイトに動画コンテンツを追加することは、ユーザーとのエンゲージメントを高める優れた方法です。この記事では、HTML、Javascript、または Imgix の動画ライブラリ @imgix/ix-player を使用してウェブページに動画を埋め込む方法を紹介します。
ix-player
を使う
ix-player
ライブラリは、簡単に設定・インストールができ、ニーズに合わせてスタイリング可能です。そのため、ix-player
は Video API における推奨の動画再生ソリューションです。ロングフォーム動画とショートフォーム動画の両方をサポートします。
React、Vue、または Angular アプリケーションで ix-player
を使用するには、npm ライブラリをインストールしてください。静的な HTML ページでも基本的なマークアップで使用できます。以下は HTML サイトでの使用例です:
<!-- 注:ここで type="module" が重要です -->
<script
defer
type="module"
src="https://static.imgix.net/ix-player/@latest/dist/ix-player.mjs"
></script>
<ix-player
gif-preview
type="hls"
src="https://assets.imgix.video/videos/girl-reading-book-in-library.mp4?ixembed=docs&fm=hls"
></ix-player>
Click here to modify this in a CodeSandbox.
ix-player
は多数の設定可能な属性を持ちます。詳細は ix-player のドキュメント を参照してください。
エンコード待ちの読み込み
ロングフォーム動画 がリクエストされ、まだトランスコードされていない場合、ステータスコード 423
を返し、キューに入っていることを示します。システム上に動画が存在しない場合は 404
を返します。処理中はロングフォーム動画としての再生はできませんが、imgix.net
サブドメインからパラメータなしでリクエストすればパススルーとして再生可能です。
処理が完了すれば、以後のリクエストでは通常通り再生されます。
Imgix video player は 423
を受け取った際に動画が読み込まれるまで定期的に再試行を行います。
注:許可されたディレクトリ外にある動画は処理されません。
ショートフォーム動画 への初回リクエストは処理のために遅延する可能性がありますが、5分以内で存在する動画であれば常に 200 success
を返します。
<video>
要素を使う
自分で動画再生のコードを書く、またはカスタムプレイヤーを作成したい場合、<video>
要素を使うことができます。これは <img>
要素のようにウェブページに動画プレイヤーを埋め込む手段です。表示方法を制御するための属性も多数あります。
以下は基本的な例です:
<video controls style="width: 100%; max-width: 1500px;">
<source
src="https://assets.imgix.video/videos/girl-reading-book-in-library.mp4?fm=mp4"
type="video/mp4"
/>
Your browser does not support embedded videos!
</video>
controls
属性によりユーザーに再生コントロールを表示します。ブラウザが動画再生に対応していない場合、代替テキストが表示されます。
<video>
要素の詳細な属性については MDN ドキュメント を参照してください。
HLSで動画を再生する
ロングフォーム動画の主な形式は HLS
ストリーミング形式です。これはすべてのモダンブラウザでネイティブにサポートされておらず、再生には外部ライブラリやプレイヤーが必要です。
Imgix の Long-Form Video API を使って HLS 形式に変換し、hls.js
を使用して再生できます。
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<video
id="my-player"
controls="controls"
style="width: 100%; max-width: 1500px;"
crossorigin="anonymous"
/>
<script>
let video = document.querySelector("#my-player")
let src =
"https://assets.imgix.video/videos/girl-reading-book-in-library.mp4?fm=hls"
if (video.canPlayType("application/vnd.apple.mpegurl")) {
video.src = src
} else if (Hls.isSupported()) {
let hls = new Hls()
hls.loadSource(src)
hls.attachMedia(video)
} else {
console.error("このブラウザは Media Source Extensions をサポートしていません")
}
</script>
This will create the video player below:
Click hereto modify this in a Codepen.
自動再生の設定
動画を自動再生させることは、ユーザーの関心を引く効果的な方法ですが、ページを開くたびに自動再生されると逆効果になることもあります。
ブラウザの互換性
自動再生の可否は、ブラウザのポリシーやユーザーの行動履歴によって決まります。以下の条件を満たすことで自動再生の成功率が上がります:
muted
属性を使って動画をミュートする- ページ上でユーザーがクリックした
- (Chrome - デスクトップ) Media Engagement Index が一定以上
- (Chrome - モバイル) サイトがホーム画面に追加されている
- (Safari) 省電力モードでない
autoplay
属性を使う
以下はその例です:
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<video
id="my-autoplay-player"
autoplay
controls
loop="loop"
muted="muted"
style="width: 100%; max-width: 1500px;"
crossorigin="anonymous"
>
<script>
const video = document.querySelector("#my-autoplay-player")
const src =
"https://assets.imgix.video/videos/girl-reading-book-in-library.mp4?fm=hls"
if (video.canPlayType("application/vnd.apple.mpegurl")) {
video.src = src
} else if (Hls.isSupported()) {
const hls = new Hls()
hls.loadSource(src)
hls.attachMedia(video)
} else {
console.error("このブラウザは Media Source Extensions をサポートしていません")
}
</script>
</video>
video.play()
を使う
JavaScript が有効な場合、video.play()
を使って再生を開始できます:
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<video
id="my-player"
controls="controls"
style="width: 100%; max-width: 1500px;"
crossorigin="anonymous"
/>
<script>
let video = document.querySelector("#my-player")
let src =
"https://assets.imgix.video/videos/girl-reading-book-in-library.mp4?fm=hls"
if (video.canPlayType("application/vnd.apple.mpegurl")) {
video.src = src
} else if (Hls.isSupported()) {
let hls = new Hls()
hls.loadSource(src)
hls.attachMedia(video)
} else {
console.error("このブラウザは Media Source Extensions をサポートしていません")
}
video
.play()
.then(function () {
// 自動再生成功!
})
.catch(function (error) {
// エラー処理
})
</script>
This will create the video player below:
Click hereto modify this in a Codepen.
背景動画を作成する意図であれば、上記のコードは自動再生が許可されている場合に自動的に動画を再生します。許可されていない場合は、.catch()
関数を使用して自動再生エラーを記録したり、<video>
要素を <image>
要素に置き換えたりすることができます。
自動再生を使用すべきタイミング
自動再生の主な目的は、ウェブページでユーザーの注意を即座に引くことです。コンテンツがユーザーにとって関連性がある場合、クリックの手間を省くこともできます。
一方で、自動再生はユーザー体験に悪影響を及ぼし、ウェブサイトのノイズが多すぎるとエンゲージメントを損なう可能性があります。
このことを念頭に置いて、自動再生は以下のような状況で使用すべきです:
- デザイン構成の一部として背景動画を作成する場合
- ユーザーが確実にクリックすることが分かっている動画を自動で再生することで体験を豊かにする場合
- ページが読み込まれたときにユーザーにすぐに表示される動画を再生する場合
- ユーザーが必ず見るべき重要な動画を再生する場合
自動再生を使用する際には以下を避けるべきです:
- 折りたたまれた位置(below the fold)にある動画を自動再生する
- ユーザーから見えない動画を自動再生する
- 複数の動画を同時に自動再生する