Alexa.CameraStreamControllerインターフェース



Alexa.CameraStreamControllerインターフェース

Alexa.CameraStreamControllerインターフェースには、カメラのエンドポイントからカメラストリームを取得するのに使用されるメッセージが指定されます。カメラとやりとりするスキルの詳細については、カメラ用のスマートホームスキルを作成するを参照してください。

前提条件と要件

カメラは正しい形式でビデオフィードを送信する必要があります。また、セキュリティ要件とパフォーマンス要件も満たす必要があります。カメラおよびビデオフィードの技術要件とセキュリティ要件は次のとおりです。

カテゴリー 要件
ストリーミングプロトコル RTSPおよびRTP
トランスポートプロトコル ポート443のインターリーブされたTCP(RTPとRTSPのどちらも)
フィード暗号化 TLS 1.2を用いたポート443でのTCPソケット暗号化
必須のRTSPコマンドサポート DESCRIBE、SETUP、PLAY、TEARDOWNの各コマンドは必須ですが、RFCに完全に準拠した実装が推奨されています。
ビデオの形式 H.264
オーディオの形式 AACまたはG711
フィードの認証方法 返されるカメラストリーム内でのHTTP Digest認証。
RTSP URIの応答性 応答はすべて、リクエストを受信してから6秒以内に発生しなければなりません。

検出

カメラを制御するスキルの検出リクエストに応答するには、cameraStreamConfigurationオブジェクト配列の応答にカメラのコンフィギュレーションを指定します。

Alexa.CameraStreamControllerを含むDiscoveryResponseの例

{
  "event": {
    "header": {
      "namespace":"Alexa.Discovery",
      "name":"Discover.Response",
      "payloadVersion":"3",
      "messageId":"ff746d98-ab02-4c9e-9d0d-b44711658414"
    },
    "payload":{
      "endpoints":[
        {
          "endpointId": "uniqueIdOfCameraEndpoint",
          "manufacturerName": "エンドポイントのメーカー名",
          "modelName": "エンドポイントのモデル名",
          "friendlyName": "カメラ",
          "description": "ユーザーに表示される説明です",
          "displayCategories": [ "CAMERA" ],
          "cookie": {
              "key1": "このエンドポイントを参照するためのスキルの任意のキー/値のペアです。",
              "key2": "複数のエントリがある場合があります",
              "key3": "ただし、参照のためだけに使用してください。",
              "key4": "現在のエンドポイントの状態を維持するのに適切な所ではありません。"
          },
          "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.PowerController",
              "version": "3"
            }
          ]
        }
      ]
    }
  }
}

ペイロードの詳細

フィールド 説明 必須
cameraStreamConfigurations ストリームに関する情報を提供するcameraStream構造の配列です。 オブジェクト配列
cameraStream.protocols ストリームのプロトコル(RTSPなど)です。 文字列
cameraStream.resolutions 解像度オブジェクトの配列です。ストリームの解像度を指定します。各解像度には、widthおよびheightプロパティが含まれます。 オブジェクト
cameraStream.resolution.width ビデオストリームの幅を指定します。 整数
cameraStream.resolution.height ビデオストリームの高さを指定します。 整数
cameraStream.authorizationType 認可タイプを指定します。使用できる値は「BASIC」、「DIGEST」、「NONE」です 文字列
cameraStream.videoCodec ストリームのビデオコーデックです。使用できる値は「H264」、「MPEG2」、「MJPEG」、「JPG」です。 文字列
cameraStream.audioCodec ストリームのオーディオコーデックです。使用できる値は「G711」、「AAC」、「NONE」です。 文字列

ディレクティブ

このインターフェースの制御とクエリのディレクティブは、以下の言語を対象とするスキルでサポートされます。

  • 英語、すべてのロケール
  • フランス語(FR)
  • ドイツ語
  • イタリア語
  • スペイン語(ES)

詳細については、スマートホームスキルを複数の言語で開発するを参照してください。

InitializeCameraStreams

エンドポイントのカメラストリームを初期化します。

「アレクサ、玄関のカメラを見せて」

「Alexa, show front door camera」

リクエストの例:

{
  "directive": {
    "header": {
      "namespace": "Alexa.CameraStreamController",
      "name": "InitializeCameraStreams",
      "payloadVersion": "3",
      "messageId": "abc-123-def-456",
      "correlationToken": "dFMb0z+PgpgdDmluhJ1LddFvSqZ/jCc8ptlAKulUj90jSqg=="
    },
    "endpoint": {
      "endpointId": "appliance-001",
       "scope": {
                "type": "BearerToken",
                "token": "access-token-from-skill"
            },
      "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"
      }]
    }
  }
}

