Alexa.CameraStreamControllerインターフェース3
AlexaスキルにAlexa.CameraStreamController
インターフェースを実装すると、ユーザーが防犯カメラからのフィードを確認できるようになります。リアルタイム通信(RTC)対応の防犯カメラの場合は、Alexa.RTCSessionControllerインターフェースを実装します。セキュリティスキルの詳細については、スマートホームセキュリティの概要を参照してください。
CameraStreamController
インターフェースがサポートする言語については、Alexaインターフェースとサポートしている言語の一覧を参照してください。メッセージプロパティの定義については、Alexaインターフェースのメッセージとプロパティを参照してください。
発話
Alexa.CameraStreamController
インターフェースを使用する場合、Alexaサービスが開発者に代わって音声対話モデルを提供します。ユーザーがこのような発話をすると、Alexaがそれに対応するディレクティブまたは状態レポートリクエストをスキルに送信します。
以下に、ユーザーの発話の例を示します。
Alexa, show the front door camera.
Alexa, stop camera.
Alexa, hide camera.
Alexa, montre la caméra de la porte d'entrée.
Alexa, arrête la caméra.
Alexa, cache la caméra.
Alexa, zeige die Haustür-Kamera.
Alexa, stoppe Kamera.
Alexa, blende Kamera aus.
Alexa, सामने के दरवाज़े का कैमरा दिखाओ
Alexa, कैमरा बंद करो
Alexa, कैमरा छिपाओ
Alexa, mostra la videocamera della porta d'ingresso.
Alexa, chiudi la videocamera.
Alexa, nascondi la videocamera.
アレクサ、玄関のカメラを見せて
アレクサ、カメラを止めて
アレクサ、カメラを隠して
Alexa, mostra a câmera da porta da frente.
Alexa, oculte a câmera.
Alexa, esconda a câmera.
Alexa, muestra la cámara de la puerta principal.
Alexa, deten la cámara.
Alexa, oculta la cámara.
Alexa, esconde la cámara.
Alexa, laat de voordeurcamera zien.
Alexa, stop de camera.
Alexa, verberg de camera.
Real Time Streaming Protocolの使い方
ビデオやオーディオをストリーミングするクラウド対応カメラ用のAlexaスキルを構築するにはReal Time Streaming Protocol(RTSP)を使用します。
前提条件とSLA要件
最適なユーザーエクスペリエンスには待機時間が短いことが非常に重要です。CameraStreamController
APIを使用するには、以下が必要です。
-
RTSP+RTPストリーミングプロトコル。
-
ポート443のインターリーブされたTCP(RTPとRTSPのどちらも)
-
TLS 1.2を用いたポート443でのTCPソケット暗号化
-
Amazonでは
DESCRIBE
、SETUP
、PLAY
、TEARDOWN
、のRTSPコマンドが必須で、RFCに完全準拠した実装を推奨しています。 -
すべてのRTSP URI応答は、リクエストを受信してから6秒以内に実行する必要があります。
-
Lambdaは6秒以内にリクエストに応答する必要があります。最高のユーザーエクスペリエンスを提供するには、1秒以内に応答してください。ストリーミングを開始するためにカメラを起動する等の操作は、バックグラウンドのタスクとして非同期的に実行してください。
-
ネットワーク状態によってフレームレートが決まります。ネットワーク状態が良好であれば、より高いフレームレートでストリーミングします。ネットワーク状態が悪い場合は、低いフレームレートでストリーミングします。フレームレートが低いと、モーションブラーが発生する可能性がありますが、ストリーミングは可能です。
-
良好なネットワーク条件下では、TLSハンドシェイクが完了してから6秒以内に最初のフレームがデバイスにレンダリングされることが望ましいです。ストリームのキーフレームレートとバッファー時間を調節することで、起動の待機時間を最適化できます。
RTSP URIのサポート
RTSP URIによりカメラストリームを識別します。Amazonでは、インターネット接続でどこからでもアクセス可能なURIを返すことを推奨しています。URIは、TLS 1.2を含むすべてのRTSP要件を満たす必要があります。ローカルネットワーク上でのみアクセス可能なURIを返した場合、ユーザーはすべてのAlexa搭載デバイスでカメラフィードを見ることができなくなります。
サポートされているストリーミングプロトコル
次のサポートされるプロトコル値を使用できます: RTSP
、HLS
。
サポートされる認可タイプ
次のサポートされる認可タイプ値を使用できます: BASIC
、DIGEST
、NONE
。
サポートされるビデオコーデック
次のサポートされるビデオコーデック値を使用できます: H264
、MPEG2
、MJPEG
、JPG
。
サポートされるオーディオコーデック
次のサポートされるオーディオコーデック値を使用できます: G711
、AAC
、NONE
。
サポートされている解像度
サポートされている解像度は480~1080ピクセルです。
プロパティとオブジェクト
CameraStreamオブジェクト
CameraStream
オブジェクトは、ビデオとオーディオのカメラストリームを定義します。
以下は、CameraStream
オブジェクトの例です。
{
"uri": "rtsp://username:password@link.to.video:443/feed1.mp4",
"expirationTime": "2017-02-03T16:20:50.52Z",
"idleTimeoutSeconds": 30,
"protocol": "RTSP",
"resolution": {
"width": 1920,
"height": 1080
},
"authorizationType": "BASIC",
"videoCodec": "H264",
"audioCodec": "AAC"
}
CameraStream
オブジェクトには次のプロパティがあります。
プロパティ | 説明 | 型 |
---|---|---|
uri |
カメラストリームを識別します。RTSP URLを設定します。 一時的なURIの場合、 expirationTime フィールドに有効期限を指定します。このURIが期限切れとなりエラーが発生すると、AlexaはInitializeCameraStreams をもう一度送信して期限切れでない新しいURIを取得します。 |
文字列 |
expirationTime |
ストリームの有効期限です。 ISO 8601形式で定義し、 YYYY-MM-DDThh:mm:ssZ となります。 |
文字列 |
idleTimeoutSeconds |
カメラストリームがタイムアウトするまでの非アクティブ状態の秒数です。 | 整数 |
protocol |
ストリームのプロトコルです。 有効な値は サポートされるプロトコル値のいずれかです。 |
文字列 |
resolution |
ストリームの解像度です。 | Resolution オブジェクト |
authorizationType |
ストリームにアクセスするための認可タイプです。 有効な値は サポートされる認可タイプ値のいずれかです。 |
文字列 |
videoCodec |
ストリームのビデオコーデックです。 有効な値は サポートされるビデオコーデック値のいずれかです。 |
文字列 |
audioCodec |
ストリームのオーディオコーデックです。 有効な値は サポートされるオーディオコーデック値のいずれかです。 |
文字列 |
CameraStreamConfigurationオブジェクト
CameraStreamConfiguration
オブジェクトは、カメラがサポートする設定を表します。設定を検出応答で指定します。
以下は、CameraStreamConfiguration
オブジェクトの例です。
{
"protocols": ["RTSP"],
"resolutions": [{"width":1920, "height":1080}, {"width":1280, "height":720}],
"authorizationTypes": ["BASIC"],
"videoCodecs": ["H264", "MPEG2"],
"audioCodecs": ["G711"]
},
CameraStreamConfiguration
オブジェクトには次のプロパティがあります。
プロパティ | 説明 | 型 |
---|---|---|
protocols |
エンドポイントがサポートするプロトコルです。 | サポートされるプロトコル文字列の配列 |
resolutions |
エンドポイントがサポートする解像度です。 | Resolution オブジェクトの配列 |
authorizationTypes |
エンドポイントがサポートする認可タイプです。 | サポートされる認可タイプ文字列の配列 |
videoCodecs |
エンドポイントがサポートするビデオコーデックです。 | サポートされるビデオコーデック文字列の配列 |
audioCodecs |
エンドポイントがサポートするオーディオコーデックです。 | サポートされるオーディオコーデック文字列の配列 |
Resolutionオブジェクト
Resolution
オブジェクトは、カメラストリームの高さと幅をピクセルで表します。サポートされている解像度は480~1080ピクセルです。
Resolution
オブジェクトには次のプロパティがあります。
プロパティ | 説明 | 型 |
---|---|---|
|
カメラストリームの高さ(ピクセル)です。 |
整数 |
|
カメラストリームの幅(ピクセル)です。 |
整数 |
検出
Alexa.CameraStreamController
をサポートするエンドポイントは、Alexa.Discoveryの標準検出メカニズムを使用して表します。
表示カテゴリーにはCAMERA
を使用します。表示カテゴリーの一覧は、表示カテゴリーを参照してください。
Alexaにデバイスの健全性を通知する場合、Alexa.EndpointHealth
インターフェースも実装してください。
displayCategories
リストにほかのカテゴリーを指定する前にCAMERA
を指定してください。Capabilities配列
機能配列のCameraStreamController
エントリには、通常の検出応答フィールドのほかに、次のフィールドを含めます。
プロパティ | 説明 | 型 | 必須 |
---|---|---|---|
|
カメラがサポートするストリーミング設定です。 |
|
◯ |
検出応答の例
以下は、Alexa.CameraStreamController
インターフェース、Alexa.EndpointHealth
インターフェースをサポートするセキュリティカメラのDiscover.Response
メッセージ例です。
{
"event": {
"header": {
"namespace":"Alexa.Discovery",
"name":"Discover.Response",
"payloadVersion": "3",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい"
},
"payload":{
"endpoints":[
{
"endpointId": "エンドポイントの一意のID",
"manufacturerName": "エンドポイントのメーカー名",
"description": "Alexaアプリに表示される説明",
"friendlyName": "玄関のカメラ",
"displayCategories": ["CAMERA", "LIGHT"],
"cookie": {},
"capabilities": [
{
"type": "AlexaInterface",
"interface": "Alexa.CameraStreamController",
"version": "3",
"cameraStreamConfigurations" : [
{
"protocols": ["RTSP"],
"resolutions": [{"width":1920, "height":1080}, {"width":1280, "height":720}],
"authorizationTypes": ["BASIC"],
"videoCodecs": ["H264", "MPEG2"],
"audioCodecs": ["G711"]
},
{
"protocols": ["RTSP"],
"resolutions": [{"width":1920, "height":1080}, {"width":1280, "height":720}],
"authorizationTypes": ["NONE"],
"videoCodecs": ["H264"],
"audioCodecs": ["AAC"]
}
]
},
{
"type": "AlexaInterface",
"interface": "Alexa.EndpointHealth",
"version": "3",
"properties": {
"supported": [
{
"name":"connectivity"
}
],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa",
"version": "3"
}
]
}
]
}
}
}
ディレクティブ
Alexaは次のAlexa.CameraStreamController
インターフェースディレクティブをスキルに送信します。
InitializeCameraStreamsディレクティブ
ユーザーが防犯カメラからのフィードを確認できるようにInitializeCameraStreams
ディレクティブをサポートします。
以下に、ユーザーの発話の例を示します。
Alexa, show the front door camera.
Alexa, montre la caméra de la porte d'entrée.
Alexa, zeige die Haustür-Kamera.
Alexa, सामने के दरवाज़े का कैमरा दिखाओ
Alexa, mostra la videocamera della porta d'ingresso.
アレクサ、玄関のカメラを見せて
Alexa, mostra a câmera da porta da frente.
Alexa, muestra la cámara de la puerta principal.
Alexa, laat de voordeurcamera zien.
InitializeCameraStreamsディレクティブの例
以下は、Alexaがスキルに送信するInitializeCameraStreams
ディレクティブの例です。
{
"directive": {
"header": {
"namespace": "Alexa.CameraStreamController",
"name": "InitializeCameraStreams",
"messageId": "一意のバージョン4 UUID",
"correlationToken": "opaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID",
"cookie": {}
},
"payload": {
"cameraStreams": [
{
"protocol": "RTSP",
"resolution": {"width": 1920, "height": 1080},
"authorizationType": "BASIC",
"videoCodec": "H264",
"audioCodec": "AAC"
},
{
"protocol": "RTSP",
"resolution": {"width": 1280, "height": 720},
"authorizationType": "NONE",
"videoCodec": "MPEG2",
"audioCodec": "G711"
}
]
}
}
}
InitializeCameraStreamsディレクティブのペイロード
フィールド | 説明 | 型 |
---|---|---|
cameraStreams |
選択できるビデオストリーム設定とオーディオストリーム設定のリストです。 | CameraStream オブジェクトの配列 |
InitializeCameraStreams応答イベント
InitializeCameraStreams
を正常に処理したら、Alexa.CameraStreamController.Response
イベントで応答します。contextオブジェクトに、関連するすべてのプロパティの値を含めます。
以下は、Alexa.CameraStreamController
応答の例です。
{
"event": {
"header": {
"namespace": "Alexa.CameraStreamController",
"name": "Response",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"correlationToken": "リクエストに一致するopaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID"
},
"payload": {
"cameraStreams": [
{
"uri": "rtsp://username:password@link.to.video:443/feed1.mp4",
"expirationTime": "2017-02-03T16:20:50.52Z",
"idleTimeoutSeconds": 30,
"protocol": "RTSP",
"resolution": {"width": 1920, "height": 1080},
"authorizationType": "BASIC",
"videoCodec": "H264",
"audioCodec": "AAC"
}
],
"imageUri": "https://example.com/image.jpg"
}
},
"context": {
"properties": [
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
InitializeCameraStreams応答のペイロード詳細
プロパティ | 説明 | 型 | 必須 |
---|---|---|---|
|
ビデオとオーディオのストリームに関する情報を提供します。 |
|
◯ |
|
リクエストに指定されたカメラの以前のフィードからの静止画像URIです。 |
文字列 |
◯ |
InitializeCameraStreamsディレクティブのエラー処理
InitializeCameraStreams
ディレクティブを正常に処理できなかった場合、Alexa.ErrorResponseイベントを使用して応答します。ユーザーがカメラを設定する必要がある場合、NOT_SUPPORTED_IN_CURRENT_MODE
エラータイプを返し、currentDeviceMode
フィールドにはNOT_PROVISIONED
の値を指定します。
状態レポート
Alexaはエンドポイントの状態についての情報をリクエストするために、ReportState
ディレクティブを送信します。AlexaがReportState
ディレクティブを送信したら、それに対する応答としてStateReport
イベントを送信します。この応答には、contextオブジェクトのすべてのretrievableプロパティの現在の状態を含めます。retrievableプロパティは検出応答で特定します。状態レポートの詳細については、状態および変更レポートについてを参照してください。
Alexa.CameraStreamController
インターフェースでは、取得可能なプロパティを定義しません。ただし、スキルでカメラデバイス用にほかのインターフェースも実装している場合、それらのインターフェースのプロパティについて状態レポートを行う必要があります。StateReport応答の例
{
"event": {
"header": {
"namespace": "Alexa",
"name": "StateReport",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"correlationToken": "リクエストに一致するopaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
変更レポート
エンドポイントの状態の変化をプロアクティブにレポートするために、ChangeReport
イベントを送信します。プロアクティブにレポートするプロパティは検出応答で特定します。変更レポートの詳細については、状態および変更レポートについてを参照してください。
Alexa.CameraStreamController
インターフェースでは、プロアクティブに出力可能なプロパティを定義しません。ただし、スキルでカメラデバイス用にほかのインターフェースも実装している場合、それらのインターフェースのプロパティについて変更レポートを行う必要があります。ChangeReportイベントの例
{
"event": {
"header": {
"namespace": "Alexa",
"name": "ChangeReport",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID"
},
"payload": {
"change": {
"cause": {
"type": "PERIODIC_POLL"
},
"properties": [
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "UNREACHABLE"
},
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
},
"context": {
"properties": [
]
}
}
関連トピック
最終更新日: 2024 年 11 月 12 日