2、 WebRTC能做什么
3、 常用API
4、 基本原理
WebRTC全称是Web Real-Time communication,是一种实时音视频通讯技术,通过WebRTC可以使浏览器之间建立点对点的连接,并实时传输数据。
通过上述可以看到浏览器M和浏览器L可以在不依赖于Web服务器的情况下点对点实时传输数据。上图中的Web服务器不是用于数据传输,而是用于协助浏览器M和浏览器L进行连接,进行协助连接的服务器也叫信令服务器。
WebRTC主要分为四部分,分别是信令、建立连接、安全加密、数据传输,下面分别介绍四个步骤。
信令是指通信两端基于交换的数据进行协商。通俗的解释就是在互联网中两个浏览器之间如果要进行点对点的数据传输,连接双方需要交换对方的一些基本信息,基本信息包括对方的地址,带宽,数据的编解码格式,是否支持音视频等等信息。
通信双方的基本信息完成交换后,浏览器双方开始建立连接。在网络中,浏览器双方可能在同一个内网,可能不在同一个内网,中间可能还隔着交换机、路由器,还会存在防火墙。在网络的环境复杂的情况下,通信的双方需要找到一条最佳路径传输数据建立连接。建立连接主要使用的协议就是ICE协议。ICE协议又需要依赖STUN协议和TURN协议。
在WebRTC中,为了保证媒体传输的安全性,引入了DTLS作为传输加密协议,DTLS原理和作用类似于SSL/TLS,DTLS主要适用于UDP通信过程的加密,SSL/TLS主要适用于TCP通信过程的加密。
在WebRTC中,音视频数据传输是使用RTP协议,然后通过 DTLS 协商出加密密钥之后,RTP 也需要升级为 SRTP,通过密钥加密后进行通信。协议栈如下图所示:
上面说了对数据加密是使用DTLS,传输数据则分为两种情况,一种是传输音视频数据,另一种是传输自定义应用数据。
1、音视频数据传输,主要使用RTP/SRTP、RTCP/SRTCP协议
前面主要对WebRTC做了一个简单介绍,跳过了很多细节,有些地方可能不够严谨,如果有兴趣的读者,可以对技术做进一步研究,比如:
1、信令如何进行协商?
2、传输层用了UDP,UDP本身是不可靠的,那么,音视频数据、自定义用户数据的时序、质量是如何保证的?
3、RTP用来传递音视频数据,为什么还需要有RTCP?
4、SCTP如何从协议层面兼顾传输的效率和质量?如何实现自定义数据的高效传递?
5、ICE协议的完整流程。
6、其他。
a 在openvidu中,一个激活的会议由kurentoSession实例表示。当创参会者加入会议时,openvidu会创建一个kurentoSession实例。
b 在kurento服务器上,一个会议由一个pipeLine 和N N个mediaEndpoint表示。N表是参会方数量,每一个参会方会创建一个发布媒体用的MediaElement和(n-1)个订阅其它媒体流用的MediaElement,它们被编排入一个PepleLine中, 形成N N的连接。
所以,当第一个用户加入会议室时,系统会在Openvidu上创建一个KurentoSession实例,同时在Kurento上创建一个pipleLine, KurentoSession 实例引用了这个pipepline N个用户会有N个kurentoSession, 但只有一个pipleline。PipleLine的描述是在Kurento Client包里。
管理器中另外一个重要的是sessionManager,session代表的是会议,所以sessionMananger 实际就是所有具体会议的管理 在ioopenviduservercore包下的SessionManager只是一个虚类,它声明了一些会议的 *** 作方法:
这些方法都和会议有关, 可以发现,上面的功能通常对应我们音视频软件进入会议室的功能。
开openvidu中,它的具体的实现是KurentoSessionManager,它会在server启动的时候初始化。
在III中说了,sessionid 代表的会议号,创建会议的时候会创建一个sessionNotActive(Session类)对象,代表的是还未正式使用的会议,当第一个用户首次加入的时候,才会正式使用这个会议,KurentoSessionManager的joinRoom方法描述了相关的逻辑。
与sessionNotActive不同,一个开始使用的会议用KurentoSession来表示(继承自Session),首次加入会议, 需要创建这个Ksession, 它会指定一个具体的Kurrento Server,ksession的创建需要指定具体kms,用来表示在具体哪个KMS创建会议。社区版实际上只有一个KMS,但在实现上如下图, 已经默认使用获取最小负载的方式获得kms。
sessionManager对外提供会议 *** 作功能的统一入口,每个会议对应的kurentoSession负责实际与kurento server的通信,来完具体的会议 *** 作。所以在kurentoSession中我们可以看到相类似的会议功能定义:
上图是一个包含有浏览器、application 、 openvidu server, 、kurento server 等在内的一个逻辑通讯图。
浏览器端加载会议应用程序,通过> Linux怎么搭建Web服务器
1,基于apache的web服务器基础搭建:
(1)实验环境:一台ip为1921681010的rhel59主机作为web服务器,一台ip为1921681015的win7主机作为测试机
(2)查看服务主机软件是否安装
[root@ser1 ~]# rpm -q >1、首先安装VisualStudio2008,打上ServicePack1补丁包(也可以安装VisualStudio 2010,只是后面的编译过程会稍微麻烦一些)。
2、安装MicrosoftSDK 71,安装SDK71的时候,默认SDK71安装在C盘下。一定要注意SDK71的安装路径,因为在WebRTC项目在配置中有规定,配置文件在 \trunk\src\build 名为commongypi 的文件,如果你不想安装在C盘下,那么就要修改一下这个配置文件了,不然的话,的时候就会出现各种警告问题的。
3、安装MicrosoftDirectXSDK (June 2010)。
4、安装Python26(也可以是其他的版本,不过经过测试安装26版本出现的问题是最少的)版本,将Python安装目录添加到系统环境变量Path中(例如我的安装目录是D:\WebRTC\Install\Python26)
5、接下来会有两种编译下载方式,如下所述:
51、已经存在完整的depot_tools编译下载包(在文件夹中已给出)的情况:
511、把解压后的depot_tools路径添加到Path系统环境变量当中(例如我的路径是D:\WebRTC\Install\depot_tools)
52、还没有存在depot_tools编译下载包情况下的编译环境的搭建
521、安装GIT工具,下载并安装Git、Tortoisegit:(本机:Git-1711-preview20120710,TortoiseGit-2012-09-08-cb73a5c-32bit)
选择适合自己系统的版本,下载并安装(注:TortoiseGit只是一个GUI,必须安装Git。)
把Git中bin目录手动添加到系统环境变量Path中,TortoiseGit安装时会找到Git目录并自动配置好。
522、下载、安装获取源码的工具SVN(代码版本管理工具)TortoiseSVN
523、下载并配置depot_tools,将文件夹路径添加到环境变量Path中。
建立一个存放depot_tools的文件夹,cmd进入该目录(cdd:/depot_tools ;d: ;)
6、建立WebRTC的存放目录(例如我这里的存放目录是D:\WebRTC\WebRtcPj)
513、打开DOS窗口,进入刚才新建的WebRTC存放目录,
按顺序输入:
A:gclient config --name trunk
B:gclient sync --force(获取以前版gclient sync --revision)同步解决方案
C:gclient runhooks--force 生成本地的解决方案
7、打开VS并导入peerconnection_allsln项目,并按如下要求配置VS环境:Tools|Options|ProjectsandSolutions|VC++Directories
可执行文件:
1 C:\Program Files\MicrosoftSDKs\Windows\v71\Bin
2 D:\WebRTC\Install\Python26
3 C:\Program Files\Microsoft DirectX SDK(June2010)\Utilities\bin\x86
包含文件:
C:\Program Files\Microsoft DirectX SDK(June 2010)\Include
C:\Program Files\MicrosoftSDKs\Windows\v71\Include
库文件:
C:\Program Files\MicrosoftSDKs\Windows\v71\Lib
C:\Program Files\Microsoft DirectX SDK(June 2010)\Lib\x86
生成的可执行文件位于“\trunk\Debug”下,如“peerconnection_serverexe”和“peerconnection_clientexe”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)