SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今日からできる! 動画配信基盤システム構築

配信に適した動画にする「エンコード」の技術~動画ファイルをエンコードして、HTTPサーバーで配信してみよう

今日からできる! 動画配信基盤システム構築 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

いよいよ動画配信してみよう

 もっとも手軽に映像を配信する方法として「プログレッシブダウンロード」というものがあり、HTTPを経由してMP4ファイルの配信だけのとてもシンプルな仕組みですが、一点だけMP4コンテナの構造について注意が必要です。MP4コンテナにはBoxと呼ばれる構造があり、その中に映像データや音声データ、メタデータなどが格納されています。特にメタデータの格納を担う「moov」Boxには映像や音声ストリームの情報や映像のサンプルごとの配置やタイムコード情報などが含まれているため、再生開始時には、この「moov」Boxが不可欠です。

 先ほどエンコードしたMP4ファイルは「moov」Boxが後方に配置されているため、再生を開始するまでにファイルの最後まで読み込む必要があります。このままでは、映像の再生が開始されるまでに時間がかかってしまうため、ユーザーにとってストレスとなる可能性があります。

 実際に、先ほどエンコードしたMP4ファイルをHTTPサーバーで配信して、視聴することで「うまく再生できないこと」を確認してみましょう。今回はPython 3の標準ライブラリであるhttp.serverを利用して簡単なHTTPサーバーを立ち上げ、先ほどエンコードしたMP4ファイルを配信し、ffplayコマンドで再生してみます。

 Python 3のインストールは読者の皆様にお任せしますが、初めての方はこちらからダウンロードしてインストールしてください。 ffplayコマンドはFFmpegを構成するツールの一つで、動画ファイルを再生するためのプレイヤーです。前回の記事でFFmpegのインストール方法について解説していますので、参考にしてください。

 必要な準備が整ったら、エンコードした映像ファイルが格納されているディレクトリに移動し、以下のコマンドを実行してHTTPサーバーを立ち上げます。

$ python3 -m http.server 8000

 HTTPサーバーが立ち上がったら、別のターミナルを開いて、以下のコマンドを実行して先ほどエンコードしたMP4ファイルを再生します。

$ ffplay http://localhost:8000/chapter3.mp4

 待てど暮らせど映像が再生されないことが確認できるかと思います。それで大丈夫です。この問題は先ほど説明した「moov」Boxがファイルの後方に配置されているために発生しています。

 これを解決するために「moov」Boxをファイルの先頭に配置する「Fast Start」と呼ばれる手法があります。

 ffpmegでエンコードする際に以下のようにオプションを指定することで「Fast Start」を適用することができます。

$ ffmpeg -i chapter3.mp4 -c copy -movflags +faststart chapter3_faststart.mp4

 このように「-movflags +faststart」オプションを指定することで、moov Boxがファイルの先頭に配置されるようになり、すばやく映像の再生を開始することができます。

 それでは、このオプションを指定してエンコードしたMP4ファイルをHTTPサーバーで配信し、再生してみましょう。

$ ffplay http://localhost:8000/chapter3_faststart.mp4

 今度は映像がすぐに再生されることが確認できるかと思います。 このように「Fast Start」を適用することで、映像の再生をスムーズにすることができます。

まとめ

 今回は動画ファイルをエンコードするための方法と、プログレッシブダウンロードによるHTTPサーバーでエンコードした動画ファイルを配信する方法について解説しました。一方で、今回のプログレッシブダウンロードは動画配信の仕組みとしては一般的ではありません。

 DMM TVをはじめとした代表的な動画配信サービスではストリーミングという技術が一般的で、プログレッシブダウンロードと比較して、シークや解像度の調整などにおいてより柔軟な制御が可能になります。

 次回は、このストリーミングという技術と、ユーザーのネットワーク環境やデバイスのスペックに合わせて映像のビットレートを自動的に調整する「アダプティブビットレート(ABR)」と呼ばれる技術について解説していきます。

 それでは、次回の記事もお楽しみに!

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
今日からできる! 動画配信基盤システム構築連載記事一覧

もっと読む

この記事の著者

中村 航(合同会社DMM.com)(ナカムラ ワタル)

 2020年にDMM.comへ新卒入社。現在の配信基盤グループに配属され、今日までエンコードシステムやバックエンドシステム等の開発・運用に携わっています。その後、2022年にスタートしたDMM TVの立ち上げにも関わりました。エンタメ大好きなエンジニアです!

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20263 2024/12/19 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング