如何在 Webrtc 视频调用中实现 socket.io 以及我必须在 server.js 中更改啥?

Posted

技术标签:

【中文标题】如何在 Webrtc 视频调用中实现 socket.io 以及我必须在 server.js 中更改啥?【英文标题】:How to do socket.io implementation in Webrtc Video calling and what i have to change in the server.js?如何在 Webrtc 视频调用中实现 socket.io 以及我必须在 server.js 中更改什么? 【发布时间】:2013-03-01 10:03:12 【问题描述】:

如何在Webrtc视频通话中实现socket.io?

【问题讨论】:

【参考方案1】:

有点超载但它有效:SocialVidRTC

【讨论】:

【参考方案2】:

我从您的问题中了解到,您已经有一个 WebRTC 项目和 server.js 中的一些信号机制,可能是 websockets 。

要将其替换为 socket.io 或任何其他信号,如 SIP / XHR / AJAX 等,您需要将 server.js 替换为基于 socket.io 的新代码以进行请求和响应。

按照以下步骤操作:

    为 socket.io 创建一个 https 服务器(因为 webrtc 页面仅从安全来源捕获网络摄像头输入)。将服务器分配给一个变量,比如 app

    var fs = require('fs');
    var https = require('https');
    
    var options = 
      key: fs.readFileSync('ssl_certs/server.key'),
      cert: fs.readFileSync('ssl_certs/server.crt'),
      ca: fs.readFileSync('ssl_certs/ca.crt'),
      requestCert: true,
      rejectUnauthorized: false
    ;
    
    var app = https.createServer(options, function(request, response)
            request.addListener('end', function () 
            file.serve(request, response);
        ).resume();     
    );
    
    app.listen(8081);
    

这里的 server.key 、 server.crt 和 ca.crt 是假的 ssl 证书,而 8081 是我选择的 https 端口。 您也可以重复使用相同的 https 服务器来托管网页。

    使用之前定义的 app 在同一端口上监听 socket.io

    var io = require('socket.io').listen(app, 
        log: false,
        origins: '*:*'
    );
    
    io.set('transports', [
        'websocket'
    ]);
    

我只选择 websocket 但你也可以设置其他类型的传输,例如

socket.set('transports', [
    'websocket'
  , 'flashsocket'
  , 'htmlfile'
  , 'xhr-polling'
  , 'jsonp-polling'
]);

    现在实现信令特定功能和调用,例如,

    io.sockets.on('connection', function (socket) 
        ...
            socket.on('webrtc-joinchannel',function(data)
                var resp=joinChannel(data);
           socket.emit('resp-webrtc-joinchannel', resp);
            );
    ...
    );
    

注意:我使用的是 socket.io v0.9。

如果您想要示例实现,您可以查看任何示例项目,例如 here

【讨论】:

以上是关于如何在 Webrtc 视频调用中实现 socket.io 以及我必须在 server.js 中更改啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 应用中实现 webRTC

如何在 Hybrid iOS 应用程序中实现 WebRTC?

如何在 webrtc 中实时流数据

如何在广播上传扩展(iOS)中实现上传?

如何使用适用于 Android 的 WebRTC Native Code 实现 3 路电话会议视频聊天?

webrtc 中的 Android 端 jni