中继(relay)
在RTCPeeConnection中,使用ICE框架来保证RTCPeerConnection能实现NAT穿越
ICE,全名叫交互式连接建立(Interactive Connectivity Establishment),一种综合性的NAT穿越技术,它是一种框架,可以整合各种NAT穿越技术如STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越); 、TURN(Traversal Using Relay NAT 中继NAT实现的穿透)。ICE会先使用STUN,尝试建立一个基于UDP的连接,如果失败了,就会去TCP(先尝试HTTP,然后尝试HTTPS),如果依旧失败ICE就会使用一个中继的TURN服务器。
STUN协议可以很好的解决一般家用(NAT)路由器环境的打洞问题,但是对于大部分的企业的网络环境就不是很好了.这时需要一个新的解决方案:TURN,  TURN是一个Client-Server协议
ICE协议就是综合前面2种协议的综合性NAT穿越解决方案.
DataChannel是建立在PeerConnection上的,不能单独使用
尽管WebRTC允许点对点的通信,但它依然需要服务器:
* 信令传输:建立点对点的连接需要传输一些媒体和网络相关的元数据信息,需要通过服务器
* NAT和防火墙穿透:我们需要通过ICE框架来建立点与点之间的网络路径。可以使用STUN服务器(确定双方的可公开访问你的IP地址和端口)以及TURN服务器(如果直接连接失败,就必须数据中继了)

docker run -it --name apprtc -d -p 8080:8080 -p 8443:8443 -p 8081:80 -p 443:443 ubuntu /bin/bash
工具:
apt-get update
apt-get -y install autoconf automake build-essential libtool wget git vim unzip
Google_App_Enginehttps://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Python
解压并设置环境变量即可:
wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.55.zip
设置环境变量
export PATH=$PATH:/root/google_appengine/
Node.js 
Node.js 就是运行在服务端的 JavaScript。采用C++语言编写而成,是一个Javascript的运行环境。
apt-get install nodejs nodejs-legacy npm python-webtest -y
npm install -g npm
在安装 Grunt 前,请确保当前环境中所安装的 npm 已经是最新版本,
执行 npm update -g npm 指令进行升级,查看版本 npm -v
安装npm install -g grunt-cli
java -version
ImportError: No module named requests
pip install requests  if you have pip installed
Grunt.
基于Node.js的项目构建工具,可以自动运行你所设定的任务
JavaScript 世界的构建工具
Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器。

房间服务器:
项目源码地址: https://github.com/webrtc/apprtc
git clone https://github.com/webrtc/apprtc
cd apprtc
修改配置后编译:
配置apprtc/src/app_engine/constants
TURN_BASE_URL //turn打洞服务器配置
TURN_URL_TEMPLATE
CEOD_KEY = 和coturn turnserver.conf  static-auth-secret一致
    WSS_INSTANCES = [{
                   WSS_INSTANCE_HOST_KEY: '192.168.214.129:8089',
                   WSS_INSTANCE_NAME_KEY: 'wsserver-std',
                   WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
                  }, {
                   WSS_INSTANCE_HOST_KEY: '192.168.214.129:8089',
                   WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
                   WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
            }]
ICE_SERVER_BASE_URL
执行npm install命令安装项目依赖的库,解压压缩包到当前项目的node_modules目录。
再执行下面命令编译出apprtc这个GAE app.
grunt build
编译之后会多出out目录
dev_appserver.py --host=0.0.0.0 /root/apprtc/out/app_engine/
http://tmp.starconnect.cn:8080/
错误:google appengine BindError: Unable to bind 8080
重启

