Bedrud には、会議ルームに参加してメディアコンテンツをストリーミングできる Python ベースの Bot エージェントが含まれています。BGM、ラジオストリーム、ビデオコンテンツの共有に便利です。
利用可能なエージェント
| エージェント | 説明 | メディアタイプ |
|---|---|---|
music_agent | ルームにオーディオファイルを再生 | オーディオ(PCM) |
radio_agent | インターネットラジオ局をストリーミング | オーディオ(FFmpeg 経由 PCM) |
video_stream_agent | ビデオコンテンツ(HLS、MP4)を共有 | ビデオ + オーディオ |
エージェントの動作原理
すべてのエージェントは同じ接続パターンに従います。
flowchart TD
A[1. Parse meeting URL] --> B[2. Guest login<br/>POST /api/auth/guest-login]
B --> C[3. Join room<br/>POST /api/room/join]
C --> D[4. Connect to LiveKit<br/>WebSocket + Token]
D --> E[5. Publish tracks<br/>Stream audio/video frames]flowchart LR
subgraph Media["Media Source"]
MS["File / URL<br/>(MP3, radio, HLS, MP4)"]
end
subgraph Agent["Python Agent"]
FF[FFmpeg Decoder]
PA[Agent Logic]
end
subgraph Server["Bedrud Server"]
GL[Guest Login<br/>/api/auth/guest-login]
JR[Join Room<br/>/api/room/join]
end
subgraph LK["LiveKit SFU<br/>(WebRTC)"]
WS[WebSocket Connect]
PT[Publish Tracks]
end
MS --> FF --> PA
PA --> GL
GL --> JR
JR --> WS
WS --> PTMusic エージェント
オーディオファイル(MP3、WAV など)を会議ルームに再生します。
セットアップ
cd agents/music_agent
pip install -r requirements.txt依存関係: httpx、livekit、pydub
使い方
python agent.py "https://meet.example.com/m/room-name"動作の仕組み
pydubを使用してオーディオファイルをデコード- PCM フレームに変換
- オーディオフレームをマイクトラックとして LiveKit にパブリッシュ
セットアップと使い方の詳細は Music Agent README を参照してください。
Radio エージェント
FFmpeg を使用してオーディオをデコードし、インターネットラジオ局を会議ルームにストリーミングします。
セットアップ
cd agents/radio_agent
pip install -r requirements.txt依存関係: httpx、livekit
システム要件: FFmpeg がインストールされている必要があります(brew install ffmpeg または apt install ffmpeg)
使い方
python agent.py "https://meet.example.com/m/room-name"動作の仕組み
- ラジオストリーム URL に接続
- ストリームを FFmpeg にパイプして raw PCM にデコード
- PCM オーディオフレームを LiveKit にパブリッシュ
セットアップと使い方の詳細は Radio Agent README を参照してください。
Video Stream エージェント
URL(HLS/m3u8、MP4)からビデオとオーディオを会議ルームに共有します。
セットアップ
cd agents/video_stream_agent
pip install -r requirements.txt依存関係: httpx、livekit
システム要件: FFmpeg がインストールされている必要があります
使い方
python agent.py "https://meet.example.com/m/room-name"動作の仕組み
- 2つの FFmpeg プロセスを並列で実行:
- ビデオ: YUV420p の raw フレームにデコード(1280x720 @ 30fps)
- オーディオ: PCM サンプルにデコード
- ビデオを画面共有トラックとしてパブリッシュ
- オーディオをマイクトラックとしてパブリッシュ
セットアップと使い方の詳細は Video Stream Agent README を参照してください。
ビデオ仕様
| 設定 | 値 |
|---|---|
| 幅 | 1280 |
| 高さ | 720 |
| FPS | 30 |
| ピクセルフォーマット | YUV420p |
カスタムエージェントの作成
新しいエージェントを作成するには、以下のパターンに従います。
import httpx
from livekit import rtc
# 1. Parse the meeting URL to extract room name
room_name = parse_url(meeting_url)
# 2. Guest login
client = httpx.Client(base_url=server_url)
resp = client.post("/api/auth/guest-login", json={"name": "Bot Name"})
token = resp.json()["token"]
# 3. Join room
client.headers["Authorization"] = f"Bearer {token}"
resp = client.post("/api/room/join", json={"roomName": room_name})
lk_token = resp.json()["token"]
# 4. Connect to LiveKit
room = rtc.Room()
await room.connect(livekit_url, lk_token)
# 5. Publish tracks
source = rtc.AudioSource(sample_rate=48000, num_channels=1)
track = rtc.LocalAudioTrack.create_audio_track("audio", source)
await room.local_participant.publish_track(track)
# 6. Stream frames
while has_data:
frame = get_next_frame()
await source.capture_frame(frame)関連項目
- Music Agent README - セットアップと使い方
- Radio Agent README - セットアップと使い方
- Video Stream Agent README - セットアップと使い方