3

RTCDataChannel で奇妙な問題が発生しています。

私はWebRTCについていくつかの調査を行っており、すでにWebRTCオーディオ/ビデオチャットを行っています。ここで、RTCDataChannel を使用してテキスト チャットとファイル共有を追加したいと考えました。

次のように RTCDataChannel を作成しました。

var dataChannelOptions = {
    reliable: true,
    maxRetransmitTime: "2000"
};

dataChannel = yourConnection.createDataChannel("testDataChannel", dataChannelOptions);

dataChannel.onerror = function (error) {
    console.log("dataChannel.OnError:", error);
};

dataChannel.onmessage = function (event) {
    console.log("dataChannel.OnMessage:", event);
};

dataChannel.onopen = function (event) {
    console.log("dataChannel.OnOpen", event);
    dataChannel.send("Hello World!");
};

dataChannel.onclose = function (event) {
    console.log("dataChannel.OnClose", event);
};

そして、私が両側で受け取る唯一のものは、dataChannel.onopenの最初の行からのログです。dataChannel.onmessageからログを受け取りません。

エラーなし..

手動でdataChannel.sendを呼び出すと、結果は同じです。

テスト済み:
Google Chrome (50.0.2661.94)
Firefox (45.0.2)

誰でもそれを手伝ってくれる?

4

4 に答える 4

19

これはよくある間違いです。両方のブラウザーでデータチャネルを作成していますが、どちらも受け入れていません。RTCPeerConnection のondatachannelイベントを使用してリスナーを設定する必要があります。

于 2016-05-04T13:51:47.633 に答える
6

私は同じ問題に直面していました。RTCDataChannel のドキュメントに従って、Peer Connection オブジェクトでコールバックを処理して、データ チャネルでデータを受信する必要があります。以下のコードが役立つかもしれません:

ステップ 1: コールバック ハンドラーを定義する:

  var handleDataChannelOpen = function (event) {
    console.log("dataChannel.OnOpen", event);
    dataChannel.send("Hello World!");
  };

  var handleDataChannelMessageReceived = function (event) {
    console.log("dataChannel.OnMessage:", event);
  };

  var handleDataChannelError = function (error) {
    console.log("dataChannel.OnError:", error);
  };

  var handleDataChannelClose = function (event) {
    console.log("dataChannel.OnClose", event);
  };

  var handleChannelCallback = function (event) {
     dataChannel = event.channel;
     dataChannel.onopen = handleDataChannelOpen;
     dataChannel.onmessage = handleDataChannelMessageReceived;
     dataChannel.onerror = handleDataChannelError;
     dataChannel.onclose = handleDataChannelClose;
  };

ステップ 2: RTC ピア接続の作成:

  var pc = new RTCPeerConnection();
  pc.ondatachannel = handleChannelCallback;

ステップ 3 : データ チャネルの作成 :

  var dataChannel = pc.createDataChannel('dataChannelName', {});

  dataChannel.onopen = handleDataChannelOpen;
  dataChannel.onmessage = handleDataChannelMessageReceived;
  dataChannel.onerror = handleDataChannelError;
  dataChannel.onclose = handleDataChannelClose;

コードでは、データを受信するために ondatachannel コールバック ハンドラを追加するだけです。

于 2017-04-12T09:42:16.783 に答える