Apache OpenMeetings の続き
STUN と TURN の設定編
どうも WebRCT 版を安定した状態で動かすことができない…
しらべたら、 TURN の設定が無いと 30% 程度しか動かないのではないか?の様な記事を見付けた気がする
何処の記事か忘れてしまった ^^
Stack Overflow かな….
で、 STUN と TURN を動かしてみようかな?と思って設定してみました
coturn 編
一応、社内はブリッジで接続されていてファイアーウォール越しの接続ではないので必要無いのかも?なんて考えて、フリーの STUN のサーバー設定だけで済ませてしまいました
夜間にしか動かないサーバーがあるので、会議用のシステムと空き時間の相性が良いかな?と思い、利用する事にしました
172.16.XXX.37 は夜間サーバで 172.16.XXX.38 が Ubuntu の OpenMeetings & Kurento Media Server です
Ubuntu 18.04.2 LTS で、パッケージを探したら、coturn と言うものがあるらしいです
user@user:~$ apt-cache search coturn
coturn - TURN and STUN server for VoIP
user@user:~$
インストールは aptitude で行いました
問題は設定で、結構難儀しました
coturn の設定は多分難しくないんだと思いますけど、KMS と絡むと動作確認とか少し面倒でした
設定は /etc/turnserver.conf です
デフォルトではすべてコメントアウト状態で設定した項目はこんな感じです
listening-port=3478
listening-ip=172.16.XXX.37
realm=OpenMeetings
userdb=/var/lib/turn/turndb
no-tls
no-dtls
log-file=/var/tmp/turn.log
cli-port=5766
cli-password=$5$79a316b350311570$81df9cfb9af7f5e5a76eada31e7097b663a0670f99a3c07ded3f1c8e59c5658a
これであっているかは不明
SSH での接続は、今は考えていません
レルムはここで設定しておかないと、KMS とあっていないとログにワーニングが残るみたいなので設定してみました
そんなに大量の情報を扱うわけじゃ無いと思うので SQLite3 にしてみました
cli の設定は、CLI 版のチェックツールがあって動作確認のためだったんだけど、記録するのを忘れてしまった!
痛恨のミス!
※ この CLI ツールが動いたときに、脳内に報酬系の物質が大量に放出されたのだけは覚えてます ^^b
ユーザーの追加
turnadmin -a -u turn -p PASSWORD -r openmeetings -b /var/lib/turn/turndb
このアカウントを KMS に設定します
これは、SQLite3 形式なので、sqlite3 で確認可能
user@user:/var/lib/turn$ sudo sqlite3 turndb
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> .tables
admin_user oauth_key turn_secret
allowed_peer_ip turn_origin_to_realm turnusers_lt
denied_peer_ip turn_realm_option
sqlite> SELECT * FROM turnusers_lt;
openmeetings|turn|029ce3c3f2838813296076f9329b1f71
sqlite> .q
user@user:/var/lib/turn$
登録できた様子です
そして、動作してると思われるログ
1: log file opened: /var/tmp/turn_2019-06-21.log
0: pid file created: /var/run/turnserver.pid
1: IO method (main listener thread): epoll (with changelist)
1: WARNING: I cannot support STUN CHANGE_REQUEST functionality because only one IP address is provided
1: Wait for relay ports initialization...
1: relay 172.16.XXX.37 initialization...
1: relay 172.16.XXX.37 initialization done
1: Relay ports initialization done
1: IO method (general relay thread): epoll (with changelist)
1: turn server id=1 created
1: IO method (general relay thread): epoll (with changelist)
1: turn server id=0 created
1: IPv4. UDP listener opened on: 172.16.XXX.37:3478
1: Total General servers: 2
1: IO method (auth thread): epoll (with changelist)
1: IO method (auth thread): epoll (with changelist)
1: IO method (admin thread): epoll (with changelist)
1: IPv4. CLI listener opened on : 127.0.0.1:5766
1: IPv4. SCTP listener opened on : 172.16.XXX.37:3478
1: IPv4. TCP listener opened on : 172.16.XXX.37:3478
1: IPv4. TCP listener opened on : 172.16.XXX.37:3478
1: SQLite DB connection success: /var/lib/turn/turndb
3591: IPv4. tcp or tls connected to: 172.16.XXX.37:45118
3591: IPv4. Local relay addr: 172.16.XXX.37:50156
…
一行、警告がありますが、CHANGE_REQUEST に IP アドレスが一つも無いと言う意味だと思います
turnserver.conf の aux-server の項目に CHANGE_REQUEST の説明がありますので、その項目だと思います
ですが、他に接続するサーバもないので放置します
user@user:/var/tmp$ turnutils_uclient -t -p 3478 -u turn -w PASSWORD 172.16.XXX.37
0: Total connect time is 1
0: start_mclient: msz=2, tot_send_msgs=0, tot_recv_msgs=0, tot_send_bytes ~ 0, tot_recv_bytes ~ 0
1: start_mclient: msz=2, tot_send_msgs=0, tot_recv_msgs=0, tot_send_bytes ~ 0, tot_recv_bytes ~ 0
2: start_mclient: msz=2, tot_send_msgs=5, tot_recv_msgs=0, tot_send_bytes ~ 500, tot_recv_bytes ~ 0
3: start_mclient: msz=2, tot_send_msgs=5, tot_recv_msgs=0, tot_send_bytes ~ 500, tot_recv_bytes ~ 0
4: start_mclient: msz=2, tot_send_msgs=5, tot_recv_msgs=0, tot_send_bytes ~ 500, tot_recv_bytes ~ 0
5: start_mclient: msz=2, tot_send_msgs=5, tot_recv_msgs=0, tot_send_bytes ~ 500, tot_recv_bytes ~ 0
6: start_mclient: msz=2, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
7: start_mclient: msz=2, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
7: start_mclient: msz=2, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
9: start_mclient: msz=2, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
10: start_mclient: msz=2, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
11: start_mclient: msz=2, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
12: start_mclient: msz=1, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
13: start_mclient: msz=1, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
14: start_mclient: msz=1, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
15: start_mclient: msz=1, tot_send_msgs=10, tot_recv_msgs=0, tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
15: start_mclient: tot_send_msgs=10, tot_recv_msgs=0
15: start_mclient: tot_send_bytes ~ 1000, tot_recv_bytes ~ 0
15: Total transmit time is 15
15: Total lost packets 10 (100.000000%), total send dropped 0 (0.000000%)
15: Average round trip delay 0.000000 ms; min = 4294967295 ms, max = 0 ms
15: Average jitter -nan ms; min = 4294967295 ms, max = 0 ms
user@user:/var/tmp$
多分、ログなどを確認してみた限り動いてるんだと思います
KSM 編
WebRtcEndpoint.conf.ini に TURN の設定をします
turnURL=turn:PASSWORD@172.16.XXX.37:3478
stunServerAddress=172.16.XXX.37
stunServerPort=3478
こんな感じで行けると思います
注意点として、emacs でファイルを修正すると ~ でバックアップを作ってくれますけど、
KMS のログに警告がでますので消しておきましょう!
WebRTC 版の OpenMeetings から会議室に入室して映像を起動すると、こんな感じで coturn のログが追加されます
5016: handle_udp_packet: New UDP endpoint: local addr 172.16.XXX.37:3478, remote addr 172.16.XXX.38:52257
5016: session 000000000000000003: realm
5016: handle_udp_packet: New UDP endpoint: local addr 172.16.XXX.37:3478, remote addr 172.16.XXX.38:4268
5016: IPv4. Local relay addr: 172.16.XXX.37:50113
5016: session 001000000000000002: realm
5016: session 000000000000000003: new, realm=
5016: session 000000000000000003: realm
5016: IPv4. Local relay addr: 172.16.XXX.37:52550
5016: session 001000000000000002: new, realm=
5016: session 001000000000000002: realm
5016: session 000000000000000003: realm
5016: session 001000000000000002: realm
5016: session 000000000000000003: realm
5016: session 001000000000000002: realm
5016: session 001000000000000002: realm
5016: session 000000000000000003: realm
5016: session 001000000000000002: realm
5016: session 001000000000000002: realm
172.16.XXX.38 が OpenMeetings のサーバーですので、接続は問題ないんだと思います
TURN 編のまとめ
多分、STUN/TURN の設定は良いんだと思います
ですが、Flash 版の様に上手く動作しません
Flash 版はキチンとカメラ映像付きで動きますが、WebRTC 版は上手く映像を表示できません
自分の分を表示するのはモンダインは無い様ですが、後から会議室に入ってきたユーザーの表示を落としたりします
各端末とも、自分以外の映像や音声が再生できていないようです
う~ん
Flash 版は、FireFox で接続すると面倒なので、WebRTC 版で使いたいんだけどなぁ…
Flash 版は、ブラウザー選ぶみたいで IE と Edge はなんか上手く繋がらない感じ…
WebRTC 版もそんな感じかな…?
もうちょっと調べないと…
当方もOpenmeeting使えないかな~と、参考にさせていただいており、ありがとうございます。
2020.8.21 Openmieetings5.0.0リリースがあったようです。java11が必要とかありますが、ビデオの安定性とか、KMSの自動回復とかもされているようです。これで少しは使えますかね?
コメント&情報を有り難うございます
最近、すっかり OpenMeetings の需要がなくなってしまい情報の蒐集さぼってました ^^;
リリース有ったのですね…
時間を見て評価してしないと…
最近のご時世で、ビデオ会議システムは結構需要があったのですが
当初、エンドユーザーさんの人気は Zoom でしたね….
最近では、風向きが怪しくなってきたのか、新しいライセンス体系が良かったのか、 MS Teams なども人気がある感じですかね…
で、OpenMeetings は私の周りでは引き合いがありませんでした ^^;
この記事の後に幾つか書きましたが、Docker 版が簡単です
最新版は試していませんが、今までの版の範囲では殆ど自動で面倒な所を設定してくれます…
ちょっと良い NIC などを搭載して大量のメモリーを食わせてあげれば 安定して動作すると思います
新版で記事を書く時間があれば良いなぁ…