YouTubeのようなストリーミング配信するRTMPサーバーをたててみる( C++ RTMP Server(crtmpserver)を使ってみた)
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
下記の記事では、Pseudo streaming(疑似ストリーミング)で動画配信を行う方法について、簡単に解説してみました。
今回は、Pseudo streaming(疑似ストリーミング)でなく、本当のストリーミング配信を行ってみます。
YouTube のようなストリーミング配信を行うには、RTMP (Real Time Messaging Protocol)サーバーが必要になります。
正確には、
Flash を使ってライブストリーミング(生放送)を実現するためには、RTMP サーバーが必要になります。
先の記事でも、結局、ブラウザ側では、Flash Playerが動作します。
Flash Player 上で動いている .swf ファイルのクライアントと、動画情報を配信するサーバーとの間で通信することになるわけですが、
その通信をつかさどるプロトコルが、RTMP (R eal T ime M essaging P rotocol)となります。
そのプロトコル 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) をインストールします。
インストールするには、
のいずれかになります。
ここでは、簡単な方法でバイナリパッケージをダウンロードしてやってみます。
バイナリパッケージをダウンロードします。
上記のとおりディストリビューションによって、それぞれ用意されていますので、対応するバイナリパッケージをダウンロードします。
$ wget http:// rtmpd. com/ assets/ binaries/ 784/ crtmpserver- 1. 1_beta- x86_64- CentOS_6. 2. tar. gz
$ wget http:// rtmpd. com/ assets/ binaries/ 784/ crtmpserver- 1. 1_beta- x86_64- Debian_6. 0. 5. tar. gz
$ wget http:// rtmpd. com/ assets/ binaries/ 784/ crtmpserver- 1. 1_beta- x86_64- Ubuntu_12. 04. tar. gz
ダウンロードしたパッケージを解凍します。
ダウンロードしたパッケージは、単純なtar+gzip ファイルになっていますので、tarで解凍するだけでインストールしたことになります。
ここでは、/usr/local/lib64/crtmpserver-1.1 へ解凍することにします。
( 32bitOSの場合は、/usr/local/lib/crtmpserver-1.1 としておきましょう。ただし、ここでの解説は、すべて64bit版での解説となります。)
$ mkdir / usr/ local/ lib64/ crtmpserver- 1. 1
$ tar xfz crtmpserver- 1. 1_beta- x86_64- CentOS_6. 2. tar. gz - C / usr/ local/ lib64/ crtmpserver- 1. 1
$ ls / usr/ local/ lib64/ crtmpserver- 1. 1
crtmpserver-1.1_beta-x86_64-CentOS_6.2
$ 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
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-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言語で記述されていますので、– – は、コメントを意味します。
C++ RTMP Server(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を使って、動画配信を確認してみます。
では、早速、以下の手順で動画プレイヤーを設置します。
以下のURLからFlowplayer Flash版をダウンロードします。
http://flash.flowplayer.org/download/
商用版は、有料となります。ここでは、試用が目的なのでGPLライセンスの元 ダウンロードします。
以下のURLから RTMP プラグインをダウンロードします。
http://flash.flowplayer.org/plugins/streaming/rtmp.html
ページの最下部にダウンロードの箇所があります。
ダウンロードしたファイルを解凍します。
ここでは、公開ディレクトリ /rtmp の配下に構築したいので、以下のように解凍します。
/rtmp
+ /flowplayer
| + flowplayer-3.2.12.min.js
| + flowplayer-3.2.16.swf
| + flowplayer.controls-3.2.15.swf
|
+ /flowplayer.rtmp
+ flowplayer.rtmp-3.2.12.swf
動画を見るためのページを作成します。
ここでは、公開ディレクトリ /rtmp の直下に flowplayer.html というファイル名で作成します。
準備するものとして、以下の2つを準備します。
ここまで準備ができたら、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” へアクセスしてみてください。
まず、以下のように最初に見せるタイトル画面イメージ ( title.jpg ) が表示されたと思います。
タイトル画面をクリックすると動画が始まります。
タイムスライダの見たいところをクリックしてみます。
ちゃんと見たいところへ移動できれば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)
...
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
関連記事 :
2013年6月13日, 2:27 PM
非常に詳しい解説、参考になり有り難うございます。
ところで「Flowplayer」は現在何処からもダウンロード出来ない様ですが、私の操作の間違いでしょうか。肝心のサイトのdownloadの場所が「404 Not found」になってる様子で何か代替え品が出来て不要になったのでしょうか。
何かヒントを頂ければ幸いです。
2013年6月14日, 6:32 AM
三井さん
コメントありがとうございます。管理人です。
され、先のURLですが、一応、2013.6.14.AM6:30 こちらで確認しました。
正しくページへ飛びましたし、ダウンロードもできました。特に問題ないようですが・・・。
もし、404など変なところへ飛ぶようであれば、そのURLを是非このコメント欄でも、問い合わせでも結構ですので、お知らせいただけると助かります。
よろしくお願いいたします。
2013年6月15日, 10:01 AM
管理人 様
早速のご丁寧なご返事有り難うございます。
恥ずかしながら、ダウンロードの「初歩の初歩」、「基本の基」をすっかり忘れてました。
マウスの「左クリック」では 「404 Not Found」になりますが、「右クリック」→「名前を付けてリンク先を保存」でしたね。これで解決です。
誠に、つまらぬ事にお手数をお掛けしまして申し訳ありませんでした。
2013年6月15日, 11:23 AM
三井さん
返信ありがとうございます。管理人です。
とりあえず、ダウンロードできて良かったですね、また何かお気づきの点がありましたら、ご一報ください。
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です。 ファイルのダウンロード一つ出来ないなど、情けない限りです。
ご多忙中、お騒がせ誠に申し訳ありません。
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で試されてはいかがでしょう。
2013年6月16日, 11:30 AM
管理人 様
何度もお手数お掛けして申し訳ありません。
ご指摘の通り私のネット環境が原因の様で、ルーターに繋がってる4台のPC全てが同じ現象でした。
で、全く私宅のネットワークとは無関係に「スマホ」のテザリング機能を使いFedora Core 17のノートPCで受信したところ、あっさりダウンロードが出来ました。勿論中身もちゃんと入っています。
私宅のPCやサーバーは全てプライベートアドレスで割り当て運用してますが、ルーター(コレガ製)に何か問題があるのかも判りません。20年PCに触れていて、初めての経験です。
404 Not Found nginx/1.2.9 なるメッセージが、何が原因で生じるのか、ゆっくり研究してみます。
今回は、管理人様のおかげで本当に助かりました。 熱く御礼申し上げます。
有難うございました。
2013年6月17日, 6:49 AM
三井さん
返信ありがとうございます。管理人です。
とりあえず、ダウンロードできて良かったですね。原因究明も何やら(個人的には)興味深そうですが、おっしゃるとおり、ルータが怪しそうですね、早い解決をお祈りいたします。また、何かありましたら、ご指摘ください。
2014年6月8日, 9:35 AM
管理人様
こんにちは、お世話になります。
C++ RTMP Serverのダウンロードですが、32bitOS(WindowsXP)では、どれを選択すれば
良いのでしょうか。
2014年6月8日, 8:15 PM
白虎 さん
コメントありがとうございます、管理人です。
んーっ、Windows上で C++ RTMP Serverを動かしたいということでしょうか?
たぶん、できないんじゃないかなぁと思います。
Windows上にVMWareなどでCentOSなどのLinuxを動かせば、そこで動くと思いますが、Windows上では、自分でコンパイルしてみるしかないのでは?(cygwinなど駆使すればできるかもしれませんが、大変そうです)と思います。
すみません、これで回答になっていますでしょうか。
2014年6月8日, 8:31 PM
管理人様
アドバイス有難う御座いました。
確かにWindowsPC上に、動画を置いて、Youtubeみたいな事出来ないかと
考えてたのですが、これでは出来ないんですね><
2016年2月14日, 6:36 AM
初めてお目にかかります
大変お手数ですが
http://flash.flowplayer.org/download/
が 使えないようです
現在のURLをご存知でしたらご教授いただけませんか?
2016年2月17日, 6:37 AM
にしろねこさん
コメントありがとうございます、管理人です、
https://flowplayer.org/latest/
が最新のURLのようです。HTML5対応版となるみたいですね。
ここの記事は、もっと古いもので確認、記述したものですので、もし古いものが良ければ、flowplayer download で検索されると ver 3.xx の古いバージョンがあるかと思います。