Google Home デベロッパー センターにようこそ。スマートホーム アクションの開発方法を学ぶことができます。注: アクションの作成は、引き続き Actions Console で行います。
コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

スマートホームの CameraStream トレイトのスキーマ

action.devices.traits.CameraStream - このトレイトは、デバイスのカメラ ストリームを制御する方法を指定します。

このトレイトは、スマートディスプレイ、Chromecast 対応デバイス、スマートフォンに動画フィードをストリーミングできるデバイスに使用します。セキュリティ カメラには主に大型カメラがあります。ただし、カメラを備えた複雑なデバイス(ビデオ会議デバイス、カメラ付きの掃除機など)にも当てはまります。

デバイスの属性

この特性を持つデバイスは、SYNC オペレーションの一部として次の属性を報告する可能性があります。SYNC インテントの処理の詳細については、インテント フルフィルメントをご覧ください。

属性 タイプ 説明
cameraStreamSupportedProtocols 配列

必須。

カメラ ストリームでサポートされているメディアタイプ(優先順)。通常、この配列内でターゲット サーフェスと互換性のある最初のプロトコルがリクエストされます。

[item, ...] 文字列

メディアタイプ。

サポートされている値:

hls
HTTP ライブ ストリーミング
dash
HTTP による動的適応ストリーミング
smooth_stream
スムーズなストリーミング
progressive_mp4
プログレッシブ MP4(主にクリップに使用)
webrtc
WebRTC
cameraStreamNeedAuthToken ブール値

必須。

カメラフィードをストリーミングするためのターゲット サーフェス用に、cameraStreamAuthToken を介して認証トークンを提供するかどうか。

カメラは複数のプロトコルをサポートしており、認証トークンは必要ありません。

{
  "cameraStreamSupportedProtocols": [
    "webrtc",
    "hls",
    "dash",
    "smooth_stream",
    "progressive_mp4"
  ],
  "cameraStreamNeedAuthToken": false
}

1 つのプロトコルをサポートするカメラ(認証トークンが必要)

{
  "cameraStreamSupportedProtocols": [
    "hls"
  ],
  "cameraStreamNeedAuthToken": true
}

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

このトレイトは、次のストリーミング プロトコルをサポートしています。

デバイスのステータス

なし。

デバイスのコマンド

この特性を持つデバイスは、EXECUTE オペレーションの一部として次のコマンドに応答できます。EXECUTE インテントの処理の詳細については、インテント フルフィルメントをご覧ください。

action.devices.commands.GetCameraStream

パラメータ

パラメータ タイプ 説明
StreamToChromecast ブール値

必須。

ストリームを Chromecast デバイスで再生するかどうか。

SupportedStreamProtocols 配列

必須。

希望するデスティネーションでサポートされているメディアタイプ/フォーマット。

[item, ...] 文字列

メディアタイプ。

サポートされている値:

hls
HTTP ライブ ストリーミング
dash
HTTP による動的適応ストリーミング
smooth_stream
スムーズなストリーミング
progressive_mp4
プログレッシブ MP4(主にクリップに使用)
webrtc
WebRTC

結果

結果 タイプ 説明
cameraStreamAuthToken 文字列

ストリームへのアクセスを承認する特定のレシーバの認証トークン。cameraStreamNeedAuthToken が true で、この値が指定されていない場合は、ユーザーの OAuth 認証情報が認証トークンとして使用されます。

cameraStreamProtocol 文字列

必須。

ストリーム URL が指すメディア形式。SupportedStreamProtocols コマンド パラメータに表示されているプロトコルを指定する必要があります。

サポートされている値:

hls
HTTP ライブ ストリーミング
dash
HTTP による動的適応ストリーミング
smooth_stream
スムーズなストリーミング
progressive_mp4
プログレッシブ MP4(主にクリップに使用)
webrtc
WebRTC

WebRTC 以外の結果

結果 タイプ 説明
cameraStreamAccessUrl 文字列

必須。

cameraStreamProtocol で指定された形式でリアルタイム ストリームを取得するための URL エンドポイント。

cameraStreamReceiverAppId 文字列

StreamToChromecast パラメータが true の場合にカメラ ストリームを処理するキャスト レシーバー ID。指定しない場合はデフォルトのレシーバーが使用されます。

WebRTC の結果

結果 タイプ 説明
cameraStreamSignalingUrl 文字列

必須。

カメラとクライアントのセッション記述プロトコル(SDP)を取得、交換するための URL エンドポイント。クライアントは、リクエスト ヘッダーで認証トークンとして cameraStreamAuthToken を使用するシグナリング URL を返す必要があります。

cameraStreamOffer 文字列

オファー セッション記述プロトコル(SDP)を提供します。

cameraStreamIceServers 文字列

エンコードされた JSON 文字列と RTCIceServer の説明を使用するインタラクティブ接続確立(ICE)サーバーを表します。STUN(Session Traversal Utilities for NAT)サーバーを指定しない場合、プラットフォームはデフォルトで Google の一般公開 STUN サーバーになります。TURN(NAT 関連のリレーを使用したトラバーサル)は、提供された IP / ICE の候補が(メディア サーバー、パブリック ホスト、ICE 候補、リレー ICE 候補などで)一般公開されることを保証できない場合にのみ必要です。

