You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需亚马逊S3、GCP或Azure,使用LiveKit Egress实现通话录制的技术方案问询

无需亚马逊S3、GCP或Azure,使用LiveKit Egress实现通话录制的技术方案问询

嘿,这个问题我太熟了!完全不用依赖三大云存储,不管是本地硬盘还是自托管的存储方案都能搞定LiveKit的通话录制,给你拆解两个实用方案,附代码和配置细节,保证你能快速上手。

方案一:本地文件系统存储(适合测试/小团队场景)

如果你只是做测试或者团队规模小,直接把录制文件存在服务器本地是最省事的,核心就是让LiveKit Egress服务能读写宿主机的目录。

步骤1:配置Egress服务

首先准备一个egress-config.yaml配置文件,指定本地存储路径:

api_key: 你的LiveKit API密钥
api_secret: 你的LiveKit API秘钥
ws_url: ws://你的LiveKit服务器地址:7880
storage:
  type: local
  local:
    directory: /recordings  # 容器内的路径,后面要挂载到宿主机

然后用Docker启动Egress服务,记得把宿主机的目录挂载到容器里:

docker run -d \
  --name livekit-egress \
  --network host \
  -v /宿主机的录制存储目录:/recordings \
  -e LIVEKIT_EGRESS_CONFIG="$(cat egress-config.yaml)" \
  livekit/egress:latest

注意:要确保宿主机目录的权限足够,Egress容器的用户能读写这个目录,不然会出现写入失败的情况。

步骤2:发起通话录制请求

用Curl或者LiveKit的SDK发起录制请求,指定存储类型为local:

curl -X POST "http://你的LiveKit服务器地址:7880/egress/start-room-recording" \
  -H "Authorization: Bearer $(echo -n "你的API密钥:你的API秘钥" | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "room_name": "你要录制的房间名",
    "output": {
      "file": {
        "filename": "room-recording-$(date +%Y%m%d%H%M%S).mp4",
        "storage": {
          "type": "local"
        }
      }
    }
  }'

执行完这个请求,等录制结束后,就能在你宿主机挂载的目录里找到录制好的MP4文件了。

方案二:自托管兼容S3的存储(MinIO,生产环境首选)

如果需要更稳定、可扩展的存储,推荐用MinIO——这是一个开源的兼容S3 API的对象存储,完全自托管,不需要依赖任何云厂商,配置和S3几乎一样,但控制权全在你手里。

步骤1:部署MinIO

先启动MinIO服务,用Docker最方便,记得挂载持久化存储目录:

docker run -d \
  --name minio \
  -p 9000:9000 \
  -p 9001:9001 \
  -v /宿主机的MinIO存储目录:/data \
  minio/minio server /data --console-address ":9001"

启动后,你可以通过http://你的MinIO服务器地址:9001访问控制台,默认账号密码是minioadmin/minioadmin,记得改成安全的账号密码。

步骤2:配置Egress对接MinIO

修改egress-config.yaml,把存储类型改成s3,但endpoint指向你的MinIO地址:

api_key: 你的LiveKit API密钥
api_secret: 你的LiveKit API秘钥
ws_url: ws://你的LiveKit服务器地址:7880
storage:
  type: s3
  s3:
    access_key: minioadmin  # MinIO的账号
    secret: minioadmin      # MinIO的密码
    endpoint: http://你的MinIO服务器地址:9000
    bucket: livekit-recordings  # 提前在MinIO控制台创建好这个桶
    region: us-east-1  # MinIO不强制要求,随便填一个就行

然后重启Egress服务,让配置生效。

步骤3:发起录制请求

和本地存储的请求类似,只是存储类型不需要特别指定(因为Egress已经默认用MinIO了),或者也可以在请求里明确指定:

curl -X POST "http://你的LiveKit服务器地址:7880/egress/start-room-recording" \
  -H "Authorization: Bearer $(echo -n "你的API密钥:你的API秘钥" | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "room_name": "你要录制的房间名",
    "output": {
      "file": {
        "filename": "room-recording-$(date +%Y%m%d%H%M%S).mp4"
      }
    }
  }'

录制完成后,你可以在MinIO的控制台里找到对应的录制文件,也可以用MinIO的CLI工具mc来管理文件。

完整配置&测试流程

  1. 确保LiveKit Server已经正常运行,能创建房间和进行通话。
  2. 按照上面的方案配置Egress服务和存储后端。
  3. 创建一个测试房间,发起通话。
  4. 用Curl或者SDK发起录制请求,查看Egress的日志确认录制正常启动。
  5. 结束通话后,检查存储后端是否生成了录制文件。

注意事项

  • 本地存储的局限性:如果是多节点的LiveKit集群,本地存储只能存在单个节点上,不适合分布式场景;另外要定期清理旧的录制文件,避免磁盘占满。
  • MinIO的优化:生产环境要配置MinIO的集群模式,保证高可用;还要设置桶的生命周期规则,自动清理过期的录制文件。
  • Egress版本匹配:要确保LiveKit Server和Egress服务的版本一致,不然可能出现API不兼容的问题。

备注:内容来源于stack exchange,提问作者Suyash Konduskar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:05:28