我正在尝试使用webRTC和WebSockets开发视频聊天应用程序来发送信号。 我的问题是我不确切知道创建RTCPeerConnection的过程是什么,并通过webSocket(至少在本地)连接两个对等体(2个浏览器)。
我知道如何通过WebSockets与客户进行通信,但不知道如何通过RTCPeerConnection API进行通信,您是否知道任何教程一步一步解释过程?(另外,提供SDP,答案,ICE,...)如何查看服务器代码以通过RTCPeerConnection管理这些客户端?
这是我的服务器的Node.js代码
"use strict";
// Optional. You will see this name in eg. 'ps' or 'top' command
process.title = 'node-webrtc';
// Port where we'll run the websocket server
var webSocketsServerPort = 1337;
// websocket and http servers
var webSocketServer = require('websocket').server;
var http = require('http');
/* ---------------------------------
GLOBAL VARIABLES
----------------------------------*/
// latest 100 messages
//var history = [ ];
// list of currently connected clients (users)
var clients = [ ];
/* ---------------------------------
HTTP SERVER
----------------------------------*/
var server = http.createServer(function(request, response) {
// Not important for us. We're writing WebSocket server, not HTTP server
});
server.listen(webSocketsServerPort, function() {
console.log((new Date()) + " Server is listening on port " + webSocketsServerPort);
});
/* ---------------------------------
WEBSOCKET SERVER
----------------------------------*/
var wsServer = new webSocketServer({
// WebSocket server is tied to a HTTP server. WebSocket request is just
// an enhanced HTTP request. For more info http://tools.ietf.org/html/rfc6455#page-6
httpServer: server
});
// This callback function is called every time someone
// tries to connect to the WebSocket server
wsServer.on('request', function(request) {
console.log((new Date()) + ' Connection from origin ' + request.origin + '.');
// accept connection - you should check 'request.origin' to make sure that
// client is connecting from your website
// (http://en.wikipedia.org/wiki/Same_origin_policy)
var connection = request.accept(null, request.origin);
// we need to know client index to remove them on 'close' event
var index = clients.push(connection) - 1;
console.log((new Date()) + ' Connection accepted.');
// user sent some message
connection.on('message', function(message) {
for (var i=0; i < clients.length; i++) {
clients[i].sendUTF(message);
}
});
// user disconnected
connection.on('close', function(conn) {
console.log((new Date()) + " Peer " + conn.remoteAddress + " disconnected.");
// remove user from the list of connected clients
clients.splice(index, 1);
});
});
答案 0 :(得分:4)
您是否看过WebRTC.io?它是一个开源GitHub项目,它利用Node.js和websockets来完成你正在谈论的事情。我,不是一个javascript的人,能够在一周内弄清楚它在做什么。它不是一步一步的指令,但任何具有javascript经验的人都能够找出函数调用顺序。
代码有两位:server side和client side。服务器端使用Node.js运行,并将客户端代码提供给浏览器。如果我没记错的话,由于这两个项目是分开的,如果要组合它们,则必须从客户端复制webrtcio.js文件并将其粘贴到服务器端文件夹中。虽然,我认为如果您正确克隆github存储库,您可能不必担心这一点。
答案 1 :(得分:4)
您可能想看一下我为Google I / O做的代码库:bitbucket.org/webrtc/codelab。
Step 5展示了如何使用socket.io设置信令服务器,Step 6将此与RTCPeerConnection结合在一起,制作一个简单的视频聊天应用。
您可能还想查看easyRTC(完整堆栈)和Signalmaster(为SimpleWebRTC创建的信令服务器)。
apprtc.appspot.com上的“规范”WebRTC视频聊天示例使用XHR和Google App Engine渠道API进行信号发送。