WebRTC基本概念(一)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebRTC基本概念(一)相关的知识,希望对你有一定的参考价值。

参考技术A

WebRTC (Web Real-Time Communication),一个可以让用户用自己流量实现音视频实时通信的框架(APIs),支持浏览器(Firefox、Chrome、Opera)以及iosandroid 原生系统(Poor WP,默哀)。对于觉得带宽贼贵又需要实现用户之间音视频通信的公司来说,这是一个大大的福利。本系列文章会从WebRTC基本概念慢慢说起。

官方介绍:

按照传统的通信流程,是这样的:
如下图所示,数据发送端和接收端都需要通过公网服务器进行转发(因为发送端和接收端通常都做了NAT,彼此并不知对方实际位置)。
e.g.:犹如一个中国人和一个外国人,他们彼此不懂对方的语言,不知道对方的地址,但是中间有一个邮局知道对方的地址,因为对方都在邮局做了注册地址并且获取了同一个编号,那么如果他们之间需要互相通信的话,就需要和邮局联系,邮局会进行翻译并发往同一编号的对应地址。 但是这中间就会产生一个问题,这时候如果有多个中国人和多个外国人都要进行通信,那么邮局的工作量就会越来越大,当他们的通信超过原有邮局人手可处理规模时,邮局要么扩招(需要钱)要么延缓发送(会造成延迟,甚至丢失信件)。

时间关系,以下内容不再举例说明,需要网络基础的同学才能继续观看。

在真实世界的网络中,因为IPv4的地址个数问题,我们基本都是采用NAT连接的:

STUN服务器提供的功能十分简单,它让使用者获取自己所在的公网地址和在NAT中所映射端口号,这个服务有什么用呢?当使用者知道自己所在公网地址以及内部NAT映射端口时,它便可以讲自己的公网地址和端口号通知对方,这样对方就可以在茫茫大网中找到自己。
在以往统计中,WebRTC通过STUN建立连接的成功率为86%。

TURN [2] 是一个client-server协议。TURN的NAT穿透方法与 STUN 类似,都是通过取得应用层中的公有地址达到NAT穿透。但实现TURN client的终端必须在通讯开始前与TURN server进行交互,并要求TURN server产生"relay port",也就是relayed-transport-address。这时TURN server会建立peer,即远端端点(remote endpoints),开始进行中继(relay)的动作,TURN client利用relay port将资料传送至peer,再由peer转传到另一方的TURN client。

WebRTC学习之 Intel® Collaboration Suite for WebRTC源码流程解读

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

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

private ConferenceClient mRoom;

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

 

初始化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服务器来帮助建立连接。

 

 

 

 

加入Conference(会议室)

1. 加入会议室的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,并通过回调方法来 

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于WebRTC基本概念(一)的主要内容,如果未能解决你的问题,请参考以下文章

零基础快速入门WebRTC:基本概念关键技术与WebSocket的区别等

WebRTC 通信原理

RTCPeerConnection基本概念 -- 以及创建和绑定音视频以及渲染远端视频时候的作用

WebRTC 源码分析之一:几个核心设计概念

WebRTC概念简介

WebRTC 速成课程