CamStreamerアプリケーションAPIに関する包括的な技術ドキュメント。認証ワークフロー、エンドポイント仕様、データモデル、および統合のベストプラクティスを含みます。
CamStreamer アプリ 4.x API
APIライセンスについてはこちら
CamStreamer アプリ 4.x アプリケーションのインストールとライセンス認証が完了すれば、API を使用して機能を制御できます。以下にはいくつかのパラメータが記載されています。パラメータを変更するたびに、CamStreamer アプリおよび配信が再起動される点にご注意ください。
Postman または Insomnia 用のAPIリクエスト例をダウンロードできます ダウンロードはこちら
CamStreamer グローバルパラメータ
以下の呼び出しを使用すると、複数のグローバルパラメータを一度に取得または設定できます:
http://IPADDR[:PORT]/local/camstreamer/param/set.cgi?PARAMNAME=PARAMVALUE[&PARAMNAME=PARAMVALUE]
どこで参照出来るか?
IPADDR[:PORT] は IPアドレスです:カメラのポート 例. 192.168.1.5:80PARAMNAME 以下に挙げるパラメータのいずれかの名前です。PARAMVALUE CamStreamerアプリに保存する値です。 値に含まれる特殊文字はurlエンコードする必要があります。 以下参照 URL encoding
http://IPADDR[:PORT]/local/camstreamer/param/get.cgi?list=PARAMNAME[,PARAMNAME]
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5:80PARAMNAME は、以下に挙げるパラメータのいずれかの名前です。
CamStreamerアプリでは、StreamListパラメータJSON配列を設定するか、よりシンプルなHTTP APIを使用することで、複数の出力ストリームを直接設定することができます。
パラメータ LiveLED (バージョン 3.8.2まで利用可能)
カメラのLEDインジケーターを点灯させます。ストリームが確立されている場合は点灯します。CamStreamerアプリが動画を配信できなくなると、LEDは消灯します。 有効な値: 0, 1
ストリームパラメータ
以下のHTTP API呼び出しは、すべてのストリームを一覧表示します。
http://IPADDR[:PORT]/local/camstreamer/stream/list.cgi?action=get
以下のPOST API呼び出しは、CamStreamerアプリのJSON設定全体を更新します。
http://IPADDR[:PORT]/local/camstreamer/stream/list.cgi?action=set
以下の set.cgi HTTP API 呼び出しを使用して、ストリームを追加または更新できます。API で追加されたストリームは、CamStreamer アプリのユーザーインターフェースには表示されない点にご注意ください。YouTube で配信を開始したい場合は、YouTube Live Streaming APIをご利用ください。
http://IPADDR[:PORT]/local/camstreamer/stream/set.cgi?stream_id=STREAMID&PARAMNAME=PARAMVALUE[&PARAMNAME=PARAMVALUE]
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5STREAMID ストリーム識別子(文字列)です。 指定された stream_id が存在しない場合は、新しいストリームが作成されます。stream_id が存在する場合は、現在のストリームが更新されます。API 向けには、「api」という接頭辞が付いた識別子が割り当てられています。 PARAMNAME 以下に列挙するストリームパラメータのいずれかの名前です。PARAMVALUE ストリームに保存する値です。 値に含まれる特殊文字はurlエンコードする必要があります。 以下参照 URL エンコーディング
以下の get.cgi HTTP API 呼び出しにより、ストリームパラメータを取得できます。
http://IPADDR[:PORT]/local/camstreamer/stream/get.cgi?stream_id=STREAMID
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5STREAMID ストリーム識別子
以下の remove.cgi HTTP API 呼び出しにより、ストリームを削除できます。
http://IPADDR[:PORT]/local/camstreamer/stream/remove.cgi?stream_id=STREAMID
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5STREAMID ストリーム識別子
パラメータ enabled
“Enabled”パラメータを使って配信を停止または開始します。.有効な値: 0, 1
パラメータ mediaServerUrl
有効な値 (選択したプロトコル用):
RTMP
rtmp://[user:pass@]server:port[/app][/stream_name]
MPEG-TS TCP
tcp://server:port
MPEG-TS UDP
udp://server:port[?pkt_size=XXX&ttl=XXX]
HLS PULL
hls://
HLS ストリームはこちらで利用可能です http://IPADDR:PORT/local/camstreamer/SIGNATURE/live.m3u8
どこで:IPADDR カメラのIP アドレスです。SIGNATURE 署名を取得します http://IPADDR:PORT/local/camstreamer/param/get.cgi?list=signature
HLS PUSH
ftp://your_ftp_server/live.m3u8
SRT
Mode Caller (push): srt://:port
Mode Listener (pull): srt://server:port
“Enabled”パラメータを使ってストリームを停止または開始出来ます. 有効な値: 0, 1
パラメータ inputType
どのタイプのリソースを使用するのか定義します。
CRS RTSPカメラストリームを使ってCSw CamSwitcherアプリストームを使うRTSP_URL 外部RTSPストリームを使う
パラメータ inputUrlEXPERIMENTAL
inputType が外部 RTSPストリーム(RTSP_URL).として選択されていると、ストリーミングに使用します。
重要: HLSプレイリストには、internalVapixParameters または userVapixParameters 内に resolution および videomaxbitrate パラメータが必要です。
例:
{
"3577": {
"enabled": "1",
"active": "1",
"audioSource": "default",
"avSyncMsec": "0",
"internalVapixParameters": "resolution=1920x1080&videomaxbitrate=3000",
"userVapixParameters": "",
"outputParameters": " -hls_time 2 -hls_list_size 5 -hls_wrap 10 ",
"outputType": "video",
"mediaServerUrl": "hls://",
"inputType": "RTSP_URL",
"inputUrl": "rtsp://root:[email protected]/axis-media/media.amp?audio=1&video=1&resolution=1920x1080",
"forceStereo": "0",
"streamDelay": "",
"statusLed": "1",
"statusPort": "",
"callApi": "0",
"trigger": "none",
"schedule": "[]",
"prepareAhead": "0",
"startTime": "0",
"stopTime": "0"
}
}
パラメータ userVapixParameters
デフォルトの動画パラメータを上書きします。パラメータ詳細を参照。例えば、パラメータ camera=2&resolution=1280x720&overlaypos=200%2C600を使用して異なるカメラや表示領域を選択出来ます。
パラメータ audioSource
音声チャンネルを指定します。利用可能な値:
none 音声チャンネルを無効にする。default カメラからの音声チャンネルを使用 (例、マイク./ライン入力), CamSwitcher アプリまたは外部URLからの音声 ( inputType パラメータ内で選択されている場合)file: FILEPATH カメラのファイルシステム(例:SDカード)上の音声ファイル FILEPATH (mka/mp3) を使用してください。
音声なしでカメラからYouTubeに配信したい場合は、以下の設定を使用してください:「audioSource=file:/usr/local/packages/camstreamer/tools/silence.mka」 url: URL 外部(ネットワーク)オーディオソースを使用する(AACまたはMP3形式)。 例:インターネットラジオ、別のカメラ、またはAxis P8221オーディオエンコーダーなど。Axisデバイスの場合: rtsp://root:password@IPaddress/axis-media/media.amp?audio=1&video=0 オーディオのサンプリングレートを44.1KHz、ビットレートを128Kbpsに設定してください。外部オーディオが利用できない場合、CamStreamerアプリはストリーミングを行いません。
パラメータ avSyncMsec
音声/動画チャンネルの時間オフセット(ミリ秒単位)
パラメータ active
ストリームを一時停止 – ストリームは再生されませんが、他のすべての処理は実行中です。callApi における典型的な API サーバー呼び出し – アプリケーションがサーバー API を呼び出します(YouTube でのストリームの作成と終了)。
パラメータ trigger
自動化のタイプを決定します。
none 自動化オフinputX (X is the input number) 指定されたカメラ入力がアクティブな場合にのみ、ストリームが有効になりますtime ストリームは、時間間隔(startTime / stopTime パラメータ)に基づいて有効になりますrecurrent ストリームは、タイムスケジュール(スケジュールパラメータ)に基づいて有効になります
パラメータ schedule
これは定期的なトリガーにのみ適用され、スケジュールはJSON形式で指定されます。スケジュールにはスケジュールの間隔の配列が含まれており、日(day)は0~6の範囲の数値(月曜日は0)、時刻(time)はHH:MM:SS形式の文字列で指定されます。YouTubeでの予定されたイベント間の間隔は、少なくとも15分以上確保する必要があります。設定が不適切な場合、正常に動作しない可能性があります。
例:
2つの時間帯:月曜日 8:00~9:30、火曜日 10:00~水曜日 10:00
[{ "day_from": 0, "day_to": 0, "time_from": "08:00:00", "time_to": "09:30:00" },
{ "day_from": 1, "day_to": 2, "time_from": "10:00:00", "time_to": "10:00:00" }]
パラメータ prepareAhead
(開始時間のみ) – 指定された秒数の間、開始時間前にストリームを準備します(APIを呼び出し、ストリームを開始します)。
パラメータ startTime
(トリガー時刻のみ) – ストリームの開始時刻を表すUnixタイムスタンプ。
パラメータ stopTime
(トリガー時刻のみ) – ストリームの終了時刻を表すUnixタイムスタンプ。
パラメータ statusLed
ストリーミング配信の準備中および配信中の照明として、カメラのLEDを点滅させます。同じLEDが複数の配信で使用されている場合、最後の配信が開始された後にLEDが点灯します。 有効な値: 0, 1
パラメータ statusPort
カメラ出力をLEDダイオードで有効化し、放送準備中は点滅させ、配信中は常時点灯させます。
複数のストリームで同じ出力を使用する場合、最後のストリームが開始された後にLEDが点灯します。有効な値:出力を持つカメラポートの数。
特定のストリームの最新のステータスを取得する
以下のリクエストでストリームの状態を取得してください。
http://IPADDR[:PORT]/local/camstreamer/get_streamstat.cgi?stream_id=X
ここで X は、お使いのストリームのストリーム ID のことです。
返信:
{"status": 200, "message": "OK", "data": {"net_stats":"110779840 1107300413","stream_bytes_time_ms":1600092179717,"stream_bytes":568335,"start_count":1,"is_streaming":1}}
現在のYouTubeライブ配信を取得する
視聴者を現在の放送にリダイレクトしてください。
https://camstreamer.com/yt-broadcast-api/SECTOKEN/CSID
CamStreamerアプリのユーザーインターフェースにおける「固定リンク」では、SECTOKENとCSIDが使用されます。なお、別のYouTubeチャンネルを使用するとSECTOKENは変更される点にご注意ください。
2021年6月より、SECTOKENおよびCSIDは固定リンク内の固有ハッシュに置き換えられます(この日付以降に作成されたストリーム対象)。 このような新しいストリームには、SECTOKEN/CSIDの組み合わせではなく、ハッシュ(例:dccZkIw35I5xnZ3k650rMuvk5HuvP123456abCd)を使用してください。
例:
https://camstreamer.com/yt-broadcast-api/b7133489237eee1/S-78
https://camstreamer.com/yt-broadcast-api/dccZkIw35I5xnZ3k650rMuvk5HuvP123456abCd
返信:
{"broadcast_id":"XCIfaGvbXSs"}
YouTubeライブ配信の状況
YouTubeの配信がライブかどうかを確認し、監視システムから情報を取得します。NagiosやCentreonなどの監視システムとの連携に最適です。
https://camstreamer.com/api/youtubeStatus/SECTOKEN/CSID
SECTOKEN と CSID は、CamStreamer アプリのユーザーインターフェースにある「固定リンク」で使用されます。SECTOKEN は、別の YouTube チャンネルを使用すると変更されることにご注意ください。
レスポンス HTTP コード:
- 200 ストリーム ok
- 404 ストリームが見つかりません、または不正なセキュリティトークンです
- 400 ストリームが確認されていません
- 400 ストリームが中断されました
特定のカメラの詳細情報を含むストリームの一覧を取得する
ウェブサイト上でスケジュールされたストリームの一覧とそのパーマネントリンクを表示する必要がある場合、この GraphQL アプリケーションインターフェースを利用できます。
ストリームの一覧を取得するには、この POSTコールを使ってください:
https://camstreamer.com/api/Stream/graphql
APIキー経由の権限:
キー: Authorization
値: cameraLicenseKey
例:

