N Air Substreamは、N Airアプリケーションから複数の配信サービスへ同時配信するための拡張機能(OBSプラグイン)です。名前付きパイプを使用したJSON形式の通信によって、N Airからのコマンドに応じてストリーミング配信の開始・停止などを制御します。
- 複数の配信サービスへの同時配信
- エンコーダータイプの列挙
- ストリーミングの開始・停止
- ストリーミング状態の監視
- エラーハンドリングとステータス管理
- Visual Studio 2019以上(C++開発環境)
-
リポジトリをクローン
git clone https://github.com/user/nair-substream.git cd nair-substream -
Visual Studioでソリューションを開く
start nair-substream.sln -
ビルド設定を「Release」に変更し、ビルドを実行
または、コマンドラインからビルド:
# MSBuildをフルパスで実行 & "C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\amd64\MSBuild.exe" nair-substream.sln /p:Configuration=Release /p:Platform=x64 # または、MSBuildをPATHに追加してから実行 $env:Path += ";C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\amd64" msbuild nair-substream.sln /p:Configuration=Release /p:Platform=x64
-
ビルド成果物を配置
copy .\x64\Release\nair-substream.dll n-air-app\node_modules\obs-studio-node\obs-plugins\64bit\
このプラグインはN Airアプリケーションと連携して動作します。N Airの設定画面から「サブストリーム設定」を選択し、追加の配信先を設定してください。
プラグインは名前付きパイプ(\\.\pipe\NAirSubstream)を使用してN Airアプリケーションと通信します。JSONフォーマットでコマンドを送受信します。
-
デリミタ: 改行文字 (
\n) で区切られたJSON -
エンコーディング: UTF-8
-
リクエスト形式:
{"id": "unique-id", "fn": "function-name", "arg": {...}}\n -
レスポンス形式:
{"id": "unique-id", "res": {...}}\n
重要: 送信側は必ず各JSONメッセージの末尾に改行文字 (\n) を付けて送信してください。改行がないとプラグイン側でメッセージを認識できません。
リクエスト:
{"id": "1", "fn": "enumEncoderTypes", "arg": {}}\nレスポンス:
{
"id": "1",
"res": {
"encoders": {
"audio": [{"id": "...", "name": "..."}],
"video": [{"id": "...", "name": "..."}]
}
}
}\nリクエスト:
{
"id": "2",
"fn": "start",
"arg": {
"output": {...},
"service": {...},
"videoId": "obs_x264",
"video": {...},
"audioId": "ffmpeg_aac",
"audio": {...}
}
}\nレスポンス:
{"id": "2", "res": {"result": "OK"}}\nまたは、エラー時:
{"id": "2", "res": {"error": "エラーメッセージ"}}\nリクエスト:
{"id": "3", "fn": "stop", "arg": {}}\nレスポンス:
{"id": "3", "res": {"result": "OK"}}\nリクエスト:
{"id": "4", "fn": "status", "arg": {}}\nレスポンス:
{
"id": "4",
"res": {
"active": true,
"status": "started",
"error": "",
"busy": false,
"streaming": true,
"duration": 120,
"connectTime": 1234,
"bytes": 1048576,
"frames": 3600,
"congestion": 0.0,
"dropped": 0
}
}\nステータス値:
starting- ストリーミング開始処理中started- ストリーミング配信中stopping- ストリーミング停止処理中stopped- ストリーミング停止reconnect- 再接続試行中reconnected- 再接続成功deactive- 非アクティブ化
リクエスト:
{"id": "5", "fn": "info", "arg": {}}\nレスポンス:
{"id": "5", "res": {"version": "1.0.0", "process": 12345}}\n