年后回来,因为新项目的需求,开始了解WebRTC相关的知识。目前接触的是Intel® Collaboration Suite for WebRTC。刚开始看SDK发现很多概念是我目前不知道的,于是恶补了一周基本的网络相关的知识。再来看Demo和Jar包里面的源码,对其代码逻辑的理解更深一步了。下面从代码层面分模块对Demo的设计和使用进行总结:

首先声明一下核心的对象:

private ConferenceClient mRoom;

无论是登录还是发布、订阅Stream,我们都需要mRoom来进行相关的逻辑的控制。

注明:本Demo支持的Android 最低版本是15. 即 Android 4.0.3版本及以上。

初始化Conference(会议室)

相关代码段:

ConferenceClientConfiguration config = new ConferenceClientConfiguration();
List<IceServer> iceServers = new ArrayList<IceServer>();
iceServers.add(new IceServer(stunAddr));
//iceServers.add(new IceServer(turnAddrTCP, "woogeen", "master"));
//iceServers.add(new IceServer(turnAddrUDP, "woogeen", "master"));
try {
    config.setIceServers(iceServers);
} catch (WoogeenException e1) {
    e1.printStackTrace();
}
mRoom = new ConferenceClient(config);
mRoom.addObserver(this);

  

在初始化Conference(会议室)的时候,需要设置IceServer作为创建之前的配置信息,并设置本类为观察者,用来接收会议室相关的状态回调。配置IceServer的用途是为了创建交互式连接,ICE是一种标准的穿透协议,利用STUN和TURN服务器来帮助建立连接。

在这里建立的连接是长连接,通过阅读SDK中Jar包的源码可以了解到:

SocketClient  // 长连接客户端
SocketClient.SocketClientObserver  // 长连接客户端观察者(接口),由ConferenceClient实现,这样用户只需要使用ConferenceClient就可以了

通过建立Socket长连接,然后根据相关的数据或者状态的变化,来通知ConferenceClient相关的事件。

加入Conference(会议室)

加入会议室的API代码:

mRoom.join(tokenString, /*options,*/new ActionCallback<User>() {

    @Override
    public void onSuccess(User myself) {
        // 链接成功,加入房间成功
        Log.d(TAG, "My client Id: " + myself.getId());
    }

    @Override
    public void onFailure(final WoogeenException e) {
        // 链接失败,加入房间失败
    }
});

可以看出来,我们在代码中只需要调用mRoom的join方法,将之前链接,就可以加入会议室Room,并通过回调方法来。

在加入房间之间,需要去基础服务器,去获取用户的token,token用来验证用户的身份。

WebRTC学习之 Intel® Collaboration Suite for WebRTC源码流程解读的更多相关文章

  1. WebRTC 学习之 Intel® Collaboration Suite for WebRTC 关键类整理

    关键类整理 ---> ConferenceClient.ConferenceClientObserver. 一.ConferenceClient ConferenceClient是一个应用程序在 ...

  2. 并发编程学习笔记(9)----AQS的共享模式源码分析及CountDownLatch使用及原理

    1. AQS共享模式 前面已经说过了AQS的原理及独享模式的源码分析,今天就来学习共享模式下的AQS的几个接口的源码. 首先还是从顶级接口acquireShared()方法入手: public fin ...

  3. 并发编程学习笔记(8)----ThreadLocal的使用及源码分析

    1. ThreadLocal的理解 ThreadLocal,顾名思义,就是线程的本地变量,ThreadLocal会为每个线程创建一个本地变量副本,使得使用ThreadLocal管理的变量在多线程的环境 ...

  4. Java并发包源码学习系列:JDK1.8的ConcurrentHashMap源码解析

    目录 为什么要使用ConcurrentHashMap? ConcurrentHashMap的结构特点 Java8之前 Java8之后 基本常量 重要成员变量 构造方法 tableSizeFor put ...

  5. Spring源码学习:第1步--在Spring源码中添加最简单的Demo代码

    为了最大程度地贴近Spring源码并进行学习,一种比较直接的做法是:直接在Spring源码中加入Demo代码,并进行调试. 参照以前使用Spring的经验,Spring最简单的使用方法是:一个实体类. ...

  6. ActiveMQ学习系列(三)----下载github源码并编译

    前记:坚持使用官网的资源去学习是挺痛苦的一个过程,昨天瞎溜达了一天,也没看到有系统性的学习文章,倒是发现了github上的ActiveMq项目. 地址:https://github.com/apach ...

  7. 设计比较好,有助于学习的Github上的iOS App源码 (中文)

    Github版 中文 : TeamTalk 蘑菇街. 开源IM. 电商强烈推荐. MyOne-iOS 用OC写的<一个> iOS 客户端 zhihuDaily 高仿知乎日报 Coding ...

  8. Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)

    知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...

  9. 【RabbitMQ学习记录】- 消息队列存储机制源码分析

    本文来自 网易云社区 . RabbitMQ在金融系统,OpenStack内部组件通信和通信领域应用广泛,它部署简单,管理界面内容丰富使用十分方便.笔者最近在研究RabbitMQ部署运维和代码架构,本篇 ...

随机推荐

  1. 20165304《Java程序设计》第九周学习总结

    教材学习内容总结 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL创建对象的应用程序称作客户端程序. 一个URL对象通常包含最基本的三部分信息: ...

  2. python3编译安装no module named _ssl

    使用源码编译安装python3.6.7以后用pip 安装库, 出现如下问题 Retrying (Retry(total=4, connect=None, read=None, redirect=Non ...

  3. 一个linux bbr存在的调用顺序bug

    最近跟踪bbr的状态转换的代码,发现一个问题: [,min_rtt_us=,full_bw=,cycle_idx=,pacing_gain=,cwnd_gain=,rtt_cnt= [,min_rtt ...

  4. go相关知识点

    后续开发go相关, 环境搭建 go env //查看环境所有 go只有三种引用类型 slice(切片). map(字典). channel(管道): go的类型的浅记忆 4仲类型bool,字符串,数字 ...

  5. metrics+spring+influxdb整合

    1.在maven项目的pom.xml引入metrics-spring和metrics-influxdb两个jar包 <dependency> <groupId>com.ryan ...

  6. git hub 第一篇

    昨天跟着菜鸟教程进行操作,问题如下: 1.在git网站进行注册,名称和邮箱 2..忘了在开头建立本地仓库,后来又新建仓库,在仓库右键添加git bash here 3.出现了下边这个错误,参考了很多文 ...

  7. BM递推

    从别的大佬处看到的模板 #include<bits/stdc++.h> #define fi first #define se second #define INF 0x3f3f3f3f ...

  8. Yii 框架不同逻辑处理方法统一事务处理

    1.定义事务处理接口 <?php namespace frontend\business\SaveRecordByransactions; /** * Interface ISaveForTra ...

  9. Linux 禁止普通用户su到root

    Linux账户权限管理上为了防止普通用户通过su切换到root用户,需要修改/etc/pam.d/su和/etc/login.defs两个配置文件. Step1:修改 /etc/pam.d/su文件 ...

  10. xmlhttprequest 1.0和2.0的区别,from qq前端哥

    阮一峰好文:http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html