• スポンサードリンク

WebRTCのオフィシャルプレビルドライブラリを使うサンプルを公開した(後編)〜janus-gatewayへ繋ぐのじゃ(パート3)〜

Android WebRTC アプリ

janus-gatewayとの接続手順を文章で書くとようわからんな。

janus-gatewayとの接続では、janus-gateway自体へのリクエスト/レスポンス・プラグインへのリクエスト/レスポンスとwebrtc関係のメッセージの三種類をハンドリングする必要があります。これ以降の記事ではvideoroomプラグインについて書きます。

前回の記事で書いたとおり、janus-gatewayから届くレスポンスは次の3種類があります。

  1. POST/GETに対する直接の応答
  2. long poll(transaction)
  3. long poll(sender)

POST/GETに対して直接返ってくるレスポンスは普通のRESTFulなAPIの場合の処理なのでいつも通りに処理してくだされ。ちなみに直接返ってくるレスポンスについてもtransactionは送る必要があるしまたレスポンスにも含まれているので、transactionで仕分けるようにプログラムしたほうがいいと思う。

まずはRetrofit2でのlong pollのAPIインターフェース定義。pathの先頭に{api}として文字を挿入するようにしています。この値のjanus-gateway側でのデフォルト値は”janus”ですが変更可能なのでサーバーの管理者に問い合わせてください。

long pollから返ってくるレスポンスは何のイベントかによって中身が大きく違うので、POJOにするのは先送りにしてまずはJSON文字列のまま受け取れるように、レスポンスの型は ResponseBody にして Call<> で包んでおきます。呼び出す時はこんな感じに。

もう少しは短く書けるし、載せてないメソッドも入ってるけどな?
コールバックの中身が長くなるのは嫌いなので実際の処理は別メソッドへ丸投げします。処理が終わると再度long pollを投げます。

Retrofit2からのコールバックは Response<ResponseBody> なので、 ResponseBody を取り出して、レスポンスが正常であれば、

とすることであっという間にJSONObjectに早変わり、便利になったもんじゃのぉ?

janus-gatewayから正常にレスポンスが返ってきた時には、トップレベルの要素として”janus”という値が必ず設定されています。”janus”要素の値は次のうちのどれかです。

  • server_info
    これはjanus-gatewayへサーバー情報を取り合わせたときの応答です。APIアクセスのための転送方式に対応しているか(デフォルトだとHTTP/HTTPSを使ったREST風API、大抵はWebSocketも有効になっているはず)や、インストールされて有効になっているプラグインの種類やバージョンなどを取得することができます。中身はちょっと複雑なので本家のドキュメントを参照してくださいな。
  • ack
    これはjanus-gatewayがPOST/GET要求を受け取って処理中である時の応答です。
  • event
    これはjanus-gatewayはjanus-gatewayが処理を完了をした時の通知です。
  • keepalive
    これはlong poll中にjanus-gateway側でタイムアウト(30秒)した時の通知です。
  • error
    これは呼んで字のごとくエラー通知です。
  • media
    ここより下はWebRTC関係の通知です。WebRTC関係の通知にはtransactionがありませんので、senderで処理を行う必要があります。
  • webrtcup
  • slowlink
  • hangup

ということで?transactionを生成してコールバックリスナーとの対応付けをおこなうTransactionManagerクラスを作成。まずはコールバックリスナーの定義、なんの工夫もありませんキッパリ。

TransactionManagerクラスではtransactionコードの生成と同時にコールバックリスナーとtransactionコードの対応を保持しておきます。

long pollでレスポンスを受け取った時にTransactionManagerのメソッドを呼び出すとtransactionコードに対応するコールバックリスナーを探して見つかれば呼び出すようにします。といっても簡単ですのじゃぁ。

ついでに前のコードでどさくさ紛れに載っているsenderの処理も載せてしまおう。

相変わらず大したことしてない。この JanusPlugin は、publisherとしてのREST風APIアクセスとsubscriberとしてのREST風APIアクセスの共通クラス。前回書いたとおり、videoroomプラグインでは、音声(+映像)を送信するpublisherが1つと、音声(+映像)を受信するsubscriberがn個の1+n個のPeerConnectionをハンドリングする必要があります。ただし、publisherとsubscriberといっても実際にアクセスするAPIに大した違いがあるわけではないので、共通クラスとしてまとめています。

とか言っているとあっという間に6000文字を超えてしまいました。コードを載せると中身は大したこと書かなくても直ぐに文字数が多くなってしまうなぁ^^;

ということで今回はこれでおしまい。
っとっとっと、記事の元になっているサンプルはGitHubにおいてあります。
↓↓↓↓↓
JanusRTCAndroid

お疲れ様でした(^.^)/~~~

« »

  • スポンサードリンク