Add files present in zh-CN but missing from ja-JP: - commands: claw, context-budget, devfleet, docs, projects, prompt-optimize, rules-distill (7 files) - skills: regex-vs-llm-structured-text, remotion-video-creation, repo-scan, research-ops, returns-reverse-logistics, rules-distill, rust-patterns, rust-testing, skill-comply, skill-stocktake, social-graph-ranker, swift-actor-persistence, swift-concurrency-6-2, swift-protocol-di-testing, swiftui-patterns, team-builder, terminal-ops, token-budget-advisor, ui-demo, unified-notifications-ops, video-editing, videodb (+reference/*), visa-doc-translate, workspace-surface-audit, x-api (37 files) Result: ja-JP now has 517 files vs zh-CN 412 files. zh-CN parity: 0 missing files (complete parity achieved).
6.6 KiB
キャプチャガイド
概要
VideoDB CaptureはAI処理機能を備えたリアルタイムの画面とオーディオの録画をサポートする。デスクトップキャプチャは現在macOSのみサポートされている。
コードレベルの詳細(SDKメソッド、イベント構造、AIパイプライン)については capture-reference.md を参照。
クイックスタート
- WebSocketリスナーを起動する:
python scripts/ws_listener.py --clear & - キャプチャコードを実行する(以下の完全なキャプチャワークフローを参照)
- イベントの書き込み先:
/tmp/videodb_events.jsonl
完全なキャプチャワークフロー
WebhookやポーリングLiveEventは不要。WebSocketがセッションライフサイクルイベントを含むすべてのイベントを配信する。
重要な注意事項:
CaptureClientはキャプチャ全体を通じて実行し続ける必要がある。ローカルレコーダーバイナリを実行し、画面/オーディオデータをVideoDBにストリーミングする。CaptureClientを作成したPythonプロセスが終了すると、レコーダーバイナリが終了し、キャプチャが静かに停止する。常にキャプチャコードを長期実行バックグラウンドプロセスとして実行し(例:nohup python capture_script.py &)、明示的に停止するまで生き続けるようにシグナル処理(asyncio.Event+SIGINT/SIGTERM)を使用すること。
-
バックグラウンドでWebSocketリスナーを起動する。古いイベントをクリアするために
--clearフラグを使用する。WebSocket IDファイルが作成されるまで待つ。 -
WebSocket IDを読み取る。このIDはキャプチャセッションとAIパイプラインに必要。
-
キャプチャセッションを作成する。デスクトップクライアント用のクライアントトークンを生成する。
-
トークンを使用してCaptureClientを初期化する。マイクと画面キャプチャの権限をリクエストする。
-
チャネルをリストアップして選択する(マイク、ディスプレイ、システムオーディオ)。ビデオとして永続化したいチャネルに
store = Trueを設定する。 -
選択したチャネルでセッションを開始する。
-
capture_session.activeが見えるまでイベントを読み取ることでセッションがアクティブになるまで待つ。このイベントにはrtstreams配列が含まれる。セッション情報(セッションID、RTStream ID)をファイルに保存する(例:/tmp/videodb_capture_info.json)。他のスクリプトがそれを読み取れるようにする。 -
プロセスを生かし続ける。明示的に停止されるまでプロセスをブロックするために、
SIGINT/SIGTERMのシグナルハンドラーでasyncio.Eventを使用する。後でkill $(cat /tmp/videodb_capture_pid)でプロセスを停止できるようにPIDファイルを書く(例:/tmp/videodb_capture_pid)。PIDファイルは実行のたびに上書きして、再実行時に常に正しいPIDを持つようにする。 -
各RTStreamの音声インデックスとビジュアルインデックスを作成するAIパイプラインを起動する(別のコマンド/スクリプトで)。保存されたセッション情報ファイルからRTStream IDを読み取る。
-
ユースケースに応じてリアルタイムイベントを読み取るカスタムイベント処理ロジックを書く(別のコマンド/スクリプトで)。例:
visual_indexが「Slack」を言及したときにSlackアクティビティをログに記録するaudio_indexイベントが到着したときに議論をサマリーするtranscriptに特定のキーワードが現れたときにアラートをトリガーする- 画面の説明からアプリの使用状況を追跡する
-
キャプチャを停止する - 完了したら、キャプチャプロセスにSIGTERMを送信する。シグナルハンドラーで
client.stop_capture()とclient.shutdown()を呼び出すべき。 -
エクスポートを待つ -
capture_session.exportedが見えるまでイベントを読み取る。このイベントにはexported_video_id、stream_url、player_urlが含まれる。キャプチャを停止した後、これには数秒かかる場合がある。 -
WebSocketリスナーを停止する - エクスポートイベントを受信したら、
kill $(cat /tmp/videodb_ws_pid)でクリーンに終了させる。
シャットダウンシーケンス
すべてのイベントがキャプチャされることを確認するために、適切なシャットダウンシーケンスが重要:
- キャプチャセッションを停止する —
client.stop_capture()次にclient.shutdown() - エクスポートイベントを待つ —
capture_session.exportedを/tmp/videodb_events.jsonlでポーリングする - WebSocketリスナーを停止する —
kill $(cat /tmp/videodb_ws_pid)
エクスポートイベントを受信する前にWebSocketリスナーを停止しないこと。そうしないと最終的なビデオURLを受け取れなくなる。
スクリプト
| スクリプト | 説明 |
|---|---|
scripts/ws_listener.py |
WebSocketイベントリスナー(JSONLにダンプ) |
ws_listener.pyの使用方法
# Start listener in background (append to existing events)
python scripts/ws_listener.py &
# Start listener with clear (new session, clears old events)
python scripts/ws_listener.py --clear &
# Custom output directory
python scripts/ws_listener.py --clear /path/to/events &
# Stop the listener
kill $(cat /tmp/videodb_ws_pid)
オプション:
--clear:起動前にイベントファイルをクリアする。新しいキャプチャセッションを開始するときに使用する。
出力ファイル:
videodb_events.jsonl- すべてのWebSocketイベントvideodb_ws_id- WebSocket接続ID(ws_connection_idパラメータに使用)videodb_ws_pid- プロセスID(リスナーの停止に使用)
機能:
- 接続が切れた場合の指数バックオフによる自動再接続
- SIGINT/SIGTERMでのグレースフルシャットダウン
- プロセス管理のためのPIDファイル
- 接続状態のログ記録