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:80
PARAMNAME 以下に挙げるパラメータのいずれかの名前です。
PARAMVALUE CamStreamerアプリに保存する値です。 値に含まれる特殊文字はurlエンコードする必要があります。 以下参照 URL encoding

http://IPADDR[:PORT]/local/camstreamer/param/get.cgi?list=PARAMNAME[,PARAMNAME]

どこで参照出来るか?

IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5:80
PARAMNAME は、以下に挙げるパラメータのいずれかの名前です。

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.5
STREAMID ストリーム識別子(文字列)です。 指定された 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.5
STREAMID ストリーム識別子

以下の remove.cgi HTTP API 呼び出しにより、ストリームを削除できます。

http://IPADDR[:PORT]/local/camstreamer/stream/remove.cgi?stream_id=STREAMID

どこで参照出来るか?

IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
STREAMID ストリーム識別子

パラメータ 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.5
STREAMID ストリーム識別子 (文字列). 指定された 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.5
STREAMID ストリーム識別子 (文字列). 指定された 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.5
STREAMID ストリーム識別子 (文字列). 指定された 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.5
STREAMID ストリーム識別子 (文字列). 指定された 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 ユーザー名です。例: root
PASS パスワードです。例: 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.5
PARAMNAME いずれかのパラメータ名です。

カメラへのHTTPリクエストを使用して、どのパラメータでも変更できます:

http://IPADDR[:PORT]/axis-cgi/param.cgi?action=update&CamOverlay.PARAMNAME=PARAMVALUE

どこで参照出来るか?

IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
PARAMNAME 以下に挙げるパラメータのいずれかの名前です。
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 ユーザー名です。例: root
PASS パスワードです。例: pass
IPADDR[: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 ユーザー名です。例: root
PASS パスワードです。例: pass
IPADDR[: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 ユーザー名です。例: root
PASS パスワードです。例: pass
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
SERVICE_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, center
pos_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 ユーザー名です。例: root
PASS パスワードです。例: pass
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
ACTION このパラメータには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 ユーザー名です。例: root
PASS パスワードです。例: pass
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
PATH_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, center
POSX 動画ストリームにおける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 ユーザー名です。例: root
PASS パスワードです。 例. pass
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
SERVICEID 変更したいオーバーレイサービスの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 ユーザー名です。例: root
PASS パスワードです。例: 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

どこで参照出来るか?

IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 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 ユーザー名です。例: root
PASS パスワードです。例: 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_PATH
PERSISTENT_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 ユーザー名です。例: root
PASS パスワードです。例: pass
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
PACKAGE_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

どこで参照出来るか?

IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
PACKAGE_NAME 削除したいパッケージ名です. 例. clock

http://127.0.0.1:52520/local/camscripter/package/remove.cgi?package_name=clock

インストールされているすべてのパッケージを表示する

http://IPADDR[:PORT]/local/camscripter/package/list.cgi

どこで参照出来るか?

IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 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.5
PACKAGE_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.5
PACKAGE_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 ユーザー名です。例: root
PASS パスワードです。例: pass
IPADDR[: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 ユーザー名です。例: root
PASS パスワードです。例: pass
IPADDR[: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 ライセンスを割り当てるカメラのシリアル番号です。例: B8A44F7XXXX
APP_NAME アクティブ化したいアプリケーションの名称です。APIにおける当社のアプリケーション名は以下の通りです:camstreamer、camoverlay、camscripter、camswitcher、planetracker
LICENSE_CODE カメラのシリアル番号に割当てるライセンスコードです。例: CS-R4U4KXXXXXXXXX
EMAIL カメラとライセンスを登録するメールアドレス

サーバーの応答

カメラとライセンス情報をサーバーに正常に送信した後、以下の形式で応答が返されます:

{
    "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 ライセンスを割り当てるカメラのシリアル番号です。例: B8A44F7XXXX
APP_NAME アクティブ化したいアプリケーションの名称です。APIにおける当社のアプリケーション名は以下の通りです:camstreamer、camoverlay、camscripter、camswitcher、planetracker
CAMERA_MODEL カメラのモデル名です。 例 P3265-LVE
FW_VERSION カメラにインストールされたファームウェアのバージョンです。 例. 12.6.85
APP_VERSION 署名を必要とするアプリケーションのバージョンです。 例. 6.0.0
apiVersion 現在使用中のライセンス付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 カメラユーザー名。例: root
PASS Axisカメラユーザーのパスワード。例: pass
IPADDR[:PORT] IP アドレスです:カメラのポート。 例: 192.168.1.5
APP_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回目のリクエストにこのパラメータを含めないでください。