本发明涉及视频通话领域,特别涉及一种基于WebRTC的多人语音视频通话方法及系统。

背景技术:

随着互联网技术和通信技术的快速发展,人们的交流方式与交流内容得到了极大的丰富和发展。在节奏越来越快的信息时代,传统的基于文字的交流方式不仅效率显得有些低,而且有时并不能准确的表达人们的本意。所以,支持语音视频的通信方式逐渐盛行起来。对于早期的网页即时通讯,仍然需要下载臃肿而且并不安全的插件。但WebRTC的出现,弥补了传统即时通讯的不足。

WebRTC,即Web Real-Time Communication,是一个支持网页浏览器进行实时语音视频通话的技术。其直接的应用就是允许开发者能实现视频通话或者其他的点对点的数据传输。WebRTC有一整套的音视频解决方案,并且代码是开源的。此外,WebRTC也是全平台支持的。其不仅局限于网页端,也提供了移动开发使用的接口。这为二次开发移动端应用提供了基础。

技术实现要素:

本发明的目的在于克服现有技术的缺点与不足,提供一种基于WebRTC的多人语音视频通话方法,该方法抛弃传统流媒体通信方式,降低通信延迟,应对复杂网络环境,提高用户体验,丰富用户交流形式,降低系统维护成本;而且操作简单灵活,具有较高的信息传递和响应的速度,适用于大多数移动终端。

本发明的另一目的在于提供一种基于WebRTC的多人语音视频通话系统。

本发明的目的通过以下的技术方案实现:

一种基于WebRTC的多人语音视频通话方法,包含以下步骤:

步骤1、第一位用户指定连接房间号Room ID与房间大小n,发起n-1路通话;

步骤2、所述第一位用户采集网络信息以及本地会话信息,并将这些连接数据发送至服务器,等待接收端与之建立连接;

步骤3、第二位用户指定同样的房间号Room ID和房间大小n,发起n-1路通话,同时第二位用户采集网络信息以及本地会话信息,作为连接数据;

步骤4、所述第二位用户选取其中一路通话作为接收端,回应第一位用户的通话请求,与之建立连接;同时剩余的n-1-1路通话等待新的接收端与之建立连接;

步骤5、重复步骤3、4,第三位用户分别与第一、二位用户建立连接,依次循环,最终实现n个客户端之间的两两互联互通。

所述步骤1具体为:第一位用户指定连接房间号Room ID与房间大小n,并作为n-1路通话的发起端,发起通话,等待接收端与之建立连接;所述第一位用户构成一个Client,由唯一的Client Id标识;每一路通话称之为Instance,由唯一的Instance ID标识,是P2P连接的最小单位,同时根据指定编码格式,开始采集本地音视频数据。

所述步骤2具体为:所述第一位用户在每一路通话Instance中,通过NAT穿透技术采集网络信息,用作跨网段通信;同时采集本地媒体描述,并将采集的网络信息和本地媒体描述发送至服务器,由服务器中转,等待接收端获取。

所述本地媒体描述包括音视频的相关参数。

所述步骤3具体为:第二位用户通过指定连接房间号Room ID与房间大小n,从服务器获取连接数据,以及当前等待连接用户Client数m(目前由于前面只有一个Client发起了请求,所以m=1),同时采集网络信息以及本地媒体描述信息。

所述步骤4具体为:第二位用户Client在本地n-1个Instance中,随机选择m个Instance用作接收端,对m个Client做响应,建立P2P连接;同时又将剩余的n-1-m个Instance作为发起端,发起通话请求,等待新的接收端与之建立连接。

所述步骤5具体为:重复步骤3和步骤4,第三位用户Client首先获取连接数据以及当前等待连接用户Client数m(此时m=2),分别以本地连接数据回应第一、第二位Client,与之建立P2P连接;以此类推,当n个用户Client陆续通过相同的连接房间号Room ID和房间大小n建立连接后,将实现n个用户两两互联互通。

本发明另一的目的通过以下的技术方案实现:

一种基于WebRTC的多人语音视频通话系统,包括本地音频视频流采集模块、P2P连接管理模块和多人管理模块;其中

本地音频视频流采集模块,负责采集本地音频视频流,并进行编码;客户端启动摄像头与麦克风,通过指定编码格式获取音视频流,并创建音频轨道和视频轨道;

P2P连接管理模块,负责在两个客户端之间的信令交互,进而建立WebRTC连接;每一个P2P连接由一个Instance管理,具有唯一的Instance ID;

多人管理模块,负责协调在多人环境下,n-1路通话的组织与管理;在当前Client中,有n-1个Instance通过向服务器请求,能够获取当前情境中已经加入房间的用户数m,其中m<n;然后在本地Client中的n-1路通话,即在n-1个Instance中,随机选取m路通话作为P2P连接的接收端,同时满足:对于每个Client,只响应的其中一个Instance;剩余的n-1-m路通话作为新的发起端,等待接收端与之建立连接。

本发明与现有技术相比,具有如下优点和有益效果:

1、Android操作系统应用广泛,不仅在手机终端,在平板电脑和可穿戴设备上也十分受欢迎。本发明将WebRTC用于Android应用的开发,既丰富了Android的通信交流手段,又使得WebRTC得到很好的推广。

2、NAT技术,即网络地址转化技术,是一种把内部网络私有IP地址转换为可以在Internet合法传播的外部网络地址的技术。由于公网IP地址紧缺,所以大部分计算机是处于NAT之后的网络环境中。但对于WebRTC协议来说,NAT会导致其在跨网段的环境中失效。因此,本发明为了解决该问题,需要实现NAT外侧与内侧进行自由通信,即NAT穿透,通过NAT穿透这一技术手段,较好地解决了上述技术问题。STUN协议或TURN协议可以很好的解决大部分NAT穿透问题。ICE协议就是结合STUN协议和TURN协议这两部分而形成的综合性NAT穿透解决方案。

多媒体会话描述SDP,主要应用于WebRTC中客户端与客户端之间的会话初始化以及信令交互。双方将收集的SDP信息发送给服务器,再由服务器中转给对方。这一过程是通过一对PeerConnection对象的offer/answer操作来完成。

WebSocket协议,是一种即时通信协议。其本质上是建立在TCP协议上的Socket连接,在应用层进行了封装,简化了接口以及调用接口。WebSocket协议可以使客户端与服务器之间建立全双工的高速数据通道。在通信过程中,使用基于文本的消息传输数据。与轮询和长连接相比,在传输稳定性和传输数据量方面也具有很大的优势。

信令,应用在协调通讯的过程中。为了建立WebRTC通信,客户端双方需要进行一系列的信令交互。虽然应用WebRTC协议可以使网络中的两台主机能够直接进行通信,即P2P通信。但这并不意味着WebRTC不需要服务器。在建立数据传输的信道的过程中,必须有服务器进行参与。而信令就发挥这样的作用。

2、本发明是基于WebRTC的Android平台而实现多人语音视频通话的,由参与通话的用户两两建立P2P连接,舍弃了高昂复杂的流媒体服务器,降低了维护成本。

3、本发明各个用户之间地位相同,加入与离开通话的机制灵活。

4、本发明的技术方案具有低延迟,操作简单灵活、跨网段、适用于Android平台的特点。在小型通话场景中,具有良好的用户体验。

附图说明

图1为多人通信方案示意图。

图2为P2P连接建立流程图。

图3为本地音视频流捕获流程图。

图4为多人通话管理结构示意图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

一种基于WebRTC的多人语音视频通话方法,具体实施包括以下步骤:

步骤1、第一位用户指定连接房间号Room ID与房间大小n,发起n-1路通话。

步骤2、该用户采集网络信息以及本地会话信息,并将这些连接数据发送至服务器,等待接收端与之建立连接。

步骤3、第二位用户指定同样的房间号Room ID和房间大小n,发起n-1路通话。同时采集网络信息以及本地会话信息,作为连接数据。

步骤4、第二位用户选取其中一路通话作为接收端,回应第一位用户的通话请求,与之建立连接。同时剩余的n-1-1路通话等待新的接收端与之建立连接。

步骤5、重复步骤3、步骤4,第三位用户分别与第一、二位用户建立连接……最终实现多个客户端之间的两两互联互通。

进一步地,所述步骤1进一步具体为:第一位用户指定连接房间号Room ID与房间大小n,并发起n-1通话。此时每一路通话均指定为P2P连接的发起端,等待接收端与之建立连接。该用户构成一个Client,由唯一的Client Id标识。每一路通话称之为Instance,由唯一的Instance ID标识,是P2P连接的最小单位。Instance既可以作为发起端,也可以作为接收端,由多人管理模块指定为发起端或接收端的角色。同时根据指定编码格式,开始摄像头与麦克风,采集本地音视频数据。并加载渲染器,将本地视频数据呈现出来。

进一步地,所述步骤2进一步具体为:在每一路Instance通话中:开始与打洞服务器通信,通过NAT穿透技术,采集网络信息,比如所在公网IP地址以及端口信息。并保存为ICECandidate实例,用过跨网段通信。同时采集本地媒体描述信息SDP,如音视频的相关参数。这两部分信息需要调用setLocalICECandidate()和setLocalSDP()方法保存到本地PeerConnection实例中;同时向服务器发送HTTP POST请求,将这两部分数据保存到服务器,等待接收端获取。

