webrtcclient与TURN和信令server通讯流程图

WebRTC是HTML5支持的重要特性之中的一个。有了它,不再须要借助音视频相关的client。直接通过浏览器的Web页面就能够实现音视频对聊功能。并且WebRTC项目是开源的。我们能够借助WebRTC源代码高速构建自己的音视频对聊功能。不管是使用前端JS的WebRTC API接口,还是在WebRTC源代码上构建自己的对聊框架。都须要遵循下面运行流程:

上述序列中,WebRTC并不提供Stunserver和Signalserver。server端须要自己实现。Stunserver可以用google提供的实现stun协议的測试server(stun:stun.l.google.com:19302),Signalserver则全然须要自己实现了,它须要在ClientA和ClientB之间传送彼此的SDP信息和candidate信息,ClientA和ClientB通过这些信息建立P2P连接来传送音视频数据。

因为网络环境的复杂性,并非全部的client之间都可以建立P2P连接,这样的情况下就须要有个relayserver做音视频数据的中转,本文本着源代码剖析的态度,这样的情况就不考虑了。

这里说明一下,
stun/turn、relayserver的实如今WebRTC源代码中都有演示样例,真是个名副事实上的大宝库。

上述序列中。标注的场景是ClientA向ClientB发起对聊请求,调用描写叙述例如以下:

  • ClientA首先创建PeerConnection对象,然后打开本地音视频设备,将音视频数据封装成MediaStream加入到PeerConnection中。
  • ClientA调用PeerConnection的CreateOffer方法创建一个用于offer的SDP对象,SDP对象中保存当前音视频的相关參数。ClientA通过PeerConnection的SetLocalDescription方法将该SDP对象保存起来,并通过Signalserver发送给ClientB。
  • ClientB接收到ClientA发送过的offer SDP对象,通过PeerConnection的SetRemoteDescription方法将其保存起来,并调用PeerConnection的CreateAnswer方法创建一个应答的SDP对象,通过PeerConnection的SetLocalDescription的方法保存该应答SDP对象并将它通过Signalserver发送给ClientA。
  • ClientA接收到ClientB发送过来的应答SDP对象,将其通过PeerConnection的SetRemoteDescription方法保存起来。
  • 在SDP信息的offer/answer流程中。ClientA和ClientB已经依据SDP信息创建好对应的音频Channel和视频Channel并开启Candidate数据的收集,Candidate数据能够简单地理解成Client端的IP地址信息(本地IP地址、公网IP地址、Relay服务端分配的地址)。
  • 当ClientA收集到Candidate信息后。PeerConnection会通过OnIceCandidate接口给ClientA发送通知,ClientA将收到的Candidate信息通过Signalserver发送给ClientB,ClientB通过PeerConnection的AddIceCandidate方法保存起来。

    相同的操作ClientB对ClientA再来一次。

  • 这样ClientA和ClientB就已经建立了音视频传输的P2P通道。ClientB接收到ClientA传送过来的音视频流,会通过PeerConnection的OnAddStream回调接口返回一个标识ClientA端音视频流的MediaStream对象,在ClientB端渲染出来就可以。

    相同操作也适应ClientB到ClientA的音视频流的传输。

这里的流程不过从使用层面上描写叙述了一下,详细内部都做了什么、怎么做的,以后的文章中会慢慢细扒,万事开头难,自我鼓舞一下。

来自:http://www.cnblogs.com/fangkm/p/4364553.html

时间: 2024-10-06 20:41:11

webrtcclient与TURN和信令server通讯流程图的相关文章

使用XCB编写X Window程序(05):使用异步的方式和X Server通讯及获取和设置窗口的属性

在前面的例子中,我们从来没有关心过调用XCB函数时,该函数和X Server的通讯是同步的还是异步的.因为在前面的例子中,我们基本上不关心XCB函数的返回值,只有在上一篇中,由于某些操作需要关心它们是否成功(比如是否成功打开字体.是否成功创建GC等),才涉及到XCB函数的返回值. 在这一篇中会更进一步,因为是获取窗口的属性,所以肯定要关注从X Server获取的数据,这时,将会涉及到XCB函数同X Server的通讯是同步的还是异步的.什么是同步?就是说调用一个函数向X Server发出一个请求

Turn and Stun server · J

