スマートホームの CameraStream トレイトのスキーマ
action.devices.traits.CameraStream
- このトレイトは、デバイスのカメラ ストリームを制御する方法を指定します。
このトレイトは、スマートディスプレイ、Chromecast 対応デバイス、スマートフォンに動画フィードをストリーミングできるデバイスに使用します。セキュリティ カメラには主に大型カメラがあります。ただし、カメラを備えた複雑なデバイス(ビデオ会議デバイス、カメラ付きの掃除機など)にも当てはまります。
デバイスの属性
この特性を持つデバイスは、SYNC
オペレーションの一部として次の属性を報告する可能性があります。SYNC
インテントの処理の詳細については、インテント フルフィルメントをご覧ください。
属性 | タイプ | 説明 |
---|---|---|
cameraStreamSupportedProtocols |
配列 |
必須。 カメラ ストリームでサポートされているメディアタイプ(優先順)。通常、この配列内でターゲット サーフェスと互換性のある最初のプロトコルがリクエストされます。 |
[item, ...] |
文字列 |
メディアタイプ。 サポートされている値:
|
cameraStreamNeedAuthToken |
ブール値 |
必須。 カメラフィードをストリーミングするためのターゲット サーフェス用に、 |
例
カメラは複数のプロトコルをサポートしており、認証トークンは必要ありません。
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
1 つのプロトコルをサポートするカメラ(認証トークンが必要)
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
サポートされているストリーミング プロトコル
このトレイトは、次のストリーミング プロトコルをサポートしています。
webrtc
: WebRTChls
: HTTP Live Streamingdash
: Dynamic Adaptive Streaming over HTTPsmooth_stream
: Smooth Streamingprogressive_mp4
: プログレッシブ MP4(クリップでよく使用されます)
デバイスのステータス
なし。
デバイスのコマンド
この特性を持つデバイスは、EXECUTE
オペレーションの一部として次のコマンドに応答できます。EXECUTE
インテントの処理の詳細については、インテント フルフィルメントをご覧ください。
action.devices.commands.GetCameraStream
パラメータ
パラメータ | タイプ | 説明 |
---|---|---|
StreamToChromecast |
ブール値 |
必須。 ストリームを Chromecast デバイスで再生するかどうか。 |
SupportedStreamProtocols |
配列 |
必須。 希望するデスティネーションでサポートされているメディアタイプ/フォーマット。 |
[item, ...] |
文字列 |
メディアタイプ。 サポートされている値:
|
結果
結果 | タイプ | 説明 |
---|---|---|
cameraStreamAuthToken |
文字列 |
ストリームへのアクセスを承認する特定のレシーバの認証トークン。 |
cameraStreamProtocol |
文字列 |
必須。 ストリーム URL が指すメディア形式。 サポートされている値:
|
WebRTC 以外の結果
結果 | タイプ | 説明 |
---|---|---|
cameraStreamAccessUrl |
文字列 |
必須。
|
cameraStreamReceiverAppId |
文字列 |
|
WebRTC の結果
結果 | タイプ | 説明 |
---|---|---|
cameraStreamSignalingUrl |
文字列 |
必須。 カメラとクライアントのセッション記述プロトコル(SDP)を取得、交換するための 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 ストリーム プロトコルを使用する場合の要件について説明します。
データの種類 | パラメータ / 定義 |
---|---|
信号リクエスト ヘッダー |
ヘッダーは次の要件を満たしている必要があります。
|
信号リクエスト パラメータ | リクエストには、次のパラメータを含めることが可能です。
|
信号レスポンス パラメータ | レスポンスには、次のパラメータを含めることが可能です。
|
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 {}