进一步地,所述步骤3进一步具体为:第二位用户Client通过指定连接房间号Room ID与房间大小n,发起n-1路通话,即n-1个Instance。首先获取当前已经加入该房间的用户Client数m。因为此时只有第一位用户加入房间,所以m=1。根据指定编码格式,该用户开始摄像头与麦克风,采集本地音视频数据。并加载渲染器,将本地视频数据呈现出来。同时访问打洞服务器,获取网络信息;采集本地视频信息。这两部分信息存为ICECandidate实例和SDP实例,作为本地连接数据保存在每一个Instance的PeerConnection实例中。

进一步地,所述步骤4进一步具体为:第二位用户Client在本地n-1个Instance中,随机选择m个Instance指定为接收端角色。并使用本地的连接数据分别对m个Client做响应,并获取对方保存在服务器的连接数据,使之与每个Client中的一个Instance建立P2P连接。然后,在第二位用户的n-1路通话中,选取没有回应接收端的n-1-m条线路,即剩余的n-1-m个Instance。将这些Instance分别指定为发送端的角色。把以上收集的本地连接数据以同样的方式发送至服务器,等待接收端与之建立连接。

进一步地,所述步骤5进一步具体为:重复步骤3和步骤4。第三位用户Client同样地获取已经加入该房间的Client数量m,此时m=2。成功收集本地连接数据后,该Client随机选取m个Instance分别回应m个Client中的一个Instance,使之分别建立P2P连接。同样地,当n个用户,即n个Client,陆续通过相同的连接房间号Room ID和房间大小n建立连接后,将实现n个用户两两互联互通。

如图1、4,所述一种基于WebRTC的多人语音视频通话方法,是基于一种基于WebRTC的多人语音视频通话系统实现的,一种基于WebRTC的多人语音视频通话系统包括以下模块:

本地音频视频流采集模块,负责采集本地音频视频流,并进行编码等工作。如图3,客户端启动摄像头与麦克风,通过指定编码格式获取音视频流AudioSource/VideoSource。并创建音频轨道和视频轨道AudioTrack/VideoTrack。这两条轨道需要存入同一个MediaStream实例中。最后再将MediaStream实例与PeerConnection实例相关联。

P2P连接管理模块,负责在两个客户端之间的信令交互,进而建立WebRTC连接。每一个P2P连接由一个Instance管理,具有唯一的Instance ID。如图2,建立P2P连接需要以下步骤:

第一步:由发起端向服务器发起通话请求。待服务器检查连接房间号Room ID和相关参数无误后,发起端Instance将创建PeerConnection实例。PeerConnection实例是实现P2P核心实例,也是Instance的关键部分,保存了关于连接的所有信息。

第二步:发起端Instance收集并保存本地SDP信息。

第三步:将SDP信息发送给服务器——这一动作称之为Offer。

第四步:接收端Instance以相同的参数访问服务器,获得发起端的SDP信息,同时收集本地SDP信息。同样地,这些信息都保存在接收端Instance的PeerConnection实例中。

第五步:接收端Instance将本地SDP信息回应给发起端——这一动作称之为answer。

第六步:当发起端和接收端分别拥有对方的SDP信息后,基于WebRTC的P2P连接随之建立。

接收端Instance从服务器获取连接数据,可以通过Http Post请求,是一个“拉”的动作。而接收端Instance回应发起端Instance,是通过WebSocket主动将数据推送过去,是“推”的一个动作。如果两端分别处于不同的网络中,就需要首先访问STUN/TURN/ICE服务器,获得自己暴露在Internet的IP地址以及端口等信息,保存为ICE Candidate实例,作为信令交互的一部分,使处于不同网络环境中的主机之间直接建立通信。

多人管理模块,负责协调在多人环境下,n-1路通话的组织与管理。在当前Client中,有n-1个Instance。通过向服务器请求,可以获取当前情境中已经加入房间的用户数m(m<n)。然后在本地Client中的n-1路通话,即n-1个Instance中,随机选取m路通话作为P2P连接的接收端。并且需要保证:对于每个Client,只响应的其中一个Instance。剩余的n-1-m路通话作为新的发起端,等待接收端与之建立连接。该模块负责指定本Client中每一个Instance的角色,保证多位用户之间有序的建立P2P连接。当某一路的P2P连接中断,该模块将回收连接资源,并重置角色,进而保证用户的退出重连。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