本文简介了Turnserver(Turn + Stun)服务器的搭建.Turnserver主要提供了stun服务,支撑NAT.防火墙穿透,turn服务器,支撑打洞失败时的数据中转.使用场景上类似于前端使用的WEBRTC音视频数据服务,在不同网络环境下可通过stun服务器进行打洞以及turn服务器进行中转,最终实现web前端上的音视频通信. Turnserver 搭建 简介 webrtc的p2p穿透部分,一般都需要借助于turnserver,步骤大概是这样的 尝试直连 通过stun服务器进行NAT

PHP与MySQL通讯那点事

在我们的一款WebGame的生产环境中,一次无意的strace抓包时,发现了php与mysql大量通讯的数据.这种情况,在游戏服务器刚启动时,是正常的,但如果是运行一段时间之后,出现大量SELECT的SQL查询,绝对是有问题的,而且,所操作的数据库并不是配置库,那意味着,我们程序员的程序出现了违规的操作.具体结果大约如下: strace跟踪php进程与mysql通讯的日志(点击可查看大图) 如上图所示,php持续接收读取进程内描述符为3的响应包数据,描述符为3的为php与mysql建立的TCP通

Android 手机应用开发经验 之 通过Socket(TCP/IP)与PC通讯

Android 是一个开源的手机操作系统平台,已经被非常多的开发者视作未来最有潜力的智能手机操作系统.而且,在很短的时间内就在Android Market上出现大量的第三方应用程序,供用户下载与使用,其中有一些程序增强了手机的应用功能,而另外一些会充分的发挥 手机与其它电子设备的互动.今天,本文主要讲解如何实现Android与PC通讯. 首先,我们先来创建PC的服务器端,其源代码如下: public class TCPDesktopServer implements Runnable { pub

[Golang] 从零開始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)

通过前两章,我们成功是写出了一套凑合能用的Server和Client,并在二者之间实现了通过协议交流.这么一来,一个简易的socket通讯框架已经初具雏形了,那么我们接下来做的.就是想办法让这个框架更加稳定.茁壮~ 作为一个可能会和非常多Client进行通讯交互的Server.首先要保证的就是整个Server执行状态的稳定性,因此在和Client建立连接通讯的时候,确保连接的及时断开非常重要,否则一旦和多个client建立不关闭的长连接,对于server资源的占用是非常可怕的.因此,我们须要针对

如何搭建SimpleWebRTC信令服务器

上次介绍了<3分钟实现网页版多人文本.视频聊天室 (含完整源码)>使用的是default 信令服务器,只是为了方便快速开始而已.SimapleWebRTC官方文档里第一条就讲到,不要在生产环境里使用.这篇将详细介绍如何搭建一个自己的信令服务器. 1 安装Node JS 1. 从http://www.nodejs.org/download/下载nodejs最新版并安装,我是在Windows7 64位上安装的: 2 下载signalmaster 从https://github.com/andyet

SQL server 错误代码对比表

0  操作成功完毕. 1  功能错误. 2  系统找不到指定的文件. 3  系统找不到指定的路径. 4  系统无法打开文件. 5  拒绝訪问. 6  句柄无效. 7  存储控制块被损坏. 8  存储空间不足,无法处理此命令. 9  存储控制块地址无效. 10  环境错误. 11  试图载入格式错误的程序. 12  訪问码无效. 13  数据无效. 14  存储器不足,无法完毕此操作. 15  系统找不到指定的驱动器. 16  无法删除文件夹. 17  系统无法将文件移到不同的驱动器. 18  没

build your own website 1 -- how to install Apache Server

Operating System: Ubuntu 16.04 Web Server ?  most often used Web Server software is freely available Apache Server. Download Apache for free here ? https://httpd.apache.org/download.cgi#apache24 Unpack  httpd-2.4.29.tar.bz2 to ~/Downloads/httpd-2.4.2

MySQL 通讯协议

Client/Server 通讯协议用于客户端链接.代理.主备复制等,支持 SSL.压缩,在链接阶段进行认证,在执行命令时可以支持 Prepared Statements 以及 Stored Procedures . 当打算编写数据库代理.中间件.对 MySQL 数据包进行审核时,都需要了解底层的通信协议.在本文中,主要介绍 MySQL 通讯协议相关的内容. 简介 服务器启动后,会使用 TCP 监听一个本地端口,当客户端的连接请求到达时,就会执行三段握手以及 MySQL 的权限验证:验证成功后,