【WebRTC全流程】livekit配置免费的cloudflare turn服务

下边是几种部署livekit的方式

部署模式 ssl/tls证书 turn/stun 域名 备注 文档
纯内网 不需要 不需要 不需要 https://pidan.dev/20250715/webrtc-livekit-deploy-with-no-tls/
公网 需要 all in one自带turn 需要 不支持自签证书 官方模式 https://pidan.dev/20250721/webrtc-livekit-deploy-with-tls/
公网 需要 使用第三方turn 需要 不支持自签证书 https://pidan.dev/20250722/webrtc-livekit-deploy-config-turn-server/

我们要turn干啥?

一些关键概念:

  • TURN(Traversal Using Relays around NAT)是一种协议,可协助遍历网络地址转换器 (NAT) 或防火墙,以促进点对点通信。它是 STUN(NAT 会话遍历实用程序)协议的扩展,在RFC 8656中定义。
  • NAT(网络地址转换):路由器用于将多个私有 IP 地址映射到单个公共 IP 地址的方法。这通常由家庭互联网路由器完成,因此同一网络中的多台计算机可以共享一个公共 IP 地址。
  • TURN 服务器:一种中继服务器,充当 NAT 后客户端之间流量的中介。Cloudflare Realtime TURN 服务是 TURN 服务器的一个示例。
  • TURN 客户端:使用 TURN 协议通过 TURN 服务器进行通信的应用程序或设备。这是您的应用程序。它可以是使用 WebRTC API 的 Web 应用程序,也可以是在移动设备或桌面上运行的本机应用程序。
  • 分配:当 TURN 服务器创建分配时,TURN 服务器会保留该客户端唯一的 IP 和端口。
  • 中继传输地址:在 TURN 服务器上保留的 IP 地址和端口,Internet 上的其他人可以使用它来向 TURN 客户端发送数据。

TURN工作原理:

  1. TURN 客户端向 TURN 服务器发送 Allocate 请求。
  2. TURN 服务器创建分配并将中继传输地址返回给客户端。
  3. 然后,客户端可以将此中继地址提供给其对等方。
  4. 当对等方向中继地址发送数据时,TURN 服务器将其转发给客户端。
  5. 当客户端想要将数据发送到对等方时,它会通过 TURN 服务器发送数据,然后 TURN 服务器将其转发给对等方。

创建免费的cloudflare turn服务器

注册登录,在cloudflare控制台找到Realtime-TURN服务器,开通它的免费套餐(需要信用卡),有1000GB的免费出站流量,入站免费。(cloudflare就是活菩萨)

点击创建,设置一个名字(使用默认就名字就好),创建后,页面会展示你的凭据,务必保存这些信息,关掉就没了。

然后在这个页面的下边找到cloudflare提供的curl命令,直接找个支持curl的terminal执行,就会得到类似如下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"iceServers": [
{
"urls": [
"stun:stun.cloudflare.com:3478",
"turn:turn.cloudflare.com:3478?transport=udp",
"turn:turn.cloudflare.com:3478?transport=tcp",
"turns:turn.cloudflare.com:5349?transport=tcp"
],
"username": "xxxx",
"credential": "yyyy",
}
]
}

cloudflare的逻辑就是,先给你一个父秘钥,用它创建子账号和密码,你使用子账户密码访问turn服务,username就是你的turn账户名,credential就是你的turn密码,urls就是你的turn地址,地址给你了很多,某些可能你访问不通,可以都用ICE测试页面测一下,建议先选turn.cloudflare.com:443这个大概率是可以用的。

我们去ICE测试页面测一下是不是通的,填写刚才你的turn地址和账号密码:

这样就是可用了。

然后我们来到livekit.yml配置文件里填写:

https://github.com/livekit/livekit/blob/master/config-sample.yaml 官方的配置文件示例也给你贴出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
port: 7880
bind_addresses:
- ""
rtc:
tcp_port: 7881
port_range_start: 50000
port_range_end: 60000
use_external_ip: true
enable_loopback_candidate: false
turn_servers: # 这里配置第三方的turn服务器
- host: turn.cloudflare.com # turn地址
port: 443 # 端口号呗
protocol: tls # 走tls turn,其他的还有tcp/udp,这里先不讨论,刚才curl执行后把所有模式都生成了给你用
username: "123" # cloudflare turn 账号
credential: "123" # 密码
redis:
address: localhost:6379
username: ""
password: ""
db: 0
use_tls: false
sentinel_master_name: ""
sentinel_username: ""
sentinel_password: ""
sentinel_addresses: []
cluster_addresses: []
max_redirects: null
keys:
APIe: RkBUNQrEe3mD
1
docker compose up -d

这时候我们livekit网页版进入会议室,并可以进行音视频对话了。

livekit网页版:https://meet.livekit.io/?tab=custom
livekit官方会议室连通性测试页面:https://livekit.io/connection-test

cloudflare turn官方文档 https://developers.cloudflare.com/realtime/turn/