WebRTC学习之 Intel® Collaboration Suite for WebRTC源码流程解读
年后回来,因为新项目的需求,开始了解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源码流程解读的更多相关文章
- WebRTC 学习之 Intel® Collaboration Suite for WebRTC 关键类整理
关键类整理 ---> ConferenceClient.ConferenceClientObserver. 一.ConferenceClient ConferenceClient是一个应用程序在 ...
- 并发编程学习笔记(9)----AQS的共享模式源码分析及CountDownLatch使用及原理
1. AQS共享模式 前面已经说过了AQS的原理及独享模式的源码分析,今天就来学习共享模式下的AQS的几个接口的源码. 首先还是从顶级接口acquireShared()方法入手: public fin ...
- 并发编程学习笔记(8)----ThreadLocal的使用及源码分析
1. ThreadLocal的理解 ThreadLocal,顾名思义,就是线程的本地变量,ThreadLocal会为每个线程创建一个本地变量副本,使得使用ThreadLocal管理的变量在多线程的环境 ...
- Java并发包源码学习系列:JDK1.8的ConcurrentHashMap源码解析
目录 为什么要使用ConcurrentHashMap? ConcurrentHashMap的结构特点 Java8之前 Java8之后 基本常量 重要成员变量 构造方法 tableSizeFor put ...
- Spring源码学习:第1步--在Spring源码中添加最简单的Demo代码
为了最大程度地贴近Spring源码并进行学习,一种比较直接的做法是:直接在Spring源码中加入Demo代码,并进行调试. 参照以前使用Spring的经验,Spring最简单的使用方法是:一个实体类. ...
- ActiveMQ学习系列(三)----下载github源码并编译
前记:坚持使用官网的资源去学习是挺痛苦的一个过程,昨天瞎溜达了一天,也没看到有系统性的学习文章,倒是发现了github上的ActiveMq项目. 地址:https://github.com/apach ...
- 设计比较好,有助于学习的Github上的iOS App源码 (中文)
Github版 中文 : TeamTalk 蘑菇街. 开源IM. 电商强烈推荐. MyOne-iOS 用OC写的<一个> iOS 客户端 zhihuDaily 高仿知乎日报 Coding ...
- Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)
知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...
- 【RabbitMQ学习记录】- 消息队列存储机制源码分析
本文来自 网易云社区 . RabbitMQ在金融系统,OpenStack内部组件通信和通信领域应用广泛,它部署简单,管理界面内容丰富使用十分方便.笔者最近在研究RabbitMQ部署运维和代码架构,本篇 ...
随机推荐
- A bean with that name has already been defined in DataSourceConfiguration$Hikari.class
A bean with that name has already been defined in DataSourceConfiguration$Hikari.class 构建springcloud ...
- CSS表单2 组件排版
<!DOCTYPE html> <html> <head> <title>单选按钮对齐</title> ...
- html转换pdf
项目需求:移动端APP项目需要在手机上签订合同,将html转换成pdf格式的文件 解决方案:是用插件wkhtmltopdf; 记录用法:1.网址https://wkhtmltopdf.org/ 下载压 ...
- Codeforces Round #437 E. Buy Low Sell High
题意:买卖股票,给你n个数,你可以选择买进或者卖出或者什么都不做,问你最后获得的最大收益是多少. Examples Input 910 5 4 7 9 12 6 2 10 Output 20 Inpu ...
- Nginx – access_log格式及配置
日志格式 日志内容 192.168.199.164 – jeson [14/Apr/2018:07:17:09 +0800] “GET /?feed=rss2 HTTP/1.1” 200 13883 ...
- zabbix-3.4.10系列
第1节 zabbix体系架构图:
- Macro_Average和Micro_Average准则的选择标准
- CSS如何作小于1PX的边
小于1PX的边能使页面变得更加精致,那么具体怎么做呢? 主要思路就是设置伪元素先放大再通过变换缩小. 代码如下 .border { position: relative;//如果有圆角 } .bord ...
- 数据库TCPIP协议开了,但还是远程连不上
可能是因为开着防火墙 把防火墙关掉,或者参考下面的链接,在防火墙添加例外 https://zhidao.baidu.com/question/394026326542219285.html
- ES6 proxy(代理拦截) &&Reflect