设为首页 收藏本站
查看: 1864|回复: 0

[经验分享] webrtc起步 - apprtc服务器搭建

[复制链接]

尚未签到

发表于 2017-2-25 09:09:56 | 显示全部楼层 |阅读模式
简介
     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
apprtc https://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 stunnle
配置
编辑 /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


未完……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346851-1-1.html 上篇帖子: 程序猿眼中的高并发 下篇帖子: npm常用命令小结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表