[转]webrtc学习: 部署stun和turn服务器

http://www.cnblogs.com/lingdhox/p/4209659.html

webrtc的P2P穿透部分是由libjingle实现的.

步骤顺序大概是这样的:

1. 尝试直连.

2. 通过stun服务器进行穿透

3. 无法穿透则通过turn服务器中转.

stun 服务器比较简单. 网上也有很多公开的stun服务器可以用于测试. 例如 stun.ideasip.com

这里需要注意一下. 我在做android应用时. 在少数老旧的手机上出现过一个bug:

PeerConnection close时非常慢. 大概需要50~80s.

后来反复检查, 才发现问题出在公用的stun服务器响应比较慢.

解决办法就是在自己搭一个stun服务器即可.

具体原因应该是: 一直在进行ice探测(stun bind request). 关闭的时候worker 线程因为网络卡住了, 然后main线程等待. 这个不太好查. 可能需要打很多log来定位代码.

无法穿透的时候就需要 turn 服务器来保证视频通话的成功率.

turn 包含了stun的功能. 所以只需要部署turn服务器即可.

服务器代码可以从这里获取: https://code.google.com/p/coturn/

coturn 在原来的turnserver上增加了一些高级特性. (这是作者的描述, 两个项目是同一个作者. 作者更推荐使用coturn).

coturn  支持tcp, udp, tls, dtls 连接.

coturn 支持linux bsd solaris mac os. 暂不支持windows (未来会支持)

下面说一下安装和配置.

1. coturn 的底层网络部分依赖libevent.  所以需要先安装libevent2, 地址在此 http://libevent.org/

2. coturn的安装很简单. configure make make install 三部曲就完事了.

3. coturn的文档说明挺详细的. 但比较多. 我只是大概说明下.

更具体的说明可以看 源码目录下的README.turnserver README.turnadmin README.turnutils

在bin目录下生成六个可执行文件

turnadmin turnutils_peer turnutils_stunclient
turnserver turnutils_rfc5769check turnutils_uclient

turnserver 就是我们需要的服务器.

turnadmin 用来管理账户.

turnutils_stunclient 用于测试stun服务

turnutils_uclient 用于测试turn服务. 模拟多个UDP,TCP,TLS or DTLS 类型的客户端

example 目录主要是示范如何配置和使用turn. 包含一些测试用例.

example/etc 下是pem证书和conf配置文件

example/var/db 下是sqlite的db库. 用于示范数据库的格式.

coturn 支持三种配置. 命令行, conf文件和数据库. 数据库支持sqlite, mysql, postgresql, MongoDB, redis.

examples\scripts 下一些测试用例:

loadbalance 示范如何进行负载均衡.  设置一个master turn server 然后配置若干个slave turn server.

longtermsecure 示范如何使用long-term 验证

longtermsecuredb 与 longtermsecure 类似, 不过是从数据库配置

shorttermsecure 示范如何使用short-term验证.

restapi 示范了web方面的使用.

stun 定义了两种验证方式.

Long-Term Credential
Short-Term Credential

具体可以参考stun标准 http://tools.ietf.org/html/rfc5389#section-15.4

但是对于webrtc而言. 仅支持long-term .

http://www.ietf.org/proceedings/87/slides/slides-87-behave-10.pdf
TURN REST Server API

这个PDF 描述了. turn服务器和客户端的交互流程.

4. 简单的使用

turnserver -o -a -f -v --mobility -m 10 --max-bps=100000 --min-port=32355 --max-port=65535 --user=ling:ling1234 --user=ling2:ling1234 -r demo

-m 10 表示启动十个relay线程.

当TURN Server用于WebRTC时,必须使用long-term credential mechanism,  即指定 -a 或者 --lt-cred-mech

--max-bps=100000 限制最大速度为100KB/s.

添加了两个用户ling 和ling2.

可以直接使用turnutils_uclient -u ling -w ling1234 来测试. turnutils_uclient 有很多参数可以配置的.


1

2

3

4

5

webrtc::PeerConnectionInterface::IceServer turnServer;

turnServer.uri = "turn:ip";

turnServer.username = "ling";

turnServer.password = "ling1234";

servers.push_back(turnServer);

  

c++ webrtc中可以这样配置turn. web/android/ios 也是类似的.

如果从安全性方面考虑. 可以为账户生成key, 这样就可以直接通过key登录. 而不需要提供密码.

