Docker部署Jitsi实现多Jibri同时录制的解决方案咨询
解决Docker部署Jitsi多会议同时录制的方案
核心原理
Jibri作为Jitsi的录制服务,单个实例仅能处理一场录制任务,要实现多会议同时录制,必须启动多个Jibri实例。但默认情况下Jibri会独占Pulseaudio资源,多实例直接启动会引发音频冲突,因此需要通过共享的Docker化Pulseaudio服务统一管理音频设备,让多个Jibri实例可同时复用音频资源。
方案是否最优?
是的,该方案兼顾Docker的隔离性与资源复用性:
- 避免每个Jibri实例单独占用音频硬件,通过共享Pulseaudio实现音频资源池化
- 基于Docker Compose扩容Jibri实例,运维成本低,可根据负载动态调整数量
- 完全适配官方Jitsi Docker镜像生态,无需大幅修改原有部署架构
具体配置步骤
1. 搭建共享Pulseaudio容器
创建专用的Pulseaudio容器,作为所有Jibri实例的音频服务端:
- 创建
pulseaudio目录,添加配置文件default.pa:load-module module-native-protocol-tcp auth-ip-acl=172.17.0.0/16 auth-anonymous=1 load-module module-null-sink sink_name=jibri_sink sink_properties=device.description="Jibri_Sink" load-module module-null-sink sink_name=jibri_recording_sink sink_properties=device.description="Jibri_Recording_Sink" - 编写Dockerfile:
FROM ubuntu:latest RUN apt-get update && apt-get install -y pulseaudio COPY default.pa /etc/pulse/default.pa CMD ["pulseaudio", "-nF", "/etc/pulse/default.pa", "--disallow-exit", "--no-cpu-limit"] - 构建并启动容器:
(docker build -t jitsi-pulseaudio . docker run -d --name jitsi-pulseaudio --network jitsi-net jitsi-pulseaudiojitsi-net为你的Jitsi服务使用的Docker网络,需提前确认网络名称)
2. 配置多Jibri实例
在原有Jitsi的docker-compose.yml中,复制原有jibri服务块,创建多个实例(如jibri1、jibri2),并修改以下配置:
- 每个实例设置唯一的
JIBRI_ID和JIBRI_RECORDER_ID - 配置
PULSE_SERVER指向共享Pulseaudio容器 - 为每个实例分配独立的
DISPLAY端口,避免Xvfb冲突
示例docker-compose.yml片段:
services: jibri1: image: jitsi/jibri:stable volumes: - ./jibri/config:/config - ./recordings:/recordings environment: - JIBRI_ID=jibri1 - JIBRI_RECORDER_ID=recorder1 - PULSE_SERVER=tcp://jitsi-pulseaudio:4713 - DISPLAY=:0 - JIBRI_XMPP_USER=jibri1@auth.your-domain.com - JIBRI_XMPP_PASSWORD=your-jibri-password - JIBRI_RECORDING_DIR=/recordings network_mode: "jitsi-net" depends_on: - prosody - jitsi-pulseaudio restart: unless-stopped jibri2: image: jitsi/jibri:stable volumes: - ./jibri/config:/config - ./recordings:/recordings environment: - JIBRI_ID=jibri2 - JIBRI_RECORDER_ID=recorder2 - PULSE_SERVER=tcp://jitsi-pulseaudio:4713 - DISPLAY=:1 - JIBRI_XMPP_USER=jibri2@auth.your-domain.com - JIBRI_XMPP_PASSWORD=your-jibri-password - JIBRI_RECORDING_DIR=/recordings network_mode: "jitsi-net" depends_on: - prosody - jitsi-pulseaudio restart: unless-stopped
3. 配置Prosody添加多Jibri账号
在Prosody配置文件(./prosody/config/prosody.cfg.lua)中,为每个Jibri实例添加XMPP账号:
VirtualHost "auth.your-domain.com" authentication = "internal_plain" admins = { "focus@auth.your-domain.com", "jibri1@auth.your-domain.com", "jibri2@auth.your-domain.com" } Component "jibri.your-domain.com" "component" component_secret = "your-jibri-component-secret"
重启Prosody容器:
docker-compose restart prosody
4. 配置Jicofo调度多Jibri实例
在docker-compose.yml的jicofo服务块中,添加所有Jibri实例的账号,让Jicofo识别并调度多实例:
environment: ... - JICOFO_JIBRI_BREWERY=JibriBrewery@internal.your-domain.com - JICOFO_JIBRI_USER=jibri1@auth.your-domain.com,jibri2@auth.your-domain.com - JICOFO_JIBRI_PASSWORD=your-jibri-password
重启Jicofo容器:
docker-compose restart jicofo
5. 验证配置
- 启动所有容器:
docker-compose up -d - 查看Jibri日志确认连接成功:
docker logs jibri1 - 同时启动多场会议录制,检查是否不再提示"jibri is busy"
注意事项
- 录制目录
./recordings需设置全局读写权限:chmod 777 ./recordings - 可根据宿主机资源(CPU、内存)继续添加更多Jibri实例,无理论上限
- 若容器间DNS解析正常,
PULSE_SERVER可直接使用容器名称(如tcp://jitsi-pulseaudio:4713)
内容的提问来源于stack exchange,提问作者Akila Peiris
相关产品推荐
相关产品推荐

