零配置接通 LiveKit:从启动到首次入会的完整路径
【免费下载链接】livekitEnd-to-end realtime stack for connecting humans and AI项目地址: https://gitcode.com/GitHub_Trending/li/livekit
团队要上一场内部培训直播,评审两周后的结论是:业务层自己写就够,真正缺的是一个稳定的媒体中转层。LiveKit 是一个开源实时音视频服务器:信令、房间管理、WebRTC(浏览器标准实时通信协议)转发它都做了,你只写客户端。读完这篇,你会在本机跑起服务,让两个身份进入同一个房间。
三步到一次可用连接
第一步,确认环境并拿到二进制。livekit-server是单一编译产物,通过系统包管理器或平台对应的 release 产物安装即可,能执行livekit-server --version打印版本号就算就绪。
第二步,用开发模式启动:
livekit-server --dev这一步省去所有配置:dev 模式下服务器自动生成devkey/secret密钥对并默认绑定 localhost(逻辑见开发模式启动逻辑),日志会直接打印密钥。默认 7880 端口走信令与 API,7881 走 RTC 的 TCP 回退,另有一段 UDP 端口范围承载媒体。
第三步,生成访问令牌。客户端入房不靠账号密码,而是出示一枚服务端签发的 JWT(JSON Web Token,带签名的令牌)。用官方 CLI 一条命令就能签发:
lk token create \ --api-key devkey --api-secret secret \ --identity user1 --room my-room --joinidentity 是用户在房间内的唯一身份,room 是房间名;这枚令牌决定了这个人能进哪个房、能否发布音视频。
第四步,验证连通。确认端口在监听后,把令牌填进官方示例页面即可加入 my-room,两个终端用不同身份入会、彼此能看到画面,链路就算打通:
ss -ltn | grep -E '7880|7881'⚡️ 架构速览:信令、房间、转发各归其位
- 信令服务只处理鉴权、入会、订阅这类控制消息,不经过任何媒体数据
- 房间管理器 负责房间生命周期:创建、空房回收、参与者在册
- SFU 转发核心 承担重活:NACK 重传、Simulcast 档位选择、按订阅方向转发
- 路由层有本地与跨节点两种实现,单节点用前者,引入 Redis 后启用后者
- ICE/TCP/TURN 构成 UDP 不通时的兜底链路
读代码前先记住这条分工:所有「谁、哪个房间、什么权限」的问题在 service 层,所有「包怎么走」的问题在 sfu 层。
🔒 从开发到生产:密钥、端口与多节点
切生产环境时最容易踩的是四点:
- 密钥:必须显式配置
keys或key_file。留空会静默回落到 dev 占位密钥并绑定 loopback,「服务起不来、外面连不上」多半是这个原因 - 端口:7880 与 7881 只是 TCP 信令面,媒体走 UDP 端口段;安全组要放行整段 UDP,只开两个 TCP 端口是连不上的
- NAT 穿透:严格 NAT 的客户端需要内置 TURN(按用户限额分配中继端口,默认每人 12 个)或外接 TURN,配置项都在示例配置文件里
- 多节点:接入 Redis 后房间状态与跨节点信令由Redis 跨节点路由统一协调,配好 region 后新房间会优先落在同区域节点
还有个容易忽略的点:空房靠empty_timeout(默认 5 分钟)和参与者离场超时回收,调试期把这两个值调小,能避免崩溃客户端长期占着房间。
监控与常见排障路径
服务器自带 Prometheus 指标,从 HTTP 端点抓取即可;面板直接导入Grafana 监控看板,节点负载、房间数、码率一屏可见。
出问题按这个顺序查:
- 令牌过期或权限不足(缺 join 声明):信令日志有明确鉴权失败,先重新签发再怀疑网络
- UDP 不通:看日志是否已回退 TCP/TURN;客户端 RTT 突增时优先核对 UDP 端口段
- 单向无声:通常是订阅未建立,先确认订阅方的 DownTrack 是否创建,再看 NACK 统计
- 多节点房间状态不一致:确认 Redis 可达、节点 keepalive 的 pub/sub 是否正常
值得知道的扩展点
- Agents:
pkg/agent/内置 Agent 框架,可以让一个经 ASR/LLM/TTS 驱动的「参与者」入会说话,是做 AI 会陪的常见入口 - Ingress/Egress:RTMP/RTSP 拉流推入、录制与转推,对应
pkg/service/下的服务文件 - Webhook:房间与参与者状态变化回调到你的后端,业务侧不必轮询
目前它自身覆盖单机与多节点信令、媒体转发和内置 TURN,录制、转码和计量计费不包含在内,需要自行接 Egress 与账目系统。想继续深入:
- 读
pkg/rtc/,看参与者入会与订阅的完整状态机 - 读
deploy/README.md,查容器与 k8s 的部署选项 - 遇到行为与文档不符,直接在仓库提 Issue
【免费下载链接】livekitEnd-to-end realtime stack for connecting humans and AI项目地址: https://gitcode.com/GitHub_Trending/li/livekit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考