1

我是 WebRTC 的新手。我正在构建一个应用程序,使用户能够查看彼此的视频流以及交换文件。音频/视频部分已实现并正常工作。问题是我现在需要添加交换文件的能力。我正在使用下面的代码来初始化 PeerConnection 对象

var connection = _getConnection(partnerId);
console.log("Initiate offer")
// Add our audio/video stream
connection.addStream(stream);

// Send an offer for a connection
connection.createOffer(function (desc) { _createOfferSuccess(connection, partnerId, desc) }, function (error) { console.log('Error creating session description: ' + error); });

_getConnection 创建一个新的 RTCPeerConnection 对象使用

var connection = new RTCPeerConnection(iceconfig); 

即,没有明确的约束。它还初始化其上的不同事件处理程序。在此之后,我将音频/视频流附加到此连接。我还使用合作伙伴 ID 缓存这些连接,以便以后使用。

问题是,我以后是否可以从缓存中调用连接对象,使用类似的东西向它添加数据通道

connection.createDataChannel("DataChannel", dataChannelOptions);

并使用它来共享文件,还是我必须创建一个新的 RTCPeerConnection 对象并将数据通道附加到它?

4

1 回答 1

0

您当然不必单独为文件传输创建另一个 PeerConnection。现有的 PeerConnection 可以利用 RTCDatachannel,其行为类似于传统的 websocket 机制(即没有中央服务器的 2 路通信)

`var PC = new RTCPeerConnection();

//specifying options for my datachannel 
var dataChannelOptions = {
  ordered: false, // unguaranted sequence
  maxRetransmitTime: 2000, // 2000 miliseconds is the maximum time to try and retrsanmit failed messages 
  maxRetransmits : 5  // 5 is the number of times to try to retransmit failed messages , other options are negotiated , id , protocol   
};


// createing data channel using RTC datachannel API name DC1
var dataChannel = PC.createDataChannel("DC1", dataChannelOptions);

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

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

dataChannel.onopen = function () {
  dataChannel.send(" Sending 123 ");  // you can add file here in either strings/blob/array bufers almost anyways
};

dataChannel.onclose = function () {
  console.log("DC is Closed");
};

 `

PS:通过datachannel API发送文件时,建议事先将文件分解成小块。我建议几乎 10 - 15 KB 的块大小。

于 2015-01-28T06:10:25.993 回答