いよいよ動画配信してみよう
もっとも手軽に映像を配信する方法として「プログレッシブダウンロード」というものがあり、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)」と呼ばれる技術について解説していきます。
それでは、次回の記事もお楽しみに!