ハトネコエ Web がくしゅうちょう

プログラミングやサーバー・Web制作、チームマネジメントなど得た技術のまとめ

Jitsi Meet を使って自鯖でビデオチャットサービスを動かしてみた

外出自粛でビデオチャットが流行

新型コロナウイルスの影響もあって、いろんなビデオチャットサービスが出ていますね。
ZOOMは色々ありましたが、すぐにセキュリティ対策に乗り出したおかげで、画質と通信の安定性や料金のバランスが取れているため依然強いです。

料金は高いですが「席の移動」という概念がある Remo はおもしろそうですし、
今は無料で公開されている、距離の概念がある Spatial Chat も流行りつつあります。
ネット配信のようにPC画面を背景に映せる mmhmm というのも最近出てきました。

(参考)

こういうサービスを使うのも楽しいですが、
エンジニアですし、無駄に自鯖独自ドメインビデオチャットルームを立ち上げたくなりますよね? ね?

というわけで Jitsi Meet を使ってみました!

Jitsi Meet 構築にあたり

環境構築をやったのが3ヶ月前の4月なのでハマリポイントを全然覚えていなくてすみません。
今記事では具体的な構築手順を省略させていただきます。

Jitsi Meet(ビデオ会議システム)のサーバを Docker Compose で起動する手順』の記事を参考に、
docker-jitsi-meetVPS上で動くよう、Ansible Playbook を書いて立ち上げました。

nginx の設定としては以下のようにしました。

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # 中略

    location / {
        proxy_pass https://localhost:4443;
    }

    location ~ .*\.(mp3|wav) {
        expires 7d;
        proxy_pass https://localhost:4443;
    }

    location = / {
        auth_basic "Please input username and password";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

サイズが大きく、かつ、中身が変わるわけではない音声ファイルはクライアント側にキャッシュさせるようにしたこと、
ルートには自分だけ入れればいいのでBASIC認証をかけたこと、が普段の設定とは異なった点でしょうか。
(ルートにBASIC認証をかけましたが、 /hogehoge などにアクセスすれば誰でも部屋が作成できてしまうので実はほとんど意味がありません……)

VPS としては DigitalOcean を選び、Standard 1 CPU / 2GB Memory / 50GB Disk のプランを選びました。
これで月10ドルだから安いですよね。

Jitsi Meet を使ってみて

動かしてみると、ほぼ https://meet.jit.si と同様のサイトが立ち上がります。

f:id:nekonenene:20200712121313p:plain

部屋に入ってみるとけっこう多機能で、YouTube動画を共有する』機能はおもしろかったです。
参加者でひとつのYouTube動画を見られる面白いコンセプトなんですが、
再生中に全員のマイクがミュートされちゃって、マイクのミュートを解除すると動画がミュートされるという、
動画を見ながらガヤガヤするという肝心なところが出来ずそこは残念でした。

テキストチャットはできるので、YouTube の「プレミア公開」ごっこは出来ます。

f:id:nekonenene:20200712121627p:plain
部屋に入ったあと右下の「その他のアクション」から色々できます

4人で話していたときの負荷は以下のようになりました。
CPU負荷が通話している間だけ高まっているのが特徴的ですね。30%前後をウロウロします。

f:id:nekonenene:20200711172202p:plain

f:id:nekonenene:20200711172300p:plain

メモリ負荷は50%くらいまで行きます。
Docker Compose を restart したあとでもすぐ40%程度にはなるので、
メモリ 2GB を選んでおいて正解でしたね。1GB だとなんらかの悪影響が出るかと思います。スワップ領域は少なくとも確保しておくべきでしょう。

アプリにも対応していて、Jitsi Meet アプリを入れて、「設定」からURL設定をおこなえばスマホからでもアクセスできます。

f:id:nekonenene:20200712130217j:plain
「サーバーのURL」を設定します

つらいところ

JavaScriptファイルが大きくて、サーバー側でgzip圧縮かけてても 1.2MB、素だと 3.7MB もあるので、
アクセス時にページを開くまでまあまあ時間かかるのが最大の欠点ですね。

ネットスピードが速くない環境だと読み込みが途中でキャンセルされて
以下のようなエラー画面が表示される場合まであります……(すぐにリトライが走ってくれますが、あんまり良くはないですね)

f:id:nekonenene:20200712124604p:plain

Webにおけるビデオチャットの難しさを感じます。
もちろんアプリ版ではこの問題が起こらないわけですが、ビデオチャット相手にこのためだけにアプリを入れてもらうのは申し訳ないですからね…(笑

自分のドメインのページに人を呼ぶのはおもしろいんですけれど、
結局のところ、よく使われてるビデオチャットサービスを使うのが参加者のストレスとしては少なくて良いでしょうね。