シリアル番号とライセンスコード(認証時と同じ)による照会
query {
GetStreamInfoList(
licenseCode: "CS-JYUHJDU6I3ABCDEFGHIJ",
serialNumber: "B8A44F0ABCDEF"
) {
streamId
title
streamType
description
platformType
cameraTimezone
startTime
stopTime
previewLink
resolution
}
}
URLエンコードされた固定リンク付きレスポンス:
{
"data": {
"GetStreamInfoList": [
{
"streamId": 36,
"title": "Title of one-time event",
"streamType": "onetime",
"description": "My description",
"platformType": "youtube",
"cameraTimezone": "Europe\/Berlin",
"startTime": 1677840720,
"stopTime": 1677844365,
"previewLink": "https%3A%2F%2Fcamstreamer.com%2Fredirect%2FyA8T7AyGg23PrXJNI9zqZDr"
}
]
}
}
実用例
新しいストリームを作成する際は、CamStreamerアプリで作成されたIDとは異なるIDを使用してください。当アプリケーションは10以上の整数を使用します。「api_01」のようなプレフィックスを付けてください。YouTubeストリームはAPI経由で制御可能ですが、YouTube認証はまずユーザーインターフェース経由で実行する必要があります。
カメラが配信するには、以下の条件を満たす必要があります: パラメータ enabled = 1, パラメータ active = 1 と、 パラメータ trigger = none または自動化が有効であること(入力オンまたは正しい時間間隔))
新規ノンストップRTMP ストリームの作成/変更
パラメータ:
"enabled":"1",
"audioSource":"default",
"mediaServerUrl":"rtmp:\/\/a.rtmp.youtube.com\/live2\/rfp-test-2926.q9yk-3wv0-4zzg-78ks"
以下のset.cgi HTTP API呼び出しにより、ストリームのパラメータを変更できます。
http://IPADDR[:PORT]/local/camstreamer/stream/set.cgi?stream_id=STREAMID&enabled=1&audioSource=default&mediaServerUrl=rtmp://a.rtmp.youtube.com/live/rfp-test-2926.q9yk-3wv0-4zzg-78ks
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5STREAMID ストリーム識別子 (文字列). 指定された stream_id が存在しない場合は、新しいストリームが作成されます。stream_id が存在する場合は、現在のストリームが更新されます。API 向けには、「api」という接頭辞が付いた識別子が割り当てられています。
RTMP ストリームの停止
パラメータ:
"enabled":"0"
以下のset.cgi HTTP API呼び出しでストリームを停止できます。
http://IPADDR[:PORT]/local/camstreamer/stream/set.cgi?stream_id=1057&enabled=0
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5STREAMID ストリーム識別子 (文字列). 指定された stream_id が存在しない場合は、新しいストリームが作成されます。stream_id が存在する場合は、現在のストリームが更新されます。API 向けには、「api」という接頭辞が付いた識別子が割り当てられています。
ボタン1を押して新しいRTMPストリームの作成/変更
パラメータ:
"enabled":"1",
"audioSource":"default",
"trigger":"input0",
"mediaServerUrl":"rtmp:\/\/a.rtmp.youtube.com\/live2\/rfp-test-2926.q9yk-3wv0-4zzg-78ks"
音声パラメータ:
– マイク使用時は”デフォルト”
– カメラに音声がない場合、音声が必要なYouTubeなどへ配信したいときは、音声用にこのURLエンコード値を使用してください:「file:/usr/local/packages/camstreamer/tools/silence.mka」
以下のset.cgi HTTP API呼び出しにより、ストリームを作成/変更できます。
http://IPADDR[:PORT]/local/camstreamer/stream/set.cgi?stream_id=1057&enabled=1&audioSource=default&trigger=input0&mediaServerUrl=rtmp%3A%2F%2Fa.rtmp.youtube.com%2Flive2%2Frfp-test-2926.q9yk-3wv0-4zzg-78ks
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5STREAMID ストリーム識別子 (文字列). 指定された stream_id が存在しない場合は、新しいストリームが作成されます。stream_id が存在する場合は、現在のストリームが更新されます。API 向けには、「api」という接頭辞が付いた識別子が割り当てられています。
2019年3月4日 11:10 から 2019年3月4日 14:10 までの間に、新しいRTMPストリームの作成/変更が行われました(UTC+01)。
"enabled":"1",
"audioSource":"default",
"trigger":"time",
"startTime":"1551694200",
"stopTime":"1551705000",
"mediaServerUrl":"rtmp:\/\/a.rtmp.youtube.com\/live2\/rfp-test-2926.q9yk-3wv0-4zzg-78ks"
以下のset.cgi HTTP API呼び出しにより、ストリームを作成/変更できます。
http://IPADDR[:PORT]/local/camstreamer/stream/set.cgi?stream_id=1057&enabled=1&audioSource=default&trigger=time&startTime=1551694200&stopTime=1551705000&mediaServerUrl=rtmp%3A%2F%2Fa.rtmp.youtube.com%2Flive2%2Frfp-test-2926.q9yk-3wv0-4zzg-78ks
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5STREAMID ストリーム識別子 (文字列). 指定された stream_id が存在しない場合は、新しいストリームが作成されます。stream_id が存在する場合は、現在のストリームが更新されます。API 向けには、「api」という接頭辞が付いた識別子が割り当てられています。
CSt WebSocket API
WebSocket接続を経由して、ストリームの状況に関する情報を受信できます。
認証
WebSocket API用の認証トークンを取得します。このトークンは30秒間、または最初の接続が行われるまでの間のみ有効です。
リクエスト:
http://USER:PASS@IPADDR[:PORT]/local/camstreamer/api/ws_authorization.cgi
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: pass
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
返信:
{ "status": 200, "message": "YZWG1nBG7HtRc8Owy61P",}
CSt WebSocketへの接続
最初のメッセージとして認証を使用する必要があります。認証が成功すると、初期化データが送信されます。認証に失敗した場合は、WebSocketが遮断されます。
使用されたプロトコル (Sec-WebSocket-Protocol) events
WebSocket アドレス:
wss://IPADDR[:PORT]/local/camstreamer/events
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
リクエスト:
{
"authorization": "80aXr8Vm0iFZl3Rlo2tR"
}
返信:
{
"type": "authorization",
"state": "OK"
}
初期化データを送信するにはユーザーは下記をリクエストします。
リクエスト:
{
"command": "sendInitData"
}
返信:
{"type":"init","data":{"type":"StreamState","streamID":"117930","enabled":0,"active":1,"automationState":1,"isStreaming":0}}
{"type":"init","data":{"type":"PortChanged","port":0, "value":0}}
CStイベントの種類
StreamState – 属性: type,streamID, enabled, active, automationState, isStreameing
{
"type": "StreamState",
"streamID": "117930",
"enabled": 0,
"active": 1,
"automationState": 1,
"isStreaming": 0
}
CS_API_SUCCESS – 属性: type, streamID, apiCall, message
{
"type": "CS_API_SUCCESS",
"streamID": "117930",
"apiCall": "startBroadcast",
"message": "Broadcast started."
}
PortChanged – 属性: type, port, value
{
"type": "init",
"data": {
"type": "PortChanged",
"port": 0,
"value": 0
}
}
CamOverlay アプリ 3.x and 4.x
CamOverlayアプリ は、Axis Application Platform(ACAP)上のカメラ内で動作するアプリケーションです。以下に、このアプリケーションのAPIに関する情報を掲載しています。また、アプリケーションのユーザーインターフェースにあるAPI のヒント. から、APIのサンプルを直接確認することもできます。各グラフィックウィジェットの設定画面の上部には、最も一般的で有用なAPI呼び出しの例が表示されています。

