我可以使用相同的WebRTC频道进行音频/视频和文件传输吗?

时间:2015-01-28 02:31:52

标签: webrtc file-sharing rtcdatachannel

我是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对象并将数据通道附加到它?

1 个答案:

答案 0 :(得分:-1)

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

`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。