Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

ビデオミーティング,カンファ ビデオミーティング,カンファ レンスできればOSSで賄いたい レンスできればOSSで賄いたい 現在プロプラエタリなDiscordを利用 本来10人まで → COVID-19だし25人までいいよ → いつま で? OSSなビデオミーティングソフトウェア セルフホストするには重い 5 / 42

Slide 6

Slide 6 text

ビデオミーティングソフトウェ ビデオミーティングソフトウェ アのserver requirements アのserver requirements [1] RAM 2〜8GB CPU 4core〜 RAM 16GB〜 CPU 8Core〜 1. どんどん増えている……? Jitsi Meet BigBlueButton 6 / 42

Slide 7

Slide 7 text

以前 以前 RAM 1GBのVPSや4GBのVPSで解像度などを落としたJitsi MeetやNextcloud Talkで討ち死に 動かすとしても時間課金で利用時だけ借りる感じ 7 / 42

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

SFU(Selective Forwarding Unit) SFU(Selective Forwarding Unit) 11 / 42

Slide 12

Slide 12 text

早速試す 早速試す  要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

Slide 13

Slide 13 text

クロスビルド例 クロスビルド例 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

Slide 14

Slide 14 text

グループを作成 グループを作成 テスト用グループ(部屋)の設定を作成 groups/name.json $ mkdir groups $ vi groups/name.json { "op": [{"username": "admin", "password": "1234"}], "presenter": [{}] } 14 / 42

Slide 15

Slide 15 text

動作確認 動作確認 で動作確認 $ ./galene & https://localhost:8443/ 15 / 42

Slide 16

Slide 16 text

top page top page 16 / 42

Slide 17

Slide 17 text

login login 17 / 42

Slide 18

Slide 18 text

Group Group 18 / 42

Slide 19

Slide 19 text

setting setting 19 / 42

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

chatでのコマンド chatでのコマンド /help ヘルプ表示 /leave グループを離れる /msg プライベートメッセージを送信 /presentfile 動画音声ファイルのブロードキャスト再生 /raise 挙手(メンバーリストの○が🖐になる) /renegotiate メディアストリームの再ネゴシエート /sendfile 指定したユーザへのファイル送信(IPアドレスも開示され る) /unraise 手を下げる 22 / 42

Slide 23

Slide 23 text

helpに出てこないチャットコマン helpに出てこないチャットコマン ド ド /record 録画開始[1] /unrecord 録画終了 /set resolution [1024, 768] 送信解像度の指定,指定後ビデオ の再起動(Disable/Enable)が必要 1. グループの設定で allow-recording が必要 23 / 42

Slide 24

Slide 24 text

Raspberry Pi 3B + Raspberry Pi OS Raspberry Pi 3B + Raspberry Pi OS bullseye armhf bullseye armhf 24 / 42

Slide 25

Slide 25 text

少し使ってみて 少し使ってみて LAN内でRaspberry Pi 3 model B + Raspberry Pi OS bullseye armhf(4core/1GB RAM)をサーバにして3台接続 半日ほど放置しても安定して動作していそう ビデオや画面共有を増やしてもサーバの負荷はあまり上がらない クライアントの使い勝手は慣れが必要そう 25 / 42

Slide 26

Slide 26 text

リモートサーバにデブロイ リモートサーバにデブロイ 1 Galèneバイナリとstaticディレクトリをコピー 2 リモートサーバに移動 3 必要なディレクトリ作成 4 証明書コピー[1] 1. 証明書ファイルがない場合起動時に毎回自己証明書が作られる $ rsync -avcP galene static [email protected]:~ $ ssh [email protected] $ 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

Slide 27

Slide 27 text

ファイアウォールの設定 ファイアウォールの設定 最低でも TCP 8443 が必要 TCP 1194, 8443 UDP 1194, エフェメラルポート(or -udp-range range) 27 / 42

Slide 28

Slide 28 text

グローバル設定ファイル グローバル設定ファイル data/config.json  canonicalHost を間違えるとブラウザにキャッシュされてしま い面倒>< { "canonicalHost": "galene.example.org", "admin":[{"username":"root","password":"secret"}] } 28 / 42

Slide 29

Slide 29 text

グループ設定 グループ設定 groups/groupname.json 詳細は README を参照のこと { "op": [{"username":"jch","password":"1234"}], "presenter": [{}], "allow-recording": true, "allow-anonymous": true, "allow-subgroups": true, "public": true, "displayName": "Galenサンプル", "contact": "[email protected]", "comment": "コメント", "codecs": ["vp8", "opus"] } 29 / 42

Slide 30

Slide 30 text

ユーザーの種類 ユーザーの種類 op グループ管理者 presenter カメラやマイクを有効に出来る一般ユーザ other 見聞きするだけのリスナー 30 / 42

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

関連ソフトウェア 関連ソフトウェア 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

Slide 33

Slide 33 text

フロントエンドの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

Slide 34

Slide 34 text

Pirite画面 Pirite画面 34 / 42

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

サーバのリソースモニタ サーバのリソースモニタ 40 / 42

Slide 41

Slide 41 text

クライアントのネットワーク利 クライアントのネットワーク利 用状況 用状況  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

Slide 42

Slide 42 text

奥付 奥付 発表 発表者 利用ソフトウェア ライセンス 鹿児島Linux勉強会 2022.06(オンライン開催) Kenichiro Matohara(matoken) Asciidoctor Reveal.js CC BY 4.0 42 / 42