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

简介: webrtc的P2P穿透部分是由libjingle实现的.  步骤顺序大概是这样的:  1. 尝试直连. 2. 通过stun服务器进行穿透 3. 无法穿透则通过turn服务器中转.    stun 服务器比较简单.

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, MongoDBRedis.

 

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 有很多参数可以配置的. 

 

[javascript]  view plain  copy
 
  1. webrtc::PeerConnectionInterface::IceServer turnServer;  
  2. turnServer.uri = "turn:ip";  
  3. turnServer.username = "ling";  
  4. turnServer.password = "ling1234";  
  5. servers.push_back(turnServer);  

 

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

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

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

[javascript]  view plain  copy
 
    1. turnadmin -k -u ling -p ling1234 -r demo  
    2. 0xccba8f3a6a025a38eb4a0e795fc92705  
目录
相关文章
|
19天前
|
弹性计算 安全 Linux
使用阿里云服务器安装Z-Blog博客网站流程,新手一键部署教程
本教程教你如何在阿里云99元服务器上,通过宝塔Linux面板一键部署Z-Blog博客。基于CentOS 7.9系统,从远程连接、安装宝塔面板、开放端口到部署Z-Blog全流程详解,操作简单,新手也能轻松搭建个人博客网站。
251 13
|
19天前
|
弹性计算 Devops Shell
用阿里云 DevOps Flow 实现 ECS 部署自动化:从准备到落地的完整指南
阿里云 DevOps Flow 是一款助力开发者实现自动化部署的高效工具,支持代码流水线构建、测试与部署至ECS实例,显著提升交付效率与稳定性。本文详解如何通过 Flow 自动部署 Bash 脚本至 ECS,涵盖环境准备、流水线搭建、源码接入、部署流程设计及结果验证,助你快速上手云上自动化运维。
80 0
监控 安全 Linux
43 0
|
2月前
|
监控 Java Linux
Apache NiFi项目的编译与部署于CentOS服务器
总而言之,Apache NiFi的编译和部署虽然涉及多个步骤,但这些操作步骤简明扼要,即使是不太熟悉Java或Maven的用户也能跟随指南完成。通过遵循上述步骤,您将能够在CentOS服务器上成功部署Apache NiFi,为您的数据流处理任务建立一个功能强大的平台。
142 16
|
2月前
|
资源调度 负载均衡 JavaScript
使用PM2工具部署Vue.js应用于服务器
以上步骤完成之后,你就成功利⽤ PM⼆工具将 Vuejs 应⽰程序部署至服 务 器,并且配合反向代理实现了高效稳定访问及负载均衡功能。
96 0
|
2月前
|
运维 数据可视化 数据库
一小时搞定服务器软件部署:资深工程师实测方案
本文分享了一位运维工程师在短时间内将30个不同软件部署到新服务器上的实战经验。面对全新 Rocky Linux 系统,传统手工部署方式效率低下且容易出错。作者尝试多种自动化方案后,最终选择使用自动化部署工具,通过其内置的 Docker Compose 模板和可视化界面,实现快速、批量部署,大幅提升效率,30个应用仅用约1小时完成,显著节省时间和人力成本。
|
2月前
|
Java 关系型数据库 应用服务中间件
零基础服务器搭建教程:30分钟快速部署你的第一台服务器
入职小白突遭“下马威”,首周被要求搭建包含 Odoo ERP、NGINX、MySQL 和 Java 应用的服务器,却从零基础开始摸索,历经系统配置、软件安装、服务部署等重重难关。在时间紧、技术难的困境中,意外发现一键部署工具 ,借助其自动化能力快速完成任务,不仅赢得老板认可,也开启了自主学习之路:从 systemd 到 NGINX 配置,从 Odoo 结构到 Shell 脚本编写,逐步成长为“能搭服务器的人”。
零基础服务器搭建教程:30分钟快速部署你的第一台服务器
|
2月前
|
运维 Prometheus 监控
3 年部署经验总结:用自动化工具轻松管理 300+ 服务器开源软件
三年前接手公司IT部门时,我满怀信心,却发现部署效率低下。尽管使用了GitLab、Jenkins、Zabbix等100+开源工具,部署仍耗时费力。文档厚重如百科,却难解实际困境。一次凌晨三点的加班让我下定决心改变现状。偶然看到一篇国外博客,介绍了自动化部署的高效方式,我深受启发。
124 0

热门文章

最新文章