アプリ公式ドキュメントとかjanus-gatewayの公式ドキュメントはここにあります。目次的なのは無いこともなくは無いけど基本文章中に散りばめられたリンクを踏んづけると説明が出てくるだけなのでちょっと見にくいかなぁ(。)REST風API関係はここまたは各プラグインのソースコードの先頭に説明が入っています。n:nの複数でのビデオチャットのvideoroomプラグインはこれ。今回作ったのはvideoroomプラグインのみの対応です。基本は公式ドキュメント通りですが、返ってくる内容とかタイミングとかドキュメントに書いていないこともいっぱいありました。janus-gatewayとの接続手順の概要なのだルートurlへアクセスしてサーバー情報を取得する。これは必須ではないけど接続確認も兼ねて呼び出しておこう。ルートurlへアクセスしてセッションを作成する。セッションIDが返ってくるので以降の処理はこのセッションIDを使って行う。pollでサーバーからの応答を待機する。pollで返すものの2種類があるのだ。セッションIDを使ってvideoroomプラグインにattachする。この時はpublisherとしてのattach=音声(+必要であれば映像)を送るための接続(SendOnly)を行う。attachが成功するとプラグインへアクセスするためのプラグインID(プラグインハンドル)が返ってくる。以降のpublisherとしての処理は先程のセッションIDとプラグインID(プラグインハンドル)を使って行う。attachの結果は即座に返ってくる。セッションIDとプラグインID(プラグインハンドル)を使ってビデオチャットルームにjoinする。pollで返ってくる。pollでjoin結果が返ってくると、その中に他のpublisherに関する情報がある。他のpublisherが既にjoinしていればそのpublisherに対してsubscribe=音声(+映像)を受け取るための接続を行う。するとそのパブリッシャーからの音声(+映像)を受け取ることができるようになる。pollでパブリッシャー更新の通知がくるので必要に応じてsubscribeする自分がjoinしている間に他のパブリッシャーがvideoroomプラグインからdetachすると、leaveイベントが届くのでsubscriberを解除するビデオチャットを終了するにはvideoroomからdetachする(^.^)/~~~でな感じなのでアール。大事なことjanus-gatewayと接続を行う上で大事なこと・気を付けないといけないことががいくつか有ります。pollはタイムアウト時間が異なるので、別々のOkHttpClientインスタンスを生成した方がよい。OkHttpClientインスタンスはシングルトンにすべきらしいので、初回はOkHttpClient#Builderを使って生成したBuilderインスタンスから生成、2回目以降は初回のOkHttpClientインスタンスからOkHttpClient#newBuilderメソッドを呼び出して生成したBuilderインスタンスから生成する。POST/GETリクエスト時にはどのリクエストに対するレスポンスかを区別するためのtransactionと呼んでいる任意のid文字列を送信する必要がある。pollで)レスポンスが返ってくる時のレスポンスボディに含まれて返ってくる。pollでイベント通知が来るが、このときにはtransactionフィールドは存在しない。代わりにpublisherとしてattachした時に受け取ったプラグインIDがsenderフィールドに設定されてく送られてくる通常のp2pでの接続であれば一回のシグナリングで音声(+映像)の双方向のPeerConnectionを張ることができるのに対し、janus-gatewayを経由する場合には、まずjanus-gatewayに対して送信専用(SendOnly)のPeerConnectionを張る(パpublisher)。リモートの他のパブリッシャー毎にsubscriberとして受信専用(RecvOnly)のPeerConnectionを張る。送信用としてPeerConnectionが1つとリモートユーザー(他のパブリッシャー)毎に1つの合計1+nのPeerConnectionを張る必要がある。普通にRESTFulなAPIへOkHttp3+Retrofit2でアクセスする場合にはレスポンスのフォーマットがある程度絞り込まれていて、想定されるレスポンスに対するPOJOオブジェクトに変換して受け取ることが多いと思う(というかそこまでが自動的に処理されるからこそOkHttp3+Retrofit2を使うメリットがあると思う)。