最近在搭建一个局域网内的实时音视频通讯系统,经过多方对比最终选择了LiveKit这个开源项目。LiveKit是一个高性能的WebRTC框架,可以轻松构建实时音视频应用。与传统的视频会议系统不同,LiveKit采用去中心化架构,支持SFU模式,能够有效降低服务器负载,特别适合中小规模的内部通讯需求。
在局域网环境中部署LiveKit有几个明显优势:首先是数据不出内网,安全性更高;其次是网络延迟低,音视频质量更稳定;最后是不需要购买云服务,成本更低。不过局域网部署也面临一些挑战,比如需要手动处理STUN/TURN服务器配置,浏览器安全策略限制等。
LiveKit对服务器配置有一定要求,特别是在处理多人视频会议时。根据官方建议:
提示:如果是测试用途,普通的开发机也能运行,但正式环境建议使用专用服务器。
从GitHub Releases页面获取最新版本的LiveKit服务器程序:
bash复制wget https://github.com/livekit/livekit/releases/download/v1.5.0/livekit-server_1.5.0_linux_amd64.tar.gz
tar -xzf livekit-server_1.5.0_linux_amd64.tar.gz
sudo mv livekit-server /usr/local/bin/
这里有几个细节需要注意:
LiveKit CLI工具用于生成访问令牌和管理服务器:
bash复制curl -sSL https://get.livekit.io/cli | bash
安装完成后可以验证版本:
bash复制livekit-cli --version
CLI工具默认会安装到/usr/local/bin目录,如果遇到权限问题可以加上sudo。
创建livekit.yaml配置文件,这是服务运行的核心配置:
yaml复制port: 7880
bind_addresses: ["0.0.0.0"]
rtc:
tcp_port: 7881
udp_port: 7882
port_range_start: 50000
port_range_end: 60000
use_external_ip: false
turn:
enabled: true
domain: "192.168.41.141"
udp_port: 3478
tls_port: 0
external_tls: false
keys:
APIE5WqyECRmZTS: sHAs8SQHj6ypQaS7jEXEs4dXuulIHAjWG0sLmDPpeEK
关键配置解析:
port: 主服务端口rtc: WebRTC相关配置,包括端口范围和传输协议turn: TURN服务器配置,用于NAT穿透keys: API密钥对,用于鉴权创建start.sh脚本方便启动服务:
bash复制#!/bin/bash
SERVER_IP="192.168.41.141"
API_KEY="APIE5WqyECRmZTS"
API_SECRET="sHAs8SQHj6ypQaS7jEXEs4dXuulIHAjWG0sLmDPpeEK"
# 停止旧进程
pkill -f livekit-server 2>/dev/null || true
# 启动服务器
livekit-server --config ./livekit.yaml &
sleep 3
# 生成测试token
TOKEN=$(livekit-cli create-token \
--api-key "$API_KEY" \
--api-secret "$API_SECRET" \
--join \
--room "test" \
--identity "demo_user" \
--valid-for "24h")
TOKEN2=$(livekit-cli create-token \
--api-key "$API_KEY" \
--api-secret "$API_SECRET" \
--join \
--room "test" \
--identity "demo_user2" \
--valid-for "24h")
echo "服务器已启动"
echo "测试地址: ws://$SERVER_IP:7880"
echo "Token1: $TOKEN"
echo "Token2: $TOKEN2"
给脚本添加执行权限:
bash复制chmod +x start.sh
LiveKit官方提供了一个简单的会议前端示例:
bash复制git clone https://github.com/livekit-examples/meet.git
cd meet
pnpm install
如果没安装pnpm,可以先安装:
bash复制npm install -g pnpm
创建.env.local文件配置前端连接参数:
code复制LIVEKIT_API_KEY=APIE5WqyECRmZTS
LIVEKIT_API_SECRET=sHAs8SQHj6ypQaS7jEXEs4dXuulIHAjWG0sLmDPpeEK
LIVEKIT_URL=ws://192.168.41.141:7880
bash复制pnpm dev
服务启动后默认监听3000端口,访问http://服务器IP:3000即可。
由于是在局域网使用HTTP协议,现代浏览器会有安全限制,需要特别配置:
chrome://flags/#unsafely-treat-insecure-origin-as-securehttp://192.168.41.141:3000注意:这个配置只影响本地浏览器,其他设备需要单独配置。
问题1:无法获取摄像头/麦克风权限
问题2:连接超时
问题3:视频卡顿
对于生产环境,建议使用Docker容器化部署:
bash复制docker run --rm \
-p 7880:7880 \
-p 7881:7881 \
-p 7882:7882 \
-p 3478:3478/udp \
-v $(pwd)/livekit.yaml:/livekit.yaml \
livekit/livekit-server \
--config /livekit.yaml
LiveKit支持Prometheus格式的监控指标:
yaml复制# 在livekit.yaml中添加
monitoring:
prometheus_port: 7883
然后可以通过http://服务器IP:7883/metrics获取监控数据。
对于高并发场景,可以调整以下参数:
yaml复制rtc:
max_bandwidth: 10000000 # 10Mbps/用户
buffer_factor: 1.5 # 网络缓冲系数
simulcast: true # 启用Simulcast
我在实际部署中发现,内网环境虽然相对安全,但仍需要注意:
除了基础的视频会议,LiveKit还可以用于:
一个实用的技巧是,可以通过LiveKit的Webhook功能与其他系统集成,比如当房间创建时自动通知相关人员。