Webrtc服务器搭建

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/GoogleChrome/webrtc

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

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

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

先搭建房间服务器AppRTC

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

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

[email protected]:~/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,并使之生效.

[email protected]:~/webrtc$ echo "export PATH=$PATH:$PWD/google_appengine" > ~/.bash_profile
[email protected]:~/webrtc$ source ~/.bash_profile

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

[email protected]:~/webrtc$ dev_appserver.py --host vpn.wuqiong.tk  samples/web/content/apprtc/

再搭建信令服务器

信令服务器我们依然采用Google Chrome WebRTC项目里提供的用GO语言编写的基于websocket的信令服务器:Collider.

我们需要先安装Go语言运行环境支持:

[email protected]:~/webrtc$ sudo apt-get install golang-go

然后在我们的用户目录新建一个目录(collider_root)来存放这个Collider的go代码程序.

[email protected]:~/webrtc$ mkdir -p ~/collider_root;
[email protected]:~/webrtc$ export COLLIDER_ROOT=$HOME/collider_root; //也可以加入~/.bash_profile

下一步就是链接wenrtc项目目录下面的collider代码目录到$COLLIDER_ROOT/src下去,准备后续的编译工作;

[email protected]:~/webrtc$ ln -sf $PWD/samples/web/content/apprtc/collider/collider $COLLIDER_ROOT/src/
[email protected]:~/webrtc$ ln -sf $PWD/samples/web/content/apprtc/collider/collidermain $COLLIDER_ROOT/src/
[email protected]:~/webrtc$ ln -sf $PWD/samples/web/content/apprtc/collider/collidertest $COLLIDER_ROOT/src/

一切准备之后,我们就主要编译安装Collider了:

[email protected]:~/webrtc$ go get collidermain
[email protected]:~/webrtc$ go install collidermain

这个时候,信令服务器的二进制程序就安装到了$COLLIDER_ROOT/bin下去了. 如下命令就可以开启运行信令服务器:

[email protected]:~/webrtc$ $COLLIDER_ROOT/bin/collidermain -port=8089 -tls=false

信令服务器暂时用非tls方式运行.因为我们自签名的证书Websocket通讯不了.

3.STUN/TURN/ICE服务器的搭建

我们选择有更丰富功能的coTurn作为我们的NAT穿越打洞服务器,该项目是一个C/C++语言的开源项目,项目地址: https://code.google.com/p/coturn/ 或者我们直接下载已经编译好的软件包,在下面站点可以下载我们对应平台的软件包: http://turnserver.open-sys.org/downloads/v4.4.1.2/ 打开这个网址,根据我们的服务器类型选择下载,我现在选择Debian和Ubuntu系统的包:

cd ~;
wget http://turnserver.open-sys.org/downloads/v4.4.1.2/turnserver-4.4.1.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz

接着解压软件包:

tar xvfz turnserver-4.4.1.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz

详细阅读安装手册 INSTALL 文件,根据指导进行安装:

$ sudo apt-get update
$ sudo apt-get install gdebi-core
$ sudo gdebi coturn*.deb

然后编辑配置文件,打开系统默认启动配置:

$ vim /etc/default/coturn

把上面打开编辑的文件中的这一行TURNSERVER_ENABLED=1去掉注释,保存退出.

再根据实际情况编辑coturn的配置文件 /etc/turnserver.conf,比如我打开的配置项如下:

listening-device=eth0
listening-ip=~~106.186.127.xxx~~
relay-device=eth0
relay-ip=~~106.186.127.xxx~~
Verbose
fingerprint
lt-cred-mech
use-auth-secret
static-auth-secret=diveinedu
user=diveinedu:0x06b2afcf07ba085b7777b481b1020391
user=diveinedu:diveinedu
stale-nonce
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem
no-loopback-peers
no-multicast-peers
sha256
mobility
no-cli

上面cert和pkey配置的自签名证书用Openssl命令生成:

sudo openssl req -x509 -newkey rsa:2048 -keyout   /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes

穿墙服务器的一切配置完成之后, 万事俱备,之前启动命令了:

service coturn start;

房间服务器和信令服务器的设置

三个服务器都搭建完成之后,我们需要多一定的整合配置,使他们能一起工作: apprtc目录下的constants.py是一些常量配置信息的配置文件,比如我的做了如下设置:

#TURN_BASE_URL = ‘https://computeengineondemand.appspot.com‘
TURN_BASE_URL = ‘http://apprtc.diveinedu.com‘
#TURN_URL_TEMPLATE = ‘%s/turn?username=%s&key=%s‘
TURN_URL_TEMPLATE = ‘%s/turn.php?username=%s&key=%s‘
#CEOD_KEY = ‘4080218913‘
CEOD_KEY = ‘diveinedu‘

#WSS_HOST_PORT_PAIR = ‘apprtc-ws.webrtc.org:443‘
WSS_HOST_PORT_PAIR = ‘apprtc.diveinedu.com:8089‘

由于我们的信令服务器没有开启安全Socket模式,所以我们要对应的改一下apprtc的代码, 做apprtc.py中如下修改:

def get_wss_parameters(request):
  ws_host_port_pair = request.get(‘wshpp‘)
  ws_tls = request.get(‘wstls‘)

  if not ws_host_port_pair:
    ws_host_port_pair = constants.WSS_HOST_PORT_PAIR

  if ws_tls and ws_tls == ‘false‘:
    wss_url = ‘ws://‘ + ws_host_port_pair + ‘/ws‘
    wss_post_url = ‘http://‘ + ws_host_port_pair
  else:
    wss_url = ‘ws://‘ + ws_host_port_pair + ‘/ws‘
    wss_post_url = ‘http://‘ + ws_host_port_pair
  return (wss_url, wss_post_url)

