AndroidRTC & ProjectRTC 实现分析(一)

AndroidRTC & ProjectRTC

Android是webRTC的一个开源实现,利用webRTC实现了RTC通话的功能
git仓库地址为 https://github.com/pchab/AndroidRTC
AndroidRTC是android client的实现 要运行这个项目 还需要ProjectRTC来交换信令 
ProjectRTC的仓库地址为 https://github.com/pchab/ProjectRTC

大致的工作原理:
AndroidRTC作为client端 ProjectRTC作为server端
clients首先通过server交换信令 
交换信令后,client分别创建PeerConnection开始connection

AndroidRTC编译

从git上clone到本地后,直接用AndroidStudio打开工程
工程的webRTC库采用的是一个外国网站的链接,所以不需要自己编译,方便很多
修改工程的Gradle和AndroidStudio的Gradle版本一致 就可以编译得到apk

ProjectRTC安装

从git上clone到本地 工程是基于node.js的 所以需要先安装node.js环境

进入工程顶层目录 npm install
              node app.js
浏览器打开127.0.0.1:3000 能看到页面说明安装成功
同时shell也会输出 Express server listening on port 3000

server端的流程

ProjectRTC的入口在顶层目录下的app.js 
熟悉js语法的话理解起来很简单

app目录下的三个文件
├── [root             814]  routes.js
├── [root             928]  socketHandler.js
└── [root             853]  streams.js
顶层的app.js是总的调用入口 route.js起路由作用
              socketHandler.js处理sokcet.io连接和交互
              stream.js负责记录连接到server的客户端

工程引用了Express框架,并且提供了一个页面服务,route.js和stream.js都是为了页面服务存在的
这里主要关注socketHandler.js的逻辑
socketHandler.js:
module.exports = function(io, streams) {
  io.on('connection', function(client) {
    console.log('-- ' + client.id + ' joined --');
    client.emit('id', client.id);

    client.on('message', function (details) {
      var otherClient = io.sockets.connected[details.to];

      if (!otherClient) {
        return;
      }
        delete details.to;
        details.from = client.id;
        otherClient.emit('message', details);
    });

    client.on('readyToStream', function(options) {
      console.log('-- ' + client.id + ' is ready to stream --');

      streams.addStream(client.id, options.name); 
    });

    client.on('update', function(options) {
      streams.update(client.id, options.name);
    });

    function leave() {
      console.log('-- ' + client.id + ' left --');
      streams.removeStream(client.id);
    }

    client.on('disconnect', leave);
    client.on('leave', leave);
  });

io.on : 注册nodejs socket.io事件 connect是socket.io的默认事件之一 表示有socket.io连接进入

从逻辑上看 socket.io连接建立后 server立刻把连接的id通过message类型事件发送回给client

另外一个需要关注的函数是message的处理
收到一个client发来的消息后 server将消息转发给另一个client
转发的源和目标是由消息(json格式)里的to和from对象决定的

你可能感兴趣的:(WebRTC)