• スポンサードリンク

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

Android WebRTC アプリ

公式ドキュメントとか

janus-gatewayの公式ドキュメントはここにあります。目次的なのは無いこともなくは無いけど基本文章中に散りばめられたリンクを踏んづけると説明が出てくるだけなのでちょっと見にくいかなぁ(。・_・。)
REST風API関係はここ

または各プラグインのソースコードの先頭に説明が入っています。例えばn:nの複数でのビデオチャットのvideoroomプラグインはこれ。なお今回作ったのはvideoroomプラグインのみの対応です。

基本は公式ドキュメント通りですが、返ってくる内容とかタイミングとかドキュメントに書いていないこともいっぱいありました。

janus-gatewayとの接続手順の概要なのだ

  1. ルートurlへアクセスしてサーバー情報を取得する。
    これは必須ではないけど接続確認も兼ねて呼び出しておこう。
  2. ルートurlへアクセスしてセッションを作成する。
    セッションIDが返ってくるので以降の処理はこのセッションIDを使って行う。
  3. long pollでサーバーからの応答を待機する。これ大事?
    janus-gatewayのAPIではPOST/GETに対するレスポンスとして直ぐに処理結果が返ってくるものと、POST/GETした時点では単に受け付けましたというACKが返ってくるだけで実際の応答はlong pollで返すものの2種類があるのだ。
  4. セッションIDを使ってvideoroomプラグインにattachする。
    この時はpublisherとしてのattach=音声(+必要であれば映像)を送るための接続(SendOnly)を行う。attachが成功するとプラグインへアクセスするためのプラグインID(プラグインハンドル)が返ってくる。以降のpublisherとしての処理は先程のセッションIDとプラグインID(プラグインハンドル)を使って行う。なお、attachの結果は即座に返ってくる。
  5. セッションIDとプラグインID(プラグインハンドル)を使ってビデオチャットルームにjoinする。
    join要求に対する応答はACKで、実際のjoin処理結果はlong pollで返ってくる。
  6. long pollでjoin結果が返ってくると、その中に他のpublisherに関する情報がある。
  7. 他のpublisherが既にjoinしていればそのpublisherに対してsubscribe=音声(+映像)を受け取るための接続を行う。するとそのパブリッシャーからの音声(+映像)を受け取ることができるようになる。
  8. 自分がjoinしたあとで同じビデオチャットルームへ他のパブリッシャーがjoinすると、そのたびにlong pollでパブリッシャー更新の通知がくるので必要に応じてsubscribeする
  9. 自分がjoinしている間に他のパブリッシャーがvideoroomプラグインからdetachすると、leaveイベントが届くのでsubscriberを解除する
  10. ビデオチャットを終了するにはvideoroomからdetachする(^.^)/~~~

でな感じなのでアール。酔っているのでアール?

大事なこと

janus-gatewayと接続を行う上で大事なこと・気を付けないといけないことががいくつか有ります。

  • シッポはケモミミより素晴らしい?
  • サーバー側でのlong pollのタイムアウトはデフォルトでは30秒で、30秒間新たなイベントが発生しない場合にはkeepliveイベントを送ってくる
  • 通常のPOST/GETリクエストとlong pollはタイムアウト時間が異なるので、別々のOkHttpClientインスタンスを生成した方がよい。ただしOkHttpClientインスタンスはシングルトンにすべきらしいので、初回はOkHttpClient#Builderを使って生成したBuilderインスタンスから生成、2回目以降は初回のOkHttpClientインスタンスからOkHttpClient#newBuilderメソッドを呼び出して生成したBuilderインスタンスから生成する。
  • POST/GETリクエスト時にはどのリクエストに対するレスポンスかを区別するためのtransactionと呼んでいる任意のid文字列を送信する必要がある。リクエスト時に送ったtransactionは(即応またはlong pollで)レスポンスが返ってくる時のレスポンスボディに含まれて返ってくる。transactionは一意に区別可能な文字列であればなんでも良い(ランダムuuidの文字列表現や乱数で生成した文字列などを使う)
  • リモート側で他のパブリッシャーがルームにjoinした時あるいはleaveした時にはlong 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を使うメリットがあると思う)。

janus-gatewayのREST風なAPIへのアクセスにおいても、即応でレスポンスが返ってくるAPIについては同じように扱うことができるのであるが、問題はlong poll(。・_・。)long pollで受け取るレスポンスである。long pollで返ってくるレスポンスはその内容に応じて様々にフォーマットが変化するのでアール?。つまりlong pollの結果を直接POJOで受け取ってはいけない。普通にJSONとして受け取った上である程度仕分けしてからGSON等でPOJOに変換するほうがよいということであーる。

