前言 总结有福利
WebRTC是什么?
可能您还不知道WebRTC是什么,但您一定用过他里面的东西,因为QQ就用到了他的核心技术,不过那时候这些东西还不叫WebRTC,他也还掌握在GIPS手里(他们家的语音技术可谓独步天下),而且当年小马哥也给人家交了不少USD,扯远了。
WebRTC是Google于2011年6月3日开源的即时通讯项目,旨在使其成为客户端视频通话的标准。其实在Google将WebRTC开源之前,微软和苹果各自的通讯产品已占用很大市场份额(如Skype),Google也是为了快速扩大市场,所以将他给开源。经常接触开源的人应该很容易理解Google这种策略,只不过在国内大家都喜欢弄成SDK,然后按年按月按用户数给你收费,总让你觉得不爽
目录
WebRTC通话原理分析
WebRTC开发环境搭建
cotum最佳搭建方法
如何采集音视频数据
一对一通话时序分析
信令服务器设计
Web一对一通话
Web和Android通话
AppRTC快速演示
WebRTC通话原理分析
webRTc+ websocket实现多人视频通话,目前此demo只支持crome浏览器,
版本仅仅支持:ChromeStandalone_46.0.2490.80_Setup.1445829883
tomcat要8,jdk要1.7,不需要数据库
多人视频通话启动后访问地址:
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
webrtc服务器环境搭建
1. 搭建平台
- 操作系统: Ubuntu 16.04 server(64bits)
- Google webrtc的服务器Demo:详见https://github.com/webrtc/apprtc
- 域名: webrtc.olcms.com
- IP地址: 需要是公网地址
2. 软件安装
- 安装JDK:
add-apt-repository ppa:openjdk-r/ppa apt-get update apt-get install openjdk-8-jdk
- 安装nodejs相关包:
apt-get install nodejsapt-get install npm apt-get install nodejs-legacy npm -g install grunt-cli
- 安装Python和Python-webtest:
apt-get install python apt-get install python-webtest
- 1
- 2
注: 若已安装过上述软件,可忽略;如上述未提及的软件需要安装,请自行安装。
3. 搭建房间服务器(Room Server)
- 下载apprtc源码(操作所在目录/root/)
git clone https://github.com/webrtc/apprtc.git cd apprtcnpm install
Web和Android通话
AppRTCDemo如何使用?
WebRTCDemo可以直接做成P2P的效果,AppRTCDemo则需要另外一个服务端(也可直接连接:https://apprtc.appspot.com/),当然你也可以自己部署这个服务端,他是利用libjingle和XMPP来处理信令交互的,而且基于ICE协议实现P2P,至于什么是ICE,什么是STUN,TURN我在后面的文章中都有陆续讲到。
AppRTCDemo的最大问题就是很多人不知道服务端怎么部署,而且他也没有实现手机对手机的效果,这个应用是很广泛的,最起码有智能家居,安防监控等行业的用户就请我帮他们做过这方面的技术支持,所以后面我打算将它做成一个通用的产品,供别人学习和使用。目前android和服务端已经完成了,IOS正在抽时间处理。
五、
前面介绍了WebRTCDemo的基本结构,本节主要介绍WebRTC音视频服务端的处理,,转载请说明出处(博客园RTC.Blacker)。
通过前面的例子我们知道运行WebRTCDemo即可看到P2P的效果,实际应用中我们不可能让用户自己去里面设置对方的IP和音视频端口,
而且即使设置了对方的IP和端口也不一定能运行起来,因为P2P如果双方不在同一个网段则还需穿透NAT,那服务端具体该如何部署呢?
1、信令服务:
想知道信令服务的作用前您先想想通讯双方彼此都不知道对方在哪里,怎么与对方建立连接,怎么给对方发起视频请求?
想到这里我们是不是会想到双方都应该先跟一个服务器建立连接,所以这就是信令服务的作用,具体如下图:
2、打洞服务:
打洞的原理理解了其实很简单,主要思路就是通过STUN服务器获取自己的ip,port及NAT信息,
然后通过信令服务器交换这些信息,最后两客户端根据各自得到的ip,port,NAT信息进行相应的穿透,
现在开源STUN代码很多,网上也有很多介绍这方面的问题,有兴趣的可以找相关资料看看.
媒体转发服务:
P2P失败时,客户端先将RTP包发给媒体服务,然后再通过服务器转发给对方,
实际上很多视频会议都是这么实现的,在多人视频通讯的情况下如果都通过P2P来实现则会给客户端带来很大的压力,
特别是手机端负载有限的情况下,这宗点点的转发方式的弊端尤为明显,但如果通过RelayServer,客户端压力可大大减轻。
总结;需要相关资料的可以后台关注+私信‘资料’送大家一起学习
哪里写的不好大家可以评论区指出来我们一起学习研究