webrtc起步 - apprtc服务器搭建

简介

apprtc 是什么,webrtc.org官方指定体验app

原料:

ubuntu14.04,其他linux版本不限,官方并没特殊说明

chrome M51+

stunnle   https://www.stunnel.org/index.html

rfc5766-turn-server https://code.google.com/archive/p/rfc5766-turn-server/

Google App Engine SDK for Python

apprtchttps://github.com/webrtc/apprtc

步骤:

设置代理

由于国内网络的特殊性,这步非常关键,如果没有靠谱的代理,很可能以失败告终。

设置shell环境的代理

添加如下内容到 ~/.bashrc

export http_proxy=http://10.xx.xx.xx:100

export https_proxy=http://10.xx.xx.xx:100

设置git的代理

添加如下内容到  ~/.gitconfig

[http]

proxy = http://10.xx.xx.xx:100

sslverify = false

[https]

proxy = http://10.xx.xx.xx:100

安装Google App Engine SDK for Python

https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Python

下载,解压.

建议存放在和apprtc同级目录

├── code

│   ├── google_appengine

│   ├── apprtc

安装apprtc

下载apprtc源码

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

建议存放在和google_appengine同级目录

├── code

│   ├── google_appengine

│   ├── apprtc

安装npm

下面摘录自[1],如果设置好代理之后,这些步骤可很顺利的完成

Install grunt by first installing npm. npm is distributed as part of nodejs.

sudo apt-get install nodejs

sudo npm install -g npm

On Ubuntu 14.04 the default packages installs /usr/bin/nodejs but the /usr/bin/node executable is required for grunt. This is installed on some Ubuntu package sets; if it is missing, you can add this by installing the nodejs-legacypackage,

sudo apt-get install nodejs-legacy

It is easiest to install a shared version of grunt-cli from npm using the -g flag. This will allow you access the gruntcommand from /usr/local/bin. More information can be found on gruntjs Getting Started.

sudo npm -g install grunt-cli

Omitting the -g flag will install grunt-cli to the current directory under the node_modules directory.

Finally, you will want to install grunt and required grunt dependencies. This can be done from any directory under your checkout of the webrtc/apprtc repository.

npm install

On Ubuntu, you will also need to install the webtest package:

sudo apt-get install python-webtest

编译apprtc

sudo grunt build --force

每次更新修改代码都应该重新编译,编译生成的文件存放在out目录中

运行apprtc

sudo ../google_appengine//dev_appserver.py ./out/app_engine --host 0.0.0.0

安装 rfc5766-turn-server 

sudo app-get install rfc5766-turn-server

配置

编辑 /etc/trunserver.conf

确保打开了以下行的注释,并且赋予正确的值,port,ip的值当然要按照实际情况填写,static-auth-secret=4080218913最好也不要修改成其他值,因为apprtc硬编码了这个值,除非你也去修改apprtc里对应的地方。realm=cn.cn 这个没有要求,填写自己的域名即可。Verbose 不是必须的,打开它只是为了可以看到更多输出而已。

18:listening-port=9000

52:listening-ip=10.58.60.236

97:relay-ip=10.58.60.236

154:Verbose

203:use-auth-secret

211:static-auth-secret=4080218913

289:realm=cn.cn

446:

制作证书

?  apprtc git:(restapi) ? openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 99999 -nodes

Generating a 2048 bit RSA private key

..............+++

....................................................+++

writing new private key to ‘key.pem‘

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.‘, the field will be left blank.

-----

Country Name (2 letter code) [AU]:cn

State or Province Name (full name) [Some-State]:cn

Locality Name (eg, city) []:cn

Organization Name (eg, company) [Internet Widgits Pty Ltd]:cn

Organizational Unit Name (eg, section) []:cn

Common Name (e.g. server FQDN or YOUR name) []:cn

Email Address []:cn

生成过程中多次提示输入一些信息,可以马马虎虎填写一下。

将生成的 cert.pem 和 key.pem 安装到/cert/目录下,为什么要放在这个目录呢,因为collidermain中硬编码读取下面两个文件。不放在这里就意味着要去修改collidermain中的代码,为了省事,暂且顺着它的方式来。

"/cert/cert.pem"

"/cert/key.pem"

安装 stunnle

sudo app-get install rfc5766-turn-server

配置

编辑 /usr/local/etc/stunnel/stunnel.conf

添加以下内容

[apprtc_main]

accept  = 443

connect = 8080

cert = /cert/cert.pem

[apprtc_auth]

accept  = 4431

connect = 8081

cert = /cert/cert.pem

 

安装golang

sudo app-get install golang

编译信令

在apprtc目录中

export GOPATH=$(shell pwd)

go build -o collidermain src/collider/collidermain/main.go

编译rfc5766-turn-server授权服务:apprtc_turn_auth

授权服务笔者没有找到源码,所以需要自己写,这里共享出笔者写golang版的代码。

https://github.com/vc60er/apprtc_turn_auth/blob/master/auth.go

编译方式如下

export GOPATH=$(shell pwd)

go build -o auth auth.go

修改apprtc中的代码

对apprtc/src做如下修改,但是IP地址要根据实际情况填写。修改之后必不可少的步骤是重新编译,千万别忘了。