把原来的wss和https的scheme都改为ws和http,不要让客户端或者浏览器去使用SSL链接.当然,如果有第三方根证书的签名机构颁发的证书,那就不需要这样了

而对应的信令服务器也需要稍微做设置: 编辑collider/collidermain/main.go,修改设置自己的房间服务器URL:

//var roomSrv = flag.String("room-server", "https://apprtc.appspot.com", "The origin of the room server")
var roomSrv = flag.String("room-server", "http://apprtc.diveinedu.com:8080/", "The origin of the room server")

经过这一些简单的房间服务器和信令服务器的定制设置之后,我们就搭建了一套基于Google项目的属于自己的WebRTC的简单服务了.

用谷歌浏览器打开 http://apprtc.diveinedu.com:8080/ ,注册房间之后就可以视频通话了.当然结合之前的WebRTC for iOS 框架就可以浏览器和iOS的原生应用直接视频通话了.

本文档由长沙戴维营教育整理。

时间: 2024-12-23 03:08:58

Webrtc服务器搭建的相关文章

Linux下的SVN服务器搭建

鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始*********/ 系统环境:Centos 6.5 第一步:通过yum命令安装svnserve,命令如下: >yum -y install  subversion 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 若需查看svn安装位置,可以用以下命令: >rpm -ql subve

Linux NTP 服务器搭建

Linux时间同步服务器搭建 NTP(Network Time Protocol)是用来使计算机时间同步化的一种协议,它使用UDP协议123号端口对外提供服务,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做时间的同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击.时间按NTP服务器的等级传播.按照离外部UTC源的远近把所有服务器归入不同的Stratum(层)中. 今天做一个项目需要配置一台NTP时间同步服

持续集成(二)工具搭建篇—内网邮件服务器搭建

在我们的持续构建中,项目构建中出现错误提醒,或者开发人员之间的沟通交流,进度汇报的事务,都是离不开一个通信工具,那就是邮件.在我们的项目开发中如果使用第三方的邮件平台,这肯定不是最好的选择,因为第三方的邮件需要外网的支持,但是外网又不是特别的可靠,假如外网链接出现了问题,这样就会不必要的延误我们的工期.再或者很多项目都是保密项目,在开发中只能用内网.但是不用邮件吧又不行.为了解决这个头疼的问题,我们的内网邮件服务器工具就出现了,只要用它安装在我们的服务器上,配置好账户,配置好客户端,在内网里就可

windows下subversion服务器搭建

一.下载subversion服务器端和客户端软件 1.subversion下载地址:http://subversion.tigris.org/ 2.svn比较流行的客户端Tortoisesvn下载地址:http://tortoisesvn.net/downloads 3.安装subversion服务器和Tortoisesvn,若是exe文件直接安装,若是zip解压后即可(若是想方便,可以在环境变量中配置bin) 二.创建版本库(Repository) 若是想在f:\svnroot下建立版本库,需

阿里云Windows server 2008服务器搭建VPN 图文教程,购买境外服务器自建vpn,Win8/win10 连接VPN被阻止,出现812错误解决方法

阿里云Windows server 2008服务器搭建VPN 图文教程(超详细) 第一步:购买阿里云服务器,本文使用的是Windows Server 2008 R2 企业版64位中文版 IP地址:47.88.151.129,所属节点:亚太(新加坡) 服务器配置:2核,4GB,带宽10Mbps 第二步: 打开服务器管理器,点击添加角色,如下图: 本帖隐藏的内容然后弹出如下图所示,点击下一步: 点击后,如下图,勾选网络策略和网络服务,然后点击下一步: 接着继续点击下一步,直到弹出如下图所示的页面,勾

git服务器搭建post-receive 钩子部署服务端代码

一.git服务器搭建(服务器用户:root) 安装git $ apt-get install git 创建git用户 $ adduser git$ passwd git //修改git用户密码 创建git仓库 $ cd /home$ mkdir git$ mkdir ./git/.ssh$ touch./git/.ssh/authorized_keys$ cd /home/git$ git init --bare test.git //初始化仓库$ chown -R git:git ../git

linux 下 svn 服务器搭建与配置

Subversion是一个自由,开源的版本控制系统,可以记录每一次文件和目录的修改情况.这样就可以籍此将数据恢复到以前的版本,并可以查看数据的更改细节. linux 下 svn的搭建 首先安装 subversion yum  install -y subversion 使用rpm -qa subversion 查看是否安装完成 安装完成后进行配置 首先在home 下建立svn的数据目录和密码认证目录 说明: svndata 目录用于存放项目目录,svnpassw 目录存放密码及认证文件 在svn

asp.net网站服务器搭建之从零开始

asp.net网站服务器搭建之从零开始 一 IIS(Internet Information Services)安装:  1.选择"控制面板".  2.点"添加或删除程序".   3.选择"添加/删除Windows组件",选中IIS,把系统安装盘放到光驱中,点下一步就可以了.  4. 安装成功后,“控制面板\管理工具”里会有“Internet 信息服务”一项. 二 asp.net环境配置:  下载地址:http://www.cnblogs.com

Nginx网站服务器搭建实例

Nginx是一款开源的高性能HTTP服务器和返向代理服务器. 下载.编译.安装模块: [[email protected] nginx-1.4.0]#wget http://nginx.org/download/nginx-1.4.0.tar.gz [[email protected] nginx-1.4.0]#tar -xzf nginx-1.4.0.tar.gz -C /usr/src/ [[email protected] nginx-1.4.0]#yum -y install gcc p