Webrtc服务器搭建

Webrtc服务器包括:房间服务器(Room Server)、信令服务器(Signaling Server)、防火墙打洞服务器(STUN/TURN/ICE Server)

一、房间服务器搭建

1、代码下载
服务器项目地址https://github.com/webrtc/apprtc

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

2、配置依赖环境

sudo apt-get install npm
npm -g install grunt-cli

Google App Engine SDK for Python:
可选择使用sudo apt-get install python-webtest直接安装python,然后下载Google App Engine SDK for Python并解压,编辑/etc/profile

export PATH=$PATH:$HOME/google_appengine/

保存退出并执行source /etc/profile

node直接使用sudo apt-get install nodejs-legacy安装版本过低,使用下面方法安装:

wget https://nodejs.org/dist/v7.7.0/node-v7.7.0-linux-x64.tar.gz
tar xvf node-v7.7.0-linux-x64.tar.gz

配置环境,编辑/etc/profile

export PATH=$PATH:$HOME/node-v5.9.0-sunos-x64/bin

保存退出执行source /etc/profile

3、安装apprtc代码中的grunt依赖

cd apprtc
npm install
grunt build //编译

4、修改配置文件
主要是src/app_engine目录下的apprtc.pyconstants.py文件。对于src/app_engine目录下的文件每次修改后需执行命令grunt build重新编译,也可以直接编辑out/app_engine目录下的apprtc.pyconstants.py避免重新编译。
constants.py

#TURN_BASE_URL = 'https://computeengineondemand.appspot.com'
TURN_BASE_URL = 'http://192.168.2.128:3487'
#TURN_URL_TEMPLATE = '%s/turn?username=%s&key=%s'
TURN_URL_TEMPLATE = '%s/turn.php?username=%s&key=%s'
#CEOD_KEY = '4080218913'
CEOD_KEY = '1234' 

WSS_INSTANCES = [{
    #WSS_INSTANCE_HOST_KEY: 'apprtc-ws.webrtc.org:443',
    WSS_INSTANCE_HOST_KEY: '192.168.2.128:443',
    WSS_INSTANCE_NAME_KEY: 'wsserver-std',
    WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}, {
    #WSS_INSTANCE_HOST_KEY: 'apprtc-ws-2.webrtc.org:443',
    WSS_INSTANCE_HOST_KEY: '192.168.2.128:443',
    WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
    WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
}]

apprtc.py

 if wss_tls and wss_tls == 'false':
    wss_url = 'ws://' + wss_host_port_pair + '/ws'
    wss_post_url = 'http://' + wss_host_port_pair
  else:
    #wss_url = 'wss://' + wss_host_port_pair + '/ws'
    wss_url = 'ws://' + wss_host_port_pair + '/ws'
    #wss_post_url = 'https://' + wss_host_port_pair
    wss_post_url = 'http://' + wss_host_port_pair

def make_pc_config(ice_transports):
  config = {
  #'iceServers': [],
  'iceServers': [{"urls":"stun:192.168.2.128"},{"urls":"turn:lin@192.168.2.128","credential":"1234"}],
  'bundlePolicy': 'max-bundle',
  'rtcpMuxPolicy': 'require'
  };

  if ice_transports:
    config['iceTransports'] = ice_transports
  return config

把原来的wss和https的scheme都改为ws和http,不要让客户端或者浏览器去使用SSL链接。若有第三方根证书的签名机构颁发的证书可忽略。

修改完后重新执行grunt build

5、启动房间服务器

dev_appserver.py --host=0.0.0.0 ./apprtc/out/app_engine

二、信令服务器搭建

1、安装GO环境
直接使用命令sudo apt-get install golang-go安装的版本太低,后面执行go get collidermain会报错,所以采用下面一种方法:
下载GO安装包并解压

wget https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz
tar xvf go1.6.3.linux-amd64.tar.gz

编辑打开文件/etc/profile(也可根据自己需求选择其他环境配置文件编辑),在文件末尾添加两行

export GOROOT=$HOME/go 
export PATH=$PATH:$GOROOT/bin

保存退出执行source /etc/profile

2、配置信令服务器
新建目录(collider_root)用于存放Collider的go代码程序。

mkdir -p ~/collider_root
mkdir ~/collider_root/src

同设置GOROOT设置,在/etc/profile中添加

export GOPATH=$HOME/collider_root
export PATH=$PATH:$GOPATH/bin

建立链接(也可以直接将~/apprtc/src/collider/目录中的collider、collidermain、collidertest直接拷贝到~/collider_root/src目录下)

ln -sf ~/apprtc/src/collider/collider $GOPATH/src/
ln -sf ~/apprtc/src/collider/collidermain $GOPATH/src/
ln -sf ~/apprtc/src/collider/collidertest $GOPATH/src/

编辑$GOPATH/collidermain/main.go,修改房间服务器为我们前面的房间服务器:

//var roomSrv = flag.String("room-server", "https://appr.tc", "The origin of the room server")
var roomSrv = flag.String("room-server", "http://192.168.2.128:8080", "The origin of the room server")

3、安装信令服务器依赖和collidermain

go get collidermain
go install collidermain

go get collidermain命令运行失败,那么则用下面这个麻烦的方法:

cd $GOPATH/src
wget http://www.golangtc.com/static/download/packages/golang.org.x.net.tar.gz
tar xvf golang.org.x.net.tar.gz
go install golang.org/x/net/websocket/

4、运行

 $GOPATH/bin/collidermain -port=8089 -tls=false 

5、测试

go test collider

三、STUN/TURN/ICE服务器的搭建

1、下载并安装(详细阅读安装手册 INSTALL)

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

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

2、编辑配置文件
编辑配置文件,打开系统默认启动配置:
$ vim /etc/default/coturn
把上面打开编辑的文件中的这一行TURNSERVER_ENABLED=1去掉注释,保存退出。然后编辑/etc/turnserver.conf

listening-device=eth0
relay-device=eth1
Verbose
fingerprint
lt-cred-mech
use-auth-secret
static-auth-secret=1234
user=lin:1234
user=xml:1234
stale-nonce
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem
no-loopback-peers
no-multicast-peers

上面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

3、启动
service coturn start

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

  • 此教程于2016年3月18日更新版本更多原理介绍请参考戴维营教育2015年2月的旧教程:http://io.div...
    戴维营教育阅读 8,428评论 10 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,559评论 18 139
  • 屋漏偏逢连夜雨 , 船迟又遇打头风。
    哲愉阅读 278评论 0 0
  • 原本以为有很多话想说,有很多感叹要唏嘘,以为要或大或小弄个仪式来Mark一下这个decade。 可写写删删,留下的...
    沫moi阅读 156评论 0 0
  • 常熟的面,大抵是和别的地方不一样的。他不似兰州拉面那般连绵不绝,亦不似陕西臊子面那般筋韧爽口,更不似山西刀削面那般...
    大风哥在写文章阅读 3,130评论 0 1