文档章节

webrtc

f
 fymoon
发布于 2017/04/03 17:08
字数 1499
阅读 223
收藏 1

1.WebRTC后台服务:

  • 通话的房间服务器(Room Server)

    房间服务器是用来创建和管理通话会话的状态维护,是双方通话还是多方通话,加入与离开房间等等,我们暂时沿用Google部署在GAE平台上的AppRTC这个房间服务器实现,该GAE App的源码可以在github.com上获取.该实现是一个基于Python的GAE应用,我们需要下载Google GAE的离线开发包到我们自己的Linux服务器上来运行该项目,搭建大陆互联网环境下的房间服务器.

  • 通话的信令服务器(Signaling Server)

    信令服务器是用来管理和协助通话终端建立去中心的点对点通话的一个角色.这个角色要负责一下任务:

1. 用来控制通信发起或者结束的连接控制消息
2. 发生错误时用来相互通告的消息
3. 各自一方媒体流元数据,比如像解码器、解码器的配置、带宽、媒体类型等等
4. 两两之间用来建立安全连接的关键数据
5. 外界所能看到的网络上的数据,比如广域网IP地址、端口等

信令服务器的具体协议实现没有严格规定,只要实现功能就OK.
我们这里依然沿用Google提供的基于GO语言和WebSocket的信令服务器Collider.和上面的房间服务器一并在Github上可以获取.获取到我们自己的Linux服务器上用GO语言的运行环境来运行该信令服务器.
  • 防火墙打洞服务器(STUN/TURN/ICE Server)

    我们目前大部分人连接互联网时都处于防火墙后面或者配置私有子网的家庭(NAT)路由器后面,这就导致我们的计算机的IP地址不是广域网IP地址,故而不能相互之间直接通讯. 正因为这样的一个场景,我们得想办法去穿越这些防火墙或者家庭(NAT)路由器,让两个同处于私有网络里的计算机能够通讯起来.

技术分享

STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越); STUN协议服务器就是用来解决这些问题:

  1. 探测和发现通讯对方是否躲在防火墙或者NAT路由器后面.

  2. 确定内网客户端所暴露在外的广域网的IP和端口以及NAT类型等信息;STUN服务器利用这些信息协助不同内网的计算机之间建立点对点的UDP通讯.

STUN协议可以很好的解决一般家用(NAT)路由器环境的打洞问题,但是对于大部分的企业的网络环境就不是很好了.

