2013-05-20 76 views
2

我正在嘗試開發一個使用webRTC和WebSockets進行信號傳輸的視頻聊天應用程序。 我的問題是,我不知道創建RTCPeerConnection的過程是什麼,並通過webSocket(至少本地)連接兩個對等體(2個瀏覽器)。我知道如何通過WebSockets與客戶端進行通信,但不知道如何與RTCPeerConnection API進行通信,你知道任何教程一步一步解釋過程?(提供SDP,答案,ICE,...),另一方面,另一方面那麼如何通過RTCPeerConnection查看服務器代碼來管理這些客戶端呢?通過Websockets的WebRTC視頻聊天

這裏是

"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); 
    }); 

}); 

回答

4

你看或遇到WebRTC.io服務器Node.js的我的代碼?這是一個開源的GitHub項目,它利用Node.js和websockets完成你正在談論的確切事情。我不是一個JavaScript的人,能夠在一週內弄清楚它在做什麼。這不是一步一步的指令,但任何具有JavaScript經驗的人都可以找出函數調用順序。

有兩位代碼:server sideclient side。服務器端使用Node.js運行,並將客戶端代碼提供給瀏覽器。如果我沒有記錯的話,因爲這兩個項目是分開的,如果你想合併它們,你必須從客戶端複製webrtcio.js文件並將其粘貼到服務器端文件夾中。雖然,我認爲如果您正確地克隆github存儲庫,您可能不必擔心這一點。

+0

謝謝AeroBuffalo,這就是我正在尋找的東西:)現在,我將理解代碼並製作我自己的代碼。 – user2402604

+0

感謝您指出這個項目。設置示例網站很簡單。過去一週我一直在使用socket.io,websocket.io,RTCMultiConnection和RTCPeerConnection,但WebRTC.io正是我想要的。 –

4

您可能想看看我爲Google I/O所做的codelab:bitbucket.org/webrtc/codelab

Step 5顯示瞭如何使用socket.io設置信令服務器,以及Step 6將它與RTCPeerConnection結合在一起製作了一個簡單的視頻聊天應用程序。

您可能還想看看easyRTC(完整堆棧)和Signalmaster(爲SimpleWebRTC創建信令服務器)。

apprtc.appspot.com的'規範'WebRTC視頻聊天示例使用XHR和Google App Engine通道API進行信號傳輸。