webRTc+ websocket实现多人视频通话,目前此demo只支持crome浏览器,

版本仅仅支持:ChromeStandalone_46.0.2490.80_Setup.1445829883

tomcat要8,jdk要1.7,不需要数据库

192.168.1.118是我的ip地址,在所有jsp页面中,要修改成自己的服务器的ip地址

多人视频通话启动后访问地址:

http://192.168.1.118:8080/WebRTC/manyrtcclientA

http://192.168.1.118:8080/WebRTC/manyrtcclientC

最后打开http://192.168.1.118:8080/WebRTC/manyrtcclientB

因为B是触发者,B会先发消息给A和C

一对一视频通话访问地址

http://192.168.1.118:8080/WebRTC/rtcclientA

之后访问:http://192.168.1.118:8080/WebRTC/rtcclientB

websocket测试地址:

http://192.168.1.118:8080/WebRTC/clientA

http://192.168.1.118:8080/WebRTC/clientB

没有顺序,可以直接测试

csdn下载源码下载地址:http://download.csdn.net/detail/heqinghua217/9600085

看代码之前,建议大家看看webrtc通信原理,来自:http://www.cnblogs.com/fangkm/p/4364553.html

这段文字和图片虽然很简短,但是很清楚,要多看几遍,反正我看了很多遍

--这篇文章有些文字也是很好的参考

http://www.cnblogs.com/lingyunhu/p/4058182.html?utm_source=tuicool

一对一的通信网上有demo,其实很简单,关键是多人视频通信,我也是想了很久,看了这个图,自己也在本子上画了几个图,

我多人视频通话思路:饶了很多弯路,最后终于可以了,以下是我的心里路程:

视频通话websokit和webRTC视频监控端调试,发现问题。
C端数据可以接收到,但是无法显示。

