Intel Collaboration Suite for WebRTC Conference Server その後

19 3月

Intel Collaboration Suite for WebRTC Conference Server を去年から動かしてみているのですが(過去記事),バージョンが上がって,iOS でも動くようになっています。

インストール方法は,前回とほば変わらないです(参照記事)。ハードウェアアクセラレーションを試みましたが,失敗しました。カーネルのバージョン等も関連してくるようで利用は難しいみたいです(参考:録画サーバ構築 QSVエンコード Ubuntu 16.04 失敗編)。

サンプルの表を少し書き換えてみました。下記に,動いているところの動画をあげます。解説がないと何のことか分からない映像ではありますが。会議に参加してきたらその人を示すボタンが追加されたり,大きな領域に表示される人を切り替えたり,手を挙げた人を指名したりしています。

以下,後でまた書き足します。

(20180326) FireFox ver.59 で動かなくなっています。ver.58 に戻すと動きました。Chrome はこれまでどおり動いています。他の WebRTC 関連アプリは ver.59 で動いているのか?

(20180906) FireFox は ver.61 になって,再び動くようになったのですが,最近になって接続がすぐに切れるようになりました。大学のファイヤーウオールに何かがあったのか?なにか環境に変化があったのか,原因が不明です。メッセージは下記のようなものが来ています。

unknown ice connection state: disconnected woogeen.sdk.js:9:38392
ICE failed, add a STUN server and see about:webrtc for more details

「ICE が失敗したので,STUN サーバーを追加しなさい」と言われているのか?これまで,どのようにして接続を確立していたのか良く分かっていなかったのですが,なんとなく繋がっていました。公開されている STUN サーバーとしては,下記のようなものがあります。google 関係です。

stun.l.google.com:19302
stun1.l.google.com:19302
stun2.l.google.com:19302
stun3.l.google.com:19302
stun4.l.google.com:19302

winstun という道具で通信を試してみると通信しているように見えます。とにかく返事は返ってきます。

stunserver の記述は Release-v3.5/webrtc-agent/agent.toml にあります。これに上記のサーバーを追加したのですが,変化なし。メッセージが同じなので,上手く stun が利用できていないように見えます。他に何か設定があるのかも知れません。以前の環境から変化したものには何があるのか? OS のパッチが関連しているのか?一台でつなげていても,しばらくしたら接続が切れます。

バックアップしてあった古い VirtualBox のイメージを使って動かしてみたところ,通信が切れることがありません。ということは,最近の ubuntu 16.04 の更新に何かがあるようです。

ネットワークの監視には,wireshark というソフトがあります。

表示にフィルターをかけて(STUN || TCP :STUNとTCPの両方),表示させてみました。下記は動いているときです。

サーバーは 133.37.144.177 です。Binding Indication がときどき在って,Binding Request と Binding Success Response が続いているように見えます。

次に,停止した直後にキャプチャーを止めてみたときのものです。

こちらは Binding Request に対して,サーバー(133.37.144.177)側から返事が返って来ていません。

(20180915)
 wireshark での調査の続きです。下記は通信が停止したところのキャプチャーですが,Success Response に変化が生じています。

返事が短くなって,User なんとかという記述が在りません。この辺を調べるべきなのか?

(20180919)
 CentOS を試してみました。Intel Collaboration Suite for WebRTC は,もともとが CentOS 7.3 で動作確認しているようですが,現在は 7.5 です。最新の環境で動いて欲しいので, 7.5 で試みました。とりあえず virtualBox に CentOS 7.5 をインストールします。

virtualBox なので,まず Guest Additions をインストールして,解像度を上げたりしないといけませんが,参考にしたサイトは下記。

VirtualBox上のGNOME(CentOS7)CentOSデスクトップの解像度を変更する

Virtual Box VM not displaying in full screen mode

ubuntu と同じように Guest Additions CD をマウントして実行しようとしたら,上手く動かなかったみたいですぐに終了してしまいました。どうも gcc とかが足りないようです。CentOS のインストールは gnome desktop だったのですが,色々と足りないものがあるようです。参考サイトをみてインストールとアップデートをしました。例をあげます。

yum update
yum install gcc epel-release.noarch kernel-headers kernel-devel

上記がすべてだったかどうかはっきりしないのですが,こんな準備をした後でアップデートをしたら Guest Additions が実行できました。

Node.js は ubuntu での場合と同じで,ver. 6.9.5 を /opt/ に手動で配置しました。.bashrc にパスを書き加えます。 root ユーザーにもパスを通したいのですが,CentOS では一般ユーザーから root に su コマンドで切り替えると,パスなどの環境が引き継がれるようで,今回とくに何もしていません。

続いて Intel Collaboration Suite for WebRTC Conference Server のインストールです。バージョンは敢えて以前の 3.5 です。設定ファイルの変更がいくつかありますが,これも ubuntu の場合と変わりません。マニュアルのとおりです。ffmpeg を libfdk_acc 付きでコンパイルするところは,例によって3個ぐらいしかファイルが作成されず,以前もやったのですが先に ffmpeg をインストールしました(参考サイト:CentOS7にffmpegをyumインストール)。

yum -y install epel-release
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
yum -y install ffmpeg ffmpeg-devel

この後でコンパイルすると 27 個のファイルが作成されました。

Conference Server の起動ですが,CentOS はデフォルトでファイヤーウォールが動いています。そのためポートを空ける必要があって,下記がその参考サイトです。

