$30 off During Our Annual Pro Sale. View Details »

省リソースで動作するビデオカンファレンスソフトウェアのGalène

 省リソースで動作するビデオカンファレンスソフトウェアのGalène

Kenichiro MATOHARA

June 19, 2022
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. 省リソースで動作 省リソースで動作 するビデオカンフ するビデオカンフ ァレンスソフトウ ァレンスソフトウ ェアのGalène ェアのGalène Kenichiro Matohara(matoken)

    <maroken@kagolug.org> 1 / 42
  2. 南隅から参加(鹿児島の右下) 好きなLinuxディストリビューションはDebian お仕事募集 mailto:work@matohara.org Kenichiro Matohara(matoken) Kenichiro Matohara(matoken) https://matoken.org https://matoken.org

    2 / 42
  3. 最近 最近 スライド共有サービスのSlideShareの無料アカウント100スライド制 限に 色々壊れる>< ドッキングステーションのUSBポート,USB HDD,NotePC不安 程度Up 草払い機のエンジン(修理代500k!) スライドファイルをセルフホスト(Pelican利用)

    3 / 42
  4. 省リソースで動作するビデオカ 省リソースで動作するビデオカ ンファレンスソフトウェアの ンファレンスソフトウェアの Galène Galène 4 / 42

  5. ビデオミーティング,カンファ ビデオミーティング,カンファ レンスできればOSSで賄いたい レンスできればOSSで賄いたい 現在プロプラエタリなDiscordを利用 本来10人まで → COVID-19だし25人までいいよ → いつま

    で? OSSなビデオミーティングソフトウェア セルフホストするには重い 5 / 42
  6. ビデオミーティングソフトウェ ビデオミーティングソフトウェ アのserver requirements アのserver requirements [1] RAM 2〜8GB CPU

    4core〜 RAM 16GB〜 CPU 8Core〜 1. どんどん増えている……? Jitsi Meet BigBlueButton 6 / 42
  7. 以前 以前 RAM 1GBのVPSや4GBのVPSで解像度などを落としたJitsi MeetやNextcloud Talkで討ち死に 動かすとしても時間課金で利用時だけ借りる感じ 7 / 42

  8. 音声だけなら軽量だけど…… 音声だけなら軽量だけど…… 以前ここ(鹿児島らぐ)でも使ったことがあるMumble サーバクライアントともに軽量で動作も問題ない クライアントが必要だが,Webベースのクライアントも存在する ビデオ対応も話し合われているけど今の所実装の予定はなさそう しかし画面共有機能も欲しい Video feature discussion

    · Issue #4150 · mumble-voip/mumble 8 / 42
  9. Galène Galène Galene needs little momory — it should run correctly in

    128MB of RAM, and is rock solid with 512MB. 桁違いに軽量そう! (PINE64あたりだとAES acceleratorが乗ってたはず) Galène FAQ 9 / 42
  10. 2020年末から開発されているビデオカンファレンスソフトウェア. Go製MITライセンス. WebRTC部分は を利用 サーバ利用メモリ128MB〜 Galèneはエンドツーエンド暗号化はされない.サーバーで権限があれ ばデータを覗き見ることが可能 帯域増えそう 公式テストサーバ有り: Galène

    videoconference server Galène videoconference server Pion SFU(Selective Forwarding Unit) https://galene.org:8443/ 10 / 42
  11. SFU(Selective Forwarding Unit) SFU(Selective Forwarding Unit) 11 / 42

  12. 早速試す 早速試す  要Go 1.13以降 $ sudo apt install golang

    $ git clone https://github.com/jech/galene $ cd galene $ CGO_ENABLED=0 go build -ldflags='-s -w' 12 / 42
  13. クロスビルド例 クロスビルド例 1 Linux arm6(Raspberry Pi 1) 2 Linux arm7(Raspberry

    Pi 2〜) 3 Linux arm64(Raspberry Pi 2 B 1.2〜かつ64bit OS)  今回Linux/amd64とLinux/armhfで試した, Linux/arm64,Linux/mipsやWindowsでも動くらしい $ GOARCH="arm" GOOS="linux" GOARM=6 CGO_ENABLED=0 \ go build -o galene_arm6_linux -ldflags='-s -w' $ GOARCH="arm" GOOS="linux" GOARM=7 CGO_ENABLED=0 \ go build -o galene_arm7_linux -ldflags='-s -w' $ GOARCH="arm64" GOOS="linux" CGO_ENABLED=0 \ go build -o galene_arm64_linux -ldflags='-s -w' 1 2 3 13 / 42
  14. グループを作成 グループを作成 テスト用グループ(部屋)の設定を作成 groups/name.json $ mkdir groups $ vi groups/name.json

    { "op": [{"username": "admin", "password": "1234"}], "presenter": [{}] } 14 / 42
  15. 動作確認 動作確認 で動作確認 $ ./galene & https://localhost:8443/ 15 / 42

  16. top page top page 16 / 42

  17. login login 17 / 42

  18. Group Group 18 / 42

  19. setting setting 19 / 42

  20. setting(1 of 2) setting(1 of 2) Media Options Camera: →

    off or 各種カメラ Microphone: → off or 各種マイク ✅ Mirror view □ Blackboard mode (高解像度低fps)になる ✅ Noise suppression □ High-quality audio (音楽再生時など) 20 / 42
  21. setting(2 of 2) setting(2 of 2) Other Settings Filter: →

    none, Holizontal mirror, Virtical mirror Send: → lowest, low, normal, unlimited Simulcast: → off, auto, on( ) Receive: → noting, audio only, screen share(low), screen share, everything(low), everything □ Activity detection (????) [1] 1. Firefoxでは動作しない サイマルキャスト 21 / 42
  22. chatでのコマンド chatでのコマンド /help ヘルプ表示 /leave グループを離れる /msg プライベートメッセージを送信 /presentfile 動画音声ファイルのブロードキャスト再生

    /raise 挙手(メンバーリストの◦が🖐になる) /renegotiate メディアストリームの再ネゴシエート /sendfile 指定したユーザへのファイル送信(IPアドレスも開示され る) /unraise 手を下げる 22 / 42
  23. helpに出てこないチャットコマン helpに出てこないチャットコマン ド ド /record 録画開始[1] /unrecord 録画終了 /set resolution

    [1024, 768] 送信解像度の指定,指定後ビデオ の再起動(Disable/Enable)が必要 1. グループの設定で allow-recording が必要 23 / 42
  24. Raspberry Pi 3B + Raspberry Pi OS Raspberry Pi 3B

    + Raspberry Pi OS bullseye armhf bullseye armhf 24 / 42
  25. 少し使ってみて 少し使ってみて LAN内でRaspberry Pi 3 model B + Raspberry Pi

    OS bullseye armhf(4core/1GB RAM)をサーバにして3台接続 半日ほど放置しても安定して動作していそう ビデオや画面共有を増やしてもサーバの負荷はあまり上がらない クライアントの使い勝手は慣れが必要そう 25 / 42
  26. リモートサーバにデブロイ リモートサーバにデブロイ 1 Galèneバイナリとstaticディレクトリをコピー 2 リモートサーバに移動 3 必要なディレクトリ作成 4 証明書コピー[1]

    1. 証明書ファイルがない場合起動時に毎回自己証明書が作られる $ rsync -avcP galene static galene@server.example.org:~ $ ssh galene@server.example.org $ mkdir -p data groups $ sudo install -m 400 -o `id -u` -g `id -g` /etc/letsencrypt/live/server.example.org/fullchain $ sudo install -m 400 -o `id -u` -g `id -g` /etc/letsencrypt/live/server.example.org/privkey.p 1 2 3 26 / 42
  27. ファイアウォールの設定 ファイアウォールの設定 最低でも TCP 8443 が必要 TCP 1194, 8443 UDP

    1194, エフェメラルポート(or -udp-range range) 27 / 42
  28. グローバル設定ファイル グローバル設定ファイル data/config.json  canonicalHost を間違えるとブラウザにキャッシュされてしま い面倒>< { "canonicalHost": "galene.example.org",

    "admin":[{"username":"root","password":"secret"}] } 28 / 42
  29. グループ設定 グループ設定 groups/groupname.json 詳細は README を参照のこと { "op": [{"username":"jch","password":"1234"}], "presenter":

    [{}], "allow-recording": true, "allow-anonymous": true, "allow-subgroups": true, "public": true, "displayName": "Galenサンプル", "contact": "galene@example.org", "comment": "コメント", "codecs": ["vp8", "opus"] } 29 / 42
  30. ユーザーの種類 ユーザーの種類 op グループ管理者 presenter カメラやマイクを有効に出来る一般ユーザ other 見聞きするだけのリスナー 30 /

    42
  31. 実行 実行 常用する場合は起動scriptやSystemdでの起動を設定 $ ulimit -n 65536 $ nohup ./galene

    & 31 / 42
  32. 関連ソフトウェア 関連ソフトウェア Vueフレームワークの代替フロントエンド UDP, RTMP, またはSRTストリームをGalèneに送信するため のゲートウェイ(Gstreamer利用) サンプル認証サーバ garage44/pyrite: Pyrite

    is a web(RTC) client for the Galène videoconference server. erdnaxe/galene-stream: Gateway to send UDP, RTMP or SRT streams to Galène videoconference server. jech/galene-sample-auth-server 32 / 42
  33. フロントエンドのPyriteを試す フロントエンドのPyriteを試す Docker(Galène同梱)かnpx, npmで導入 今回はDockerで試した Disk 1.2GBほど必要[1] 1. Dockerを使わないGalène単体は11MB程 $

    git clone https://github.com/garage44/pyrite $ cd pyrite/docker $ PYRITE_UID=`id -u` PYRITE_GID=`id -g` docker-compose up $ xdg-open http://localhost:3030/ 33 / 42
  34. Pirite画面 Pirite画面 34 / 42

  35. Piriteユーザー接続画面 Piriteユーザー接続画面 35 / 42

  36. Pirite管理者でグループ編集 Pirite管理者でグループ編集 36 / 42

  37. Pirite Pirite 見た目が今どき i18n対応(今の所英/仏/独)や2種類のテーマがある ビデオ,マイクの確認もしやすい ユーザー,グループの管理がWebで出来るのが便利 node.js導入済みなら導入しても良さそう 37 / 42

  38. まとめ まとめ サーバが軽量で使いやすそうなGalène ローカライズされていないなど使いづらい部分はあるけど普通に使え そう 機能は少し少ないけど必要十分 軽量なのでFreedomboxなどでホームサーバにも良さそう インターネット上に用意したので後で試してみましょう 38 /

    42
  39. みんなでGalèneを試してみた みんなでGalèneを試してみた イベント終了後のアフターで6時間近く使ってみた 思った以上に安定して使えた サーバにはさくらのVPS(1GB)を利用[1] サーバのスペックも余裕 バグ?を発見 画面共有状態でGalèneではなくウェブブラウザ側の画面共有の 停止を行うとウェブブラウザが落ちる[2] 1.

    鹿児島らぐのサーバはさくらインターネットによって提供されています 2. ChromiumベースのBrave 1.39.122 39 / 42
  40. サーバのリソースモニタ サーバのリソースモニタ 40 / 42

  41. クライアントのネットワーク利 クライアントのネットワーク利 用状況 用状況  17:00過ぎからGalène利用,接続人数は減ったがデータ量は 増えているところがある $ vnstat -h

    -b "2022-06-19 14:00" -e "`date +%F\ %H:%M`" wlp4s0 / hourly hour rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- 2022-06-19 14:00 66.80 MiB | 162.45 MiB | 229.25 MiB | 534.20 kbit/s 15:00 67.95 MiB | 124.63 MiB | 192.58 MiB | 448.75 kbit/s 16:00 101.91 MiB | 22.53 MiB | 124.45 MiB | 289.98 kbit/s 17:00 237.75 MiB | 98.66 MiB | 336.41 MiB | 783.89 kbit/s 18:00 210.19 MiB | 76.22 MiB | 286.41 MiB | 667.38 kbit/s 19:00 628.30 MiB | 143.67 MiB | 771.97 MiB | 1.80 Mbit/s 20:00 871.78 MiB | 113.51 MiB | 985.29 MiB | 2.30 Mbit/s 21:00 100.20 MiB | 32.89 MiB | 133.09 MiB | 310.12 kbit/s 22:00 79.40 MiB | 28.66 MiB | 108.06 MiB | 274.70 kbit/s ------------------------+-------------+-------------+--------------- sum of 9 2.31 GiB | 803.22 MiB | 3.09 GiB | 41 / 42
  42. 奥付 奥付 発表 発表者 利用ソフトウェア ライセンス 鹿児島Linux勉強会 2022.06(オンライン開催) Kenichiro Matohara(matoken)

    Asciidoctor Reveal.js CC BY 4.0 42 / 42