通过Websockets进行WebRTC视频聊天

3
我正在尝试使用WebRTC和WebSockets进行信令开发视频聊天应用程序。 我的问题是我不知道创建RTCPeerConnection并通过WebSockets连接两个对等方(2个浏览器)的确切过程(至少在本地)。
我知道如何通过WebSockets与客户端通信,但不知道如何使用RTCPeerConnection API,你知道任何逐步解释此过程(Offer SDP、answers、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);
    });

});
2个回答

5
您可能想看一下我为Google I/O做的codelab:bitbucket.org/webrtc/codelab步骤5展示了如何使用socket.io设置信令服务器,而步骤6将其与RTCPeerConnection结合起来,制作一个简单的视频聊天应用程序。
你可能也想看看easyRTC(全栈)和Signalmaster(为SimpleWebRTC创建的信令服务器)。
'规范'的WebRTC视频聊天示例在apprtc.appspot.com使用XHR和Google App Engine Channel API进行信令传递。

4
你有没有看过或者接触过WebRTC.io?这是一个开源的GitHub项目,利用Node.js和Websockets来实现你所说的功能。我不是很懂JavaScript,但在一周内就能够理解它的工作原理。虽然它不是一步一步的指南,但任何有JavaScript经验的人都可以弄清楚函数调用顺序。
代码有两个部分:服务器端客户端。服务器端使用Node.js运行,并向浏览器提供客户端代码。如果我没记错的话,由于这两个项目是独立的,如果想要合并它们,则需要将webrtcio.js文件从客户端复制到服务器端文件夹中。不过,如果你正确地克隆GitHub存储库,可能就不必担心这个了。

谢谢AeroBuffalo,这正是我在寻找的 :) 现在,我将理解代码并创建自己的代码。 - user2402604
感谢您指出这个项目。设置示例站点非常简单。我过去一周一直在与socket.io、websocket.io、RTCMultiConnection和RTCPeerConnection进行斗争,但WebRTC.io正是我想要的。 - Allan Bogh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接