【すぐわかる】CentOSのポート開放のやり方

CentOS7徹底入門 -firewalld- 2-2

Which ports are used?

ポートの開放は,例えば下記のコマンドです。UDP ポートは,他の範囲でも良いと思います。wireshark でモニターしたところによれば,繋ぐクライアントによって利用するポートが異なるようです。

firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --permanent --add-port=3004/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=30000-60000/udp

Conference Server のバージョンに拠って,デフォルトのポートが多少異なります。ファイヤーウォールを再起動させます。

firewall-cmd --reload

開放を確認するには下記。

firewall-cmd --list-all

出力はこんな感じです。

確かにポートが開いたようです。

注:UDP ポート を指定するならば,Conference Server の設定を変更することを忘れない(webrtc_agent/agent.toml にある)。同じ範囲に設定をすること。

後は Conference Server の起動です。

無事 room が設置されました。クライアントの接続も切れません。当面は CentOS で動かすことになりそうです。

(20180920)
一般的な話ではないのですが,仮想ではなく物理環境に CentOS をインストールしたときの記録を残します。

マザーボードは Intel のもので,s2600cp4 というものです(過去記事)。ケースは他のものに変わりましたが,CPU はそのままで,メモリーは 64GB です。まず DVD からのインストールを試みましたが途中で止まります。それではと,UNetbootin で USB メモリ に OS を書き込んで試みるも失敗。ブートのセレクトにさえたどり着けませんでした。調べると CentOS は UNetbootin では上手くいかないという記事もあって,Rufus に変更して再度チャレンジしました。しかしこれも失敗(状況を記憶していません。ブートセレクターが表示されたかどうか?)。そこでいったん USB メモリを刺さずにブートさせた後,bios の設定メニューを呼び出して,その際に USB を刺して認識させ,再起動をかけました。ブートセレクトのときに,同じ USB メモリでも UEFI の方を選択するとインストールが始まりました。DVD も UEFI の方を選択したら良かったのかも知れない。

もうひとつ,USB メモリの話ですが,CentOS に USB メモリを刺してみても,NTFS は読めませんというようなメッセージが表示されて使用できません。色々と参考にして,いくつかインストールをしてみました。

yum install epel-release
yum install ntfs-3g

ntfs-3g が重要なのですが,これをインストールするための前提として,上記の epel-release 等が(他にも入れとかなければならないものがあったと思います)必要で,何か足りなければ ntfs-3g は利用できない旨の返事が来ます。ubuntu だったら自動的に必要なものをインストールしてくれるところでしょうか。

このマザーの UEFI は使い慣れない。ブート時の起動ドライブのセレクター画面が自動的に更新されて,CentOS という項目が加わったりします。ブートが上手くいかないものですから,最新のファームウェアに更新したのですが,今度は CPU ファンが大きな音をたてて回り始めました。よくあることです。調べてみると,こんな記事があって,CPU ファン以外はファンがないと設定すれば静かになると書いてあります。再度ファームウェアを更新して,その際の入力で記事どおりにやってみたら静かになりました。

物理環境で動かすにあたっては,こんなところだったかと思います。

(20181010)
最近 chrome で動かなくなっていました。このソフトウェアのフォーラムに記事があります。

Intel Collaboration Suite for WebRTC v4.0.2 Released for Chrome 69 beta Compatibility

記事を引用します。


You may see following error message in console if you are trying to run ICS JavaScript on Chrome 69 or 70.

Uncaught (in promise) DOMException: Failed to execute 'addTransceiver' on .....

The reason for this error is Chromium implemented Unified Plan recently, and addTransceiver is not allowed to be executed on RTCPeerConnection if SDP semantics is Plan B. However, our SDK still uses Plan B and it executes addTransceiver if the type of addTransceiver is function. We are planning to migrate to Unified Plan in future releases.

Workaround:

Adding following JavaScript statement to your HTML or JavaScript file which loads before ICS JavaScript SDK if your end-user’s browser is Chrome 69 or 70.

RTCPeerConnection.prototype.addTransceiver = undefined;

It tells SDK addTransceiver is not available in current browser. Then, SDK will fall back to old APIs, i.e offerToReceiveAudio and offerToReceiveVideo.

For 4.0 and 4.0.1, we encourage you to upgrade your ICS JavaScript SDK to 4.0.2 which fixed this issue.

上記の記事によると,アプリに下記のような記述を含めると良いようです。

<script src="adapter.js" type="text/javascript"></script>
<script language="JavaScript">
var userAgent = window.navigator.userAgent.toLowerCase();
if (userAgent.indexOf('chrome') != -1) {
	console.log('chrome');
	RTCPeerConnection.prototype.addTransceiver = undefined;
}
</script>
<script src="woogeen.sdk.js" type="text/javascript"></script>

アプリで woogeen.sdk.js を読み込む前に,記事のコマンドを挿入してみました。一応これで動くようにはなりました。まだ ver. 4.0.2 を試していません。そちらでは対策ができているようです。

(20191004)
最近 iOS でリモートのビデオが表示されないことに気づきました。ローカルのビデオを送信することは出来ているようですが、受けることができない。うちは iPad です。Intel Collaboration Suite for WebRTC Conference Server の version は 3.5 です。調べてみます。

(20200305)
上記のiOSの件は片付かない。version 4.3 にあげた際の記事を書きました。こちらはiOSが何とかなりました。