Aad*_*hah 12 javascript webrtc
我正在尝试学习如何创建一个RTCPeerConnection以便我可以使用DataChannelAPI.以下是我从我所理解的内容中尝试过的内容:
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);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我不确定出了什么问题,但我假设连接从未建立,因为没有显示任何消息.
我在哪里可以了解更多相关信息?我已经阅读了WebRTC入门 - HTML5 Rocks教程.
Aad*_*hah 13
在筛选了很多文章后我终于开始工作:http://jsfiddle.net/LcQzV/
首先我们创建对等连接:
var media = {};
media.fake = media.audio = true;
var client = new mozRTCPeerConnection;
var server = new mozRTCPeerConnection;
Run Code Online (Sandbox Code Playgroud)
当客户端连接到服务器时,它必须打开一个数据通道:
client.onconnection = function () {
var channel = client.createDataChannel("chat", {});
channel.onmessage = function (event) {
alert("Server: " + event.data);
};
channel.onopen = function () {
channel.send("Hello Server!");
};
};
Run Code Online (Sandbox Code Playgroud)
当客户端创建数据通道时,服务器可能会响应:
server.ondatachannel = function (channel) {
channel.onmessage = function (event) {
alert("Client: " + event.data);
};
channel.onopen = function () {
channel.send("Hello Client!");
};
};
Run Code Online (Sandbox Code Playgroud)
我们需要向客户端和服务器添加假音频流以建立连接:
navigator.mozGetUserMedia(media, callback, errback);
function callback(fakeAudio) {
server.addStream(fakeAudio);
client.addStream(fakeAudio);
client.createOffer(offer);
}
function errback(error) {
alert(error);
}
Run Code Online (Sandbox Code Playgroud)
客户创建要约:
function offer(description) {
client.setLocalDescription(description, function () {
server.setRemoteDescription(description, function () {
server.createAnswer(answer);
});
});
}
Run Code Online (Sandbox Code Playgroud)
服务器接受要约并建立连接:
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);
});
});
}
Run Code Online (Sandbox Code Playgroud)
唷.这需要一段时间才能理解.