Alexa.CameraStreamControllerインターフェース
Alexa.CameraStreamController
インターフェースには、カメラのエンドポイントからカメラストリームを取得するのに使用されるメッセージが指定されます。カメラとやりとりするスキルの詳細については、カメラ用のスマートホームスキルを作成するを参照してください。
CameraStreamController
インターフェースでサポートされているロケールについては、機能インターフェースの一覧を参照してください。
発話
Alexa.CameraStreamController
インターフェースを使用する場合、音声対話モデルは既にビルドされています。以下に、ユーザーの発話の例を示します。
Alexa, show the front door camera.
ユーザーがこのような発話をしたら、Alexaがそれに対応するディレクティブをスキルに送信します。
前提条件と要件
カメラは正しい形式でビデオフィードを送信する必要があります。また、セキュリティ要件とパフォーマンス要件も満たす必要があります。カメラおよびビデオフィードの技術要件とセキュリティ要件は次のとおりです。
カテゴリー | 要件 |
---|---|
ストリーミングプロトコル | 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秒以内に発生しなければなりません。 |
検出
Alexa.CameraStreamController
をサポートするエンドポイントは、Alexa.Discoveryの標準検出メカニズムを使用して表します。また、cameraStreamConfiguration
オブジェクトの配列を含めることによって、応答にカメラコンフィギュレーションを記述します。
表示カテゴリーにはCAMERA
を使用します。表示カテゴリーの一覧は、表示カテゴリーを参照してください。
応答例
{
"event": {
"header": {
"namespace":"Alexa.Discovery",
"name":"Discover.Response",
"payloadVersion": "3",
"messageId": "<メッセージID>"
},
"payload":{
"endpoints":[
{
"endpointId": "<unique ID of the endpoint>",
"manufacturerName": "<エンドポイントのメーカー名>",
"modelName": "<エンドポイントのモデル名>",
"description": "<Alexaアプリに表示される説明>", "friendlyName": "玄関のカメラ",
"displayCategories": [ "CAMERA" ],
"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.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」です。 | 文字列 | ◯ |
ディレクティブ
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」です。 | 文字列 | ◯ |
プロパティとイベント
この機能では、以下のように応答する必要があります。
- 同期的に応答します。つまり、Lambda関数からAlexaに応答を送信します。
応答
を送信する場合、メッセージの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 |
ストリームの有効期限です。UTCで指定します。 | 文字列はISO 8601形式で、YYYY-MM-DDThh:mm:ssZとなります。 | ✕ |
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リポジトリで以下を参照してください。
トピック | 説明 |
---|---|
カメラ用のスマートホームスキルを作成する | セキュリティカメラ用スマートホームスキル作成の概念と詳細を説明します。 |
MediaMetadata | 録画の新規開始、更新、削除をAlexaに通知する機能です。 |
アクセス権限を設定してAlexaへのユーザー認証を実現する | Alexaに対してユーザーを識別するベアラートークンを取得するプロセスを説明します。 |
Alexaイベントゲートウェイにイベントを送信する | 録画の新規開始、更新、削除に関してイベントをAlexaに送信する方法を説明します。 |