ペイロードの詳細

フィールド 説明 必須
cameraStreams ストリームに関する情報を提供するcameraStream構造の配列です。 オブジェクト配列
cameraStream.protocol ストリームのプロトコル(RTSPなど)です。 文字列
cameraStream.resolution ストリームの解像度を指定する解像度オブジェクトです。widthおよびheightプロパティが含まれます。 オブジェクト
cameraStream.resolution.width ビデオストリームの幅を指定します。 整数
cameraStream.resolution.height ビデオストリームの高さを指定します。 整数
cameraStream.authorizationType 認可タイプを指定します。使用できる値は「BASIC」、「DIGEST」、「NONE」です 文字列
cameraStream.videoCodec ストリームのビデオコーデックです。使用できる値は「H264」、「MPEG2」、「MJPEG」、「JPG」です。 文字列
cameraStream.audioCodec ストリームのオーディオコーデックです。使用できる値は「G711」、「AAC」、「NONE」です。 文字列

プロパティとイベント

この機能では、以下のように応答する必要があります。

  • 同期的に応答します。つまり、AlexaからLambda関数に応答を送信します。

応答を送信する場合、メッセージのcontextにインターフェースのプロパティの状態を含める必要があります。

プロパティ

現在、このインターフェースに定義されているレポート可能なプロパティはありません。

応答

InitializeCameraStreamsディレクティブが正常に処理された場合、ユーザーはResponseイベントを使用して応答する必要があります。このメッセージのペイロードには、指定されたエンドポイントのカメラストリームが含まれます。

応答の例

{
  "event": {
    "header": {
      "namespace": "Alexa.CameraStreamController",
      "name": "Response",
      "payloadVersion": "3",
      "messageId": "abc-123-def-456",
      "correlationToken": "dFMb0z+PgpgdDmluhJ1LddFvSqZ/jCc8ptlAKulUj90jSqg=="
    },
    "endpoint": {
       "endpointId": "appliance-001"
    },
    "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://username:password@link.to.image/image.jpg"
    }
  }
}

ペイロードの詳細

フィールド 説明 必須
cameraStreams ストリームに関する情報を提供するcameraStream構造の配列です。 オブジェクト配列
cameraStream.uri カメラストリームのURIです。これは、expirationTimeで有効期限を指定する一時URIとすることもできます。このURIが期限切れとなりエラーが発生すると、AlexaはInitializeCameraStreamsを新たに呼び出し、期限切れでない新しいURIを取得します。 文字列
cameraStream.expirationTime ストリームの有効期限を示すISO 8601フォーマットの日付です。UTCで指定する必要があります。 文字列
cameraStream.idleTimeoutSeconds ストリームのタイムアウト値を示します。 整数
cameraStream.protocol ストリームのプロトコル(RTSPなど)です。 文字列
cameraStream.resolution ストリームの解像度を指定する解像度オブジェクトです。widthおよびheightプロパティが含まれます。 オブジェクト
cameraStream.resolution.width ビデオストリームの幅を指定します(1920、1280など)。 整数
cameraStream.resolution.height ビデオストリームの高さを指定します(1080など)。 整数
cameraStream.authorizationType 認可タイプを指定します。使用できる値は「BASIC」、「DIGEST」、「NONE」です。 文字列
cameraStream.videoCodec ストリームのビデオコーデックです。使用できる値は「H264」、「MPEG2」、「MJPEG」、「JPG」です。 文字列
cameraStream.audioCodec ストリームのオーディオコーデックです。使用できる値は「G711」、「AAC」、「NONE」です。 文字列
imageUri リクエストに指定されたカメラの以前のフィードの静止画像のURIです。 文字列

ErrorResponse

何らかの理由によりユーザーのリクエストを完了できない場合、エラー応答を返す必要があります。詳細については、Alexa.ErrorResponseを参照してください。

その他のサンプルコード

リクエストと応答のサンプルについては、AlexaスマートホームのGitHubリポジトリで以下を参照してください。

CameraController

トピック 説明
カメラ用のスマートホームスキルを作成する セキュリティカメラ用スマートホームスキル作成の概念と詳細を説明します。
MediaMetadata 録画の新規開始、更新、削除をAlexaに通知する機能です。
アクセス権限を設定してAlexaへのユーザー認証を実現する Alexaに対してユーザーを識別するベアラートークンを取得するプロセスを説明します。
Alexaイベントゲートウェイにイベントを送信する 録画の新規開始、更新、削除に関してイベントをAlexaに送信する方法を説明します。