受信のみモードを併用した多人数でのSFUの利用

コメント

13件のコメント

  • Avatar
    Yusuke Naka (編集済み )

    peer.joinRoom()の受信のみモード(Streamを指定しない)ですが、SFUで利用した場合、映像が表示されるまでに数十秒掛かるようです。SkyWayの不具合の可能性があるため、継続調査させて頂きます。

    ご報告ありがとうございます。

     

    受信のみモードを利用すれば、端末側の負荷を軽減できるため、参加者を増やすことは可能だと思います。

    受信のみモードを使わずに負荷を軽減する手立てとして、受信者のgetUserMediaの設定を変更し、widthとheightを最小サイズにし、且つ、ミュート処理を行うことで、同様の効果が得られるかもしれません。

    ミュート処理の一例ですが、以下のようにすることでオーディオトラックとビデオトラックのミュートが可能です。

    let tempVideoTrack = stream.getVideoTracks()[0];
    let tempAudioTrack = stream.getAudioTracks()[0];
    tempVideoTrack.enabled = false;
    tempAudioTrack.enabled = false;
    let mutedStream = new MediaStream();
    mutedStream.addTrack(tempVideoTrack);
    mutedStream.addTrack(tempAudioTrack);
    0
    コメントアクション Permalink
  • Avatar
    森山雄太

    ご返信ありがとうございました。

    「widthとheightを最小サイズ」

    に関してなのですが、track.enabledをoffにしている場合にもビデオのサイズが影響するのでしょうか?

    0
    コメントアクション Permalink
  • Avatar
    Yusuke Naka

    ミュート処理については、データ転送量を削減するために有効です。

    widthとheightを最小サイズにするという設定は、getUserMediaを実行する端末の負荷を下げるのに有効です。

     

     

    0
    コメントアクション Permalink
  • Avatar
    ピアタン

    getUserMediaをする際にaudioのみの指定にすれば音声だけは受け取れるようです。

    var constraints = {
    audio: true
    };

    navigator.mediaDevices.getUserMedia(constraints)・・・

     

    映像は重くて無理なんでしょうか・・・

    しかし、後から部屋に入ってきた人のstreamは

    受信のみモードの人はroom.on("stream")が呼び出されず

    音声のみでも受け取れないようです。

    0
    コメントアクション Permalink
  • Avatar
    iwatendo

    お世話になっております。
    このトピックと同じと思われる現象が発生した為、追記させて頂きます。

    <環境>
    SkyWayJS 1.0.1
    Windows 10
    Chrome Ver 61.0.3163.100

    <現象>
    SFURoom使用時、
    後から参加したクライアントが、受信モードでpeer.joinRoomを実行すると、room.on("stream")が呼ばれない。
    但し、さらに別のクライアントから peer.joinRoomすると、前のクライアントで rooom.on('stream')が呼ばれる様子。

    例)
    AさんがSFURoomで配信中、Bさんが受信モードで接続すると、Aさんの配信が表示されない。
    但し Cさんが接続すると、Bさんのクライアントで表示されるようになります。
    但し Cさんが受信モードで繋いだ場合は、Cさんのクライアントでは表示されない。

    どうやら受信モードで表示されない場合
    どこかで peer.join または leave が発生すれば正常に表示されるようになる様子です。

    とりあえず、私の開発中の環境では
    暫定対応として、受信モードのSFURoomのOpen後、ダミーのPeerを接続(すぐに解除)する事で
    期待する動作となりました。

    0
    コメントアクション Permalink
  • Avatar
    鶴谷清明 (編集済み )

    上記と似た現象で、こちらの環境ではSFURoomのstreamイベントは発火するけど、MediaStreamで映像が転送され始めるのが他クライアントが参加した後という感じです。

    SFURoomのopenイベントのコールバックで下記のような処理を呼び出してwork-aroundしています。

    function dummyConnect(apiKey, roomName) {
    var dummyPeer = new Peer({
    key: apiKey,
    debug: 0
    });
    dummyPeer.on("open", function() {
    var dummyRoom = dummyPeer.joinRoom(roomName, {
    mode: "sfu"
    });

    dummyRoom.on("open", () => {
    dummyRoom.close();
    dummyRoom.on("close", () => {
    dummyPeer.disconnect();
    });
    });
    });
    }

    1
    コメントアクション Permalink
  • Avatar
    iwatendo

    鶴谷さんのコメントを見て再確認した所

    >SFURoomのstreamイベントは発火するけど、MediaStreamで映像が転送され始めるのが他クライアントが参加した後という感じです。

    と、同じ現象で room.on("stream")の通知は来てました。
    失礼しました。

    0
    コメントアクション Permalink
  • Avatar
    salad

    >Yusuke Naka 様

    こちらの問題は解決していますでしょうか?

    0
    コメントアクション Permalink
  • Avatar
    Yusuke Naka

    salad 様

    SFUに原因があるという所までは確認ができておりますが、まだ解決しておりません。

    開発者の皆さまからご投稿いただいている、ワークアラウンドで対処していただけますと幸いです。

    0
    コメントアクション Permalink
  • Avatar
    salad

    > Yusuke Naka様
    承知いたしました。
    回答ありがとうございました!

    0
    コメントアクション Permalink
  • Avatar
    salad

    【報告】

    受信モードであれこれワークアラウンドしてみたのですが、結局うまくいかなかったので、双方向モードでやりとりをすることにしました。

    (どういう状況で「うまくいかない」のか把握するまでには至りませんでした…)

    ですが、双方向モードでも「streamイベントは発火するが、mediastreamが転送されない」(=ビデオが真っ白)という状態が起きました。

    この問題にも、鶴屋様のワークアラウンドで対処できました。ほぼ似たようなものですが、もし同じ問題で困っていらっしゃる方がいた場合、以下のコードをお使いいただければ解決すると思います。

    function dummy() {
       let dummyPeer = new Peer("dummy", {
          key: 'API KEY',
          debug: 3
       });

       dummyPeer.on('open', function(id) {
          let dummyRoom = dummyPeer.joinRoom(roomName, {mode: 'sfu'});

          dummyRoom.on('open', function() {
             dummyPeer.disconnect();
          });
       });
    }

    room.on('open', function() {
       dummy();
    })

    0
    コメントアクション Permalink
  • Avatar
    salad

    受信モードと送受信モードが混在した状況で動かしたところ、以下の問題が発生しました

    送受信モード: 問題なし
    受信モード: 自分よりあとに参加した送受信モードの人の映像が表示されない(streamが発火されない)

    roomのopen時にdummyを使ったワークアラウンドも試しましたが、だめでした

    何か他の方法があればご教示ください

    0
    コメントアクション Permalink
  • Avatar
    Yusuke Naka

    本日(2019.04.09)、受信のみモードでSFU Roomに参加した際に、映像が表示されない不具合を解消致しました。

    こちらのスレッドに記載のあるワークアラウンドは不要になりました。

    修正までお時間がかかり申し訳ございませんでした。

    0
    コメントアクション Permalink

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