はじめに
RustのRTMPサーバーを、GCPにデプロイしてOBSで動作確認できたので備忘録的に残しておきます。
あまりプログラムの部分は書いていないので、動作を確認するのがメインになるかと思います。
サンプルのプログラム
https://github.com/KallDrexx/rust-media-libs/tree/master/examples/threaded_rtmp_server
今回はこのリポジトリの、threaded_rtmp_server
の、ライブラリのバージョンを
[package]
name = "everlong"
version = "0.1.0"
authors = ["Papillon6814 <41826375+Papillon6814@users.noreply.github.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
slab = "0.4.2"
bytes = "0.5.4"
rml_rtmp = "0.3.2"
このように調整して、実行しました。
Google Compute Engineの仮想インスタンスの作成
次は、GCPにアクセスして、VMインスタンス
を作成します。

VMインスタンス
は、仮想でつくられたサーバーのようなものです。
インスタンスを作成
というところを選択すると、VMインスタンスの作成ページへと遷移します。
そこにはこのように入力しました。
- 名前: instance-2
- マシンの構成
- シリーズ: N1
- マシンタイプ: n1-standard-2
- ディスクイメージ: Ubuntu 18.04.1 LTS x86_64
- HTTPトラフィックを許可する
- HTTPSトラフィックを許可する
これでVMインスタンスを作成します。
GCPで、RTMP通信用のポート1935を開ける
VPCネットワーク
から、ファイアウォールルール
を選択します。

そして、ファイアウォールルールを作成
というボタンから、RTMP通信用のポート1935でのTCP通信を許可します。

このような内容で新しいルールを作成しました。
VMインスタンスにファイアウォールルールを適用する
ルールを作成しただけでは、VMインスタンスに適用されないので手動でルールを設定してあげます。
VMインスタンスの編集画面に行き、

ネットワーク タグ
という項目に先程作成したallow1935-server
を追加します。
Cloud SDKの導入
terminalからssh接続がしたかったので、Google Cloud SDK
を導入します。
以下のリンクを参考に導入ができると思います。
自分のVMインスタンスにssh接続
Cloud SDK
が導入できたら、自分のVMインスタンスにssh接続します。
GCPのVMインスタンス
のページから、ssh接続するためのgcloudコマンドを表示
という項目を選び、コマンドを自分のターミナルで実行します。

すると、自分のVMインスタンスにssh接続できるかと思います。
VMインスタンスでのRustの導入
VMインスタンス上でもRustを実行できるようにしないといけないので、ssh接続をしたターミナルでRustのインストール用のコマンドを実行します。
~$ curl https://sh.rustup.rs -sSf | sh
このコマンドでRustの実行環境が導入できます。
RustのRTMPサーバーの導入
ssh接続しているVMインスタンス上で、
mkdir ~/Documents
cd ~/Documents
mkdir ./Github
cd ./Github
git clone https://github.com/Papillon-inc/Everlong.git (ここは自分のクローンしたいリポジトリ)
を実行します。
これで、RTMPサーバーが導入できました。
サーバーの実行
Cargo.toml
のある階層で、
cargo build
./target/debug/[プロジェクト名]
でプログラムを実行します。
$ ./target/debug/everlong
Listening for connections on 0.0.0.0:1935
このように、1935番ポートでRTMPの受付が始まりました。
OBSで、サーバーが反応していることを確認
OBSを開き、
設定
の配信
を開きます。

このサーバー
の欄に、VMインスタンスのグローバルIPと1935からなるURLを入力します。
rtmp://???.???.???.???:1935
こういう感じです!
ストリームキーはとりあえず今回はなんでもいいです。
そして、キャプチャするものをOBSで選択し、配信開始
ボタンを押すと、

このように、RTMPの通信に反応していることを確認できます!
おわり
iosのHaishinKit
を使ってのRTMPサーバーへの接続もうまくいったので、機会があったらまとめてみようかと思っています。
今回のサーバーはとりあえず動いてくれて嬉しかったです。
参考リンク
https://ticktakclock.hatenablog.com/entry/2018/09/12/203900
https://qiita.com/yoshiyasu1111/items/0c3d08658560d4b91431