玄関のカメラ(デフォルトのキャスト レシーバー)を表示する

{
  "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4",
  "cameraStreamProtocol": "progressive_mp4"
}

玄関のカメラを表示(カスタムの Cast レシーバー)

{
  "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4",
  "cameraStreamReceiverAppId": "1g2f89213hg",
  "cameraStreamAuthToken": "12657342190192783",
  "cameraStreamProtocol": "progressive_mp4"
}

玄関のカメラの映像を表示(WebRTC ストリーム)

{
  "cameraStreamIceServers": "[{\"urls\": \"stun:stun.l.partner.com:19302\"},{\"urls\":\"turn:192.158.29.39:3478?transport=udp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"},{\"urls\": \"turn:192.158.29.39:3478?transport=tcp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"}]",
  "cameraStreamSignalingUrl": "https://example.com/signaling/answer",
  "cameraStreamOffer": "o=- 4611731400430051336 2 IN IP4 127.0.0.1...",
  "cameraStreamProtocol": "webrtc"
}

デバイスエラー

エラーと例外のリストをご覧ください。

WebRTC プロトコル仕様

WebRTC を使用するメリットは、低レイテンシと一方向通話です。WebRTC は、POST 本文と JSON 形式のレスポンスを含む POST メソッドを使用します。

WebRTC は現在、Google Nest スマートディスプレイ デバイスと Chromecast with Google TV デバイスでサポートされています。

このセクションでは、WebRTC ストリーム プロトコルを使用する場合の要件について説明します。

データの種類 パラメータ / 定義
信号リクエスト ヘッダー

ヘッダーは次の要件を満たしている必要があります。

  • 認証: 認証ヘッダーは、トークンタイプが BearercameraStreamAuthTokenGetCameraStream 認証トークンの認証トークンを使用する必要があります。
  • コンテンツ タイプ: application/json.
信号リクエスト パラメータ

リクエストには、次のパラメータを含めることが可能です。

  • action: 文字列。有効な値は次のとおりです。
    • offer: プロバイダからの SDP メッセージを提供します。
    • answer: プロバイダからの SDP メッセージに応答します。
    • end: 現在のセッションを閉じます。
  • deviceId: 文字列。SYNC または EXECUTE リクエストで報告されたデバイス ID。
  • sdp: 文字列。ピア接続の Session Description Protocol メッセージが含まれます。内容は action パラメータの値に基づいています。action が「end」の場合、このパラメータは空にできます。
信号レスポンス パラメータ

レスポンスには、次のパラメータを含めることが可能です。

  • action: 文字列。レスポンスの値は answer 型にする必要があります。
  • sdp: 文字列。応答する応答の SDP メッセージ。

WebRTC の要件と推奨事項

  • Google は現在、一方向(半二重)通信をサポートしています。
  • バンドルと rtcp-mux をサポートする必要があります。
  • (D)TLS 1.2 以降を使用する必要があります。
  • Trickle ICE はサポートされていません。SCP を送信する前に、ICE の候補をすべて収集する必要があります。
  • 接続が成功する可能性を高めるため、UDP/IPv4、TCP/IPv4、UDP/IPv6、TCP/IPv6 ICE の候補を含めることを強くおすすめします。

サポートされている動画の解像度:

  • 最小: 480p
  • 最大: 1080p

サポートされている動画コーデック:

  • VP8
  • H.264

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

  • Opus(推奨コーデック)
  • G.711/PCMU
  • G.722

クロスオリジン リソース シェアリング

クロスオリジン リソース シェアリング(CORS)は、追加の HTTP ヘッダーを使用して、あるオリジンで実行されているウェブ アプリケーションが別のオリジンから選択されたリソースにアクセスできるようにブラウザに伝えるメカニズムです。cameraStreamSignalingUrl をホストするサーバーは、次のヘッダーで応答する必要があります。

Access-Control-Allow-Origin: https://www.gstatic.com

信号リクエストとレスポンスの例

次の例は、Google がシグナリング サービスに送信するリクエストと、それに対応する Google へのレスポンスを示しています。

リクエスト
Header:

Authentication: Bearer <cameraStreamAuthToken>
Content-Type: application/json

POST body:

// When camera offer SDP is provided in the execution response, Google provides an answer SDP.
{
  "action": "answer",
  "deviceId": "123",
  "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..."
}

// When camera offer SDP is not provided in execution response, Google generates and provides an offer SDP.
{
  "action": "offer",
  "deviceId": "123",
  "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..."
}

// Close the current stream session.
{
  "action": "end"
  "deviceId": "123"
}

レスポンス
// Response to accept the answer SDP in the request.
Response Code : 200
{}

// Response to provide the answer SDP from the service provider.
Response Code : 200
{
  // When the camera offer SDP is not provided in the execution response,
  // Google provides the answer SDP via the signaling response.
  "action": "answer"
  "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..."
}

// Response to close current session.
Response Code : 200
{}