apache では、動画(flv,mp4)を制御するための モジュールとして mod_flvx,mod_h264_streaming があります。それぞれのフォーマットの対応は、以下のとおりです。
- flv形式 → mod_flvx
- mp4形式 → mod_h264_streaming
apache では、このmod_flvx,mod_h264_streaming モジュールで、動画の startパラメータ(シーク) に対応することでPseudo streaming(疑似ストリーミング)を実現できます。
今回は、apacheにて、flv、mp4 のファイル形式のみの対応ではありますが、疑似とはいえストリーミングに対応してみたいと思います。
nginx でPseudo streaming(疑似ストリーミング)で動画配信を行ってみる(flv、mp4ディレクティブを使ってみた) を参照してください。
- 目次
- 履歴
2013年3月5日 初版
startパラメータ(シーク)に対応できるということはどういう意味か
ここまで、apache の mod_flvx,mod_h264_streaming モジュール で、
startパラメータ(シーク)に対応することができる
と書きましたが、これが、どういう意味か簡単に解説します。
簡単にいうと、いつでも動画を好きなところから見ることができる ということです。
例えば、以下のように動画を見ているとします。
見たいところへ、赤枠 部分のタイムスライダを動かしたくなりますね。
このとき一般的な動画プレイヤーは、タイムスライダのバックカラーが薄い灰色になった部分が、動画のダウンロードができた範囲になります。
何も動画(ストリーミング)対応がないウェブサーバーであっても、その範囲内で、好きなところへタイムスライダを動かすことができます。
でも、YouTube では、バックカラーが薄い灰色になっていないところへ、いきなりクリックできますね。
これが、いわゆる動画のシークというものです。
動画プレイヤーは、タイムスライダのクリック位置から動画の開始時間を割出しサーバーへ開始時間を通知します。(apacheに対しては、これをstartパラメータで通知します。)
サーバーからは、その開始時間以降の動画情報を配信するという仕組みです。
例えば、apacheでは、以下のように要求することでその開始時間からの動画データを受信することができます。
|
この例では、startパラメータに100としていますので、先頭から100秒後からの動画が配信されることになります。
もし、startパラメータに対応していない場合は、もちろん無視されますから、sample.mp4の先頭から動画配信されることになります。
動画ファイルはかなり大きなものがありますから、この機能は、動画配信する場合、必要な機能だと思います。
多少語弊がありますが、
これらのことを、一般的にストリーミング(リアルタイムにデータを受信しながら再生すること)と言います。
このストリーミングは、専用のサーバーが必要になりますが、
ここでは、apacheを使って そのストリーミングを疑似的ではありますが、それらしく見せることができるようにしてみます。
一般的に動画を配信する場合、それ専用のサーバーを構築する必要があります。 それを、通常のウェブサーバーで疑似的にストリーミング(リアルタイムにデータを受信しながら再生すること)を行わせることを言います。
apache で startパラメータ(シーク)に対応してみる
apache で startパラメータ(シーク)に対応してみる には、先に書いたように mod_flvx,mod_h264_streaming モジュール で簡単に対応することができます。
では、早速、簡単に解説してみます。
mod_flvx,mod_h264_streaming モジュール をインストールする
mod_flvx,mod_h264_streaming モジュール は、デフォルトではインストールされていないので、
手動(make作業)でインストールする必要があります。
簡単に解説してみます。
- make 環境をインストールします。
まずは、少なくともmake,gccは必要な環境になりますので、make,gccをインストールします。
(既にインストール済の場合、スキップしてください。)
$ yum -y install make gcc
- httpd, httpd-devel をインストールします。
apacheをインストールします。
apacheの開発環境(httpd-devel) をインストールします。
(既にインストール済の場合、スキップしてください。)
$ yum -y install httpd httpd-devel
- mod_flvx をインストールします。
# 適当なディレクトリに mod_flvxモジュールのソースコードをダウンロードします。 $ wget http://people.apache.org/~pquerna/modules/mod_flvx.c ... $ ls mod_flvx.c # mod_flvxモジュールを apxs でインストールします。 $ apxs -c -i ./mod_flvx.c ... # 64bit OSなら以下のディレクトリに作成されているはずです。 $ ls /usr/lib64/httpd/modules/mod_flvx.so /usr/lib64/httpd/modules/mod_flvx.so # 32bit OSなら以下のディレクトリに作成されているはずです。 $ ls /usr/lib/httpd/modules/mod_flvx.so /usr/lib/httpd/modules/mod_flvx.so
- mod_h264_streaming をインストールします。
# 適当なディレクトリに mod_h264_streamingモジュールのソースコード一式をダウンロードします。 $ wget http://h264.code-shop.com/download/apache_mod_h264_streaming-2.2.7.tar.gz ... $ ls apache_mod_h264_streaming-2.2.7.tar.gz # tar ファイルを解凍します。 $ tar xfz apache_mod_h264_streaming-2.2.7.tar.gz # mod_h264_streaming... というディレクトリができたはずです。 $ ls ... mod_h264_streaming-2.2.7 ... # mod_h264_streaming... へ移動 $ cd mod_h264_streaming-2.2.7 # mod_h264_streamingモジュールを インストールします。 # -- mod_h264_streamingモジュールのmake前の環境チェック $ ./configure ... # -- mod_h264_streamingモジュールのmake $ ./make ... # -- mod_h264_streamingモジュールのインストール $ ./make install ... # 64bit OSなら以下のディレクトリに作成されているはずです。 $ ls /usr/lib64/httpd/modules/mod_h264_streaming.so /usr/lib64/httpd/modules/mod_h264_streaming.so # 32bit OSなら以下のディレクトリに作成されているはずです。 $ ls /usr/lib/httpd/modules/mod_h264_streaming.so /usr/lib/httpd/modules/mod_h264_streaming.so
apache の設定ファイル を編集する
mod_flvx,mod_h264_streaming モジュール を使用するように /etc/httpd/conf.d/ 配下に以下の2つのファイル作成します。
- mod_flvx モジュール用設定ファイル : /etc/httpd/conf.d/mod_flvx.conf
LoadModule flvx_module modules/mod_flvx.so AddHandler flv-stream .flv
- mod_h264_streaming モジュール用設定ファイル : /etc/httpd/conf.d/mod_h264_streaming.conf
LoadModule h264_streaming_module modules/mod_h264_streaming.so AddHandler h264-streaming.extensions .mp4
いずでも
LoadModuleでモジュールの読み込み指示、
AddHandlerで拡張子の指定
を行っているだけです。
上記の設定ファイルの編集を終えたら、apacheの再読み込み(reload)、あるいは、再起動(restart)を実行します。
|
動画プレイヤーを設置する
mp4形式の動画を配信するために、動画プレイヤーにフラッシュプレイヤーを使用します。
HTML5では、videoタグが提供されますが、これもブラウザによってmp4形式に対応できていたり、できていなかったりしますので、ここでは、フラッシュプレイヤーを使用します。
そこで、無料で使えるフラッシュプレイヤーで、Pseudo streaming(疑似ストリーミング)に対応している(シークができる)プレイヤーとして、Flowplayerがあります。
今回は、そのFlowplayerを使って、動画配信を確認してみます。
では、早速、以下の手順で動画プレイヤーを設置します。
- 以下のURLからFlowplayer Flash版をダウンロードします。
http://flash.flowplayer.org/download/
商用版は、有料となります。ここでは、試用が目的なのでGPLライセンスの元 ダウンロードします。
- 以下のURLから Pseudostreaming プラグインをダウンロードします。
http://flash.flowplayer.org/plugins/streaming/pseudostreaming.html
ページの最下部にダウンロードの箇所があります。
- ダウンロードしたファイルを解凍します。
ここでは、公開ディレクトリ /video の配下に構築したいので、以下のように解凍します。
/video + /flowplayer ← ここに Flowplayer Flash版 を解凍します | + flowplayer-3.2.12.min.js | + flowplayer-3.2.16.swf | + flowplayer.controls-3.2.15.swf | + /flowplayer.pseudostreaming ← ここに Pseudostreaming プラグイン を解凍します + flowplayer.pseudostreaming-3.2.12.swf + flowplayer.pseudostreaming-byterange-3.2.12.swf
- 動画を見るためのページを作成します。
ここでは、公開ディレクトリ /video の直下に flowplayer.html というファイル名で作成します。
準備するものとして、以下の2つを準備します。- 最初に見せるタイトル画面イメージ
→ ここでは、 title.jpg として/video の直下に配置します。
- mp4動画ファイル
→ ここでは、 sample.mp4 として/video の直下に配置します。
ここまで準備ができたら、flowplayer.html を以下のように編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
<!doctype html> <html> <head> <title>MP4 pseudo-streaming : Flowplayer</title> </head> <body> <script src="/video/flowplayer/flowplayer-3.2.12.min.js"></script> <a style="display:block;width:350px;height:240px;" id="player" style="cursor: pointer;"> <img border=0 src="title.jpg" style="width:350px;height:240px;" alt="title image" /> </a> <br clear="all" /> <script> flowplayer("player", "http://example.com/video/flowplayer/flowplayer-3.2.16.swf", { plugins: { pseudo: { url: "http://example.com/video/flowplayer.pseudostreaming/flowplayer.pseudostreaming-3.2.12.swf" } }, clip: { provider: 'pseudo', url: 'http://example.com/video/sample.mp4' } }); </script> </body> </html>
- 7行目
ここで、Flowplayer Flash版のJavaScriptを読み込んでいます。
- 8行目
ここで、Flowplayer Flash版を表示する aタグ を指定しています。 style で、幅、高さを指定しています。サンプル動画の幅、高さに合わせてください。
- 9行目
Flowplayer Flash版を起動する前に仮表示するための画像を指定します。
- 14-23行目
Flowplayer Flash版の設定です。
“player” : aタグのIDを指定します。
“…/flowplayer-3.2.16.swf” : Flowplayer Flash版の本体を指定します。
pseudo : プラグインIDになります。
“…/flowplayer.pseudostreaming-3.2.12.swf” : pseudostreamingプラグインの本体を指定します。
provider: ‘pseudo’ : プラグインIDを指定します。
url: ‘…/sample.mp4’ : 動画ファイルを指定します。
flv形式のファイルでも同じように設置できます。
先の url: ‘…/sample.mp4’ の箇所をflvファイル名を指定するだけでOKです。
- 最初に見せるタイトル画面イメージ
実際にmp4を見てみましょう
さて、ここまでできたら、実際にmp4を見てみましょう。
上記の例でいうと、”http://example.com/video/flowplayer.html” へアクセスしてみてください。
- まず、以下のように最初に見せるタイトル画面イメージ ( title.jpg ) が表示されたと思います。
- タイトル画面をクリックすると動画が始まります。
- タイムスライダの見たいところをクリックしてみます。
ちゃんと見たいところへ移動できればOKです。
この際、apacheは、以下のように startパラメータを含んだ ロギングを出力しているでしょう。xxx.xxx.xxx.xxx- - [03/Mar/2013:16:17:50 +0900] "GET /video/sample.mp4?start=105.01 HTTP/1.1" 200 53554952 "http://example.comjp/video/flowplayer/flowplayer-3.2.16.swf" "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0"
おもしろいとは思いますが、YouTube全盛の今にあって、どれだけの需要があるのかは、ちょっと疑問もありますが、
とりあえず、個別にどうしても動画を見せたい・・・という場合には、独自に配信できるので便利だと思います。
ただ、やっぱり動画が負荷が高いです。サーバーの負荷もネットワークの負荷も高くなりますから、十分、注意して利用する必要があるでしょうね。
例えば、以下にようにmod_bwモジュールなどを使って帯域制限をかけておく・・・などの対策は必要かを思います。
|
帯域制限の詳細は、 apache で帯域制限をかける(mod_bw モジュールを使ってみた) を参照してください。
動画サイトとなるとやっぱり高負荷というイメージですね。実際高負荷ですし、かなりディスクをガリガリやります。
こんなサイトに さくらのVPSの SSDプラン がおすすめなんでしょうね。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :