
1. 为什么需要Livekit Egress录制服务最近在做一个在线教育项目时遇到了一个头疼的问题如何把直播课程自动录制下来供学员回看试了好几种方案都不太理想直到发现了Livekit的Egress录制服务。这个工具就像个24小时在线的课程录制师能自动把直播内容保存成MP4或WebM格式还能直接上传到云存储。想象一下这样的场景你正在主持一场重要的线上会议会议结束后需要把录像发给没参加的同事。传统做法可能要手动录屏、转码、上传费时费力。而Egress服务就像个智能助理会议开始时自动按下录制键结束后直接把成品视频发到你指定的地方。我在实际项目中用它处理过300小时的课程录制稳定性比人工操作强太多了。2. 部署前的环境准备2.1 硬件与软件基础配置我的测试环境是一台4核8G的腾讯云服务器系统建议用Ubuntu 20.04 LTS及以上版本。这里有个坑要注意服务器最好有独立显卡或者至少2GB的共享显存因为视频编码很吃GPU资源。有次用1核2G的机器测试录制1080p视频时直接卡成PPT。安装Docker的姿势要正确别直接用apt-get安装旧版本。推荐用官方脚本curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER装完后记得配国内镜像源不然拉镜像能等到怀疑人生。在/etc/docker/daemon.json里加上{ registry-mirrors: [https://docker.mirrors.ustc.edu.cn] }2.2 目录结构与权限设置我习惯把相关资源都放在/opt/livekit目录下结构如下/opt/livekit ├── config.yaml # 配置文件 ├── output # 录制输出目录 └── templates # 布局模板目录重点来了一定要提前给目录赋权我吃过三次亏每次都是容器启动失败才发现权限问题。执行这两个命令保平安sudo mkdir -p /opt/livekit/{output,templates} sudo chmod -R 777 /opt/livekit3. 配置文件深度解析3.1 核心配置项详解config.yaml就像Egress服务的大脑每个参数都关乎生死。这是我优化过的生产环境配置log_level: debug api_key: your_livekit_key api_secret: your_livekit_secret ws_url: ws://your_server_ip:7880 template_base: /templates insecure: true redis: address: 127.0.0.1:6379 password: your_redis_pass db: 0 health_port: 8081 prometheus_port: 9090其中ws_url最容易踩坑如果Livekit服务器用了HTTPS这里必须用wss协议本地测试可以用ws但要把insecure设为true。上周帮一个客户排查问题就是因为他把ws_url写成了http://开头折腾了两小时才发现。3.2 高级功能配置想让录制视频自动上传到云存储Egress支持三大云厂商# AWS S3配置示例 s3: access_key: your_aws_key secret: your_aws_secret region: ap-northeast-1 bucket: your-bucket-name # 阿里云OSS配置通过S3兼容接口 s3: access_key: your_ali_key secret: your_ali_secret endpoint: oss-cn-hangzhou.aliyuncs.com bucket: your-bucket实测发现个隐藏功能如果配置了多个存储后端可以在发起录制请求时动态指定使用哪个这个在混合云场景特别有用。4. Docker部署实战4.1 容器启动命令剖析下面这个命令是我经过20多次测试优化出来的终极版docker run -d \ --name livekit-egress \ --restart unless-stopped \ --cap-add SYS_ADMIN \ -e EGRESS_CONFIG_FILE/config.yaml \ -v /opt/livekit/config.yaml:/config.yaml \ -v /opt/livekit/output:/output \ -v /opt/livekit/templates:/templates \ -p 8081:8081 \ -p 9090:9090 \ livekit/egress:latest重点说下--cap-add SYS_ADMIN这个参数它是为了让Chrome能在容器里正常渲染页面但会降低安全性。如果录制内容敏感可以用--cap-add SYS_ADMIN --security-opt seccompchrome.json来平衡安全性和功能。4.2 服务监控与排错启动后别急着庆祝先检查三件事看容器状态docker ps -a应该显示Up状态查日志docker logs -f livekit-egress要找starting template server字样测健康检查curl http://localhost:8081/health应该返回OK遇到过最诡异的bug是容器反复重启最后发现是Redis密码包含特殊字符没加引号。建议用docker inspect查容器详细配置时重点看Mounts和Config.Env字段是否正确。5. 实战技巧与性能优化5.1 录制模板定制Egress默认提供几种布局模板但实际项目往往需要自定义。我在templates目录下放了个custom.html!DOCTYPE html html head style .teacher { width: 70%; } .slides { width: 30%; } /style /head body div classteacher idteacher-video/div div classslides idslides-video/div /body /html使用时在API请求里指定template_url参数即可。有个冷知识模板里可以用CSS动画我做过一个渐入渐出的转场效果客户直呼专业。5.2 大规模部署建议当需要同时处理几十路录制时单机部署会力不从心。我的方案是用Docker Swarm或K8s做集群部署给每台worker节点打上标签比如egress-worker: true通过Nginx做负载均衡健康检查间隔设为5秒Redis改用哨兵模式避免单点故障压力测试数据显示8核16G的机器最多能稳定处理15路1080p录制超过这个数就要考虑横向扩展了。