2,信令服务器
用GO语言编写的基于websocket的信令服务器:Collider.
1,安装go,参见我的安装文档
使用go version查看go环境是否配置正确
2,
mkdir -p /root/goWorkspace/src
export GOPATH=/root/goWorkspace/
存放Collider的go代码程序。
cp -rf `pwd`/apprtc/src/collider/* $GOPATH/src
编辑collidermain/main.go,修改设置自己的房间服务器URL:
http://192.168.1.103:8080/
cd goWorkspace/src
  1. install dependencies
go get collidermain
  1. Install collidermain
go install collidermain
成功编译后会在gopath目录下生成bin和pkg目录,执行文件在bin下
Testing
go test collider
编辑$GOPATH/src/collider/collider.go,设置信令服务器所需要用的HTTPS的证书文件
/cert/cert.pem and /cert/key.pem作用
运行
$GOPATH/bin/collidermain -port=8089 -tls=true
可以设置下path= /root/goWorkspace/bin

打洞服务器STUN/TURN/ICE服务器的搭建:
选择有更丰富功能的coTurn作为我们的NAT穿越打洞服务器,该项目是一个C/C++语言的开源项目
主要是配置cert和pkey
turnserver.conf中的cert和pkey配置的自签名证书用Openssl命令生成:
openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
pkey应该是private key的缩写吧
安装libevent:
Before installing and configuring the TURN server, the latest stable libevent library should be downloaded, built and installed:
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
As root, build and install the library with the usual:
tar xvfz libevent-2.0.21-stable.tar.gz cd libevent-2.0.21-stable ./configure make && make install
Download the TURN server from https://github.com/coturn/coturn/wiki/Downloads. Build and install with:
apt-get install libssl-dev
apt-get install libsqlite3 (or sqlite3):
apt-get install libsqlite3-dev (or sqlite3-dev)
apt-get install sqlite3 libsqlite3-dev
apt-get install libevent-dev
wget http://turnserver.open-sys.org/downloads/v4.5.0.6/turnserver-4.5.0.6.tar.gz
tar xvfz turnserver-<...>.tar.gz ./configure make && make install
Check the INSTALL and README (有多个README文件)files with the server. They contain lots of useful information.
By default, coturn uses SQLite database for users and settings. That database is automatically created (empty) when the process turnserver starts the first time.
port 3478 (STUN)  should be opened for TCP and UDP.
3478、3479:tcp&udp - coTurn 的监听端口。
59000~65000:tcp&udp - coTurn 的服务端口。
min-port=59000
max-port=65000
  • Change WSS_INSTANCE_HOST_KEY to the hostname and port Collider is listening too, e.g. localhost:8089 or otherHost:443.
mv /usr/local/share/examples/turnserver/etc/turnserver.conf /etc/turnserver.conf
turnserver -L <public_ip_address> -a -f -r <realm-name>
Or, start it as a daemon with:
$ turnserver -L <public_ip_address> -o -a -f -r <realm-name>
-L, --listening-ip Listener IP address of relay server.
Multiple listeners can be specified, for example:
-L ip1 -L ip2 -L ip3
If no IP(s) specified, then all IPv4 and
IPv6 system IPs will be used for listening.
The same ip(s) can be used as both listening and relay ip(s).
-a, --lt-cred-mech Use long-term credentials mechanism (this one you need for WebRTC usage).
-f, --fingerprint Use fingerprints in the TURN messages. If an incoming request
contains a fingerprint, then TURN server will always add
fingerprints to the messages in this session, regardless of the
per-server setting.
-r, --realm The default realm to be used for the users when no explicit
origin/realm relationship was found in the database, or if the TURN
server is not using any database (just the commands-line settings
and the userdb file). Must be used with long-term credentials
mechanism or with TURN REST API.
-o, --daemon Run server as daemon.
参考:
https://github.com/coturn/coturn/wiki/CoturnConfig
http://www.jianshu.com/p/3a43233b9c39
http://blog.csdn.net/u010657219/article/details/54613298
user=jalon:0xa9f776c6470bab44567b2584863e7345 是通过
# $ turnadmin -k -u jalon -r north.gov -p jalon # Output: 0xa9f776c6470bab44567b2584863e7345 生成的
参考:
旧http://io.diveinedu.com/2015/02/05/第六章-WebRTC服务器搭建.html
新: http://io.diveinedu.com/2016/03/18/WebRTC之AppRTC与信令服务器构建.html
http://blog.csdn.net/s569646547/article/details/50780682 原创!
需要自己实现coTurn连接信息接口,主要返回用户名、密码和turn配置信息,通常叫做TURN REST API,不实现这个接口的话AppRTCDemo连不上服务器,浏览器访问的话可以正常访问。
 TURN REST API 标准参考文档
返回json结果示例:
       {"username":"1456904882:1231244","password":"jAph7EHMLuPJuxLLC1uRiI3kvq4=","ttl":86400,"uris":["turn:192.168.214.129:3478?transport=udp","turn:192.168.214.129:3478?transport=tcp","turn:192.168.214.129:3479?transport=udp","turn:192.168.214.129:3479?transport=tcp"]}
https://segmentfault.com/a/1190000000733779

p2p webrtc服务器搭建系列1: 房间,信令,coturn打洞服务器相关推荐

  1. 服务器搭建系列之序章:总览,2022最新版本

    服务器搭建系列之1:centos安装docker,docker-compose,开启docker远程部署,2022最新版本 服务器搭建系列之2:centos安装kubernetes(k8s)集群v1. ...

  2. w7服务器搭建网站教程,w7系统下的云服务器搭建教程

    w7系统下的云服务器搭建教程 内容精选 换一换 使用云服务器备份创建镜像后,通过创建成功的镜像创建云服务器,但登录云服务器后提示系统进入维护模式,无法正常使用云服务器.当云服务器带有数据盘的时候,恢复 ...

  3. minecraft服务器搭建教程_Minecraft BE(基岩版)服务器搭建教程

    Minecraft BE服务器搭建教程 写在前面 由于目前还在使用12年的MacBook Air,加上身边多数人会使用手机等移动设备玩游戏,所以决定搭建一台BE的服务器. 请注意本教程适用于国际版的M ...

  4. 自建pop邮件服务器,CentOS邮件服务器搭建系列—— POP / IMAP 服务器的构建( Dovec-站长资讯中心...

    前言 POP / IMAP 是 MUA 从邮件服务器中读取邮件时使用的协议.其中,与 POP3 是从邮件服务器中下载邮件比起来,IMAP 则是将邮件留在服务器端直接对邮件进行管理.操作.这里,我们用 ...

  5. EMQX服务器搭建系列四:配置EMQX服务器用户名/密码方式登录

    系统:ubuntu 18.04server lts EMQX版本:v4.0.6 停止服务 emqx stop 编辑用户名密码配置文件 vim ./etc/emqx/plugins/emqx_auth_ ...

  6. EMQX服务器搭建系列五:EMQX服务器动态添加用户名密码

    Username管理 CLI命令 启动emqx_auth_username插件后,可以使用CLI命令管理username root@VM-0-12-ubuntu:/home/ubuntu# emqx_ ...

  7. 服务器搭建系列之25:k8s安装skywalking全链路消息追踪神器,2022最新版本

    准备工作: 下载skywalking安装包,地址:skywalking官网 修改安装包config文件夹中application.yml的storage属性 推荐配置SW_STORAGE:elasti ...

  8. MQTT服务器搭建与试用,桌面工具连接MQTT服务器

    简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程传感器和控制设备通 ...

  9. intel服务器ssd系列,英特尔发布S3710/S3610服务器SSD新品

    日前,随着闪存技术不断更新发展,针对服务器级SSD市场英特尔推出20nm高耐久闪存技术产品--DC S3710和S3610系列.据了解,S3710将接替2012年推出的S3700(后者采用了25nm制 ...

最新文章

  1. webpack is not defined
  2. 对话图灵奖得主John Hennessy,他说对美国留学签证变化很忧心
  3. 2019“编程的夏天”完美收官!这些00后点燃了这个盛夏
  4. 关于宽字符(C++将中文文本文件的内容输出到控制台
  5. QQ摘录 “废了!”
  6. java 判断数字二进制有几位_判断一个二进制数字有多少个1----java实现
  7. 最常用的网络应用工具之寻线仪
  8. pandas合并数据集-【老鱼学pandas】
  9. python基本定制之__new__, __init__
  10. ES6 Symbol之浅入解读
  11. 百度人脸识别:最简单的Python调用
  12. 轻松搞懂Word2vec / FastText+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类
  13. android 钛备份,钛备份使用教程
  14. html遮罩效果mask,H5案例分享:特殊形状图片之遮罩蒙版CSS3-Mask效果
  15. Thinkphp5.1实现发送邮箱验证码
  16. 联想电脑thinkPad开机黑屏
  17. C# and VB.NET Comparison Cheat Sheet
  18. python sklearn库silhouette_score轮廓系数接口调用
  19. *抽象对象的类解释 数解释和真值解释---- 布尔逻辑之五****
  20. 灵魂有香气的女子李筱懿:充实自己,学会把自己变成奢侈品

热门文章

  1. Maven私服安装及配置——(十二)
  2. SQL 服务器勒索病毒XTBL、dharma、wallet后缀,会在文件名中添加联系的电子邮件地址...
  3. PHP array_key_exists() 函数(判断某个数组中是否存在指定的 key)
  4. (运维)VMware-vCenter-Server-Appliance-5.0安装与部署
  5. python中类的嵌套_python类的嵌套
  6. Kata Container — Overview
  7. Ansible — Inventory 清单文件
  8. Go 语言编程 — validator 数据校验工具
  9. 美团全链路压测自动化实践
  10. shell字符串截取方法