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

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-pulseaudio
    
    (jitsi-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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:22:35