🕌

Next.jsのvideoの埋め込みについて

2024/06/24に公開

経緯

Next.jsで動画配信サービスを遊び程度に作成しようと思って、調べていたらNext.jsの公式ドキュメントにvideo optimization(ビデオ最適化:ビデオの表示の仕方などについて)に関する記事があったので、誰かの役に立てばと思い記事にしました。

videoタグ

個人的にとった動画など、mp4形式に使う

<video src="/path/to/video.mp4" width="320" height="240" autoPlay />

ビデオプレーヤー属性

属性名 説明
src ビデオファイルのソースを指定します <video src="/path/to/video.mp4" />
width ビデオプレーヤーの幅を設定します <video width="320" />
height ビデオプレーヤーの高さを設定します <video height="240" />
controls プレイヤーコントロールを表示します <video controls />
autoPlay ページ読み込み時に自動再生します ※ブラウザごとにオートプレイのポリシーが異なります <video autoPlay />
loop ビデオをループ再生します <video loop />
muted デフォルトでミュートにします <video muted />
preload ビデオのプリロード方法を指定します 値 (chi): none, metadata, auto <video preload="none" />
playsInline iOS デバイスでのインライン再生を有効にします iOS Safari でのオートプレイを機能させるために必要です <video playsInline />

iframeタグ

iframeを使うとyoutubeなどから動画を持ってくることができる

<iframe  src="https://www.youtube.com/watch?v=gfU1iZnjRZM"
      frameborder="0"
      allowfullscreen />

iframe 属性

属性名 説明
src 埋め込むページの URL を指定します <iframe src="https://example.com">
width iframe の幅を設定します <iframe width=500>
height iframe の高さを設定します <iframe height=300>
frameborder iframe の周りに枠 (わく) を表示するかどうかを指定します <iframe frameborder=0>
allowfullscreen iframe 内のコンテンツを全画面表示モードで表示できるようにします <iframe allowfullscreen>
sandbox iframe 内のコンテンツに対して追加の制限を設定します <iframe sandbox>
loading 読み込み動作 (yomikomi dōsa) を最適化します <iframe loading=lazy>
title アクセシビリティをサポートするための iframe のタイトルを設定します <iframe title="説明">

外部ホストからの動画埋め込み

非同期処理で行う

export default async function VideoComponent() {
  const src = await getVideoSrc()
 
  return <iframe src={src} frameborder="0" allowfullscreen />
}

動画をロードするのに時間がかかるため、ロード中を知らせるために以下の<Suspense>コンポーネントで挟む。Suspenseコンポーネントに関してはReactt Suspenseから。

import { Suspense } from 'react'
import VideoComponent from '../ui/VideoComponent.jsx'
 
export default function Page() {
  return (
    <section>
      <Suspense fallback={<p>Loading video...</p>}>
        <VideoComponent />
      </Suspense>
      {/* Other content of the page */}
    </section>
  )
}

Discussion