WebRTC基本概念(一)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebRTC基本概念(一)相关的知识,希望对你有一定的参考价值。
参考技术AWebRTC (Web Real-Time Communication),一个可以让用户用自己流量实现音视频实时通信的框架(APIs),支持浏览器(Firefox、Chrome、Opera)以及ios、android 原生系统(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的区别等