このプロジェクトは、WebRTC SFU「mediasoup」を外部プログラムから操作するためのAPIを提供します。mediasoupサーバーをラップし、WebSocketを通じて外部プログラムからの指示を受け付けることができます。
外部アプリケーション <--WebSocket--> Takos-Call API サーバー <--> mediasoup
- 外部アプリケーション: コントロール命令を送信
- Takos-Call API: WebSocketでコマンドを受信し、mediasoupを操作
- mediasoup: 実際のWebRTC処理を担当
WebSocketで接続します。
ws://[サーバーアドレス]:[ポート番号]/takos-api
すべてのメッセージはJSONフォーマットで送受信されます。
{
"type": "コマンド名",
"id": "メッセージID",
"data": {
// コマンド固有のパラメータ
}
}
{
"type": "createRoom",
"id": "msg-001",
"data": {
"roomId": "room-xyz",
"options": {
"maxPeers": 10,
"codecs": [...],
...
}
}
}
{
"type": "addPeer",
"id": "msg-002",
"data": {
"roomId": "room-xyz",
"peerId": "peer-123",
"options": {
...
}
}
}
{
"type": "createTransport",
"id": "msg-003",
"data": {
"roomId": "room-xyz",
"peerId": "peer-123",
"direction": "send", // "send" または "recv"
"options": {
...
}
}
}
{
"type": "createProducer",
"id": "msg-004",
"data": {
"roomId": "room-xyz",
"peerId": "peer-123",
"transportId": "transport-abc",
"kind": "audio", // "audio" または "video"
"rtpParameters": {
...
}
}
}
{
"type": "createConsumer",
"id": "msg-005",
"data": {
"roomId": "room-xyz",
"peerId": "peer-123",
"transportId": "transport-def",
"producerId": "producer-xyz",
"rtpCapabilities": {
...
}
}
}
{
"type": "removePeer",
"id": "msg-006",
"data": {
"roomId": "room-xyz",
"peerId": "peer-123"
}
}
{
"type": "response",
"id": "msg-001", // リクエストと同じID
"success": true,
"data": {
// レスポンス固有のデータ
}
}
{
"type": "response",
"id": "msg-001", // リクエストと同じID
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "エラーメッセージ"
}
}
- WebSocket接続にはAPIキーによる認証を実装
- 特定IPアドレスからのみ接続を許可する機能
- SSL/TLS暗号化による通信の保護
- Node.jsベースのサーバー実装
- mediasoupラッパーの作成
- WebSocketサーバーの実装
- 認証とセキュリティ対策の実装
- サンプルクライアントの作成
- mediasoup
- ws (WebSocketライブラリ)
- express (オプション: HTTP API用)
- dotenv (環境変数管理)