key 通过turnadmin生成, 需要(username, password, realm) . realm是启动turn server时-r 参数指定的.

例如这样:


1

2

turnadmin -k -u ling -p ling1234 -r demo

0xccba8f3a6a025a38eb4a0e795fc92705

时间: 2024-11-03 06:50:30

[转]webrtc学习: 部署stun和turn服务器的相关文章

webrtc学习: 部署stun和turn服务器

webrtc的P2P穿透部分是由libjingle实现的. 步骤顺序大概是这样的: 1. 尝试直连. 2. 通过stun服务器进行穿透 3. 无法穿透则通过turn服务器中转. stun 服务器比较简单. 网上也有很多公开的stun服务器可以用于测试. 例如 stun.ideasip.com 这里需要注意一下. 我在做android应用时. 在少数老旧的手机上出现过一个bug: PeerConnection close时非常慢. 大概需要50~80s. 后来反复检查, 才发现问题出在公用的stu

stun/turn服务器部署

一.简介 本文通过在服务器上安装coturn这个软件,实现搭建STUN服务器和TURN服务器. coturn 简介:是一个免费的开源的 TURN/STUN 服务器.coturn 服务器完整的实现了 STUN/TURN/ICE 协议,支持 P2P 穿透防火墙. STUN 服务器用于检测NAT类型. TURN 服务器是在点对点失败后用于通信中继. coturn的Github源码: https://github.com/coturn/coturn coturn的wiki使用说明: https://gi

webrtc学习笔记1(建立连接基本流程)

最近在做一个基于webrtc的视频软件,以下是自己对于上层建立通话连接流程的基本理解,记录于此. 假设A和B要建立视频通话,A为房间创建端,B为加入房间端: 1.A通过http登录.获取其他服务器地址(做一些保存用户信息的操作,获取信令.stun.turn服务器地址等,非必要) 2.A和信令服务器建立websocket长连接 3.A通过websocket向信令服务器注册(创建房间,记录房间号,等待B加入房间) 4.A创建本地视频,获取A的sdp信息 5.B创建本地视频,获取B的sdp信息 6.B

WebRTC学习之 Intel® Collaboration Suite for WebRTC源码流程解读

年后回来,因为新项目的需求,开始了解WebRTC相关的知识.目前接触的是Intel? Collaboration Suite for WebRTC.刚开始看SDK发现很多概念是我目前不知道的,于是恶补了一周基本的网络相关的知识.再来看Demo和Jar包里面的源码,对其代码逻辑的理解更深一步了.下面从代码层面分模块对Demo的设计和使用进行总结: 首先声明一下核心的类对象: private ConferenceClient mRoom; 无论是登录还是发布.订阅Stream,我们都需要mRoom来

WebRTC学习之ICE深入理解

ICE(交互式连接建立---Interactive Connectivity Establishment),是一种标准穿透协议.它利用STUN和TURN服务器来帮助端点建立连接.下图显示了ICE的基本步骤: 建立连接的前提是A.B都在线. 其中传输地址是IP地址和端口号的组合. 1.收集候选传输地址 2.在信令通道中交换候选项 3.执行连接检查 4.选择选定的对,并启动媒体 5.发送长连接请求(KeepAlive),任何一端检测到使用中的IP地址发生变化,都重新启动ICE(即返回步骤1). 针对

为WebRTC 应用部署Turn Server

部署WebRTC 或 SIP p2p 方案时经常会遇到p2p 无法穿透的环境, 这时就是TunServer 的用武之地了. 这里我们使用turnserver-0.7.3 下载confuse依赖库 wget http://savannah.nongnu.org/download/confuse/confuse-2.7.tar.gz tar zxvf confuse-2.7.tar.gz cd confuse* ./configure make && make install 下载 wget

WebRTC学习笔记_Demo收集

1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源代码中添?了webrtc源代码,放在/external/webrtc/,可是Android并没实用到它,更没有被浏览器使用.当时试图在Android 2.3(Gingerbread)高通平台的手机上用H.264 硬件codec替换掉WebRTC缺省使用的VP8软codec,费了不少劲勉强换掉后效果非常差仅仅得放弃. 近期得知Google最新版的Chrome

STUN和TURN协议解析

在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转.由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信.这种技术通常称为NAT穿透(NAT Traversal).最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议. STUN,首先在RFC

[转]STUN和TURN技术浅析

http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/201206/747038_97665_0.htm 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转.由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我