1つの動画チャンネルにつき4つ以上のアクティブなサービスが稼働していると、Axisオーバーレイと競合する可能性がある点にご注意ください。また、安全な範囲内にとどめるため、すべての動画チャンネルを合わせて最大8つのサービスまでとすることを推奨します。さらに、InfoTickerでのスクロールテキストなど、アニメーションを伴うサービスを多数使用している場合は、カメラへの負荷にもご注意ください。
送信ストリームへのオーバーレイの割り当て方法:
SDK3/SDK4 (FW 12.5以下)を使ったアプリケーション – オーバーレイは、選択した解像度において指定した位置に配置されます。これらは、同じ動画チャンネルからのすべての配信ストリームに表示され、拡大縮小されることはありません。常に固定された位置に表示されます。ウィジェットの有無にかかわらず複数のストリームを使用する場合は、カメラ設定で新しいビューエリアを作成してください(PTZカメラでは利用できません)。
SDK12 (FW 12.5 以上)を使ったアプリケーション – オーバーレイは、各グラフィックウィジェットに対して設定された解像度および動画チャンネルに一致するストリームでのみ表示されます。
同じウィジェットを複数の解像度で表示するには、解像度ごとに個別のウィジェットを作成する必要があります(元のウィジェットをコピーし、目的の解像度を選択してください)。
APIライセンスについてはこちら
PostmanおよびInsomnia向けのサンプルAPIリクエストはこちらからダウンロードできます
CamOverlay グローバルパラメータ
CamOverlayアプリの機能は、アプリケーションのインストールとライセンス取得が完了すれば、APIを使用して管理できます。以下にいくつかのパラメータを説明します。HTTP呼び出しにより、すべてのパラメータを一覧表示することも、単一のパラメータのみを取得することも可能です:
http://IPADDR[:PORT]/axis-cgi/param.cgi?action=list&group=CamOverlay[.PARAMNAME]
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5PARAMNAME いずれかのパラメータ名です。
カメラへのHTTPリクエストを使用して、どのパラメータでも変更できます:
http://IPADDR[:PORT]/axis-cgi/param.cgi?action=update&CamOverlay.PARAMNAME=PARAMVALUE
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5PARAMNAME 以下に挙げるパラメータのいずれかの名前です。PARAMVALUE CamOverlayアプリに保存する値です。 値に含まれる特殊文字は urlエンコーディング する必要があります。参照 URL エンコーディング
有効なパラメータ
カメラの動画配信におけるすべてのオーバーレイを開始または停止します. 有効な値: 0, 1
サービスの設定概要を取得かつ変更する
オーバーレイオブジェクト
すべてのオーバーレイには、6つの必須パラメータが必要です:
id オーバーレイを一意に識別するための番号です。enabled 動画配信でオーバーレイを開始または停止します。カメラの制限により、同時に有効にできるオーバーレイは2つまでです! automationType オーバーレイの表示方法を設定します。 (自動化セクションを参照)schedule オーバーレイの有効化/無効化を行うためのスケジュールです。name オーバーレイタイプです。 有効な値: 画像、カスタムグラフィックス、PTZコンパス、 infoticker, 画面共有、 pip, accuweather cameraList 選択した動画チャンネルにグラフィックを割り当てます。有効な値:0、1、2…
(バージョン2.1.14までは、 cameras のみで使用され、1つのチャンネルのみをサポートしていましたが、バージョン2.1.15以降では、このパラメータとの下位互換性が確保されています)
サービスの設定を取得
以下のGETリクエストを実行することで、JSON形式のオーバーレイサービスのすべての設定を取得できます。基本構造には、オーバーレイオブジェクトを含む配列「services」が含まれています。
http://USER:PASS@IPADDR[:PORT]/local/camoverlay/api/services.cgi?action=get
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: passIPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
取得したものの例:
{
"services": [
{
"id": 1,
"enabled": 1,
"automationType": "manual",
"cameraList": [
0
],
"schedule": "",
"name": "infoticker",
"customName": "",
"showClock": 1,
"clockType": "24h",
"textColor": "0,0,0,1",
"bgColor": "255,255,255,1",
"weatherLocation": "",
"weatherLocationName": "",
"weatherLang": "en-us",
"weatherUnits": "Metric",
"numberOfLines": 1,
"switchingTime": 5,
"crawlLeft": false,
"crawlSpeed": 1,
"coordSystem": "bottom",
"pos_y": 0.05,
"width": 1920,
"height": 1080,
"zIndex": 0,
"font": "classic",
"fontSize": 40,
"sourceType": "text",
"source": "",
"chosen": false,
"selected": false
},
{
"id": 5,
"enabled": 1,
"automationType": "time",
"cameraList": [
0
],
"schedule": "",
"name": "images",
"customName": "",
"width": 1920,
"height": 1080,
"zIndex": 0,
"overlayList": [
{
"active": false,
"coordSystem": "top_left",
"pos_x": 10,
"pos_y": 10,
"imgPath": "",
"imgName": "",
"duration": 5,
"scale": 1
}
]
}
]
}
サービス設定の設定
サービス設定を更新したい場合は、 必ず POST コールを使ってください:
http://USER:PASS@IPADDR[:PORT]/local/camoverlay/api/services.cgi?action=set
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: passIPADDR[:PORT] IP アドレスです:カメラのポート. 例. 192.168.1.5.
GETリクエストの文字数制限は2048文字(Unicode)です。指定されたHTTPリクエストを通じて更新された情報は、カメラに常時保存されません。そのため、カメラを再起動するとデータが失われます。情報の損失を防ぐには、定期的にデータを更新するか、POSTリクエストを使用してJSON CamOverlay アプリの設定全体を更新する必要があります。 (下記セクション参照: サービス設定を設定)
自動化
自動化は属性 automationType によって設定され、以下の値をとることができます:manual – アプリのユーザーインターフェースまたはHTTPリクエスト(下記)による管理schedule – 週間スケジュールに基づいたオーバーレイの表示inputX – Xはカメラ入力の番号であり、入力1には番号0が割り当てられています (ゼロベース)
InvertInput
パラメータ invertInput は、ポートの状態に基づいてグラフィックスの有効化ロジックを反転させます。設定可能な値: true – ポートの状態が 1 のときにグラフィックスを有効にしますfalse – ポートの状態が 0 のときにグラフィックスを有効にします
特定のオーバーレイを表示/非表示にするためのHTTPリクエスト
例:
http://USER:PASS@IPADDR[:PORT]/local/camoverlay/api/enabled.cgi?SERVICE_ID=PARAMVALUE&SERVICE_ID=PARAMVALUE
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: passIPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5SERVICE_ID 変更したいオーバーレイサービスのIDであり、id_Xという形式で表記されます。Xはサービスの番号です。id_Xはname_myserviceに置き換えることができます。name_myservice=1と指定すると、「myservice」という名前のサービスが有効になります。PARAMVALUE 特定のオーバーレイを表示または非表示にします。有効な値: 0, 1
指定されたHTTPリクエストを通じて更新された情報は、カメラに常時保存されません。そのため、カメラを再起動するとデータが失われます。情報の損失を防ぐためには、定期的にデータを更新するか、POSTリクエストを使用してJSON CamOverlay アプリの設定全体を更新する必要があります。 (下記セクション参照: サービス設定の設定)
サービスパラメータ
画像パラメータ
width オーバーレイが設定されているストリームの範囲です。height オーバーレイが設定されているストリームの高さです。overlayList 画像オブジェクトの配列です。各画像オブジェクトには、位置や再生時間などのパラメータ(以下に一覧)が設定されています。
画像パラメータ
coordSystem これは、オフセットが計算される座標系の原点です。有効な値: top_left, top_right, bottom_left, bottom_right, left, right, top, bottom, centerpos_x 動画ストリームにおけるX軸方向のピクセル単位のオフセットです。。pos_y 動画ストリームにおけるY軸方向のピクセル単位のオフセットです。imgPath カメラのメモリに保存された画像へのパス、または画像のURLです。imgName ユーザーインターフェースにおける画像の識別子です。duration 動画ストリーム内に画像が表示される時間です。
スクリプター・オーバーレイ・パラメータ
Scripterは、WebSocket APIを使用して画像をレンダリングできる外部スクリプト向けのサービスです(以下のセクションを参照)。
identifier サービスを作成したスクリプトを識別するためのものです。
API サービス
カスタムグラフィック
テキストフィールド内のテキストを更新したり、テキストのバリエーションを切り替えたり、グラフィックの位置を変更したり、背景画像を変更したりすることができます。
指定されたHTTPリクエストを通じて更新された情報は、カメラに常時保存されません。そのため、カメラを再起動するとデータが失われます。情報の損失を防ぐためには、定期的にデータを更新するか、POSTリクエストを使用してJSON CamOverlay アプリの設定全体を更新する必要があります。 (下記セクション参照: サービス設定の設定)
指定されたHTTPリクエストを通じて更新された情報は、カメラに常時保存されません。そのため、カメラを再起動するとデータが失われます。情報の損失を防ぐためには、定期的にデータを更新するか、POSTリクエストを使用してJSON CamOverlay アプリの設定全体を更新する必要があります。 (下記セクション参照: サービス設定の設定)
テキストフィールド内のテキストと文字色を更新する
リクエストに応じて、テキストフィールドのテキストを更新します。条件:
a) フィールド名を識別子として使用してください
b) APIでは、テキストフィールドのバリエーションは0から番号が振られます (text1のインデックスは0です)
例:
http://USER:PASS@IPADDR[:PORT]/local/camoverlay/api/customGraphics.cgi?action=ACTION&service_id=SERVICE_ID&FIELD_NAME=YOUR_TEXT&FIELD_NAME_COLOR=FIELD_TEXT_COLOR[&FIELD_NAME=YOUR_TEXT]
または
http://USER:PASS@IPADDR[:PORT]/local/camoverlay/api/customGraphics.cgi?action=ACTION&service_id=SERVICE_ID&FIELD_NAME_INDEX=FIELD_INDEX_NUMBER
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: passIPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5ACTION このパラメータには2つの有効な値があります, update_text または update_image.SERVICE_ID 変更したいオーバーレイサービスのIDです。service_idは、各サービスで指定されたカスタム名を使用するservice_nameに置き換えることができます。FIELD_NAME デフォルト名または変更された名前の特定のテキストフィールドのIDです。YOUR_TEXT タイトルです.FIELD_NAME_COLOR デフォルト名または変更された名前の特定のテキストフィールドのIDです。 例. field1_color. FIELD_TEXT_COLOR これは、255255255 と定義される色、あるいはアルファチャンネル付きでは 255255255255 と定義される色です。FIELD_NAME_INDEX 特定のテキストフィールドのバリアントのIDです。例:field1_index。 FIELD_TEXT_NUMBER 特定のテキストフィールドのバリアントの番号です。例:text1の場合は0。
背景画像の修正
service_id と action を除き、すべてのパラメータは任意です
ストレージ内の画像の更新
curl -u USER:PASS -X POST --data-binary "@PATH_TO_THE_PICTURE" "http://IPADDR[:PORT]/local/camoverlay/api/customGraphics.cgi?action=update_image&service_id=SERVICE_ID"
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: passIPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5PATH_TO_THE_PICTURE 保存されている画像へのパス。SERVICE_ID 変更したいオーバーレイサービスのIDです。service_idは、各サービスで指定されたカスタム名を使用するservice_nameに置き換えることができます。
カメラの保存データから画像を更新する
http://USER:PASS@IPADDR[:PORT]/local/camoverlay/api/customGraphics.cgi?action=update_image&service_id=SERVICE_ID&image=PATH_TO_THE_PICTURE
画像の位置の更新
pos_x、pos_y、およびcoord_systemを組み合わせることができます
http://USER:PASS@IPADDR[:PORT]/local/camoverlay/api/customGraphics.cgi?action=update_image&service_id=SERVICE_ID&coord_system=COORDSYSTEM&pos_x=POSX&pos_y=POSY
どこで参照出来るか?
COORDSYSTEM これは、オフセットが計算される座標系の原点です。有効な値: top_left, top_right, bottom_left, bottom_right, left, right, top, bottom, centerPOSX 動画ストリームにおけるX軸方向のピクセル単位のオフセットです.POSY 動画ストリームにおけるY軸方向のピクセル単位のオフセットです。
Info Ticker
Info Tickerでは、テキストは、HTTP APIを呼び出すことで、動画ストリームに直接埋め込むことができます。
テキスト変換用のHTTP APIコール:
http://USER:PASS@IPADDR[:PORT]/local/camoverlay/api/infoticker.cgi?service_id=SERVICEID&text=YOUR_TEXT
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。 例. passIPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5SERVICEID 変更したいオーバーレイサービスのIDです。YOUR_TEXT タイトルです.
COv WebSocket API
WebSocket接続を介して、サービスのステータスや、サービスのオン/オフに関する情報を受け取ることができます。WebSocketはバージョン2.1.7以降で利用可能です。
認証
WebSocket API用の認証トークンを取得します。このトークンは30秒間、または最初の接続が行われるまでの間のみ有効です。
リクエスト:
http://USER:PASS@IPADDR[:PORT]/local/camoverlay/api/ws_authorization.cgi
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: pass
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
返信:
{
"status": 200,
"message": "YZWG1nBG7HtRc8Owy61P",
}
COv WebSocketへの接続
最初のメッセージとして認証を使用する必要があります。認証が成功すると、初期化データが送信されます。認証に失敗した場合は、WebSocketが閉じられます。
使用されたプロトコル (Sec-WebSocket-Protocol) events
WebSocket アドレス:
wss://IPADDR[:PORT]/local/camoverlay/service/ws
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
リクエスト:
{
"authorization": "80aXr8Vm0iFZl3Rlo2tR"
}
返信:
{
"type": "authorization",
"state": "OK"
}
初期化データを送信するにはユーザーは下記をリクエストします。
リクエスト:
{
"command": "sendInitData"
}
返信:
{
"type": "init",
"data": {
"type": "ServiceStart",
"serviceId": 2
}
}
COv イベントの種類
ServiceStart – 属性: type, serviceId
{"type":"ServiceStart","serviceId":2}
ServiceStop – 属性: type, serviceId
{"type":"ServiceStop","serviceId":2}
リアルタイムドローイング API
CamOverlay WebSocket API を使用すると、カメラ上で直接独自のグラフィックを描画することができます。この技術は、例えば CamScripter アプリにおいて、他のシステムとのカスタム連携に利用されています。この描画 API は、Cairo グラフィックライブラリ(https://cairographics.org/)をベースにしており、CamOverlay アプリで必要となるヘルプ関数や機能によって拡張されています。ただし、Cairoライブラリのすべての機能が実装されているわけではありません。実装されているのは一部の機能のみであり、必要に応じて将来的に拡張される予定です。WebSocketを介した通信はすべてJSON形式で行われます。クライアントはcall_idを含むコマンドを送信し、応答には常にコマンドを識別するための同じIDが含まれます。
例えば、コマンド送信で画像を作成することが出来ます。:
{"call_id": 0, "command": "cairo_image_surface_create", "params": ["CAIRO_FORMAT_ARGB32", 200, 200]}
返信:
{"var": "surface0", "call_id": 0}
変数名 `surface0` を使用すると、他の関数(例:`cairo_create(cairo_surface_t *target)`)からこの変数にアクセスできます。簡略化のため、CamScripter アプリ用に作成された CamStreamer node.js ライブラリ (こちら)。Tの使用をお勧めします。他にもいくつかの使用例があります。
現在実装されている Cairo 関数
Image Surfaces
cairo_image_surface_create(cairo_format_t format, int width, int height)
cairo_surface_write_to_png(cairo_surface_t *surface, const char *filename)
cairo_surface_destroy(cairo_surface_t *surface)
Paths
cairo_rectangle(cairo_t *cr, double x, double y, double width, double height)
cairo_move_to(cairo_t *cr, double x, double y)
cairo_line_to(cairo_t cr, double x, double y)
cairo_new_sub_path(cairo_t cr)
cairo_close_path()
cairo_arc(cairo_t *cr, double xc, double yc, double radius, double angle1, double angle2)
Cairo
cairo_create(cairo_surface_t *target)
cairo_destroy(cairo_t *cr)
cairo_save(cairo_t *cr)
cairo_restore(cairo_t *cr)
cairo_set_source_rgb(cairo_t *cr, double red, double green, double blue)
cairo_set_source_rgba(cairo_t *cr, double red, double green, double blue, double alpha)
cairo_fill(cairo_t *cr)
cairo_stroke(cairo_t *cr)
cairo_set_line_width(cairo_t *cr, double width)
cairo_surface_flush(cairo_surface_t *surface)
cairo_set_source_surface(cairo_t *cr, cairo_surface_t *surface, double x, double y)
cairo_paint(cairo_t *cr)
cairo_clip(cairo_t *cr)
cairo_reset_clip(cairo_t *cr)
Transformations
cairo_translate(cairo_t *cr, double tx, double ty)
cairo_scale(cairo_t *cr, double sx, double sy)
cairo_rotate(cairo_t *cr, double angle)
cairo_set_matrix(cairo_t *cr, const cairo_matrix_t *matrix)
cairo_get_matrix(cairo_t *cr, cairo_matrix_t *matrix)
cairo_identity_matrix(cairo_t *cr)
Text
cairo_show_text(cairo_t *cr, const char *utf8)
cairo_set_font_size(cairo_t *cr, double size)
cairo_text_extents(cairo_t *cr, const char *utf8, cairo_text_extents_t *extents)
cairo_set_font_face(cairo_t *cr, cairo_font_face_t *font_face)
Font
cairo_font_face_destroy(cairo_font_face_t *font_face)
拡張関数
write_text(cairo_t *cr, const char * text, const int x, const int y, const int width, const int height, const char *align, const char *textFitMethod)
指定した位置のボックスにテキストを入力しします x, y, width, height [px]. 配列は値の一部になります: A_LEFT, A_RIGHT, A_CENTER.
TextFitMethod options:
TFM_SCALE – 文字サイズは、ボックスの幅と高さに合わせて調整されます。
TFM_TRUNCATE – テキストのサイズは、ボックスの幅に合わせてトリミングされます。
TFM_OVERFLOW – テキストが枠からはみ出しています。
upload_image_data(const char * base64)
CamOverlayアプリに画像をアップロードし、その画像の変数名とサイズを返します。
upload_font_data(const char * base64)
CamOverlayアプリにフォントをアップロードし、変数名を返します。
matrix_destroy(cairo_matrix_t *matrix)
配列の割り当てられたメモリを解放します。
show_cairo_image_v2(cairo_surface_t *surface, const double x, const double y, const int * cameraList, const int zIndex)
CamOverlayアプリで、座標 (x, y) の位置に画像を表示します。座標は -1.0, -1.0(左上)から 1.0, 1.0(右下)の範囲です。画像は、cameraListで指定されたすべての動画チャンネルで、指定されたzIndexの値で表示されます。
非推奨:
remove_image(const int serviceID)
指定されたIDを持つCamOverlay アプリサービスの画像を削除します。
CamSwitcher アプリ 2.x API
CamSwitcher アプリ は、Axis Camera Application Platform(ACAP)上のカメラ内で動作するアプリケーションです。このアプリを使用すると、カメラのSDカードに保存された動画クリップを含め、最大5台のAXISネットワークカメラを切り替えることが可能です。また、ライブ配信への音声解説の追加や、2つの音声ソースのミキシングにも対応しています。 以下に、本アプリケーションのAPIに関する情報を掲載しています。また、アプリケーションのユーザーインターフェース内の「APIのヒント」から、APIのサンプルを直接確認することもできます。

ライブビューの切り替えは、手動で行うほか、あらかじめ定義されたプレイリストを使用して自動的に行うことも、APIコマンドでプログラムすることも可能です。マスターオーディオを選択するだけで、リアルタイムに単一の出力動画配信を生成できます。
CamSwitcherアプリは、ARTPEC-6プロセッサ以上を搭載したカメラにインストールする必要があります (互換性についてはこちら). その他のカメラ(追加の映像・音声ソースとして使用されるもの)には、少なくともメインH.264プロファイルに対応したARTPEC-5チップセットが必要です (チップセットを参照). また、お好みのストリーミングプラットフォームで動画を配信するには、CamStreamerアプリも必要となります。
HTTPリクエストで使用されるポートは、カメラのHTTPポートであり、デフォルトでは80です。変更していない場合は、ポートを指定する必要はありません。
APIライセンスについてはこちら
Postman またはrInsomnia 用のAPIリクエスト例をダウンロードできます ダウンロードはこちら
動画配信の RTSPリンクを取得する
動画へのアクセスは5分後に期限切れとなり、1回のみご利用いただけます。常時有効なRTSPリンクが必要な場合は、「一般設定」のUIから作成してご利用ください。
http://IPADDR[:PORT]/local/camswitcher/output_info.cgi
どこで参照出来るか?
IP アドレスです:カメラのポート。 例: IPADDR[:PORT]192.168.1.5:80
回答例:
{
"status": 200,
"message": "OK",
"data": {
"rtsp_url": "rtsp://127.0.0.1:1554/6da0c033531ad459e64cd9847e6c994014f4ef29afe3f46afeab82a222805200",
"ws": "ws://127.0.0.1/local/camswitcher/video",
"ws_initial_message": "{\"type\":\"ALIAS_NAME\", \"data\": \"6da0c033531ad459e64cd9847e6c994014f4ef29afe3f46afeab82a222805200\"}"
}
}
動画を再生するには、localhost の IP アドレスをカメラの実際の IP アドレスに置き換えてください。
有効なプレイリストの一覧を取得する
なお、CamSwitcherアプリでは、再生可能な各オブジェクトがプレイリストとして扱われます。これには、音声付きのカメラ、音声付きの動画クリップ、さらに複数の動画クリップや音声付きのカメラを含むプレイリストなどが含まれます。
例:
http://IPADDR[:PORT]/local/camswitcher/react/local/camswitcher/api/playlists.cgi?action=get
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
回答例:
{
"status": 200,
"message": "OK",
"data": {
"s4776be33-bcca-45a3-912b-e2840c6c06de": {
"niceName": "Video_clip",
"loop": false,
"isFavourite": false,
"stream_list": [{
"id": "78b12cf8-4d91-4e2c-a444-92e14543b8be",
"timeout": 0,
"repeat": 1,
"isTimeoutCustom": false,
"video": {
"clip_name": "s4776be33-bcca-45a3-912b-e2840c6c06de"
},
"audio": {
"clip_name": "s4776be33-bcca-45a3-912b-e2840c6c06de"
}
}],
"keyboard": {},
"channel": "av"
},
"cdb04b0cb-0c7b-4292-aa0f-7920eb73333e": {
"niceName": "V5925 - B8A44F009C1F",
"loop": false,
"isFavourite": false,
"stream_list": [{
"id": "dfe22a89-7e8d-40b2-a59c-f25c6226efb0",
"timeout": 0,
"repeat": 1,
"isTimeoutCustom": false,
"video": {
"stream_name": "cdb04b0cb-0c7b-4292-aa0f-7920eb73333e"
},
"audio": {
"clip_name": "sd2b03f67-31c7-40b2-99c1-5079dd0dab65"
}
}],
"keyboard": {},
"channel": "av"
}
}
}
プレイリストの名前は、パラメータの前に置かれる最初の文字列です。V5925カメラのプレイリスト名は cdb04b0cb-0c7b-4292-aa0f-7920eb73333e.
カメラのプレイリストには常に「c」という先頭文字が付いており、通常のプレイリストには常に「p」という先頭文字が付いています。
例:
カメラプレイリスト: c2585a341-2677-4d0f-864e- 63055fe17b6b
「True」プレイリスト: pbb1289ed-15e3-4487-a2d6- fecc80f9a4c0
特定のプレイリストを再生する
プレイリストの一覧を取得する方法について説明した前の例にあるプレイリスト名を使用してください。
例:
http://IPADDR[:PORT]/local/camswitcher/react/local/camswitcher/api/playlist_switch.cgi?playlist_name=PLAYLISTNAME
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
PLAYLISTNAME 音声と動画が混在する特定のプレイリストの名前、 e.g. cdb04b0cb-0c7b-4292-aa0f-7920eb73333e
キュー内のプレイリスト一覧を取得する
以下のリクエストを使用すると、再生待ちのキューにあるプレイリスト名を一覧表示できます。
例:
http://IPADDR[:PORT]/local/camswitcher/react/local/camswitcher/api/playlist_queue_list.cgi
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
特定のプレイリストをキューに追加する
現在のキューから特定のプレイリストを削除します。
http://IPADDR[:PORT]/local/camswitcher/react/local/camswitcher/api/playlist_queue_push.cgi?playlist_name=PLAYLISTNAME
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
PLAYLISTNAME 音声と動画が混在する特定のプレイリストの名前、 e.g. cdb04b0cb-0c7b-4292-aa0f-7920eb73333e
キューから次のプレイリストを再生する
現在のキューからキューから次のプレイリストを再生する。
例:
http://IPADDR[:PORT]/local/camswitcher/react/local/camswitcher/api/playlist_queue_play_next.cgi
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
プレイリストキューをクリアする
現在のプレイリストキューをクリアする
例:
http://IPADDR[:PORT]/local/camswitcher/react/local/camswitcher/api/playlist_queue_clear.cgi
プレイリストをすぐに切り替える
プレイリストを即座に切り替える。シーケンスと同様: playlist_queue_clear.cgi, playlist_queue_push.cgi, playlist_queue_play_next.cgi
例:
http://IPADDR[:PORT]/local/camswitcher/react/local/camswitcher/api/playlist_switch.cgi?playlist_name=PLAYLISTNAME
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
PLAYLISTNAME 音声と動画が混在する特定のプレイリストの名前、 e.g. cdb04b0cb-0c7b-4292-aa0f-7920eb73333e
利用可能なクリップ一覧を取得する
利用可能なクリップを確認することは、例えばマスター音声を切り替えたい場合などで、クリップ名を知る必要があるときに役立ちます。
http://IPADDR[:PORT]/local/camswitcher/react/local/camswitcher/api/clips.cgi?action=get
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
マスターオーディオ出力を変更する
以下の設定により、マスターオーディオ出力を変更できます。
マスター音源の設定:
{
"master_audio": {
"type": "NONE",
"stream_name": "",
"clip_name": ""
}
}
- type (string)
*– マスター音源の種類 (NONE/SILENCE/STREAM/CLIP) - stream_name (string) – ストリーム識別子 =
STREAM - clip_name (string) – クリップ識別子
マスター音源をクリップに変更した例:
http://IPADDR[:PORT]/axis-cgi/param.cgi?action=update&camswitcher.masterAudio={"type":"CLIP","clip_name":"CLIPNAME"}
マスター音源をストリームに変更した例:
http://IPADDR[:PORT]/axis-cgi/param.cgi?action=update&camswitcher.masterAudio={"type":"STREAM","stream_name":"STREAMNAME"}
再生中のソースの音声を優先するようにマスター音源を変更する例:
http://IPADDR[:PORT]/axis-cgi/param.cgi?action=update&camswitcher.masterAudio={"type":"NONE"}
マスター音源を消音に設定する例:
http://IPADDR[:PORT]/axis-cgi/param.cgi?action=update&camswitcher.masterAudio={"type":"SILENCE"}
現在設定されているマスター音源を取得する方法の例:
http://IPADDR[:PORT]/axis-cgi/param.cgi?action=list&group=camswitcher.masterAudio
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
CSw WebSocket API
WebSocket接続を通じて、CamSwitcherアプリ内のイベント情報やストリームの利用状況を受け取ることができます。
認証
WebSocket API用の認証トークンを取得します。このトークンの有効期間は30秒間、または最初の接続が行われるまでです。
リクエスト:
http://USER:PASS@IPADDR[:PORT]/local/camswitcher/api/ws_authorization.cgi
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: pass
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
返信:
{ "status": 200, "message": "YZWG1nBG7HtRc8Owy61P",}
WebSocketへの接続
最初のメッセージとして認証を使用する必要があります。認証が成功すると、初期化データが送信されます。認証に失敗した場合は、WebSocketが閉じられます。
使用されたプロトコル (Sec-WebSocket-Protocol) events
WebSocket アドレス:
wss://IPADDR[:PORT]/local/camswitcher/events
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
リクエスト:
{
"authorization": "80aXr8Vm0iFZl3Rlo2tR"
}
返信:
{
"type": "authorization",
"state": "OK"
}
以下の初期化データのリクエストを再送信します。
リクエスト:
{
"command": "sendInitData"
}
返信:
{"type":"init","data":{"type":"SwitcherStart","default_playlist_id":"c26b737ea-1178-4f9e-851c-479cbdd6e97d"}}
14:29:19
{"type":"init","data":{"playlist_active_stream":0,"stream_name":"c4f673956-99c5-4a92-8854-c369d1f7da27","playlist_name":"c4f673956-99c5-4a92-8854-c369d1f7da27","type":"StreamSwitchVideo"}}
14:29:19
{"type":"init","data":{"playlist_active_stream":0,"stream_name":"c4f673956-99c5-4a92-8854-c369d1f7da27","playlist_name":"c4f673956-99c5-4a92-8854-c369d1f7da27","type":"StreamSwitchAudio"}}
14:29:19
{"type":"init","data":{"type":"StreamAvailable","stream_name":"c4f673956-99c5-4a92-8854-c369d1f7da27","state":true}}
14:29:19
{"type":"init","data":{"type":"StreamAvailable","stream_name":"c26b737ea-1178-4f9e-851c-479cbdd6e97d","state":true}}
カメラのPTZ ポジションを変更する
PTZ変更には、AXIS APIを直接使用します。
例:
http://IPADDR[:PORT]/axis-cgi/com/ptz.cgi?camera=CAMERAID&gotoserverpresetname=PTZNAME
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
CAMERAID カメラの View Area のIDです。実際のPTZカメラを使用する場合は、値「1」を設定してください
PTZNAME これはPTZのポジション名であり、大文字と小文字が区別されます
CamScripter アプリ 2.x API
CamScripterアプリは、Axis Camera
Application Platform(ACAP)上のカメラ内部で動作するアプリケーションであり、すべてのCamStreamerアプリケーションを自動化することができます。以下に、このアプリケーションのAPIに関する情報を掲載しています。
CamScripterアプリは、インストールとライセンス認証が完了すれば、APIを使用してその機能を制御することができます。
注意事項
CamScripterアプリ用の独自のマイクロアプリケーションを作成する方法はこちら。
当ライブラリのドキュメントおよびアプリのサンプルは、GitHubでご覧いただけます。
APIライセンスについてはこちら
PostmanおよびInsomnia向けのサンプルAPIリクエストはこちらからダウンロードできます
CamScripterアプリ向けマイクロアプリのパッケージ形式
CamScripter パッケージは、マニフェスト、Node.js スクリプト、および UI 用静的ファイル(画像、フロントエンド用 JavaScript、CSS など)をすべて含む .zip ファイルです。
File manifest.json
各パッケージにはmanifest.json が必要です。 このファイルには、以下の属性を持つJSONオブジェクトが含まれています:
package_name, package_menu_name, package_version, vendor, required_camscripter_version, ui_link はUIにリンクしています (オプション)
Main script
各パッケージにはThe main.js iが必要です。 これは、パッケージの起動時に実行されるNode.jsスクリプトです。
環境変数
CamScripter アプリ 環境で実行されている各マイクロアプリケーションは、以下の変数にアクセスできます:
HTTP_PORT HTTP Proxyチャプターを参照HTTP_PORT_PUBLIC 権限のないproxyです。HTTP Proxyのチャプターを参照 INSTALL_PATHPERSISTENT_DATA_PATH フォルダ。これは長期保存用のデータに適しています。カメラの再起動やパッケージのアップグレード後も、すべてのデータは保存されます。 PACKAGE_NAME
Libs
必要なJavaScriptライブラリはすべて、パッケージに含まれている必要があります。
Package configuration
PackageConfigurations パラメータは、パッケージを有効または無効にするために使用されます。値は JSON 形式です。
例:
{"package_name":{"enabled": true}}
インストールパッケージ
基本的な cURL 使用方法:
curl --user USER:PASS -F file=PACKAGE_NAME http://IPADDR[:PORT]/local/camscripter/package/install.cgi
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: passIPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5PACKAGE_NAME お使いのコンピュータ上のパッケージ名です。 例. clock.zip
例:
curl --user root:pass -F [email protected] http://127.0.0.1:52520/local/camscripter/package/install.cgi
パッケージ削除
http://IPADDR[:PORT]/local/camscripter/package/remove.cgi?package_name=PACKAGE_NAME
どこで参照出来るか?
IP アドレスです:カメラのポート。 例: IPADDR[:PORT]192.168.1.5 削除したいパッケージ名です. 例. clock PACKAGE_NAME
http://127.0.0.1:52520/local/camscripter/package/remove.cgi?package_name=clock
インストールされているすべてのパッケージを表示する
http://IPADDR[:PORT]/local/camscripter/package/list.cgi
どこで参照出来るか?
IP アドレスです:カメラのポート。 例: IPADDR[:PORT]192.168.1.5
JSON形式でのリスト操作の応答例:
[{
"package_name": "doorController",
"package_menu_name": "Door Controller",
"package_version": "1.1.1",
"vendor": "Camstreamer s.r.o.",
"required_camscripter_version": "1.2.3",
"ui_link": "/local/camscripter/package/doorController/index.html"
}, {
"package_name": "clockAnalog",
"package_menu_name": "Analog Clock",
"package_version": "1.0.1",
"vendor": "Camstreamer s.r.o.",
"required_camscripter_version": "1.2.3",
"ui_link": "/local/camscripter/package/clockAnalog/index.html"
}]
アプリケーションの設定を設定または取得する
これは通常、パッケージのUIから使用されます。設定はJSON形式である必要があります。JSONは /package_name/localData/settings.json に保存され、パッケージのアップグレード時にも保持されます。新しい設定が行われた場合、パッケージにSIGINTシグナルが送信されます。
http://IPADDR[:PORT]/local/camscripter/package/settings.cgi
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
パラメータ:
PACKAGE_NAME パッケージ名です.ACTION アクションを指示する(set / get)。
HTTP Proxy
パッケージでAPIが必要な場合は、HTTPプロキシを使用してください。CamScripterアプリは、カメラのデフォルトHTTPサーバー宛てのすべてのHTTP(S)リクエストを、http(s)://IPADDR[:PORT]/local/camscripter/proxy/PACKAGE_NAME/* として、http(s)://127.0.0.1:PORT2/* に転送します。PORT2は環境変数として定義された一意の番号です。カメラのデフォルトのHTTPサーバーは、HTTP認証(BasicまたはDigest)を必要とします。
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5PACKAGE_NAME パッケージ名です. 例. clock
パッケージのHTTPポートにリダイレクトされました。
http://IPADDR[:PORT]/local/camscripter/proxy/PACKAGE_NAME/*
例:
http://192.168.1.5/local/camscripter/proxy/clock/test.cgi
パッケージのHTTP公開ポートに リダイレクトされました。
http://IPADDR[:PORT]/local/camscripter/proxy_public/PACKAGE_NAME/*
proxy.cgi
すべてのHTTP(S)リクエストは、対象のカメラに転送されます。これは、あらゆるVAPIXコマンドに使用できます。
ヒント
このプロキシ実装により、ローカル以外のIPアドレスからスクリプトを使用してデバイスのカメラにアクセスする場合でも、完全に機能するユーザーインターフェースを利用できます。
HTTP コマンド:
http://IPADDR[:PORT]/local/camscripter/proxy.cgi
どこで参照出来るか?IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5:80
HTTPコマンドのヘッダー:
- x-target-camera-protocol – ターゲットカメラプロトコル:
http/https/https_insecure - x-target-camera-ip – ターゲットカメラIPアドレス
- x-target-camera-port– ターゲットカメラポート
- x-target-camera-path – ターゲットカメラパス
- x-target-camera-user – ターゲットカメラユーザー名
- x-target-camera-pass – ターゲットカメラパスワード
例:
設置カメラのビューエリアに対するHTTP VAPIXリクエスト。
http://IPADDR[:PORT]/axis-cgi/param.cgi?action=list&group=root.Image

静的HTMLへのアクセス
パスへのアクセス /package_name/html/
http://IPADDR[:PORT]/local/camscripter/package/PACKAGE_NAME/*
どこで参照出来るか?
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5PACKAGE_NAME パッケージ名です. 例. clock
ローカルネットワーク上のカメラを検索する
このエンドポイントを使用すると、ローカルネットワークをスキャンして利用可能なカメラをユーザーに表示し、ユーザーがユーザーインターフェースからカメラを選択すると、指定されたIPアドレスが自動的に入力されます。このソリューションでは、mDNSプロトコルとmDNSカメラ名を使用しています。
/network_camera_list.cgi
{
"camera_list": [{
"name": "AXIS A8207-VE - ACCC8EBFD3E5",
"ip": "192.168.91.211"
}, {
"name": "AXIS Demographic Identifier - AXIS Q3515 - ACCC8EBE6D6F",
"ip": "192.168.91.208"
}]
}
NDI HX Plugin 1.x API
このプラグインはNDI® HX2プロトコルを利用し、ネットワーク上でカメラを表示し、高画質(HQ)と低画質(LQ)の両方でライブストリーミングを行い、タリーライトとPTZポジションを調整します。
PostmanおよびInsomnia向けのサンプルAPIリクエストはこちらからダウンロードできます
アプリケーション全体の設定を取得および変更する方法
アプリケーションには8つのパラメータがあります。
ndiName これは、作成するNDIソースの名前です。 これはNULL終端のUTF-8文字列です。これはネットワーク上のNDIソースの名前となります。たとえば、ネットワーク上のマシン名が「MyMachine」で、このパラメータを「My Video」と指定した場合、ネットワーク上のNDIソースは「MyMachine (My Video)」となります。 ndiGroups このパラメータは、このNDI送信者が自身を配置すべきグループを表します。 グループとは、NDIソースの集合です。どのソースも任意の数のグループに属することができ、グループ名はカンマ区切りで指定します。例えば、「cameras, studio 1,10am show」と指定すると、そのソースは指定された3つのグループに配置されます。検索側では、検索対象とするグループを指定したり、複数のグループを同時に検索したりすることができます。グループがNULLの場合、システムのデフォルトグループが使用されます。 channel カメラチャンネル(表示領域またはセンサー)の番号(1番から始まる)width 必要な動画の横幅height 必要な動画の高さfps 1秒あたりのフレーム数gop キーフレームが送信されるまでのフレーム数audioEnabled 音声のオン/オフを切り替えるパラメータ
設定を取得する
アプリケーションの設定全体をJSON形式で取得するには、以下のGETリクエストを実行してください。
http://USER:PASS@IPADDR[:PORT]/local/ndihxplugin/settings.cgi?action=get
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: passIPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
取得したものの例:
{
"ndiName": "P1375",
"ndiGroups": "",
"channel": 2,
"width": 1920,
"height": 1080,
"fps": 50,
"gop": 101,
"audioEnabled": false
}
設定する
設定を更新したい場合は、POSTコールを使用してください。
http://USER:PASS@IPADDR[:PORT]/local/ndihxplugin/settings.cgi?action=set
どこで参照出来るか?
USER ユーザー名です。例: rootPASS パスワードです。例: passIPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
ライセンスオプション
この記事では、Axisカメラで NDI HX Plugin のライセンスを有効化する方法を説明します。ネットワーク設定に応じて、ライセンスはオンライン環境では自動的に、オフライン環境ではキーファイルを使用して手動で有効化できます。以下のセクションでは、両方の方法を説明し、プラグインのライセンスを正常に取得するために必要な手順をガイドします。
キーを使ってライセンスを起動する
この説明はオフライン環境を意図しています。キーファイルを作成するにはAxisのウェブサイト へアクセスしてください。処理を続行するにはAxisアカウントが必要です。
Axisのウェブサイトで、必要なフォームに入力してキーファイルを作成してください。

キーファイルが生成されたら、それをダウンロードし、カメラにアップロードしてください。カメラインターフェースでApps, に移動し、Options メニューをクリックして (3つの点) NDI HX Plugin アプリの隣にある(3つの点)、 キー付ライセンスを起動するを選択します。
最後に、キーファイルをアップロードして、カメラのライセンス登録を完了してください。

自動的にライセンスを起動する
オンライン環境でアプリにライセンスを付与するには、カメラインターフェースを開いてApps. に進みます。オプションメニューをクリックして、(3つの点) NDI HX Plugin アプリの隣にあるライセンスを自動的に起動するを選択します。
表示されるモーダルウィンドウにライセンスキーを入力し、確認してプラグインを有効にしてください。
オフライン時のACAPライセンス
このライセンス方式は、オフライン環境のカメラに使用されます。
アプリケーションのインストール
ライセンスを起動する前に、カメラに適切なACAPアプリケーションをインストールする必要があります。 必要なインストールパッケージはこちらからダウンロードできます。インストールはVAPIX経由でAxisカメラユーザーインターフェース内の”アプリ”セクションで手動でインストールが可能です。 API, または Axis Device Manager.
In-app offline ライセンス
APIリクエストの作成を容易にするため、または小規模なデプロイメントの場合は、アプリケーションのヘルプセクション (右上隅) にある統合されたオフラインライセンスウィザードをご利用ください。.
注意: CamStreamerアプリでは、,この機能はバージョン4.x.x and 6.x.x.に限られます。

1. CamStreamerサーバー上でライセンスを起動する
まず、CamStreamerサーバー上でライセンスを起動します。
- ライセンスコードとメールアドレスを入力します。
- API コマンドを新しいブラウザウインドウにコピー・ペーストします (PC はインターネットに接続されている必要があります)
- 署名と期限をコピーします
2. カメラに署名と期限を保存します。
CamStreamerオフラインライセンスウィザード:
- 期限と署名パラメータを入力します (サーバー応答から取得されます)
- このカメラをライセンス認証するか、APIコマンドを新しいブラウザウィンドウに貼り付けてください。
サーバーにあるカメラの署名作成
カメラ情報を送信し、当社のサーバー上でカメラに未使用のライセンスコードを割り当ててください。試用ライセンスまたは完全版ライセンスは、当社のウェブページから取得できます。
ライセンスは、インターネットに接続されたパソコンで、以下のGETリクエストにより有効化できます。
https://camstreamer.com/license-api/v2/activate?serial_number=SERIAL_NUMBER&app_name=APP_NAME&license_code=LICENSE_CODE&email=EMAIL
どこで参照出来るか?
SERIAL_NUMBER ライセンスを割り当てるカメラのシリアル番号です。例: B8A44F7XXXXAPP_NAME アクティブ化したいアプリケーションの名称です。APIにおける当社のアプリケーション名は以下の通りです:camstreamer、camoverlay、camscripter、camswitcher、planetracker LICENSE_CODE カメラのシリアル番号に割当てるライセンスコードです。例: CS-R4U4KXXXXXXXXXEMAIL カメラとライセンスを登録するメールアドレス
サーバーの応答
カメラとライセンス情報をサーバーに正常に送信した後、以下の形式で応答が返されます:
{
"code": 200,
"message": "OK",
"Expire": 0,
"Signature": "75fe128adb855e365925d1b19c5024897048145779994239462e8334dbfcc8cb",
"LicenseCode": "CS-R4U4KXXXXXXXXX",
"LicenseParams": "{\"expire\":0}"
}
どこで参照出来るか?
code サーバーからの応答コードmessage エラーの原因(該当する場合)を示すステータスメッセージですExpire ライセンスの有効期限です。フルライセンスの場合、値は常に0です。Signature 当社サーバー上で計算される一意のハッシュ値ですLicenseParams ライセンス検証に使用されるライセンスのパラメータを持つオブジェクトです
エラー
{
"code": "ERR_INVALID_ARGUMENT",
"message": "Invalid email address given 'not-valid-address.com'."
}
{
"code": "ERR_FAILED_TO_ACTIVATE",
"message": "This camera already has an unlimited license."
}
{
"code": "ERR_FAILED_TO_ACTIVATE",
"message": "This license code has already been used."
}
ライセンスが付与されたカメラの署名を取得する
サーバーにライセンス登録されたカメラがある、またはエラーメッセージを取得した場合、 "This camera already has an unlimited license." 署名を取得することが可能となり、 LicenseParams 下記のGETリクエストを使用できます。.
https://camstreamer.com/index.php?a=checklicense&p=APP_NAME&serial_number=SERIAL_NUMBER&model=CAMERA_MODEL&firmware=FW_VERSION&app_ver=APP_VERSION&apiVersion=v2
どこで参照出来るか?
SERIAL_NUMBER ライセンスを割り当てるカメラのシリアル番号です。例: B8A44F7XXXXAPP_NAME アクティブ化したいアプリケーションの名称です。APIにおける当社のアプリケーション名は以下の通りです:camstreamer、camoverlay、camscripter、camswitcher、planetracker CAMERA_MODEL カメラのモデル名です。 例 P3265-LVEFW_VERSION カメラにインストールされたファームウェアのバージョンです。 例. 12.6.85APP_VERSION 署名を必要とするアプリケーションのバージョンです。 例. 6.0.0apiVersion 現在使用中のライセンス付APIのバージョンです
注意事項
上記に記載されているすべてのパラメータが必要となります。
サーバーの応答
{
"code": 200,
"message": "OK",
"data": {
"Expire": 0,
"Signature": "75fe128adb855e365925d1b19c5024897048145779994239462e8334dbfcc8cb",
"LicenseCode": "CS-R4U44***************",
"LicenseParams": "{\"expire\":0}",
"LicenseType": "full",
"Activated": 1771577985,
"CurrentTime": 1771580148,
"TrialAvailable": true,
"LatestACAPVersion": "4.1.3"
}
}
どこで参照出来るか?
code サーバーからのレスポンスコードmessage エラーソースを示すステータスメッセージです (エラーがある場合)Expire ライセンスの有効期限日です、フルライセンスは、値が常に0になります。Signature 当社サーバー上で計算される一意のハッシュ値ですLicenseCode このカメラとアプリケーションに使用されているライセンスコードです。LicenseParams ライセンス検証に使用されるライセンスのパラメータを持つオブジェクトですLicenseType ライセンスの種類ですActivated ライセンスが起動されたタイムスタンプですCurrentTime サーバーの現在の時刻です。TrialAvailable カメラに30日間の試用期間が利用可能かどうかを示すブール値です。LatestACAPVersion カメラとファームウェアの最新のアプリケーションのバージョンです。
エラー
1つ以上の必須パラメータが欠落しているか、無効です。
{
"code": 400,
"message": "Invalid required parameter"
}
このシリアル番号のカメラは、当社サーバーにおいて本アプリケーション用にライセンス登録されていません。
{
"code": 489,
"message": "Camera is not licensed",
"data": {
"CurrentTime": 1771593266,
"TrialAvailable": true
}
}
アプリケーション名が正しくないか、スペルミスがあります。
404 NOT FOUND
カメラに署名を保存する
応答を正常に取得した後、オフライン環境のデバイスを使用してカメラにapp_parametersを読み込む必要があります。パラメータ名の前に「APP_NAME」を付ける必要がある点に注意してください。以下の例を参照してください:
http://USER:PASS@IPADDR[:PORT]/axis-cgi/param.cgi?action=update&APP_NAME.Signature=SIGNATURE_STRING&APP_NAME.licenseparams=LICENSE_PARAMS&APP_NAME.LicenseCode=LICENSE_CODE
どこで参照出来るか?
USER カメラ内の Axis カメラユーザー名。例: rootPASS Axisカメラユーザーのパスワード。例: passIPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5APP_NAME アクティブ化したいアプリケーションの名称です。APIにおける当社のアプリケーション名は以下の通りです:camstreamer、camoverlay、camscripter、camswitcher、planetracker SIGNATURE_STRING サーバー上のカメラの署名生成セクションにおける最初の応答から取得した署名を含む文字列LICENSE_PARAMS サーバーリクエストから取得した値を持つオブジェクトです。 バックスラッシュを含まない値を入力してください (\). E.g. {"expire":0}, または {"expire":1806598888,"checkTimeOnline":false}LICENSE_CODE 最初のリクエストで使用されたライセンスコード(最初のサーバー応答から)
例:
http://root:[email protected]:80/axis-cgi/param.cgi?action=update&camstreamer.Signature=75fe128adb855e365925d1b19c5024897048145779994239462e8334dbfcc8cb&camstreamer.licenseparams={"expire":0}&camstreamer.LicenseCode=CS-R4U4KXXXXXXXXX
注意事項
このAPP_NAME.LicenseCode パラメータ(2回目のリクエストで使用)は、CamStreamerアプリおよびPlaneTrackerアプリのライセンス取得時のみカメラに保存されます。他のACAPアプリケーションでは、2回目のリクエストにこのパラメータを含めないでください。