> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.meetstream.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.meetstream.ai/_mcp/server.

# Diarization Explained

> How MeetStream attributes meeting speech to speakers: platform-level stream isolation on Zoom, Meet, and Teams versus provider-level diarization in transcripts, and when to use which.

"Diarization" answers one question: **who said what?** MeetStream gives you two independent layers of it — pick per use case, or combine them.

## Layer 1: platform-level stream capture

The bot captures speaker-attributed audio directly from the meeting platform. Isolation quality depends on what each platform exposes:

| Platform        | Isolation                                                    | How                                                          |
| --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| Zoom            | **Full** — each file contains only that speaker's microphone | Zoom SDK provides a dedicated raw PCM stream per participant |
| Google Meet     | Partial — speaker-attributed capture                         | Up to 3 concurrent speaker streams via WebRTC CSRC demuxing  |
| Microsoft Teams | Partial — speaker-attributed capture                         | Browser-bot stream capture, same model as Meet               |

This layer powers [per-participant audio files](/guides/transcription-recordings/per-participant-audio), the [speaker timeline](/guides/features/participants-and-speaker-timeline) (byte-level who-spoke-when), and the speaker-tagged frames of [real-time audio streaming](/guides/websockets/real-time-audio-streaming) — attribution comes from the platform's own identity, not from acoustic guessing.

## Layer 2: provider diarization in transcripts

Post-call transcription providers run their own diarization on the mixed recording and label the transcript:

| Provider                                                              | Diarization control | Default |
| --------------------------------------------------------------------- | ------------------- | ------- |
| [Deepgram](/guides/transcription-recordings/providers/deepgram)       | `diarize`           | on      |
| [AssemblyAI](/guides/transcription-recordings/providers/assemblyai)   | `speaker_labels`    | on      |
| [Sarvam](/guides/transcription-recordings/providers/sarvam)           | `with_diarization`  | on      |
| [JigsawStack](/guides/transcription-recordings/providers/jigsawstack) | `by_speaker`        | on      |

Formatted transcripts return segments as `{speaker, transcript, start_time, end_time, words[]}` with **per-word speaker attribution and confidence**.

## Which layer should I use?

* **Building voice AI / real-time coaching** → platform layer: live speaker-tagged frames, no transcription latency.
* **Readable meeting notes** → provider layer: diarized transcripts out of the box.
* **Compliance-grade attribution** → combine: the speaker timeline's platform IDs are ground truth; use them to verify or correct provider labels.
* **Cleanest per-speaker audio** → Zoom, where isolation is at the SDK level.