diff --git a/src/app_engine/apprtc.py b/src/app_engine/apprtc.py

index dbe9d84..2acc179 100755

--- a/src/app_engine/apprtc.py

+++ b/src/app_engine/apprtc.py

@@ -292,6 +292,7 @@ def get_room_parameters(request, room_id, client_id, is_initiator):

if room_id is not None:

room_link = request.host_url + ‘/r/‘ + room_id

+    room_link = room_link.replace("http", "https")

room_link = append_url_arguments(request, room_link)

params[‘room_id‘] = room_id

params[‘room_link‘] = room_link

diff --git a/src/app_engine/constants.py b/src/app_engine/constants.py

index 430a7a2..7d4dd73 100644

--- a/src/app_engine/constants.py

+++ b/src/app_engine/constants.py

@@ -16,8 +16,8 @@ TURN_BASE_URL = ‘https://computeengineondemand.appspot.com‘

TURN_URL_TEMPLATE = ‘%s/turn?username=%s&key=%s‘

CEOD_KEY = ‘4080218913‘

-ICE_SERVER_BASE_URL = ‘https://networktraversal.googleapis.com‘

-ICE_SERVER_URL_TEMPLATE = ‘%s/v1alpha/iceconfig?key=%s‘

+ICE_SERVER_BASE_URL = ‘https://10.58.60.236:4431‘    # ‘https://networktraversal.googleapis.com‘

+ICE_SERVER_URL_TEMPLATE = ‘%s/turn?key=%s‘             # ‘%s/v1alpha/iceconfig?key=%s‘

ICE_SERVER_API_KEY = os.environ.get(‘ICE_SERVER_API_KEY‘)

# Dictionary keys in the collider instance info constant.

@@ -25,13 +25,13 @@ WSS_INSTANCE_HOST_KEY = ‘host_port_pair‘

WSS_INSTANCE_NAME_KEY = ‘vm_name‘

WSS_INSTANCE_ZONE_KEY = ‘zone‘

WSS_INSTANCES = [{

-    WSS_INSTANCE_HOST_KEY: ‘apprtc-ws.webrtc.org:443‘,

+    WSS_INSTANCE_HOST_KEY: ‘10.58.60.236:4432‘,   # ‘apprtc-ws.webrtc.org: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_NAME_KEY: ‘wsserver-std-2‘,

-    WSS_INSTANCE_ZONE_KEY: ‘us-central1-f‘

+# }, {

+#     WSS_INSTANCE_HOST_KEY: ‘apprtc-ws-2.webrtc.org:443‘,

+#     WSS_INSTANCE_NAME_KEY: ‘wsserver-std-2‘,

+#     WSS_INSTANCE_ZONE_KEY: ‘us-central1-f‘

}]

WSS_HOST_PORT_PAIRS = [ins[WSS_INSTANCE_HOST_KEY] for ins in WSS_INSTANCES]

diff --git a/src/collider/collidermain/main.go b/src/collider/collidermain/main.go

index a499ada..5e164dd 100644

--- a/src/collider/collidermain/main.go

+++ b/src/collider/collidermain/main.go

@@ -6,7 +6,7 @@

package main

import (

-    "collider"

+    "collider/collider"

"flag"

"log"

)

?  apprtc git:(restapi) ?

 

最后

由于整个过程过于繁琐,笔者在实验过程中写了Makefile,现也共享传来。这个Makefile在调试运行过程中缺失带来了很多便利,不用每次噼里啪啦的敲一堆命令。几乎包含了上述所有编译,运行的操作,有了此文件只需make  xxx 就行

?  apprtc git:(restapi) ? cat Makefile

all: apprtc auth collidermain

apprtc:

  sudo grunt build --force

auth: auth.go env

go build -o auth auth.go

collidermain: src/collider/collidermain/main.go env

go build -o collidermain src/collider/collidermain/main.go

clean:

rm auth

env:

export GOPATH=$(shell pwd)

test_auth:

curl http://localhost:8081/turn

curl http://localhost:8081/v2/turn

run_apprtc:

sudo ../google_appengine//dev_appserver.py ./out/app_engine --host 0.0.0.0    2>&1 | tee app.log

run_auth:

sudo ./auth -port 8081

run_collidermain:

sudo ./collidermain -port 4432 -room-server http://localhost:8080 2>&1 | tee collider.log

run_stunnel:

sudo stunnel

run_turnserver:

sudo turnserver

.PHONY: all test clean apprtc env

体验

参考文章

[1].https://github.com/webrtc/apprtc

未完……

时间: 2024-10-12 16:58:23

webrtc起步 - apprtc服务器搭建的相关文章

基于webrtc的apprtc服务器的搭建

基于webrtc的apprtc服务端搭建 基于webrtc的apprtc示例发布在公网https://apprtc.webrtc.org上(需要FQ),本文在本地ubuntu14.04 32bit搭建该系统,需要搭建房间服务器,信令服务器,TURN穿透服务器.最好使用VPN搭建环境,否则会遇到网络引起的各种错误,相关资源如下: 1.房间服务器apprtc项目源码地址: https://github.com/webrtc/apprtc a.房间服务器搭建参考链接中的步骤就可以,如果网络环境良好,搭

Webrtc服务器搭建

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

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