契約
LSPは主催者、コース、車、セッション、テレメトリ、車載ステージを名付ける。組織内のコースを購読する。複数の車が送る。製品はその車をイベントとして受ける。
LapsHub Live
LapsHub Liveの契約名。主催者 → コース → 車 → セッション。ライブテレメトリと低遅延車載。Live APIでその上に作る。Hosted Pit Wallは同じプロトコル上の任意UI。
主催者スコープ · デザインパートナー · 実行前の仕様
LapsHub Streaming Protocolはサーキットストリームの言語。新しいバイナリ形式ではない。チーム、配信者、連携先がLSPを話す。Live APIはその上にセッション、ストリームアクセス、メーターを足す。
Organization
└── Track (subscribe: all org cars on this circuit)
└── Car
└── Session
├── Telemetry events
└── Stage (onboard) → publish / watch access
LSPは主催者、コース、車、セッション、テレメトリ、車載ステージを名付ける。組織内のコースを購読する。複数の車が送る。製品はその車をイベントとして受ける。
Kafkaや生のIoTはバイトを運ぶ。どの主催者、コース、車、セッションがライブか、いつ車載を開くかは名付けない。その対応がLSP。
作るために買うもの。セッション制御、ストリームアクセス、利用メーター。ピットウォール、オーバーレイ、シリーズアプリ、配信はあなたのもの。
同じプロトコル上の任意の公式UI。完成画面が欲しいなら、同じLiveバックエンドのHosted Pit Wall。
テレメトリ源をMQTTでつなぐ。GraphQLでセッションを開き、短寿命の認証を発行し、デバイス、ロガー、ブリッジからJSONエンベロープを送る。
主催者の carId と trackId で createLiveSession を呼ぶ。コース上の車ごとにライブセッションは一つ。
role: PUBLISH で createTelemetryCredentials を呼ぶ。Live APIは endpoint、clientId、topicPublish、expiresAt を返す。
デバイスはTLSで mqtts://live-mqtt.lapshub.com:8883 に接続し、テレメトリエンベロープを topicPublish へ送る。1メッセージ最大50ポイント。
LapsHub device、ブリッジ経由のRaceBox / Dragy、CAN/GPSロガー、MQTTクライアントを動かしてJSONを出せるスタック。
MQTT上のJSON、application/json。必須: v、orgId、trackId、carId、少なくとも ts を含む points[]。任意: lat、lon、speedMps、headingDeg、lap、名前付き channels(rpm、throttleなど)。
あなたのコース上の、主催者の車。公開ドライバーアプリへのタップではない。
mutation {
createLiveSession(input: { carId: "car_42", trackId: "track_ra" }) {
id
status
}
}
mutation {
createTelemetryCredentials(
sessionId: "sess_1"
input: { role: PUBLISH, ttlSeconds: 3600 }
) {
endpoint
clientId
topicPublish
expiresAt
}
}
{
"endpoint": "mqtts://live-mqtt.lapshub.com:8883",
"clientId": "lh_org_1_car_42_sess_1",
"topicPublish": "live/org_1/track_ra/car_42/telemetry",
"expiresAt": "2026-08-17T19:00:00.000Z"
}
予定ブローカー: mqtts://live-mqtt.lapshub.com:8883(プレビュー、未稼働)。認証は短寿命。期限前に更新。デバイスがMQTTを動かせないときの二次手段がHTTPSバッチ。高HzのGPSとCANはMQTT推奨。スキーマ: asyncapi-telemetry-v1.yaml。
組織内のコースを購読する。出した車はそのトラックストリームへリアルタイムでイベントを送る。createTelemetryCredentials で role: SUBSCRIBE または BOTH。
Subscribe (your org, one circuit):
live/{orgId}/{trackId}/+/telemetry
Publish (one car):
live/{orgId}/{trackId}/{carId}/telemetry
Live APIは短寿命の送受信アクセスを出す。ストリームクライアントが使えないときの二次手段がHTTPSバッチ。
エンベロープ一つにポイントが一つ以上。スキーマ v: 1。デザインパートナー向けの全フィールド: asyncapi-telemetry-v1.yaml。
{
"v": 1,
"orgId": "org_1",
"trackId": "track_ra",
"carId": "car_42",
"sessionId": "sess_1",
"points": [
{
"ts": "2026-08-17T18:00:00.000Z",
"lat": 43.798,
"lon": -87.992,
"speedMps": 42.1,
"headingDeg": 187.2,
"lap": 3,
"channels": { "rpm": 6120, "throttle": 0.82 }
}
]
}
高Hzの車データは制御APIではなくMQTT。デバイスは車トピックへ送り、ピットウォールとオーバーレイはトラックのワイルドカードを購読。接続と送信は デバイス連携。
車やロガーは live/{orgId}/{trackId}/{carId}/telemetry へ送る。
ピットウォール、オーバーレイ、配信スタックは live/{orgId}/{trackId}/+/telemetry を購読し、そのコースの主催者の車をすべて受ける。
高HzのGPSポイントをセッションAPIに流さない。あの呼び出しはセッションとアクセスを開く。ポイントを運ぶのはストリーム。
Live APIでセッションを開き、ストリームと視聴アクセスを出し、利用量を読む。プロトコルはそれらの意味を名付ける。回線の形はデザインパートナーレビュー中。
組織内のコース上の車のライブセッションを開閉する。
短寿命の送信、購読、視聴アクセス。視聴アクセスは誰かが見ている間だけ。
メーターは送信時間、視聴時間、受理したテレメトリ量を報告する。
mutation {
createLiveSession(input: { carId: "car_42", trackId: "track_ra" }) {
id
status
}
}
Subscribe (your org, one circuit):
live/{orgId}/{trackId}/+/telemetry
Publish (one car):
live/{orgId}/{trackId}/{carId}/telemetry
GraphQLはセッションとステージを開く。MQTTがライブの車データを運ぶ。WebRTCが車載を運ぶ。GraphQLはライブGPSバスではない。
観客向けの低遅延車載(2秒未満目標)。誰かが見ている間だけステージを開き、自前スタックからYouTube、Twitch、TV、会場スクリーンへ乗せる。
車/セッションのステージを開始し、カメラから車載を送る。
視聴アクセスは短寿命で課金対象。誰かが見ている間だけ開く。
ライブバックエンドはこちら。YouTube、Twitch、TV、オーバーレイ、自社配信への届け方はあなた。
利用量として数えるもの。パイロット価格はデザインパートナーと決める。
video.publisher送信側が接続している間の参加秒。
video.subscriber視聴者が接続している間の参加秒。
telemetry.message受理したテレメトリイベントまたはバッチ項目の数。
デザインパートナーとの構成レビュー用。実行エンドポイントはまだ一般提供ではありません。公開前に仕様が変わることがあります。
デザインパートナーアクセスを申請。製品、配信、ピットウォールを教えてください。セッション、テレメトリ、車載ステージをロードマップに載せます。
デザインパートナー向け。完成画面なら Hosted Pit Wall。ドライバー向けアプリなら 無料ダウンロード。