# Why do Vosk captions stop when several people speak in Jitsi?

> Older Jigasi builds can corrupt valid Vosk replies when participant sessions parse messages concurrently. Jigasi PR #647 fixes the shared parser, and Docker stable-11248 includes the fixed package, 1.1-415-g2750d54-1. Upgrade the running transcriber, then test captions from several speakers; restarting an older build does not install the fix. [S1][S2][S3][S9]

Source: https://jitsi.help/troubleshooting/vosk-captions-drop-several-speakers/
Updated: October 12, 2026
Publisher: Jitsi Help (https://jitsi.help/)

## Symptoms

Some speakers lose captions during a meeting with several speakers. The report was reproduced on Docker `stable-9955`, using Jigasi `1.1-369-gb80d3df`. These are the exact parsing lines from PR #647, including the valid JSON reply: [S1]

```text
SEVERE: VoskWebsocketStreamingSession.onMessage: Error parsing message: {
  "partial" : "the out for the ancient"
}
Unexpected character (") at position 29.
```

The report also includes these streaming-error fragments: [S1]

```text
SEVERE: VoskWebsocketStreamingSession.onError: Error while streaming audio data
        to transcription service
java.util.NoSuchElementException
  at VoskTranscriptionService.onMessageInternal(VoskTranscriptionService.java:286)
```

Your timestamp, text and source line number can differ. The useful clue is a parsing failure on a valid Vosk response while multiple participant sessions are active. Not every meeting with several people necessarily reproduces the race. [S1][S2]

## Cause

Older `VoskTranscriptionService` code used one `JSONParser` for multiple participant sessions. Jetty can deliver their WebSocket callbacks concurrently. Each parse changes the parser's internal state, so another callback can overwrite it mid-parse. Valid JSON can then fail, or results can contain another participant's text, as the contributor's stress test reported. [S1][S2]

The merged fix uses `ThreadLocal<JSONParser>` and calls `jsonParser.get().parse(msg)`. This gives each callback thread its own parser. It is a Jigasi code fix, with no new Vosk model or configuration setting required. [S2]

PR #647 merged on September 11, 2026, as commit `2750d54`. The official September 14 `stable-11248` Jigasi image build installed `1.1-415-g2750d54-1` for both `linux/amd64` and `linux/arm64`. The previous stable Docker release was `stable-11146-2`, published August 17, before the fix. `stable-11248` is therefore the first stable Docker release containing it, and remained the latest when checked on October 12, 2026. [S1][S3][S4]

The Jitsi stable APT repository also offers `1.1-415-g2750d54-1`. The web changelog records Jitsi Meet `2.0.11248`, but does not list this Jigasi fix. The package index and image build logs establish the transcriber version directly. [S3][S5][S6]

## Fix

1. **Docker, existing Vosk transcription installations: check the running service.** Run this from your Docker deployment directory. The stock service is `transcriber`, using the Jigasi image. Include every overlay you normally deploy in the helper. If your custom setup runs transcription in a service named `jigasi`, use that name in the service-specific commands. [S7][S8]

   ```sh
   dc() {
       docker compose -f docker-compose.yml -f transcriber.yml "$@"
   }
   dc images transcriber
   dc exec -T transcriber dpkg-query -W -f='${Version}\n' jigasi
   dc logs --tail=200 transcriber
   ```

   Image inspection, execution and log options are documented by Docker; the package query reads the installed version inside the running container. Save the error context before replacing it. [S10][S11]

2. **Docker, upgrade to `stable-11248`: update the release files and images together.** Follow the handbook's updating section to replace the Compose files with those from the release. Keep your existing `.env`, credentials and configuration. When upgrading from before `stable-11146`, follow its rootless directory migration too, including writable storage directories for UID 1000. [S7]

   Set this existing image selector in `.env`: [S8]

   ```ini
   JITSI_IMAGE_VERSION=stable-11248
   ```

   Then run the helper from step 1 during a maintenance window: [S9][S10]

   ```sh
   dc config --images
   dc pull
   dc up -d
   dc images
   dc exec -T transcriber dpkg-query -W -f='${Version}\n' jigasi
   ```

   Check that every Jitsi component uses `stable-11248`. Your separate Vosk image has its own version. `pull` downloads images; `up -d` recreates services whose images or configuration changed. A restart of an old container alone does not replace its image. [S8][S9][S10]

3. **Debian/Ubuntu packages, Jigasi before the fix: upgrade Jigasi itself.** These commands assume the official Jitsi stable APT repository is already configured. Check its candidate before installing. At the research date, the confirmed fixed candidate was `1.1-415-g2750d54-1`. [S5][S12][S13]

   ```sh
   dpkg-query -W -f='${Version}\n' jigasi
   sudo apt-get update
   apt-cache policy jigasi
   sudo apt-get install --only-upgrade jigasi
   sudo systemctl restart jigasi
   dpkg-query -W -f='${Version}\n' jigasi
   systemctl is-active jigasi
   ```

   Use your normal package configuration review during the upgrade. The service is named `jigasi`; restarting it ensures the process loads the updated code. An OS release name alone does not establish which Jigasi build is running. [S11][S13][S14]

No confirmed configuration-only workaround was supplied in PR #647. Treat reducing simultaneous speakers or restarting old Jigasi as unverified mitigation, not a substitute for upgrading. Use the existing [Vosk setup guide](/guides/jitsi-transcription-vosk/) for backend configuration. [S1][S2]

## Verify

For Docker after step 2, the installed-package command must print exactly this version for the build verified here. The same output applies to packages after step 3: [S3][S5][S11]

```text
1.1-415-g2750d54-1
```

On package installations, `systemctl is-active jigasi` should print `active`. That confirms service state, not successful captions. [S14]

For both install types, run a fresh test meeting on `meet.example.com`. Have several participants speak, including overlapping speech, and confirm captions continue for each person. Check that the reproduced test produces no new parsing or streaming errors shown above. This is a proposed functional test, not a load test performed by jitsi.help. The upstream contributor's parser stress test was clean after the change. [S1][S2]

## If it still fails

**Docker `stable-11248`:** follow the transcriber log while repeating the test: [S7][S10]

```sh
dc logs --since=10m --follow transcriber
```

**Debian/Ubuntu, fixed package:** the upstream unit redirects application output to `/var/log/jitsi/jigasi.log`. Read that file for parsing errors; the journal is useful for service startup failures. Custom units can change logging, so inspect the actual unit if this file stays empty. [S15][S16][S17]

```sh
sudo tail -n 200 /var/log/jitsi/jigasi.log
systemctl cat jigasi
sudo journalctl -u jigasi -n 100 --no-pager
```

Recheck every transcriber instance's installed package. For a custom build, verify it contains commit `2750d54`; a reassuring image name alone is insufficient evidence. In the released Vosk class, `Error to send websocket request for participant ` and `Error to finalize websocket connection for participant ` are distinct send/finalization log prefixes. Investigate those separately rather than treating every WebSocket error as this parser race. [S2][S11]

Use [transcription not working](/troubleshooting/jitsi-transcription-not-working/) for setup failures. If you need help gathering evidence across several instances, our [transcription service](/services/jitsi-transcription/) covers that investigation.

## FAQ

### Does stable-11248 include the Vosk parser fix?

Yes. Its official Jigasi image build installed `1.1-415-g2750d54-1` on both supported build architectures. That package's commit is the merged PR #647 fix. [S1][S3]

### Does Unexpected character mean Vosk sent invalid JSON?

Not necessarily. The reported reply was valid JSON; concurrent callbacks corrupted the shared parser's state. Genuine invalid responses still need investigation after installing the fix. [S1][S2]

### Will restarting Jigasi solve it?

A restart does not add the missing code to an older container or package. Install the fixed build and recreate the container or restart the upgraded package service. [S2][S9][S14]

### Is this the same as Jigasi running out of memory?

This page covers the parser race fixed by PR #647. The [Jigasi memory troubleshooting page](/troubleshooting/jigasi-out-of-memory/) covers a separate investigation; this parser change does not establish that all resource or connection-lifecycle problems are fixed. [S2]

## Sources

[S1] [Jigasi PR #647](https://github.com/jitsi/jigasi/pull/647), merged 2026-09-11, community production report and maintainer-approved repository fix.

[S2] [Released VoskTranscriptionService.java](https://github.com/jitsi/jigasi/blob/2750d5448271a7a421cb28a914970a4383127380/src/main/java/org/jitsi/jigasi/transcription/VoskTranscriptionService.java), 2026-09-11, source code.

[S3] [stable-11248 Jigasi image build](https://github.com/jitsi/docker-jitsi-meet/actions/runs/34847486800/job/103989057148), 2026-09-14, official repository build log; package installation verified through GitHub's authenticated log download.

[S4] [Docker releases](https://github.com/jitsi/docker-jitsi-meet/releases), checked 2026-10-12, release notes.

[S5] [Jitsi stable package index](https://download.jitsi.org/stable/Packages), checked 2026-10-12, official repository metadata.

[S6] [Jitsi web changelog](https://github.com/jitsi/jitsi-meet-release-notes/blob/master/CHANGELOG-WEB.md), 2026-09-14 release, release notes.

[S7] [Docker handbook](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker/), checked 2026-10-12, official doc.

[S8] [stable-11248 transcriber.yml](https://github.com/jitsi/docker-jitsi-meet/blob/stable-11248/transcriber.yml), 2026-09-14 release, source code.

[S9] Docker [pull](https://docs.docker.com/reference/cli/docker/compose/pull/) and [up](https://docs.docker.com/reference/cli/docker/compose/up/), checked 2026-10-12, official docs.

[S10] Docker [images](https://docs.docker.com/reference/cli/docker/compose/images/), [config](https://docs.docker.com/reference/cli/docker/compose/config/), [exec](https://docs.docker.com/reference/cli/docker/compose/exec/) and [logs](https://docs.docker.com/reference/cli/docker/compose/logs/), checked 2026-10-12, official docs.

[S11] [dpkg-query](https://manpages.debian.org/bookworm/dpkg/dpkg-query.1.en.html), checked 2026-10-12, official Debian manual.

[S12] [Debian/Ubuntu handbook](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart/), checked 2026-10-12, official doc.

[S13] [apt-get](https://manpages.debian.org/bookworm/apt/apt-get.8.en.html) and [apt-cache](https://manpages.debian.org/bookworm/apt/apt-cache.8.en.html), checked 2026-10-12, official Debian manuals.

[S14] [systemctl](https://manpages.debian.org/bookworm/systemd/systemctl.1.en.html), checked 2026-10-12, official Debian manual.

[S15] [Jigasi package service unit](https://github.com/jitsi/jigasi/blob/2750d5448271a7a421cb28a914970a4383127380/debian/jigasi.service), 2026-09-11, source code.

[S16] [tail](https://manpages.debian.org/bookworm/coreutils/tail.1.en.html), checked 2026-10-12, official Debian manual.

[S17] [journalctl](https://manpages.debian.org/bookworm/systemd/journalctl.1.en.html), checked 2026-10-12, official Debian manual.

## Open questions

We did not reproduce the concurrency failure or run a sustained multi-speaker test on a real server. PR #647 does not establish a failure probability or participant threshold. Independently built images need their own package/code verification. No reliable pre-upgrade workaround was confirmed. [S1][S2]

---

Jitsi Help is an independent service. It is not affiliated with, endorsed by or sponsored by 8x8, Inc. or the Jitsi project. Jitsi and Jitsi Meet are trademarks of 8x8, Inc., used here only to describe the software we host and support.