html5 视频语音对讲,一种基于WebRTC的多人语音视频通话方法及系统与流程相关推荐

  1. 肺结节目标检测_一种基于CT图像的肺结节检测方法及系统与流程

    本发明属于医学图像分析和计算机辅助诊断等技术领域,更具体地,涉及一种基于CT图像的肺结节检测方法及系统. 背景技术: 肺癌是导致患癌死亡的最危险的疾病之一,其发病率占所有癌症的三分之二,且5年存活率为 ...

  2. linux 目录防篡改,一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法

    一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法 [技术领域] [0001]本发明涉及文件防护技术领域,特别涉及一种基于Linux虚拟文件系统的防篡改方法及系统. [背景技术] [0002] ...

  3. jwt重放攻击_基于JWT数据的防止重放攻击的方法及系统与流程

    本发明涉及网络安全技术领域,具体涉及一种基于JWT数据的防止重放攻击的方法及系统. 背景技术: 目前,网络安全领域的技术方案对重放攻击的重视程度不够,只对JWT数据的过期时间管理,过期后需要用户重新登 ...

  4. html5填空题阅卷,一种基于图像识别的填空题自动阅卷方法与流程

    本发明涉及自动阅卷技术领域,尤其涉及一种基于图像识别的填空题自动阅卷方法. 背景技术: 随着电子信息的发达,越来越多的工作被计算机取代,例如,自动阅卷已经逐渐取代人工阅卷. 现有的自动阅卷系统,更多的 ...

  5. 智齿客服Android集成流程,一种基于编程语言接入智齿客服的方法以及电子设备与流程...

    技术特征: 1.一种基于编程语言接入智齿客服的方法,其特征在于,包括: A.获取智齿客服的编号信息,通过脚本文件导入所述编号信息,以及配置所述智齿客服的属性信息: B.通过编程语言的内框架承载所述智齿 ...

  6. android 指纹 分发,移动终端及基于指纹识别来实现操作的方法和系统与流程

    本发明涉及移动终端技术领域,具体地说,移动终端及基于指纹识别来实现操作的方法和系统. 背景技术: 随着科学技术的不断发展和社会的进步,近年来指纹识别的流行,很多移动终端上均设置有指纹识别装置. 现有移 ...

  7. dicom 脱敏_一种对医疗影像数据进行脱敏处理的方法及系统与流程

    本发明涉及医疗人工智能与大数据处理领域,特别涉及一种对医疗影像数据进行脱敏处理的方法及系统. 背景技术: 随着以深度学习框架为内核的新人工智能技术强势崛起,在各个领域都获得了长足的发展与推进,Alph ...

  8. 分布式mysql保持数据一致性_一种分布式跨数据库保持事务一致性的方法及系统与流程...

    本发明涉及计算机网络技术领域,尤其涉及一种分布式跨数据库保持事务一致性的方法及系统. 背景技术: 目前,分布式服务架构十分的流行,特别是对于电商领域来说.他的优点就不多说了,但是随着集群机器的增加,集 ...

  9. mysql索引和sphinx_基于SphinxMySQL的高效人脉索引方法与流程

    本发明涉及一种人脉索引方法,特别是涉及一种基于sphinxmysql的高效人脉索引方法. 背景技术: sphinx是一个全文检索引擎,索引和搜索性能优异,易于集成mysql数据源,并提供有多种形式的搜 ...

最新文章

  1. java sum_java math.sum
  2. 排序算法 - 6种 - 超炫的动画演示 - Python实现
  3. 小企业电脑如何组网_(完整版)中小型企业组网方案
  4. Yii 一些小的问题
  5. git 使用笔记(一)
  6. illustrator cs5 2学习笔记
  7. 《互联网信息服务管理办法》征求意见:违规拟计入信用档案
  8. 【杂篇 · 电脑】买R9000P以来遇到的解决的和未解决的问题汇总
  9. PGM——D-map、I-map、perfect-map
  10. SpringCloud学习笔记(一)【Euraka集群搭建】
  11. 泰山OFFICE技术讲座:一个字符,用哪个字体绘制
  12. opencv学习笔记十八:模板匹配(cv2.matchTemplate、cv2.minMaxLoc)
  13. Ad hoc Test
  14. 吕梁市服务器维修,终端服务器 吕梁知名智能车检网络摄像机 电话交通技术监控机柜...
  15. rust 局域网联机_腐蚀怎么进行局域网联机方式 酷跑加速器和你畅玩游戏世界
  16. 达梦数据库安装全流程
  17. 手写数字的识别分类+技术总结
  18. Android 中获取机顶盒的 mac 地址
  19. 【洛谷 P1046】[NOIP2005 普及组] 陶陶摘苹果 题解(比较)
  20. 解决URL请求中的中文乱码问题

热门文章

  1. 【考研复习】IP地址划分小题
  2. java9 gc log参数迁移_个人文章 - SegmentFault 思否
  3. Shell编程--通配符[ * ? () [] {} \]
  4. 2-1-单链表顺序存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版...
  5. 跳伞服务市场现状研究分析报告-
  6. vue-quill-editor设置字体大小并上传图片
  7. 静态代码检查完成代码分析和SonarQuber的初探
  8. 【mos 1494646.1】Patch Installation and Deinstallation For 11.2.0.3.x GI PSU
  9. C# SolidWorks 二次开发 API---提高草图绘制效率
  10. Qt connect 第五个参数