Alexa.CameraStreamControllerインターフェース3


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ではDESCRIBESETUPPLAYTEARDOWN、のRTSPコマンドが必須で、RFCに完全準拠した実装を推奨しています。

  • すべてのRTSP URI応答は、リクエストを受信してから6秒以内に実行する必要があります。

  • Lambdaは6秒以内にリクエストに応答する必要があります。最高のユーザーエクスペリエンスを提供するには、1秒以内に応答してください。ストリーミングを開始するためにカメラを起動する等の操作は、バックグラウンドのタスクとして非同期的に実行してください。

  • ネットワーク状態によってフレームレートが決まります。ネットワーク状態が良好であれば、より高いフレームレートでストリーミングします。ネットワーク状態が悪い場合は、低いフレームレートでストリーミングします。フレームレートが低いと、モーションブラーが発生する可能性がありますが、ストリーミングは可能です。

  • 良好なネットワーク条件下では、TLSハンドシェイクが完了してから6秒以内に最初のフレームがデバイスにレンダリングされることが望ましいです。ストリームのキーフレームレートとバッファー時間を調節することで、起動の待機時間を最適化できます。

RTSP URIのサポート

RTSP URIによりカメラストリームを識別します。Amazonでは、インターネット接続でどこからでもアクセス可能なURIを返すことを推奨しています。URIは、TLS 1.2を含むすべてのRTSP要件を満たす必要があります。ローカルネットワーク上でのみアクセス可能なURIを返した場合、ユーザーはすべてのAlexa搭載デバイスでカメラフィードを見ることができなくなります。

サポートされているストリーミングプロトコル

次のサポートされるプロトコル値を使用できます: RTSPHLS

サポートされる認可タイプ

次のサポートされる認可タイプ値を使用できます: BASICDIGESTNONE

サポートされるビデオコーデック

次のサポートされるビデオコーデック値を使用できます: H264MPEG2MJPEGJPG

サポートされるオーディオコーデック

次のサポートされるオーディオコーデック値を使用できます: G711AACNONE

サポートされている解像度

サポートされている解像度は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オブジェクトには次のプロパティがあります。

プロパティ 説明

height

カメラストリームの高さ(ピクセル)です。

整数

width

カメラストリームの幅(ピクセル)です。

整数

検出

Alexa.CameraStreamControllerをサポートするエンドポイントは、Alexa.Discoveryの標準検出メカニズムを使用して表します。

表示カテゴリーにはCAMERAを使用します。表示カテゴリーの一覧は、表示カテゴリーを参照してください。

Alexaにデバイスの健全性を通知する場合、Alexa.EndpointHealthインターフェースも実装してください。

Capabilities配列

機能配列のCameraStreamControllerエントリには、通常の検出応答フィールドのほかに、次のフィールドを含めます。

プロパティ 説明 必須

cameraStreamConfigurations

カメラがサポートするストリーミング設定です。

CameraStreamConfigurationオブジェクトの配列

検出応答の例

以下は、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応答のペイロード詳細

プロパティ 説明 必須

cameraStreams

ビデオとオーディオのストリームに関する情報を提供します。

CameraStreamオブジェクトの配列

imageUri

リクエストに指定されたカメラの以前のフィードからの静止画像URIです。

文字列

InitializeCameraStreamsディレクティブのエラー処理

InitializeCameraStreamsディレクティブを正常に処理できなかった場合、Alexa.ErrorResponseイベントを使用して応答します。ユーザーがカメラを設定する必要がある場合、NOT_SUPPORTED_IN_CURRENT_MODEエラータイプを返し、currentDeviceModeフィールドにはNOT_PROVISIONEDの値を指定します。

状態レポート

Alexaはエンドポイントの状態についての情報をリクエストするために、ReportStateディレクティブを送信します。AlexaがReportStateディレクティブを送信したら、それに対する応答としてStateReportイベントを送信します。この応答には、contextオブジェクトのすべてのretrievableプロパティの現在の状態を含めます。retrievableプロパティは検出応答で特定します。状態レポートの詳細については、状態および変更レポートについてを参照してください。

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イベントを送信します。プロアクティブにレポートするプロパティは検出応答で特定します。変更レポートの詳細については、状態および変更レポートについてを参照してください。

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 日