Rooms, Participants, and Tracks
参照元: LiveKit Agents Documentation ロードマップ: 学習ロードマップ
Room
LiveKit セッションを表すコンテナオブジェクト。
作成タイミング:
- サーバー API で明示的に作成
- 最初の Participant が join した瞬間に自動作成
最後の Participant が退出すると、少し遅延してから自動で閉じる。
管理は RoomServiceClient 経由でバックエンドから行う(作成・一覧・削除)。
stateDiagram-v2 [*] --> Active: API で明示作成 [*] --> Active: 最初の Participant が join(自動作成) Active --> Active: Participant が join / leave Active --> クローズ待ち: 最後の Participant が退出 クローズ待ち --> [*]: empty timeout 経過 → Room クローズ
State Sync メカニズム(後で深掘り): Room 内の Participant は、他の Participant の変化(Track の追加・削除・mute など)を全員が受け取る。 これが LiveKit のリアルタイム体験を支える根幹の仕組み。
Participant
Room に参加するエンティティ。全ての参加者(人間・AI・電話・録画プロセスも)が同じ Participant として扱われる。
SDK 上の2クラス
| クラス | 説明 |
|---|---|
LocalParticipant | 自分自身。Track の publish 主体 |
RemoteParticipant | それ以外の全員。デフォルトで全 Track を subscribe できる |
Participant の kind(種別)
| kind | 説明 |
|---|---|
| STANDARD | 普通のエンドユーザー |
| AGENT | Agents Framework で作った AI エージェント |
| SIP | 電話ユーザー(固定電話・IP電話) |
| EGRESS | 録画・配信用サーバープロセス |
| INGRESS | 外部メディアを取り込むサーバープロセス |
identity vs sid
identity= 開発者が設定する識別子(例: “koei”, “agent-001”)。Room 内で一意sid= LiveKit サーバーが自動生成する UID。同じ人が再 join するたびに新しい sid が振られる
→ identity は「誰か」、sid は「この接続セッション」を指す
権限管理
2タイミングで設定できる:
- join 前: Access Token 生成時に初期権限を埋め込む
- join 後:
UpdateParticipantAPI でリアルタイムに変更(例: 聴衆 → 発言者への昇格)
管理方法
RoomServiceClient= バックエンドサーバーから管理(kick・mute・権限変更など)- SDK の
LocalParticipant= クライアント/エージェントが自分自身を操作
特殊な Participant の種類
Hidden Participant:
hidden = true に設定すると他の Participant から見えなくなる。サーバープロセスなどに使う。
Linked Participant(後で深掘り): エージェントは一度に1人の Participant としか対話できない。その対象を Linked Participant と呼ぶ。
重要な API
ListParticipants/GetParticipant— 一覧・詳細取得UpdateParticipant— 権限・メタデータ・属性の変更MoveParticipant— 別 Room への移動(LiveKit Cloud のみ)ForwardParticipant— 複数 Room へのトラック共有(LiveKit Cloud のみ)RemoveParticipant— 強制切断
Track
Participant 間を流れるメディアストリーム(音声・映像・データ)。
Track と TrackPublication の違い
| 説明 | |
|---|---|
TrackPublication | 「誰かがこの Track を publish している」というメタデータ。subscribe していなくても存在する |
Track | 実際に再生できるメディアストリーム本体(WebRTC MediaStreamTrack のラッパー) |
関係性:
graph LR TP["TrackPublication\n──────────────\nメタ情報・常に全員に見える\n(subscribe不要)"] T["Track\n──────────────\nメディア実体\n(subscribe した人だけ)"] Null["track = null\n(subscribe していない人)"] TP -->|".track(subscribeあり)"| T TP -.->|".track(subscribeなし)"| Null
具体例:
Aさんがカメラをオンにした → 全員に TrackPublication が通知される
→ subscribe した人だけ .track に実際の映像が入る
→ subscribe していない人は「Aさんが配信している」という情報だけ持つ
→ 「誰が何を publish しているか」は subscribe なしに知れる。実際に見る・聴くには subscribe が必要。
Track の種類(source)
| source | 内容 |
|---|---|
| Camera | カメラ映像 |
| Microphone | マイク音声 |
| ScreenShare | 画面共有映像 |
| ScreenShareAudio | 画面共有音声 |
| Data | 任意データ(テキスト・JSON・バイナリ) |
autoSubscribe
デフォルト true。join した瞬間、Room 内の全 Track を自動 subscribe し始める。
細かく制御したい場合は false にして selective subscription を使う。
Mute vs Unpublish
Mute を優先しろ。 Track の publish には WebRTC のネゴシエーションフェーズが必要でコストが高い。 一時的に止めたいだけなら mute の方が効率的(再開も速い)。
Webhooks & Events
→ Webhooks and Events に詳細をまとめた。