[至急]★SKW_ROOM_EVENT_STREAM発火タイミング

コメント

7件のコメント

  • Avatar
    mikan (編集済み )

    こんにちは。間違っていたら大変申し訳ないなと思いつつ、回答します。

    >SKWMeshRoomのSKW_ROOM_EVENT_STREAMの発火タイミング

    →peer.joinRoomのタイミング、または、replaceStreamのタイミングで発火されると思いました。

     

    >「現在のルームに新しいメディアストリームが追加された時のイベントです」と記載がありますが、
    >それは、
    >localStream.addVideoRenderer(self.localView, track: 0)
    >のことを指しているかと思っている

    →これは、自分が表示している映像にトラックが追加されるだけなので、特に接続中のユーザーへのイベントは発生しません。

     

    >一度ルームに入室してから入室し放し、
    >ボタンを押した時だけビデオチャットを表示するようにしたい

    →ルーム入室時(peer.joinRoom)にはストリームのトラックなしで接続して、ボタンクリック時にストリーム取得、トラックに追加、replaceStreamで通知、とすればできると思います。

     

    ご参考まで。
    //あんまり自信がないので詳しい人ヘルプおねがいします!!!

  • Avatar
    ajbk

    mikan 様

     

    ありがとうございます。

    joinRoom or replaceStream のタイミングで発火されるのですね。

    確かに、addVideoRendererは自身の話になりますね、混乱しておりました。

     

    → ルーム入室時(peer.joinRoom)にはストリームのトラックなしで接続して、ボタンクリック時にストリーム取得、トラックに追加、replaceStreamで通知、とすればできると思います。

    こちらの方法でやってみたいと思います。

    また報告させていただきます。

     

    なかなかレスをいただけないコミュニティなので、大変助かりました。

    お忙しい中ありがとうございました。

     

     

  • Avatar
    ajbk

    mikan 様

    ストリームなしで接続 → ボタンタップでreplaceStremaを呼び出すと期待通りEVENT_STREAMが発火してビデオを見ることができました。

    再度ビデオチャットしたい場合には、思うようにいかず試行錯誤中です。。

    ストリームのトラックなしでreplaceStreamする方法が間違っているのか??というところです。

     

    また報告させていただきます。

    取り急ぎ、お礼とご報告でした。

  • Avatar
    mikan

    ajbk様

    >ストリームなしで接続 → ボタンタップでreplaceStremaを呼び出すと期待通りEVENT_STREAMが発火してビデオを見ることができました。

    →成功したようでよかったです!

     

    >再度ビデオチャットしたい場合には、思うようにいかず試行錯誤中です。。
    >ストリームのトラックなしでreplaceStreamする方法が間違っているのか??というところです。

    →これは、ビデオが見られる状態から、見られなくして、そのあともう一度見られるようにしたい、というような内容でしょうか?
     であれば、映像/音声のミュート切り替え処理にあたると思いますので、こちらが参考になるかと思います。(JavaScript SDKの記述なのでiOS SDKに置き換えてください)

  • Avatar
    ajbk

    mikan 様

     

    アドバイスありがとうございます。

     

    起動時に自動的にルーム入室する仕様なのですが、

    1) peer.joinRoom()をする際に、optionにstreamはセットしないで起動します。

    2) ビデオボタンが押されたら、localStreamにaddVideoRendererをします。

     → EVENT_STREAMが発火して、相手の端末にremoteStreamをaddVideoRendererしてビデオチャット開始

    3) ビデオ終了ボタンが押されたら、localStreamとremoteStreamそれぞれにremoveVideoRendererをして、replaceStreamでカラのstreamを指定します。

     → この方法が適切か微妙な感じです。

    4) 再度ビデオボタンを押すと、2)の処理を行うようにしているのですが、ここでstreamの取得まではできているのですが、remoteの映像が表示されるまで毎回10秒ほどかかってしまいます。

     

    なお、この間に、EVENT_DATAは正しく発火され即時に処理できることは確認できています。

     

    今困っているのは、4) のビデオ再接続の際に、10秒かかってしまうと言う点です。

    再接続の処理は、

    SKWNavigator.initialize(self.peer)

    self.localStream = SKWNavigator.getUserMedia(constraints)

    self.localStream.addVideoRenderer(self.localView, track: 0)

    ですが、

    このうちのSKWNavigator.getUserMedia()でほぼ9秒以上かかっている状態です。

     

    何かお分りでしたら、またアドバイスいただけると助かります。

     

  • Avatar
    mikan

    ajbk 様

    こんにちは。
    なんとなくですが、ビデオ終了=ストリームの終了ではなく、ビデオ終了=ビデオを見られなくすればよいのであれば、以下のようなミュート処理でもよいのでは?とおもいました。

    NSUInteger counts = [localstream getVideoTracks];
    for (NSUInteger index = 0; count > index; index++) {
      [stream setEnableVideoTrack:index enable:enable]; // enableはBOOL型のどちらか
    }

    あとはちょっと思いつかないです…
    単に、接続・切断を繰り返すことによる端末負荷で遅延が発生している可能性もあるかと…

    お力になれれば幸いです。

  • Avatar
    ajbk

    mikan 様

     

    こんにちは。

    何度もお助けいただいてありがとうございます。

     

    教えていただいたストリームのenableを設定する方法で、ほぼ体感的には瞬時にビデオを再開することができました。

    この場合は、ストリームはずっと繋がっているということだと思いますが、

    作っているアプリは基本的に常時起動しているものなので、稼働性をテストして、運用に入れるかどうか判断してみようと思います。

     

    本当にありがとうございました。

    とても助かりました。

     

     

ログインしてコメントを残してください。