2018年8月19日日曜日

Red5 で RTMP を使ってライブ配信してみる

概要

Red5 はオープンソースの動画配信エンジンです
ストリーム配信できるのが特徴です
今回は構築から RTMP を使ったライブ配信の方法まで紹介します
OBS を使うのでプライベート Youtube Live のようなことができるようになります

環境

サーバ

  • Ubuntu 16.04
  • OpenJDK 9 (build 9-internal+0-2016-04-14-195246.buildd.src)
  • Red5 1.0.10 Milestone 9

クライアント

  • macOS X 10.13.5
  • OBS 21.1.1

JDK インストール

Red5 は Java (JDK) がないと動作しません
今回は OpenJDK を使います
OracleJava が良い場合は公式から Linux 版をダウンロードして Ubuntu 上に展開してください

  • apt -y update
  • apt -y instsall openjdk-9-jdk-headless

Red5 インストール

  • mkdir -p /usr/share/red5
  • export RED5_HOME=/usr/share/red5
  • cd $RED5_HOME
  • wget 'https://github.com/Red5/red5-server/releases/download/v1.0.10-M9/red5-server-1.0.10-M9.tar.gz'
  • tar zvxf red5-server-1.0.9-RELEASE.tar.gz
  • mv red5-server/* .

Red5 サーバ起動

  • ./red5.sh &

http://localhost:5080 にアクセスすると Red5 の管理画面が表示されます
ufw などでポートを閉じている場合はオープンしましょう

Flash のインストール

Red5 は動画を再生するのに基本的に Flash で動作します
VOD も Live も変わりません
面倒ですが素直にインストールしましょう
Chrome であれば有効にすれば OK です

ライブ配信してみる

構築が完了したのでライブ配信してみましょう
OBS の設定をしていきます

プロファイルの作成 (任意)

OBS に YoutubeLive や Twitch の配信設定をすでにしている場合は今回の Red5 用にプロファイルを作成するといいでしょう
red5_with_obs1.png

特に上書きしても問題ない場合はプロファイルの作成は必要ありません

ストリーミングサーバの設定

ストリーミングサーバの設定をします
構築した Red5 の RTMP プロトコルを LISETN しているポートを指定します
red5_with_obs2.png

  • URL・・・rtmp://xxx.xxx.xxx.xxx:1935/live
  • ストリームキー・・・testLive

URL の IP 部分は構築した自身の Red5 サーバの IP を指定してください
ストリームキーは動画を再生するときに必要になります
任意の文字列で OK なので好きな文字列を設定してください

出力設定

出力設定をします
この設定は Red5 推奨の設定になります
おそらくデフォルトの設定でも配信はできるはずですが今回は推奨設定を使います
red5_with_obs3.png

  • 出力モード・・・詳細
  • エンコーダ・・・x264 (ストリーミングサービスのエンコーダ設定を適用するにチェック)
  • 出力をリスケールする・・・640x480
  • レート制御・・・VBR
  • ビットレート・・・750
  • CRF・・・23
  • キーフレーム間隔・・・2
  • CPU 使用のプリセット・・・verfast
  • プロファイル・・・baseline
  • チューン・・・fastdecode

こんな感じです

映像配信設定

先程リスケールしたサイズに合わせます
red5_with_obs4.png

スクリーンキャプチャ設定

ライブで配信する際の映像情報を設定します
OBS の場合「ソース」から表示したい映像リソースを追加すれば OK です
今回は適当に「ウィンドウキャプチャ」を追加して Finder の情報を表示しておきます
red5_with_obs5.png

動作確認

これで配信の準備が整ったので配信を開始します

見る側の設定

今回は Red5 のデモで使用しているビューワをそのまま使います
本来であれば自分で HTML + JavaScript を使ってプレイヤーを再生するのですが面倒なのでありものを使います

Red5 のトップ画面にアクセスします
そして「Launch a demo」->「Publisher」->「View demo」と進みます
設定画面になったら

  • Name・・・testLive
  • Location・・・rtmp://xxx.xxx.xxx.xxx:1935/live

と入力します
配信する側も視聴する側も同じ URL とストリームキーにアクセスします
red5_with_obs6.png

入力したら「Connect」ボタンを押せば上記の画面のように接続状態になります (画面の Close ボタンが未接続の場合 Connect になっている)

あとは「Play」ボタンを押せば配信を見れるようになります

配信する側の設定

特にないです
OBSで「配信開始」ボタンを押せば OK です
ステータスが緑になれば Red5 の RTMP に接続され映像の配信が開始されています

この状態で Red5 のプレイヤーで「Play」を押せばライブ配信が見れると思います
red5_with_obs7.png

キャプチャする画面などを変更すればちゃんとプレイヤー側も変わります
ラグですがだいたい 3 - 5 秒くらいありました
この辺りは環境や設定によってもっと改善するとは思います

トラブルシューティング

OBS で配信開始した際に何度も切断される場合があります
以下のような Exception が発生していました

  • ProtocolException: Error during decoding
  • NumberFormatException: For input string: "2.1"

このあたりの Exception が発生してうまく配信開始できない場合は以下が原因です
https://github.com/Red5/red5-server/issues/250

解決方法は 1.0.10 系の Red5 を使いましょう
そのバージョンであれば対処されています

また FW の設定も見直しましょう
OBS が動作している環境から Red5 が動作している RTMP サーバに対して通信できる必要があります
1935 ポートは当然ですが今回は管理画面のプレイヤーを使うので 5080 なども必要です
できれば OBS 環境からはフルアクセスできると良いと思います

最後に

Red5 + OBS を使って自分だけのライブ配信環境を構築してみました
Red5 自体の構築はかなり簡単にできましたが、OBS 側の設定の RTMP の設定に少し苦戦しました

Red5 は再生する側に Flash Player が必要なのでそこは少し残念な感じがします

Red5 にはマルチテナントの機能がないので基本的には 1 Red5 = 1 User になるかなと思います
複数のユーザで 1 つの Red5 を共有したい場合は現状はストリームキーなどで分けるしかないかなと思います

あとはもし Red5 を使って配信するのであればプレイヤーの開発も必要かなと思います
今回はデモ用のプレイヤーを使ったので特にコーディングはしませんでしたが、さすがにあれば丸出しするのは微妙なので実際は専用のプレイヤーを開発する必要があると思います

参考サイト

0 件のコメント:

コメントを投稿