無料でライブ映像配信サーバを構築 rtmp-module

nginxに rtmp-moduleを組み込みvideo.jsを利用してwebでライブ映像配信する方法も定型化してきたので、まとめてみます。とりあえずこのサイトを確認すれば一通り設定方法が分かるというページ構成を目指してみます。

ただ、まとめてみると、かなり要素がありますね。どうしても概要的なページになりそうです。詳しくは一つ一つ解説したサイトを見ていただいた方がいいかも。

エンコーダはOBSを利用し、on_playを通して、ユーザ名・パスワード文字列が合致しないと配信できない仕組みにします。

セキュリティはセキュアリンク機能を利用して、配置したwebプレーヤでないと見れないようにします。また、そのwebプレーヤは、nginxにてベーシック認証されたものだけ閲覧を許可します。

コントロールパネルを設置して、どのくらいの人が閲覧しているかを確認できるようにします。

nginxのサイトから、stableの最新バージョンをダウンロードします。mainlineでも構わないかもですが、私は安定性にこだわりたいので、stableを選択しています。

https://nginx.org/en/download.html

wget https://nginx.org/download/nginx-1.12.2.tar.gz

(windowsではない方をダウンロードします。)

arutさん作のnginx-rtmp-moduleをgit cloneします。

https://github.com/arut/nginx-rtmp-module

コンパイルするために必要なプログラムをapt-getして、解凍されたnginxソースフォルダに入り .configureした後 make installします。ご自分の環境に合わせてディレクトリ階層をご検討ください。

セキュアリンクを利用したい時にこのオプションを利用します。

–with-http_secure_link_module

PHPを実行する際に実行権限を与えるためこのオプションを利用します。

–user=www-data –group=www-data

※Debian系Linuxの場合、webを実行するユーザがwww-dataになるので、ユーザを指定しておきます。

※インストールから映像配信できるかまでの単純な解説はこちらへ

ubuntuで設定する場合と、Debianで設定する場合、バージョンなどに若干違いがあり、コンフィグの書き方に差が出ます。

ubuntuの場合

Debianの場合

※詳しい解説はこちらへ

 

再生時にセキュアリンクをつけているのが大きな特徴です。セキュアリンクがないと

rtmp://サーバー名/配信ポイント

とすると、誰でもアクセスされてしまいます。特にhttpのベーシック認証などは通らなくても上記は有効になってしまいセキュリティ的に問題です。そこで、日時によるハッシュ生成し、指定された計算方法でハッシュ値が合致しないと表示させないのがセキュアリンクです。

私の場合は、プレーヤ側でハッシュ値を算出する部分をPHPで実現しました。そこで、PHPも有効になっている必要があります。そのPHPのページはベーシック認証にて保護してあります。

ubuntuの場合(PHPのfastcgi_passがdebianと変わる)

※セキュアリンクの基本的な考え方・構築方法はこちら

※セキュアリンクを映像配信に利用する

Debianではこのように設定してうまくいっています

liveの中でphpにパスワードをかけるようにしている理由は、publishauthディレクトリにパスワードがかからないようにするためです。on_playをとおしてauth.phpを開く際にパスワードがかかっているとエンコーダから配信サーバに向けての配信時認証がかからなくなってしまいます。

設定途中でうまくいっているか確認したくなります。起動スクリプトを作成する前だったら

nginxの起動

/usr/sbin/nginx

nginxの終了

/usr/sbin/nginx -s stop

nginxの再起動

/usr/sbin/nginx -s reload

というコマンドで試す事ができます。コンフィグに書き間違いなどがあるとこの時点で起動できないので分かります。

webプレーヤを配置します。まずはvideo.js,videojs-contrib-hls,videojs-contrib-media-sourcesを取得します。

取得したjsファイルを、httpでアクセスできる位置に配置します。

hls自動速度調整したい場合は、こちらも一緒に配置するls

なんか良く分からないエラーが出ました。私はnpmの事は良く分からないのですが、色々情報をあさりながら

とする事で無事build出来ました。どうもapt-get で入るNode.jsのバージョンが古いせいなのか?と思いますがはっきり断定できません。とりあえず

videojs-contrib-quality-levels/dist内に作成された

videojs-contrib-quality-levels.min.js

もvideojsフォルダに放り込みます

エンコーダから映像配信サーバに映像配信を始める際に、パスワード文字列が合わないと映像配信できないようにする事が出来ます。

auth.php を任意の場所に配置します。

※詳しい説明はこちら

OBSを利用して配信開始します。

配信ポイントはこのように設定します
rtmp://サーバIP/live/streamkey?user=user&pass=passwd

?から後は通常必要ありませんが、nginx.conf で、on_publishを設定し、上記auth.phpで認証情報を保存してあるので、これを使います。この事で配信ポイントがばれて、誰でもエンコーダから映像が送れるような事がないようにします。

※詳しい解説はこちら

Basic認証を行うためにapacheのモジュールを利用してパスワードファイルを作成します。

※ベーシック認証を行うのはこちら

※PHPファイルにも認証をかけるためにはひと手間あります

 

セキュアリンクを有効にした形で、webプレイヤーを利用できるようにします。secretkeyは、nginx.confで設定したものと文字列を合わせます。できたmd5ハッシュコードは1時間有効です。もし漏れたとしても、1時間のうちにアクセスしないとその後は拒否されます。

映像配信サーバを構築すると、どのくらいのアクセス数があるのか、どのくらいの帯域幅で映像配信がされているのか知りたくなります。回線状況に合わせて運用を変える必要もでてきます。nginx rtmp-moduleには、便利なアクセス統計情報をwebで表示できる機能があります。

※詳しくはこちら

stat.xslの情報元はこちらからコピーします

コピーしたstat.xslファイルをトップに置きます。そのまま直接stat.xslファイルにアクセスできるようにしてもいいですが、他のサーバのstatファイル参照や、録画ボタン生成のため、これをカバーするhtmlを作成しました。

 

init.dから起動できるようにします。さらに再起動時自動的にnginxが起動されるようにします。

※詳しくはこちら

nginx.confに追記

スクリプトに実行権限を与える

起動スクリプトの登録

 

 

 

1件のコメント

コメントは停止中です。