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

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

2013年3月7日 2016年2月15日
streaming

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

今回は、Pseudo streaming(疑似ストリーミング)でなく、本当のストリーミング配信を行ってみます。
YouTube のようなストリーミング配信を行うには、RTMP(Real Time Messaging Protocol)サーバーが必要になります。
正確には、
Flash を使ってライブストリーミング(生放送)を実現するためには、RTMPサーバーが必要になります。

先の記事でも、結局、ブラウザ側では、Flash Playerが動作します。
Flash Player 上で動いている .swf ファイルのクライアントと、動画情報を配信するサーバーとの間で通信することになるわけですが、 その通信をつかさどるプロトコルが、RTMPReal Time Messaging Protocol)となります。

そのプロトコル RTMP に準拠した配信を行うサーバーを、ここでは、単純にRTMPサーバーとします。

そのRTMPサーバーには、以下のようなものがあります。


  • Adobe Flash Media Server

    その名のとおりAdobe の製品で、もちろん、有償パッケージです。

  • Wowza Media Server

    Wowza Media Systems という会社の製品で、もちろん、有償パッケージです。

  • Red5 Media Server

    Javaで記述されたオープンソースの RTMPサーバーです。

  • C++ RTMP Server(crtmpserver)

    C++で記述されたオープンソースの RTMPサーバーです。
    商用パッケージとして、EvoStream の製品 Evostream Media Server でもあります。


上位2つは、完全な製品なので、手を出しづらいです。Red5はJavaなので、別に機会に紹介したいと思います。
そこで、今回は、C++ RTMP Server(crtmpserver)を使ってみます。

ウェブブラウザで動画をみますので、C++ RTMP Server(crtmpserver)単体では、動作しません。httpサーバーが必要で、この場合、apacheでもnginxでもOKです。 ここでは、httpサーバーは、既にインストールされているものとして解説します。

C++ RTMP Server(crtmpserver) をインストールする

まず、C++ RTMP Server(crtmpserver) をインストールします。 インストールするには、

