YAOTU INSIGHTS

LiveKit 服务器完全指南:用 Go 编写的高性能 WebRTC SFU 搭建实时音视频与 AI Agent 基础设施

LiveKit 服务器完全指南:用 Go 编写的高性能 WebRTC SFU 搭建实时音视频与 AI Agent 基础设施
后端音视频即时通讯AI Agent【免费下载链接】livekitEnd-to-end realtime stack for connecting humans and AI项目地址https://gitcode.com/GitHub_Trending/li/livekit点击查看免费下载LiveKit 是一个开源Apache License v2.0的实时音视频基础设施项目本仓库livekit-server是其核心服务器一个用 Go 编写、基于 [Pion WebRTC] 实现的可扩展分布式 WebRTC SFUSelective Forwarding Unit选择性转发单元。它让真实用户、设备与 AI Agent 以参与者的身份进入同一个房间实时流动音频、视频与数据。阅读本文后你将掌握 LiveKit 服务器的安装方式、开发模式启动流程、JWT 访问令牌生成、模拟推流验证、核心配置文件解读以及从源码构建与生产部署的完整路径。项目定位连接人类与 AI 的端到端实时栈LiveKit 官方的定位是用于语音、视频和物理 AI Agent 的开源平台而本仓库正是这套体系中最关键的一环——媒体服务器。它承担的任务包括在人员、设备与 AI 模型之间转发实时音频、视频和数据流让参与方以统一方式加入房间并支持 [Agent Dispatch] 自动或按需将 AI Agent 路由进房间为 Web、移动端、桌面端、嵌入式设备和服务器端提供完整 SDK 生态浏览器、Swift、Android、Flutter、React Native、Rust、Node.js、Python、Unity、ESP32、C 等均有对应客户端 SDK。从源码结构看服务器主体分布在cmd/server可执行入口、pkg/rtc房间/参与者/传输管理、pkg/sfu媒体转发引擎、pkg/service房间分配、认证、Twirp API 等与pkg/routing节点路由等包中整体呈现典型的单机可跑、多节点可扩的分层设计。核心特性一览根据仓库 READMELiveKit 服务器的关键能力包括可扩展、分布式的 WebRTC SFU媒体在服务器侧选择性转发而非在客户端之间直连人、设备与 AI Agent 同房间协作Agent 与浏览器/手机一样以参与者身份加入支持 agent dispatch 自动路由现代化、功能完整的多端 SDK生产级设计内置 JWT 认证健壮的网络与连接性支持 UDP / TCP / TURN 多种传输路径部署简单单个二进制、Docker 或 Kubernetes 均可高级媒体特性speaker detection说话人检测、simulcast联播、selective subscription选择性订阅、moderation APIs管理 API、端到端加密、SVC 编码VP9、AV1、data tracks低延迟遥测与远程操控数据通道、SIP 电话接入、webhooks 事件通知、分布式与多区域部署。其中单二进制部署在代码中可以得到印证cmd/server/main.go将整个服务器编译为livekit-server单一可执行文件Dockerfile 也只拷贝这一个产物作为最终镜像入口。安装 LiveKit 服务器README 推荐在安装服务器之外同时安装 [LiveKit CLI]以便访问服务器 API、创建令牌、生成测试流量以及脚手架/部署 Agent。媒体服务器的安装方式按平台分为三种macOSbrew install livekitLinuxcurl -sSL https://get.livekit.io | bash该安装脚本对应仓库根目录的 install-livekit.sh脚本会自动从 GitHub Releases 查询最新版本要求符合 SemVer 语义化版本号识别架构aarch64映射为arm64x86_64映射为amd64默认安装到/usr/local/bin可通过环境变量INSTALL_PATH覆盖并在目录无写权限时自动使用sudo。脚本仅支持 LinuxmacOS 用户需走 Homebrew。Windows直接从 GitHub Releases 页面下载最新版本的可执行文件即可。快速开始开发模式启动与验证启动服务器进入开发模式只需一条命令livekit-server --dev--dev标志在 cmd/server/main.go 中定义为将日志级别设为 debug、使用控制台格式化输出并开启 /debug/pprof生产环境不安全。结合getConfig的实现细节可以看到开发模式下若未显式配置密钥服务器会使用占位密钥对API Key: devkey API Secret: secret同时会默认只绑定到回环地址127.0.0.1与::1避免开发实例意外暴露到公网。若要为生产环境定制需参考部署文档与 config-sample.yaml 配置文件。创建访问令牌连接 LiveKit 房间的用户必须持有访问令牌。访问令牌JWT编码了用户身份以及被授予的房间权限。README 推荐使用 CLI 生成lk token create \ --api-key devkey --api-secret secret \ --join --room my-first-room --identity user1 \ --valid-for 24h令牌机制在服务端有对应实现pkg/service中的认证逻辑负责校验 JWT而cmd/server/commands.go中还保留了一个已隐藏的create-join-token子命令createToken函数它构造auth.VideoGrantRoomJoin: true与指定房间名通过auth.NewAccessToken(apiKey, apiSecret)签发默认有效期 30 天的令牌并支持--recorder选项生成隐藏的、只能订阅的录制参与者。该子命令已被标记为 deprecated令牌生成统一交给 LiveKit CLI。用示例应用测试访问官方示例应用输入生成的令牌即可连接到你的 LiveKit 服务器。连接成功后你的音视频就开始发布到这台新实例上了。模拟一个测试推流者在没有真实摄像头/麦克风的情况下可以用 CLI 模拟推流lk room join \ --url ws://localhost:7880 \ --api-key devkey --api-secret secret \ --identity bot-user1 \ --publish-demo \ my-first-room该命令向房间发布一段循环演示视频。README 特别提醒由于演示视频编码方式每 3 秒一个关键帧的限制浏览器需要先缓冲足够数据才能开始渲染画面会出现轻微延迟——这是模拟推流的固有现象并非服务器故障。加入一个 AI AgentAgent 与浏览器或手机一样以参与者身份加入房间。按照 Voice AI 快速入门构建一个 Agent 后它连接自托管服务器的方式与连接 LiveKit Cloud 完全相同在没有 Cloud 的环境下运行时使用模型插件model plugins替代 LiveKit Inference 即可。配置深入从 config-sample.yaml 读懂生产参数仓库根目录的 config-sample.yaml 是官方随仓库维护的完整配置示例其中的核心参数与默认值如下生产部署可直接以此为蓝本。主端口与 Redis 分布式模式port: 7880port是 RoomService 与 RTC 端点的主 TCP 端口生产环境应置于带 TLS 的负载均衡器之后对应pkg/config/config.go中Config.Port字段。当配置了redis后LiveKit 会自动以全分布式方式运行客户端可连接任意节点并被路由到同一房间redis: address: redis.host:6379 # db: 0 # username: myuser # password: mypassword配置示例中还覆盖了 Redis Sentinelsentinel_master_namesentinel_addresses、Redis TLStls.enabled、insecure、server_name、ca_cert_file等以及 Redis Clustercluster_addresses三种高级形态。分布式路由由pkg/routing/redisrouter.go实现。WebRTC 传输配置rtc: port_range_start: 50000 port_range_end: 60000 tcp_port: 7881 use_external_ip: trueport_range_start/port_range_end客户端 UDP 流量使用的端口区间需在防火墙开放入站tcp_portUDP 不可用时启用 WebRTC ICE over TCP 的端口。该端口不能放在负载均衡器或 TLS 之后必须直接暴露在节点上WebRTC 传输本身已加密无需额外加密层use_external_ip通过 STUN 探测宿主机公网 IP适用于 AWS、Google 云这类内网 IP 映射到外网 IP 的云环境。示例中还给出了大量可选配置advertise_internal_ip同时通告内外网 IP、node_ip手动指定公网 IP、udp_portUDP mux建议端口数不少于 vCPU 数、use_ice_litelite ICE 加速建连、stun_servers/turn_servers客户端使用的 STUN/TURN、congestion_control默认开启的拥塞控制allow_pause控制是否可暂停部分轨道、allow_tcp_fallbackUDP 不稳定时自动回退 TCP/TURN、packet_buffer_size_video默认 500/packet_buffer_size_audio默认 200、pli_throttlePLI/FIR 限流、interfaces/ips的 include/exclude 过滤、batch_io合并网络写系统调用降低 CPU等。这些参数分别对应pkg/config/config.go中的RTCConfig与 SFU 侧实现。密钥与认证keys: key1: secret1 key2: secret2密钥对用于 JWT 认证服务器 API 需要密钥对来生成访问令牌并调用服务器。生产环境建议通过key_file指向权限为仅本人可读others 权限为 0的密钥文件pkg/config/config.go中定义了ErrKeyFileIncorrectPermission等校验错误。房间默认配置# room: # auto_create: false # empty_timeout: 300 # departure_timeout: 20 # max_participants: 0 # enabled_codecs: # - mime: audio/opus # - mime: video/vp8 # enable_remote_unmute: true # playout_delay: # enabled: true # min: 100 # max: 2000 # sync_streams: true每个房间默认继承这些设置若通过 CreateRoom 显式创建房间则显式设置优先。empty_timeout控制无人加入时房间保留秒数默认 300departure_timeout控制所有人离开后房间保留秒数默认 20enabled_codecs可限制房间接受的编码还支持video/h264、video/vp9、video/av1、audio/redplayout_delay控制视频轨道播放延迟配合sync_streams改善音画同步。Webhook、信号中继与 PSRPCwebhook配置api_key与urls列表后LiveKit 会向你的 URL 处理器推送房间事件api_key必须匹配服务器配置的某个密钥用于签名校验对应pkg/service中的 webhook 发送逻辑signal_relay自 v1.4.0 起基于 psrpc 的可靠信号中继retry_timeout默认 30s、min_retry_interval500ms、max_retry_interval5s、stream_buffer_size1000psrpc自 v1.5.1 起更可靠的内部 RPCmax_attempts3、timeout500ms、backoff500ms、buffer_size1000可选 gzip 压缩compression.quality1-9、threshold1024 字节。音频、TURN、Ingress 与节点限制audioactive_level默认 300-1270 最响、min_percentile默认 40、update_interval默认 500ms、smooth_intervals默认 4、active_red_encoding控制说话人检测灵敏度turn内置 TURN 服务器udp_port默认 3478推荐 443、tls_port默认 5349无负载均衡时必须设为 443、domain需匹配 TLS 证书域名、cert_file/key_file或LIVEKIT_TURN_CERT/LIVEKIT_TURN_KEY环境变量提供证书、ttl_seconds默认 300、per_user_relay_allocation_limit默认 12防止单个参与者耗尽共享中继端口配额。pkg/config/config.go还定义了TURNMaxTTLSeconds24 小时与DefaultTURNTTLSeconds300s等常量约束ingressrtmp_base_url与whip_base_url用于生成 RTMP/WHIP 拉流地址enable_udp_url_pull默认关闭存在安全风险limit节点级限流num_tracks默认每 CPU 400 路进出轨、上限 8000、bytes_per_sec默认 1 GB/s、subscription_limit_video/audio单参与者订阅数限制、max_metadata_size、signal_message_size_limit默认 2 MiB、max_api_request_body_size默认 10 MiB等设为 -1/0 可禁用对应限制node_selector节点选择策略kind可选any、sysload、cpuload、regionaware配合sort_by、algorithmlowest/twochoice、sysload_limit默认 0.7与regions经纬度坐标用于多节点负载分配。部署选项使用 LiveKit CloudLiveKit Cloud 是官方托管方案在 19 区域运行并提供 99.99% 可用性在服务器之上叠加 Agent 托管、模型推理、电话接入与可观测性。Build 计划免费且无需信用卡。自托管自托管部署可参考部署文档官方提供 Docker 镜像与 Helm chart 两种途径。仓库内的 Dockerfile 展示了镜像构建方式以golang:1.26.7-alpine作为构建阶段镜像GOTOOLCHAINlocal强制使用镜像内工具链以保证可复现构建CGO_ENABLED0静态编译./cmd/server最终以精简的alpine作为运行镜像并先执行apk upgrade拉取最新安全补丁。多平台构建linux/amd64、linux/arm64由 magefile.go 中的PublishDocker目标使用docker buildx完成。从源码构建构建前置条件已安装 Go 1.26当前仓库版本号见 version/version.go为1.13.7Dockerfile 锁定工具链为 Go 1.26.7GOPATH/bin已加入PATH。然后依次执行git clone 本仓库地址 cd livekit ./bootstrap.sh magebootstrap.sh 负责在系统缺失 mage 时从源码安装 mage 构建工具并执行go mod download拉取依赖mage默认执行Build目标magefile.go它会先运行 wire 代码生成再在cmd/server目录执行go build -o ../../bin/livekit-server产物位于bin/livekit-server。magefile.go 还提供了其他常用目标mage BuildLinux交叉编译 Linux 二进制、mage Test跳过集成的单元测试、mage TestAll含集成测试的全量测试、mage TestServer前台运行 SDK 测试服务器、mage Lintgolangci-lint、mage Generate重新生成代码、mage Clean清理构建产物。服务器命令行与运维子命令启动入口 cmd/server/main.go 基于 urfave/cli v3 实现除默认启动动作外还注册了若干运维子命令livekit-server generate-keys生成一对 API Key 与 SecretgenerateKeys函数livekit-server ports打印服务器当前配置将使用的 TCP/UDP 端口清单printPorts函数涵盖 HTTP 服务、ICE/UDP、ICE/TCP、TURN/TLS、TURN/UDPlivekit-server list-nodes以表格形式列出集群所有节点及其 CPU/内存/房间/客户端/流量/NACK/重传等实时统计listNodes函数数据来自pkg/routing的节点状态livekit-server help-verbose打印全部帮助信息包括由配置自动生成的 CLI 标志livekit-server --version输出版本号。全局标志方面--bind监听 IP可多次指定、--config配置文件路径、--config-body/环境变量LIVEKIT_CONFIG直接以 YAML 字符串传配置适合容器场景、--key-file、--keys/LIVEKIT_KEYS、--region/LIVEKIT_REGION、--node-ip/NODE_IP、--udp-port/UDP_PORT、--redis-host/REDIS_HOST、--redis-password、--turn-cert/LIVEKIT_TURN_CERT、--turn-key/LIVEKIT_TURN_KEY、--cpuprofile、--memprofile等均有定义且大部分支持环境变量注入便于容器化部署。仓库源码结构导读若想深入源码学习可按以下路径阅读cmd/server/main.go进程入口、CLI 定义、开发模式逻辑与优雅停机监听 SIGINT/SIGTERM/SIGQUIT首次触发优雅停止、第二次强制停止cmd/server/commands.go各运维子命令的实现pkg/config/config.go全部配置结构体与校验逻辑config-sample.yaml官方维护的完整配置样例pkg/rtc房间、参与者、媒体轨道、订阅管理与传输协商pkg/sfuSFU 媒体转发引擎含拥塞控制pkg/sfu/bwe、码率分配pkg/sfu/streamallocator、RTP 统计pkg/sfu/rtpstats等pkg/routing单机路由localrouter.go与 Redis 分布式路由redisrouter.go及节点选择策略pkg/routing/selectorpkg/serviceRoomService、认证、webhook、TURN、Ingress/SIP 等服务端能力pkg/telemetry/prometheusPrometheus 指标默认prometheus_port: 6789的/metrics端点test集成测试与多节点场景测试multinode_test.go、singlenode_test.go等。结语从一条livekit-server --dev命令到生产级的多节点分布式部署LiveKit 服务器提供了完整、清晰且可自托管的实时音视频基础设施路径。配合 LiveKit Agents 与各端 SDK你可以用同一套房间模型把人、设备和 AI Agent 编织进同一实时场景——这正是连接人类与 AI 的端到端实时栈在工程上的落点。本文涉及的安装、令牌、配置与构建细节均以当前仓库版本 1.13.7为准更多生态组件Agents SDK、Egress、Ingress、SIP 等可沿仓库 README 中的生态表格继续探索。赞分享后端音视频即时通讯AI Agent【免费下载链接】livekitEnd-to-end realtime stack for connecting humans and AI项目地址https://gitcode.com/GitHub_Trending/li/livekit点击查看免费下载相关推荐深入LiveKit架构Go语言实现的高性能SFU服务器深入LiveKit架构Go语言实现的高性能SFU服务器 LiveKit是一款基于Go语言构建的高性能WebRTC SFU服务器采用模块化、可扩展和分布式的架后端音视频即时通讯AI AgentLiveKit深度解析开源SFU媒体服务器的架构设计与实现LiveKit深度解析开源SFU媒体服务器的架构设计与实现 引言WebRTC SFU的革命性突破 在实时音视频通信领域WebRTC技术已经彻底改变了我们的后端音视频即时通讯AI Agent网易云音乐数据备份三步导出播放历史与歌单网易云音乐数据备份三步导出播放历史与歌单 本文基于开源项目 InfoSpider演示网易云音乐数据备份流程安装爬虫依赖、配置账号、把歌单与播放历史导出为本网页爬虫数据分析数据可视化桌面应用上一篇Cosmos 仓库题解HackerRank Almost Sorted——一次交换或一次反转判断数组是否可排序下一篇终极RyzenAdj调优指南3步解锁锐龙处理器隐藏性能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考