![](/img/trans.png)
[英]peer.js / webrtc - how to setup a super simple data connection?
[英]How to create data channel in WebRTC peer connection?
我正在嘗試學習如何創建RTCPeerConnection
以便我可以使用DataChannel
API。 以下是我從我所理解的內容中嘗試過的內容:
var client = new mozRTCPeerConnection;
var server = new mozRTCPeerConnection;
client.createOffer(function (description) {
client.setLocalDescription(description);
server.setRemoteDescription(description);
server.createAnswer(function (description) {
server.setLocalDescription(description);
client.setRemoteDescription(description);
var clientChannel = client.createDataChannel("chat");
var serverChannel = server.createDataChannel("chat");
clientChannel.onmessage = serverChannel.onmessage = onmessage;
clientChannel.send("Hello Server!");
serverChannel.send("Hello Client!");
function onmessage(event) {
alert(event.data);
}
});
});
我不確定出了什么問題,但我假設連接從未建立,因為沒有顯示任何消息。
我在哪里可以了解更多相關信息? 我已經閱讀了WebRTC入門 - HTML5 Rocks教程。
在篩選了很多文章后我終於開始工作: http : //jsfiddle.net/LcQzV/
首先我們創建對等連接:
var media = {};
media.fake = media.audio = true;
var client = new mozRTCPeerConnection;
var server = new mozRTCPeerConnection;
當客戶端連接到服務器時,它必須打開一個數據通道:
client.onconnection = function () {
var channel = client.createDataChannel("chat", {});
channel.onmessage = function (event) {
alert("Server: " + event.data);
};
channel.onopen = function () {
channel.send("Hello Server!");
};
};
當客戶端創建數據通道時,服務器可能會響應:
server.ondatachannel = function (channel) {
channel.onmessage = function (event) {
alert("Client: " + event.data);
};
channel.onopen = function () {
channel.send("Hello Client!");
};
};
我們需要向客戶端和服務器添加假音頻流以建立連接:
navigator.mozGetUserMedia(media, callback, errback);
function callback(fakeAudio) {
server.addStream(fakeAudio);
client.addStream(fakeAudio);
client.createOffer(offer);
}
function errback(error) {
alert(error);
}
客戶創建要約:
function offer(description) {
client.setLocalDescription(description, function () {
server.setRemoteDescription(description, function () {
server.createAnswer(answer);
});
});
}
服務器接受要約並建立連接:
function answer(description) {
server.setLocalDescription(description, function () {
client.setRemoteDescription(description, function () {
var port1 = Date.now();
var port2 = port1 + 1;
client.connectDataConnection(port1, port2);
server.connectDataConnection(port2, port1);
});
});
}
唷。 這需要一段時間才能理解。
我已經發布了一個要點是顯示了建立數據連接, 既 Chrome和Firefox兼容。
主要區別在於,在FF中你需要等到設置連接,在Chrome中它恰恰相反:似乎你需要在來回發送任何優惠之前創建數據連接:
var pc1 = new RTCPeerConnection(cfg, con);
if (!pc1.connectDataConnection) setupDC1(); // Chrome...Firefox defers per other answer
另一個區別是Chrome將事件對象傳遞給.ondatachannel
而FF只傳遞一個原始通道:
pc2.ondatachannel = function (e) {
var datachannel = e.channel || e;
請注意,您目前需要Chrome每晚啟動--enable-data-channels
才能使用它。
以下是我今天(2014年2月)在Chrome中發布的一系列事件。 這是針對簡化的情況,其中對等體1將視頻流式傳輸到對等體2。
addIceCandidate
SetRemoteDescription
,然后回答並發送它 SetRemoteDescription
with it getUserMedia
調用) getUserMedia
成功,我們就有了一個流。 在對等方1的對等連接對象上調用addStream
。 我還沒有找到在步驟9之后添加視頻的方法。當我想要改變某些內容時,我會回到第3步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.