酔っているので文体が安定しなくてごめんm(__)m
続く…

« »

  • スポンサードリンク

コメント

  • Henrietta より:

    Thanks for your marvelous posting! I actually enjoyed reading it,
    you might be a great author. I will make certain to bookmark your
    blog and will come back at some point. I want
    to encourage one to continue your great work, have a nice
    day!

  • Facial Cumshot より:

    You are so interesting! I do not suppose I've truly
    read a single thing like this before. So nice to find another person with unique thoughts on this topic.

    Seriously.. thanks for starting this up. This site is something that is required on the internet, someone with some originality!

  • Greetings! Very useful advice within this article! It is the little changes that
    make the most significant changes. Many thanks for sharing!

  • Enjoyed looking through this, very good stuff, appreciate it.

  • Enjoyed examining this, very good stuff, thank you.

  • Thanks for all of the efforts on this website. My mother takes
    pleasure in doing investigations and it's really simple to grasp why.
    A lot of people know all relating to the dynamic method you provide very important things through your web site
    and even recommend response from other individuals on that point plus our own girl is
    always understanding a lot of things. Take advantage of
    the rest of the new year. You have been conducting a glorious job.I'm extremely impressed with your writing skills as smartly as with
    the layout for your blog. Is this a paid subject or did you modify it your self?
    Either way keep up the nice high quality writing, it's rare to look
    a nice blog like this one nowadays.

  • Hello, I enjoy reading through your article post. I wanted to write
    a little comment to support you.

  • Woh I enjoy your blog posts, saved to bookmarks!

  • A lot of thanks for each of your effort on this site.
    Kate enjoys managing investigations and it is simple to grasp why.
    Most of us notice all of the powerful tactic you render very
    useful things by means of the web blog and in addition strongly encourage
    participation from visitors about this theme so our own daughter is starting to
    learn so much. Take pleasure in the rest of the
    year. You're doing a pretty cool job.I
    am extremely inspired together with your writing abilities and also with the layout in your weblog.
    Is that this a paid subject or did you modify it your
    self? Anyway keep up the excellent quality writing, it's uncommon to see a great blog like this one these days.

  • Thank you for your website post. Jones and I have already been saving to get a
    new book on this topic and your writing has
    made us to save the money. Your thoughts really solved all
    our problems. In fact, above what we had thought of just before we came across
    your wonderful blog. I no longer have doubts including
    a troubled mind because you have attended to our needs in this post.
    Thanks

  • Nice read, I just passed this onto a colleague
    who was doing a little research on that. And he just bought me lunch because
    I found it for him smile Therefore let me rephrase that:
    Thanks for lunch!

  • Wonderful article! That is the type of info that are
    supposed to be shared around the internet. Shame on the
    search engines for now not positioning this publish higher!
    Come on over and seek advice from my web site .
    Thank you =)

  • Enjoyed examining this, very good stuff, appreciate it.

  • Givenchy Bags より:

    I have been checking out many of your stories and it's pretty clever stuff.

    I will make sure to bookmark your blog.

  • Terrific article! That is the kind of information that are supposed to be shared across the internet.
    Disgrace on Google for not positioning this submit higher!
    Come on over and talk over with my web site . Thank you =)

  • You are so interesting! I don't believe I've truly read something
    like this before. So nice to discover another
    person with original thoughts on this subject matter.
    Seriously.. many thanks for starting this up.
    This site is one thing that is required on the internet,
    someone with some originality!

  • www.5ywm.com より:

    Undeniably believe that which you stated. Your favourite reason appeared
    to be at the web the easiest factor to be mindful of.
    I say to you, I definitely get irked while folks consider issues that they just do not recognise about.
    You controlled to hit the nail upon the top and also
    defined out the whole thing with no need side-effects ,
    other people could take a signal. Will likely be again to get more.

    Thank you

  • Good post. I learn something totally new and challenging on blogs I stumbleupon every day.
    It will always be useful to read through articles from other writers
    and practice a little something from other sites.

  • Howdy very cool website!! Man .. Beautiful .. Wonderful ..

    I'll bookmark your blog and take the feeds additionally?

    I'm glad to seek out a lot of useful info right
    here within the post, we'd like work out more techniques on this regard, thanks for sharing.

    . . . . .

  • Terrifijc ᴡork! Thɑt iss the type of info thаt aгe supposed to Ƅe shared around the
    net. Shame on the search enginmes fօr not positioning tһiѕ
    submit upper! Сome on over and discuss ѡith my web site .
    Thanks =)