解决1:后面考虑C必须也要和AB建立链接,于是修改成C也发送响应消息给A和B结果,导致A和B通信混乱,
解决2、考虑可能服务器只是解决了信令服务的消息传送,但是视频端的服务stun并没有区分接受到的是谁的消息,考虑client创建多个视频链接connection。然后每一端都和相应的peerconnction通信。这里消息是固定,需要拿到消息,重新编辑,加入消息发送人,否则无法知道用哪个peerconnection保持通信。
测试1、怀疑是未建立链接导致,测试,A和B的正常通信,吧A的消息不传入给B,A是否可以看到B的视频?修改代码后测试,发现看不到,所以必须要建立链接
测试2、先测试A和B通信的情况下,建立多个peerconnection,建立链接,转发消息,看看是否可行?因为担心,candidate消息格式不允许修改,怕stun服务无法识别,发现不可行
测试3、A和B通信建立后,可以继续发送文本消息,不会断开
疑问1、还是需要先确定A和B通信,一共发起几次请求,请求内容分别是什么,否则不是仅仅修
改canidate就可以解决的。分析数据后发现
(场景:A和B通信,B请求A的过程:
1、B先发送offer和sdp(音频相关参数)给A,结束后继续发送candidate(ip和端口以及是video还是audio)给A,这里video和audio发送了4遍
2、A接收到请求,发送answer和sdp,结束后继续发送candidate的audio和video也是多遍给B
然后再发送一个offer,sdp给B
3、B接收到信息,发送一个answer,sdp给A,最后连接成功后,websoket就没有再传递消息,感觉是他们自己直接通信了。
有点类似,我打电话给你(不确定你是谁),先发个短信问确认下你是谁?(当然要把自己的一些基本信息发送过去,否则别人也不理我) ,对方看到短息,发现是朋友,然后回复我,他张三,性别男、年龄88,然后张三回复可以打电话了,,我收到信息,打电话过去。

1、创建多个peerconnection之后,B和A之间的通信也显示不
了,B给A发送请求,A可以收到的请求,但是A无法响应给B

2、怀疑多个peerconncetion会发送多条数据给别人,如B到A,B会发多条给A,那么A的两个消息冲断,导致混乱。原来这是考虑接受到消息,用发送方来判断是B发过来的,用connection接受,是C发过来的用connect2接受,但是A也有两个peerconnection,它会发送两边消息给B和C,其实应该是A的connetion发送给B,connection1发送给C,然后B和C接受到消息,判断是来自A还是B。
最后方法可行

上述序列中,WebRTC并不提供Stun服务器和Signal服务器,服务器端需要自己实现。Stun服务器可以用google提供的实现stun协议的测试服务器(stun:stun.l.google.com:19302),Signal服务器则完全需要自己实现了,它需要在ClientA和ClientB之间传送彼此的SDP信息和candidate信息,ClientA和ClientB通过这些信息建立P2P连接来传送音视频数据。由于网络环境的复杂性,并不是所有的客户端之间都能够建立P2P连接,这种情况下就需要有个relay服务器做音视频数据的中转,本文本着源码剖析的态度,这种情况就不考虑了。这里说明一下, stun/turn、relay服务器的实现在WebRTC源码中都有示例,真是个名副其实的大宝库。

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

  • ClientA首先创建PeerConnection对象,然后打开本地音视频设备,将音视频数据封装成MediaStream添加到PeerConnection中。
  • ClientA调用PeerConnection的CreateOffer方法创建一个用于offer的SDP对象,SDP对象中保存当前音视频的相关参数。ClientA通过PeerConnection的SetLocalDescription方法将该SDP对象保存起来,并通过Signal服务器发送给ClientB。
  • ClientB接收到ClientA发送过的offer SDP对象,通过PeerConnection的SetRemoteDescription方法将其保存起来,并调用PeerConnection的CreateAnswer方法创建一个应答的SDP对象,通过PeerConnection的SetLocalDescription的方法保存该应答SDP对象并将它通过Signal服务器发送给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信息通过Signal服务器发送给ClientB,ClientB通过PeerConnection的AddIceCandidate方法保存起来。同样的操作ClientB对ClientA再来一次。
  • 这样ClientA和ClientB就已经建立了音视频传输的P2P通道,ClientB接收到ClientA传送过来的音视频流,会通过PeerConnection的OnAddStream回调接口返回一个标识ClientA端音视频流的MediaStream对象,在ClientB端渲染出来即可。同样操作也适应ClientB到ClientA的音视频流的传输。

webRtc+websocket多人视频通话相关推荐

  1. WebRTC实现多人视频聊天之客户端设计

    写在前面 在开始之前,需要对如何建立点对点连接有一个了解,参考我的另一篇博文:WebRTC之点对点连接.下图是来自参考博文中的一张图片. 基础想法 基础架构如下: 客户端主要在于处理从WebSocke ...

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

    本发明涉及视频通话领域,特别涉及一种基于WebRTC的多人语音视频通话方法及系统. 背景技术: 随着互联网技术和通信技术的快速发展,人们的交流方式与交流内容得到了极大的丰富和发展.在节奏越来越快的信息 ...

  3. 【山大会议】多人视频通话 WebRTC 工具类搭建

    文章目录 前言 系统架构 Mesh 架构 MCU 架构 SFU 架构 具体代码 RTC.ts SFU.ts 前言 山大会议 基于 WebRTC 技术实现多人同时在线的视频会议功能.但是 WebRTC ...

  4. WebRTC现状以及多人视频通话分析

    1.WebRTC 概述 WebRTC(网页实时通信技术)是一系列为了建立端到端文本或者随机数据的规范,标准,API和概念的统称.这些对等端通常是由两个浏览器组成,但是WebRTC也可以被用于在客户端和 ...

  5. WebRtc实现多人视频会议以及视频录制上传

    1.前言 最近公司做的一个项目需求是实现多人视频会议聊天,查阅资料,决定使用HTML5新支持的WebRtc来作为视频通讯.客户端使用支持HTML5浏览器即可,如chrome,服务器段需要提供两个主要的 ...

  6. WebRTC实现多人视频聊天

    写在前面 实现房间内人员的视频聊天,由于并未很完善,所以需要严格按照步骤来,当然基于此完善,就是时间的问题了. 架构 整个设计架构如下: 图片来自于参考博文.我使用的是第一种Mesh 架构,无需任何流 ...

  7. 苹果Facetime支持32人视频通话,一年前,即构科技已经做到了

    日前,苹果WWDC在加州拉开序幕,在这场只和软件有关的发布会上,苹果在所有产品的操作系统都加入了新功能,在软件上做了一次全方位的更新. 值得一提的是,苹果Facetime做了全新的升级,除了支持镜头滤 ...

  8. rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...

    前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: 本文内容摘要: 初步理解WebSocket的前后端交互逻辑 手把手使用 SpringBoot ...

  9. IOS端使用WebRTC实现一对一音视频通话

    前言 WebRTC 实现P2P音视频通话--原生IOS端使用WebRTC实现一对一音视频通话将基于前两篇博客<<信令服务器>><<stun/trun P2P穿透和转 ...

最新文章

  1. 关于javascript代码优化的8点建议
  2. 来体验一把职场人的真实训练,检验你的工程化交付能力!
  3. “���”引发的线上事故
  4. Windows10~VS2019~OpenCV3.4.6配置
  5. Programming .Net Component - Chapter 1. introducting component-oriented programming
  6. mysql 5.6.14源码安装_CentOS 6.4下编译安装MySQL 5.6.14详细步骤
  7. Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)...
  8. 站在知乎肩上-做更强的自己(4)
  9. 《西游记》《封神榜》各路神仙基本层次图,不要再傻傻分不清楚了
  10. 算法笔记 分治:循环赛日程 棋盘覆盖 选择问题 输油管问题 整数因子分解
  11. Python3-word文档操作(八):提取word文档中的图片方式一-利用docx库
  12. vue-router的实现
  13. 【Scrapy pipeline 存入数据到mysql 】mysql的实践笔记,以及模板代码
  14. 适合写笔记的文本笔记管理工具——Keep It for Mac!
  15. 区块链共享经济:为什么可以挑战Uber和Airbnb?
  16. matlab中 spm,使用SPM批处理在MATLAB中运行预处理
  17. winform模拟登陆网页_用c#模拟手机app向网站登录,如何写?
  18. PHP实战之发送邮件
  19. 数学建模--运输问题
  20. 【CF1569】D. Inconvenient Pairs(思维+二分)

热门文章

  1. 5G网络安全方案-华为
  2. Android发展 四大组件简介 SDK目录结构 工程目录结构
  3. miniconda 安装与源配置
  4. hadoop3 Yarn容量(Capacity Scheduler)调度器和公平(Fair Scheduler)调度器配置
  5. http://myproducts.ca/here.php,外研(新标准)版
  6. 上银驱动器使用手册_D1驱动器操作使用手册.pdf
  7. Canonical Juju 使用笔记
  8. 克隆远程仓库#180804
  9. 一种电源突然掉电的检测方式
  10. 利用无线信号传输的远程红绿灯辨识系统