这时需要一个新的解决方案:TURN(Traversal Using Relay NAT,允许在TCP或UDP的连线上跨越 NAT 或防火墙. TURN是一个Client-Server协议。TURN的NAT穿透方法与STUN类似,都是通过取得应用层中的公有地址达到NAT穿透,但实现TURN client的终端必须在通讯开始前与TURN server进行交互,并要求TURN server产生"relay port", 也就是relayed-transport-address.这时 TURN server会建立peer,即远端端点(remote endpoints), 开始进行中继(relay)的动作,TURN client利用relay port将资料传送至peer,再由peer转传到另一方的TURN client.通过服务器新产生的peer来进行数据的中转.

ICE协议就是综合前面2种协议的综合性NAT穿越解决方案.

通过offer/answer模型建立基于UDP的通讯。ICE是offer/answer模型的扩展,通过在offer和answer的SDP(Session Description Protocol)里面包含多种IP地址和端口,然后对本地SDP和远程SDP里面的IP地址进行配对,然后通过P2P连通性检查进行连通性测试工作,如果测试通过即表明该传输地址对可以建立连接。其中IP地址和端口(也就是地址)有以下几种:本机地址、通过STUN服务器反射后获取的server-reflexive地址(内网地址被NAT映射后的地址)、relayed地址(和TURN转发服务器相对应的地址)及Peer reflexive地址等。

2.房间服务器与信令服务器搭建:

我们把这一系列后台服务器搭建在公网的一个Ubuntu Linux服务器中.

服务器的代码我们选用GoogleChrome的开源项目,该项目可以在Github找到:

https://github.com/webrtc/apprtc.git

该项目的一些示例可以在下面网址得到:

http://googlechrome.github.io/webrtc/

在我们自己的服务器中运行Google的房间服务器AppRTC需要依赖 Google App Engine SDK for Python 和 Grunt.

先搭建房间服务器AppRTC

  1. 首先我们安装Grunt:
cheetah@localhost:~/$ sudo apt-get install npm
cheetah@localhost:~/$ sudo apt-get install nodejs-legacy
cheetah@localhost:~/$ sudo npm -g install grunt-cli
  1. 下载该项目的源码到某个目录:
cheetah@localhost:~/$ cd ~;
cheetah@localhost:~/$ git clone https://github.com/GoogleChrome/webrtc.git;
  1. 终端Shell切换当前工作目录到上一步的下载的项目目录webrtc下,然后安装Grunt以及Grunt的依赖:
cheetah@localhost:~/$ cd webrtc;
cheetah@localhost:~/webrtc$ npm install;
  1. 运行AppRTC房间服务器之前我们需要Grunt编译一下该项目的js文件之类:
cheetah@localhost:~/webrtc$ grunt;

上面的编译过程会自动下载安装Google App Engine SDK至当前目录.

cheetah@localhost:~/webrtc$ ls
bower.json   google_appengine         Gruntfile.js  LICENSE.md    README.md        samples
build        google_appengine_1.9.17.zip  images        node_modules  run_python_tests.py  webtest-master
CONTRIBUTING.md  grunt-chrome-build       index.html    package.json  run_python_tests.sh  webtest-master.tar.gz

下一步,我们需要把Google App Engine SDK的目录加入系统环境变量$PATH,并使之生效.

cheetah@localhost:~/webrtc$ echo "export PATH=$PATH:$PWD/google_appengine" > ~/.bash_profile
cheetah@localhost:~/webrtc$ source ~/.bash_profile

这个时候我们就可以直接运行我们的房间服务器AppRTC了.用下面的命令来开启(主机名:vpn.wuqiong.tk可以用自己的IP地址代替):

cheetah@localhost:~/webrtc$ dev_appserver.py --host vpn.wuqiong.tk  src/app_engine/

© 著作权归作者所有

f
粉丝 1
博文 36
码字总数 33620
作品 0
武汉
程序员
私信 提问
WebRTC:基于物联网的行业化应用

根据anyRTC官方运营数据分析预测,到2020年物联网设备的数量将达到近210亿。随着工业产品,可穿戴设备和智能家用电器的不断涌现,它们的多样性正在迅速增长。 物联网产品的数据收集和通信功能...

anyRTC
2018/09/13
4
0
用Rose构建需要视频聊天的跨平台app

  实现视频聊天存在两个技术难点,一是网络传输,二是视音频编解码。这些技术问题不是靠几个人就能解决的,为此开发者一般都选择某个SDK,然后以它为基础写出app。作为众多SDK中一个,Goo...

rose-sdk
2016/12/21
581
0
通过WebRTC实现实时视频通信(一)

通过WebRTC实现实时视频通信(一) 通过WebRTC实现实时视频通信(二) 通过WebRTC实现实时视频通信(三) WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网...

gbin1
2014/09/23
15.1K
4
[翻译] 通过WebRTC技术实现点对点通信

通过WebRTC技术实现点对点通信 WebRTC是一个实验性技术。 因为该技术的规格还没有稳定下来,在各浏览器中必须通过检查属性表的前缀来正确使用,例如:在Chrome中使用 webkitRTCPeerConnectio...

yunfound
2014/03/20
1K
0
5月19-20日WebRTCon 2018 梳理全球WebRTC技术实践与案例

4月17日,距离WebRTCon 2018举行还有一个多月的时间,这是由音视频技术社区LiveVideoStack发起的WebRTC生态大会。大会将聚焦WebRTC技术实践与应用案例两大主线,旨在为WebRTC的7年长跑做一次...

vn9plgzvnps1522s82g
2018/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
9
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部