のいずれかになります。
ここでは、簡単な方法でバイナリパッケージをダウンロードしてやってみます。

  1. バイナリパッケージをダウンロードします。

    crtmpserverダウンロードページ
    上記のとおりディストリビューションによって、それぞれ用意されていますので、対応するバイナリパッケージをダウンロードします。

    # CentOS/ScientificLinux 6(64bit)の場合
    $ wget http://rtmpd.com/assets/binaries/784/crtmpserver-1.1_beta-x86_64-CentOS_6.2.tar.gz
    
    # Debian 6(64bit)の場合
    $ wget http://rtmpd.com/assets/binaries/784/crtmpserver-1.1_beta-x86_64-Debian_6.0.5.tar.gz
    
    # Ubuntu 12(64bit)の場合
    $ wget http://rtmpd.com/assets/binaries/784/crtmpserver-1.1_beta-x86_64-Ubuntu_12.04.tar.gz

  2. ダウンロードしたパッケージを解凍します。

    ダウンロードしたパッケージは、単純なtar+gzip ファイルになっていますので、tarで解凍するだけでインストールしたことになります。
    ここでは、/usr/local/lib64/crtmpserver-1.1 へ解凍することにします。
    ( 32bitOSの場合は、/usr/local/lib/crtmpserver-1.1 としておきましょう。ただし、ここでの解説は、すべて64bit版での解説となります。)

    # 64bitOSの場合
    $ mkdir /usr/local/lib64/crtmpserver-1.1
    
    # 先のディレクトリに解凍します
    #  -- 以下は、CentOSの場合の例です。各ディストリビューションでファイル名が異なりますので、注意してください。
    $ tar xfz crtmpserver-1.1_beta-x86_64-CentOS_6.2.tar.gz -C /usr/local/lib64/crtmpserver-1.1
    
    # 解凍できたか確認しておきます
    #  -- 以下は、CentOSの場合の例です。各ディストリビューションでディレクトリ名が異なりますので、注意してください。
    $ ls /usr/local/lib64/crtmpserver-1.1
    crtmpserver-1.1_beta-x86_64-CentOS_6.2
    
    # ディレクトリが不要なので、全ファイルを/usr/local/lib64/crtmpserver-1.1 直下に移動します。
    #  -- 以下は、CentOSの場合の例です。各ディストリビューションでディレクトリ名が異なりますので、注意してください。
    $ mv /usr/local/lib64/crtmpserver-1.1/crtmpserver-1.1_beta-x86_64-CentOS_6.2/* /usr/local/lib64/crtmpserver-1.1/.
    
    # 最後に不要になったディレクトリを削除します。
    $ rm -R /usr/local/lib64/crtmpserver-1.1/crtmpser
    ver-1.1_beta-x86_64-CentOS_6.2
    rm: remove directory `/usr/local/lib64/crtmpserver-1.1/crtmpserver-1.1_beta-x86_64-CentOS_6.2'? yes

  3. C++ RTMP Server(crtmpserver) の必要最小限の設定を行います。

    解凍したファイルの中で、C++ RTMP Server(crtmpserver) のストリーミング配信のための最小限の設定を行います。

    $ cd /usr/local/lib64/crtmpserver-1.1
    
    # 編集するまえにバックアップを作成しておきます。
    [crtmpserver-1.1]$ cp configs/flvplayback.lua configs/flvplayback.lua.org
    
    # crtmpserverの設定ファイルを編集します。
    [crtmpserver-1.1]$ vi configs/flvplayback.lua
    ...
                            --mediaFolder="./media",
                            mediaFolder="/var/www/html/rtmp",
    ...

    mediaFolder の設定を、ここでは、/var/www/html/rtmp としました。
    このとき、httpサーバーのルートディレクトリは、/var/www/html とします。
    つまり、
    http://exmaple.com/rtmp/
    でアクセスする範囲が、ストリーミングの対象となります。

    設定ファイル(flvplayback.lua)は、lua言語で記述されていますので、 は、コメントを意味します。

  4. C++ RTMP Server(crtmpserver) を起動します。
    # crtmpserverを起動します。
    [crtmpserver-1.1]$ ./run_flvplayback.sh
    /crtmpserver/src/crtmpserver.cpp:210 C++ RTMP Media Server (www.rtmpd.com) version 1.1_beta build 784 - Gladiator - (built for CentOS-6.2-x86_64 on 2013-01-20T13:28:24.000)
    /crtmpserver/src/crtmpserver.cpp:212 Initialize I/O handlers manager: epoll without timerfd_XXXX support
    /crtmpserver/src/crtmpserver.cpp:215 Configure modules
    /crtmpserver/src/crtmpserver.cpp:221 Plug in the default protocol factory
    ...
    デーモンプロセスで起動する場合は、
    run_flvplayback_daemon.sh を実行します。

    このシェルファイルを見ればわかりますが、単純に crtmpserver の起動オプション –daemon を付けるか否かの違いだけです。


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

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

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

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

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

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


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

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


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

    ここでは、公開ディレクトリ /rtmp の配下に構築したいので、以下のように解凍します。

    /rtmp
      + /flowplayer ← ここに  Flowplayer Flash版 を解凍します
      |   + flowplayer-3.2.12.min.js
      |   + flowplayer-3.2.16.swf
      |   + flowplayer.controls-3.2.15.swf
      |
      + /flowplayer.rtmp← ここに  RTMP プラグイン を解凍します
          + flowplayer.rtmp-3.2.12.swf

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

    ここでは、公開ディレクトリ /rtmp の直下に flowplayer.html というファイル名で作成します。
    準備するものとして、以下の2つを準備します。

    • 最初に見せるタイトル画面イメージ

      → ここでは、 title.jpg として/rtmp の直下に配置します。

    • mp4動画ファイル

      → ここでは、 sample.mp4 として/rtmp の直下に配置します。


    ここまで準備ができたら、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
    28
    29
    
    <!doctype html>
    <html>
    <head>
        <title>MP4 RTMP-streaming : Flowplayer</title>
    </head>
    <body>
    <script src="/rtmp/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/rtmp/flowplayer/flowplayer-3.2.16.swf", {
        plugins: {
            rtmp: {
                url: "http://example.com/rtmp/flowplayer.rtmp/flowplayer.rtmp-3.2.12.swf",
                netConnectionUrl: 'rtmp://example.com/rtmp'
            }
        },
        clip: {
            provider: 'rtmp',
            scaling: 'fit',
            url: 'mp4: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版の本体を指定します。
      rtmp : プラグインIDになります。
      “…/flowplayer.rtmp-3.2.12.swf” : RTMPプラグインの本体を指定します。
      provider: ‘rtmp’ : プラグインIDを指定します。
      url: ‘mp4:sample.mp4’ : 動画ファイルを指定します。(/var/www/html/rtmp からの論理パスで指定します)


    flv形式のファイルでも同じように設置できます。
    先の url: ‘flv:sample.flv’ のように指定するだけでOKです。

実際にmp4を見てみましょう

さて、ここまでできたら、実際にmp4を見てみましょう。
上記の例でいうと、”http://example.com/rtmp/flowplayer.html” へアクセスしてみてください。

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

    ちゃんと見たいところへ移動できればOKです。
    この際、C++ RTMP Server(crtmpserver)には、以下のように sample.mp4 へのアクセスログが出力されます。

    ...
    /thelib/src/protocols/rtmp/basertmpappprotocolhandler.cpp:1043 Play request for stream name `mp4:sample.mp4`. Start: 0; length: -1
    /thelib/src/application/baseclientapplication.cpp:257 Stream IFR(3) with name `/var/www/html/rtmp/sample.mp4` registered to application `flvplayback` from protocol IR(2)
    ...

いかがだったでしょうか?
案外、簡単にYouTubeもどきのサイトが構築できます。ただし、かなり、重たくなるので注意が必要です。
帯域制限などの対策は、十分に考える必要があると思います。

帯域制限の詳細は、
nginx で帯域制限をかける(limit_rate を使ってみる)
apache で帯域制限をかける(mod_bw モジュールを使ってみた)
を参照してください。

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


関連記事 :

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

apache では、動画(flv,mp4)を制御するための モジュールとして mod_flvx,mod_h264_streaming があります ...

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

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

仮想マシンを使って Android x86 を インストール、kindleで電子Bookを読むまで

Android x86とは、 いわゆる Android のPC版OSです。 Android は、Googleによって開発されたスマートフォン ...

yum を使って DVDからパッケージをインストールする

今回は、DVDからのパッケージのインストールです。 通常、CentOSに限らずほとんどのLinuxディストリビューションは、インターネットを介 ...

VMWareでハードディスク増設

VMWareでいろんなアプリをインストールすると、ディスク不足に陥ることが良くあります。 そんな時は、仮想ディスクの増設を行う必要があります。 ...


13 件 コメントがあります。 コメントを投稿する
  1. 三井 洵
    2013年6月13日, 2:27 PM

    非常に詳しい解説、参考になり有り難うございます。

    ところで「Flowplayer」は現在何処からもダウンロード出来ない様ですが、私の操作の間違いでしょうか。肝心のサイトのdownloadの場所が「404 Not found」になってる様子で何か代替え品が出来て不要になったのでしょうか。
    何かヒントを頂ければ幸いです。

  2. 管理人
    2013年6月14日, 6:32 AM

    三井さん
    コメントありがとうございます。管理人です。
    され、先のURLですが、一応、2013.6.14.AM6:30 こちらで確認しました。
    正しくページへ飛びましたし、ダウンロードもできました。特に問題ないようですが・・・。
    もし、404など変なところへ飛ぶようであれば、そのURLを是非このコメント欄でも、問い合わせでも結構ですので、お知らせいただけると助かります。
    よろしくお願いいたします。

  3. 三井 洵
    2013年6月15日, 10:01 AM

     管理人 様

    早速のご丁寧なご返事有り難うございます。

    恥ずかしながら、ダウンロードの「初歩の初歩」、「基本の基」をすっかり忘れてました。
    マウスの「左クリック」では 「404 Not Found」になりますが、「右クリック」→「名前を付けてリンク先を保存」でしたね。これで解決です。

    誠に、つまらぬ事にお手数をお掛けしまして申し訳ありませんでした。

  4. 管理人
    2013年6月15日, 11:23 AM

    三井さん
    返信ありがとうございます。管理人です。
    とりあえず、ダウンロードできて良かったですね、また何かお気づきの点がありましたら、ご一報ください。

  5. 三井 洵
    2013年6月15日, 3:20 PM

    管理人 様

    度々で申し訳ありません。
    管理人様がダウンロードの手引きに、赤枠で囲ってある「Download ZIP」をマウスの右クリックで“名前をつけてリンク先を保存」で解決済みと思っておりましたが、ダウンロードした実際のデレクトリで「flowplayer-3.2.16.zip」は中身がカラッポで使えませんでした。
    私の早とちりで、やはりファイルの入手は出来ませんでした。

    赤枠で囲ってある「Download.ZIP」を左クリックの場合 404 Not Found (小さい文字でnginx/1.2.9 とも書かれてます) になると申しましたが、その時のURLは http://releases.flowplayer.org/flowplayer/flowplayer-3.2.16.zip になっております。 又、その下の http://flash.flowplayer.org/plugins/streaming/rtmp.html も同様に3種類のファイルをクリックすると 404 Not Found でやはりファイルの入手が出来ません。
    一時は「解決」と申しましたが、何故か私の環境ではNGです。 ファイルのダウンロード一つ出来ないなど、情けない限りです。

    ご多忙中、お騒がせ誠に申し訳ありません。

  6. 管理人
    2013年6月16日, 1:33 AM

    三井さん
    コメントありがとうございます。管理人です。
    こちらで確認する限り、
    http://releases.flowplayer.org/flowplayer/flowplayer-3.2.16.zip
    で、ちゃんとダウンロードできました。
    もちろん中身もちゃんと入っています。
    こちらで確認した環境は、
    Windows 8 + FireFox
    Windows 8 + IE
    Windows 8 + Chrome
    です。Linuxによるwgetコマンドでもダウンロードできましたので、三井さんの端末のOSあるいは環境?の問題ではないかと思います。
    まずは、Windowsで試されてはいかがでしょう。

  7. 三井 洵
    2013年6月16日, 11:30 AM

    管理人 様

    何度もお手数お掛けして申し訳ありません。

    ご指摘の通り私のネット環境が原因の様で、ルーターに繋がってる4台のPC全てが同じ現象でした。
    で、全く私宅のネットワークとは無関係に「スマホ」のテザリング機能を使いFedora Core 17のノートPCで受信したところ、あっさりダウンロードが出来ました。勿論中身もちゃんと入っています。

    私宅のPCやサーバーは全てプライベートアドレスで割り当て運用してますが、ルーター(コレガ製)に何か問題があるのかも判りません。20年PCに触れていて、初めての経験です。
    404 Not Found nginx/1.2.9 なるメッセージが、何が原因で生じるのか、ゆっくり研究してみます。

    今回は、管理人様のおかげで本当に助かりました。 熱く御礼申し上げます。

     有難うございました。

  8. 管理人
    2013年6月17日, 6:49 AM

    三井さん
    返信ありがとうございます。管理人です。
    とりあえず、ダウンロードできて良かったですね。原因究明も何やら(個人的には)興味深そうですが、おっしゃるとおり、ルータが怪しそうですね、早い解決をお祈りいたします。また、何かありましたら、ご指摘ください。

  9. 白虎
    2014年6月8日, 9:35 AM

    管理人様

    こんにちは、お世話になります。

    C++ RTMP Serverのダウンロードですが、32bitOS(WindowsXP)では、どれを選択すれば
    良いのでしょうか。

  10. 管理人
    2014年6月8日, 8:15 PM

    白虎 さん

    コメントありがとうございます、管理人です。
    んーっ、Windows上で C++ RTMP Serverを動かしたいということでしょうか?
    たぶん、できないんじゃないかなぁと思います。
    Windows上にVMWareなどでCentOSなどのLinuxを動かせば、そこで動くと思いますが、Windows上では、自分でコンパイルしてみるしかないのでは?(cygwinなど駆使すればできるかもしれませんが、大変そうです)と思います。

    すみません、これで回答になっていますでしょうか。

  11. 白虎
    2014年6月8日, 8:31 PM

    管理人様

      アドバイス有難う御座いました。
      確かにWindowsPC上に、動画を置いて、Youtubeみたいな事出来ないかと
      考えてたのですが、これでは出来ないんですね><

  12. しろねこ
    2016年2月14日, 6:36 AM

    初めてお目にかかります
    大変お手数ですが
    http://flash.flowplayer.org/download/
    が 使えないようです
    現在のURLをご存知でしたらご教授いただけませんか?

  13. 管理人
    2016年2月17日, 6:37 AM

    にしろねこさん
    コメントありがとうございます、管理人です、
    https://flowplayer.org/latest/
    が最新のURLのようです。HTML5対応版となるみたいですね。
    ここの記事は、もっと古いもので確認、記述したものですので、もし古いものが良ければ、flowplayer download で検索されると ver 3.xx の古いバージョンがあるかと思います。


コメントを投稿 :

お名前 *

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

サイトアドレス

コメント *

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




最近投稿の記事

[ 画像提供元 : 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.2439 [s]