経緯
- 音声通話の技術検証として、WebRTC SFUに着目
- リモート勤務の人にもデモを触ってもらうため AWS 上で構築
mediasoup-demo
- mediasoup のデモ版 (https://github.com/versatica/mediasoup-demo)
- クライアント、バックエンドがセットになっている
- https://v3demo.mediasoup.org/ でオンラインデモが試せる(カメラ、マイクの接続あり)
構築
- EC2で Ubuntu を起動し、必要モジュールをインストール
- GitHub から mediasoup-demo を clone する
- ドメインの取得及び証明書の取得を行う
- mediasoup-demoを起動する
EC2で Ubuntu を起動し、必要モジュールをインストール
- Ubuntu 20.04 LTS を利用
- t3.medium / SSD 10GBで起動
- Google Chrome で動作確認
- UDPを解放する必要があるので、AWSのセキュリティグループに注意
- 必要なモジュールは以下の通り (https://mediasoup.org/documentation/v3/mediasoup/installation/)
- nodejs 12.0 以降
- python 3.6 以降 & python3-pip
- build-essential (make 及び gcc)
- yarn (npm で install)
- nginx
- certbot-nginx
sudo apt update
# npm install
sudo apt install npm -y
# nvm install
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
# node 14.x install
nvm list-remote | grep v14
# v14.x latest
nvm install v14.18.2
nvm use v14.18.2
# 確認
node -v
# python3
sudo apt install python3 python3-pip -y
# build-essential
sudo apt install build-essential -y
# yarn
sudo npm -g install yarn
# nginx
sudo apt install nginx -y
# certbot
sudo apt install certbot python3-certbot-nginx -y
セッション落として再接続
GitHub から mediasoup-demo を clone する
cd ~
git clone https://github.com/versatica/mediasoup-demo
ドメインの取得及び証明書の取得を行う
- セキュリティグループの設定でTCP/UDPを解放する
- TCP/80, TCP443
- TCPとUDPの well-known ポート以外(1024-65535)を解放 (こんなに開けなくても良い)
- AWS で Elastic IP を取得。起動した EC2に割り当て
- 自由に利用できるドメインがあれば A レコードで 取得した Elastic IP を追加。
- 手頃なドメインが無ければ freenom とかで取得
- nginx の設定を変更
- /etc/nginx/sites-available/default を変更
- TCP/3000 がクライアントアプリ待ち受けになるので、ポートフォワードしたいひとはしてください
sudo vim /etc/nginx/sites-available/default
### ここを変更
server_name xxx.example.com
- certbot で証明書を取得
- 対話は良い感じに設定してください。省略します
sudo certbot --nginx
- certbot で取得した証明書を mediasoup-demo/server/certs にコピー
# certbot で取得した証明書のパスはドメインで変わります
mkdir ~/mediasoup-demo/server/certs
sudo cp /etc/letsencrypt/live/xxx.example.com/fullchain.pem ~/mediasoup-demo/server/certs/fullchain.pem
sudo cp /etc/letsencrypt/live/xxx.example.com/privkey.pem ~/mediasoup-demo/server/certs/privkey.pem
sudo chown ubuntu:ubuntu ~/mediasoup-demo/server/certs/fullchain.pem
sudo chown ubuntu:ubuntu ~/mediasoup-demo/server/certs/privkey.pem
mediasoup-demoを起動する
- server と app (クライアント) の両方を起動する必要がある
- セッション2つ開くなりしてください
# サーバ
cd ~/mediasoup-demo/server
cp config.example.js config.js
yarn install
- サーバ側はconfig.jsの書き換えが必要
- domain を 自分のドメインに変更
- listenIp を 0.0.0.0 に変更
- 以下のような箇所が二つあるので両方変更
listenIps : [
{
ip : process.env.MEDIASOUP_LISTEN_IP || '0.0.0.0',
announcedIp : '1.2.3.4' // ここをelastic ip に変更
}
]
- サーバ側の起動
yarn start
- クライアント側の起動
# クライアント
cd ~/mediasoup-demo/server
yarn install
yarn start
- エラーで怒られた場合は、モジュールが足りてない可能性が高いので追加でインストール
- 起動確認
- https://あなたのドメイン:3000 で https://v3demo.mediasoup.org/ と同じ画面が出てくれば OK
- 左上が CONNECTになっていればOK