レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

C5 C6 S6

apache でPseudo streaming(疑似ストリーミング)で動画配信を行ってみる( mod_flvx,mod_h264_streaming モジュールを使ってみた)

2013年3月5日 2015年5月15日
apache Pseudo streaming

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 のファイル形式のみの対応ではありますが、疑似とはいえストリーミングに対応してみたいと思います。

startパラメータ(シーク)に対応できるということはどういう意味か

ここまで、apache の mod_flvx,mod_h264_streaming モジュール で、
startパラメータ(シーク)に対応することができる
と書きましたが、これが、どういう意味か簡単に解説します。

簡単にいうと、いつでも動画を好きなところから見ることができる ということです。

例えば、以下のように動画を見ているとします。

タイムスライダが白い

見たいところへ、赤枠 部分のタイムスライダを動かしたくなりますね。
このとき一般的な動画プレイヤーは、タイムスライダのバックカラーが薄い灰色になった部分が、動画のダウンロードができた範囲になります。
何も動画(ストリーミング)対応がないウェブサーバーであっても、その範囲内で、好きなところへタイムスライダを動かすことができます。

でも、YouTube では、バックカラーが薄い灰色になっていないところへ、いきなりクリックできますね。

youtubeタイムスライダが白い

これが、いわゆる動画のシークというものです。
動画プレイヤーは、タイムスライダのクリック位置から動画の開始時間を割出しサーバーへ開始時間を通知します。(apacheに対しては、これをstartパラメータで通知します。) サーバーからは、その開始時間以降の動画情報を配信するという仕組みです。

例えば、apacheでは、以下のように要求することでその開始時間からの動画データを受信することができます。

http://example.com/sample.mp4?start=100

この例では、startパラメータに100としていますので、先頭から100秒後からの動画が配信されることになります。
もし、startパラメータに対応していない場合は、もちろん無視されますから、sample.mp4の先頭から動画配信されることになります。

動画ファイルはかなり大きなものがありますから、この機能は、動画配信する場合、必要な機能だと思います。

多少語弊がありますが、
これらのことを、一般的にストリーミング(リアルタイムにデータを受信しながら再生すること)と言います。
このストリーミングは、専用のサーバーが必要になりますが、 ここでは、apacheを使って そのストリーミングを疑似的ではありますが、それらしく見せることができるようにしてみます。

Pseudo streaming疑似ストリーミング)とは、
一般的に動画を配信する場合、それ専用のサーバーを構築する必要があります。 それを、通常のウェブサーバーで疑似的にストリーミング(リアルタイムにデータを受信しながら再生すること)を行わせることを言います。

apache で startパラメータ(シーク)に対応してみる

apache で startパラメータ(シーク)に対応してみる には、先に書いたように mod_flvx,mod_h264_streaming モジュール で簡単に対応することができます。

では、早速、簡単に解説してみます。

mod_flvx,mod_h264_streaming モジュール をインストールする

mod_flvx,mod_h264_streaming モジュール は、デフォルトではインストールされていないので、 手動(make作業)でインストールする必要があります。
簡単に解説してみます。

  1. make 環境をインストールします。

    まずは、少なくともmake,gccは必要な環境になりますので、make,gccをインストールします。
    (既にインストール済の場合、スキップしてください。)

    $ yum -y install make gcc

  2. httpd, httpd-devel をインストールします。

    apacheをインストールします。
    apacheの開発環境(httpd-devel) をインストールします。
    (既にインストール済の場合、スキップしてください。)

    $ yum -y install httpd httpd-devel

  3. 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

  4. 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)を実行します。

$ /etc/init.d/httpd restart

動画プレイヤーを設置する

mp4形式の動画を配信するために、動画プレイヤーにフラッシュプレイヤーを使用します。
HTML5では、videoタグが提供されますが、これもブラウザによってmp4形式に対応できていたり、できていなかったりしますので、ここでは、フラッシュプレイヤーを使用します。

そこで、無料で使えるフラッシュプレイヤーで、Pseudo streaming(疑似ストリーミング)に対応している(シークができる)プレイヤーとして、Flowplayerがあります。 今回は、そのFlowplayerを使って、動画配信を確認してみます。

では、早速、以下の手順で動画プレイヤーを設置します。

  1. 以下のURLからFlowplayer Flash版をダウンロードします。

    http://flash.flowplayer.org/download/
    商用版は、有料となります。ここでは、試用が目的なのでGPLライセンスの元 ダウンロードします。
    Flowplayer Flash版ダウンロードページ


  2. 以下のURLから Pseudostreaming プラグインをダウンロードします。

    http://flash.flowplayer.org/plugins/streaming/pseudostreaming.html
    ページの最下部にダウンロードの箇所があります。
    Pseudostreaming プラグインダウンロードページ


  3. ダウンロードしたファイルを解凍します。

    ここでは、公開ディレクトリ /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

  4. 動画を見るためのページを作成します。

    ここでは、公開ディレクトリ /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” へアクセスしてみてください。

  1. まず、以下のように最初に見せるタイトル画面イメージ ( title.jpg ) が表示されたと思います。
    flowplayer1
  2. タイトル画面をクリックすると動画が始まります。
    flowplayer2
  3. タイムスライダの見たいところをクリックしてみます。
    flowplayer3

    ちゃんと見たいところへ移動できれば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モジュールなどを使って帯域制限をかけておく・・・などの対策は必要かを思います。
...
<Directory "var/www/html/video">
  <IfModule mod_bw.c>
    BandWidthModule On
    ForceBandWidthModule On
    BandWidth all 100000
  </IfModule>
</Directory>
...
100000 : 100kByte/Sec の意味
帯域制限の詳細は、 apache で帯域制限をかける(mod_bw モジュールを使ってみた) を参照してください。

動画サイトとなるとやっぱり高負荷というイメージですね。実際高負荷ですし、かなりディスクをガリガリやります。
こんなサイトに さくらのVPSの SSDプランさくらのVPSの SSDプラン がおすすめなんでしょうね。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

nginx でPseudo streaming(疑似ストリーミング)で動画配信を行ってみる(flv、mp4ディレクティブを使ってみた)

nginx では、動画を制御するための ディレクティブとして flv,mp4 が用意されています。 flv,mp4 の両ディレクティブ ...

YouTubeのようなストリーミング配信するRTMPサーバーをたててみる( C++ RTMP Server(crtmpserver)を使ってみた)

下記の記事では、Pseudo streaming(疑似ストリーミング)で動画配信を行う方法について、簡単に解説してみました。 ngin ...

apache で帯域制限をかける(mod_bw モジュールを使ってみた)

apache で帯域制限をかけるモジュールは、いろいろありますが、使い勝手の良いものとして mod_bw があります。 この mod_bw モ ...

apache で WebDAVを使ってファイル共有してみる

今回は、apache で WebDAVを使ってファイル共有してみます。 WebDAV(Web-based Distri ...

apache で phpのモジュール版とcgi版の切り替えを行ってみる

これまでのapache , php の設定では、暗黙の了解?ではないのですが、phpの動作環境としては、モジュール版として動作するように設定して ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2505 [s]