Selamat datang di Pusat Developer Google Home, tujuan baru untuk mempelajari cara mengembangkan tindakan smart home. Catatan: Anda akan terus membuat tindakan di konsol Actions.
Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Skema Atribut CameraStream Smart Home

action.devices.traits.CameraStream - Sifat ini mencakup cara mengontrol streaming kamera perangkat.

Sifat ini termasuk dalam perangkat yang memiliki kemampuan untuk melakukan streaming feed video ke layar smart, perangkat berkemampuan Chromecast, atau smartphone. Umumnya, kamera keamanan atau kamera bayi. Namun, fitur ini juga berlaku untuk perangkat yang lebih kompleks yang memiliki kamera di dalamnya (misalnya, perangkat konferensi video atau robot vakum dengan kamera di dalamnya).

ATRIBUT Perangkat

Perangkat dengan karakteristik ini dapat melaporkan atribut berikut sebagai bagian dari operasi SYNC. Untuk mempelajari penanganan intent SYNC lebih lanjut, lihat Penjelasan intent.

Atribut Jenis Deskripsi
cameraStreamSupportedProtocols Array

Wajib.

Jenis media yang didukung untuk streaming kamera, diurutkan berdasarkan preferensi. Biasanya, protokol pertama dalam array ini yang kompatibel dengan platform target akan diminta.

[item, ...] String

Jenis media.

Nilai yang didukung:

hls
Live Streaming HTTP
dash
Streaming Adaptif Dinamis melalui HTTP
smooth_stream
Streaming yang Lancar
progressive_mp4
Progressive MP4 (kebanyakan digunakan untuk klip)
webrtc
WebRTC
cameraStreamNeedAuthToken Boolean

Wajib.

Apakah token autentikasi akan diberikan melalui cameraStreamAuthToken untuk platform target untuk menstreaming feed kamera.

Contoh

Kamera dengan beberapa dukungan protokol, tidak memerlukan token autentikasi.

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

Kamera mendukung satu protokol, memerlukan token autentikasi.

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

Protokol streaming yang didukung

Sifat ini mendukung protokol streaming berikut:

STATUS Perangkat

Tidak ada.

PERMINTAAN Perangkat

Perangkat dengan karakteristik ini dapat merespons perintah berikut sebagai bagian dari operasi EXECUTE. Untuk mempelajari penanganan intent EXECUTE lebih lanjut, lihat Penjelasan intent.

action.devices.commands.GetCameraStream

Parameter

Parameter Jenis Deskripsi
StreamToChromecast Boolean

Wajib.

Apakah streaming akan diputar di perangkat Chromecast.

SupportedStreamProtocols Array

Wajib.

Jenis/format media yang didukung oleh tujuan yang diinginkan.

[item, ...] String

Jenis media.

Nilai yang didukung:

hls
Live Streaming HTTP
dash
Streaming Adaptif Dinamis melalui HTTP
smooth_stream
Streaming yang Lancar
progressive_mp4
Progressive MP4 (kebanyakan digunakan untuk klip)
webrtc
WebRTC

Hasil

Hasil Jenis Deskripsi
cameraStreamAuthToken String

Token autentikasi untuk penerima tertentu guna mengizinkan akses ke streaming. Jika cameraStreamNeedAuthToken disetel ke benar (true) dan nilai ini tidak diberikan, kredensial OAuth pengguna akan digunakan sebagai token autentikasi.

cameraStreamProtocol String

Wajib.

Format media yang dituju oleh URL streaming. Harus berupa salah satu protokol yang tercantum di parameter perintah SupportedStreamProtocols.

Nilai yang didukung:

hls
Live Streaming HTTP
dash
Streaming Adaptif Dinamis melalui HTTP
smooth_stream
Streaming yang Lancar
progressive_mp4
Progressive MP4 (kebanyakan digunakan untuk klip)
webrtc
WebRTC

Hasil non-WebRTC

Hasil Jenis Deskripsi
cameraStreamAccessUrl String

Wajib.

Endpoint URL untuk mengambil streaming real-time dalam format yang ditentukan oleh cameraStreamProtocol.

cameraStreamReceiverAppId String

ID penerima transmisi untuk memproses streaming kamera saat parameter StreamToChromecast disetel ke benar; penerima default akan digunakan jika tidak diberikan.

Hasil WebRTC

Hasil Jenis Deskripsi
cameraStreamSignalingUrl String

Wajib.

Endpoint URL untuk mengambil dan bertukar protokol deskripsi sesi (SDP) kamera dan klien. Klien harus menampilkan URL sinyal yang menggunakan cameraStreamAuthToken sebagai token autentikasi di header permintaan.

cameraStreamOffer String

Protokol deskripsi sesi penawaran (SDP).

cameraStreamIceServers String

Mewakili server Interactive Connectivity Enforcementment (ICE) menggunakan string JSON yang dienkode dengan deskripsi RTCIceServer. Jika Anda tidak menentukan server STUN (Session Traversal Utilities for NAT), platform ini akan ditetapkan secara default ke server STUN publik Google. Server Turn (Traversal Using Relays around NAT) hanya diperlukan jika Anda tidak dapat menjamin bahwa kandidat IP / ICE yang diberikan akan dapat diakses secara publik (mis. melalui server media, kandidat ICE host publik, kandidat ICE relai, dll).

Contoh

Tampilkan kamera pintu depan (penerima Cast default).

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

Tampilkan kamera pintu depan (penerima Cast khusus).

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

Tampilkan kamera pintu depan (aliran data 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"
}

KESALAHAN perangkat

Lihat daftar lengkap error dan pengecualian.

Spesifikasi protokol WebRTC

Manfaat menggunakan WebRTC adalah latensi rendah dan percakapan 1 arah. WebRTC menggunakan metode POST dengan isi POST dan respons dalam format JSON.

WebRTC saat ini hanya didukung di perangkat Layar Smart Google Nest.

Bagian ini menjelaskan persyaratan saat menggunakan protokol streaming WebRTC.

Jenis Data Parameter/Definisi
Header permintaan sinyal

Header harus memenuhi persyaratan berikut:

  • Authentication: Header autentikasi harus menggunakan token autentikasi dari nilai hasil GetCameraStream untuk cameraStreamAuthToken dengan jenis token Bearer.
  • Jenis Konten: application/json.
Parameter permintaan pemberian sinyal

Permintaan dapat menyertakan parameter berikut:

  • action: String. Nilai yang valid adalah:
    • offer: Menawarkan pesan SDP dari penyedia.
    • answer: Menjawab pesan SDP dari penyedia.
    • end: Menutup sesi yang sedang berlangsung.
  • deviceId: String. ID perangkat seperti yang dilaporkan dalam permintaan SYNC atau EXECUTE.
  • sdp: String. Berisi pesan Protocol Deskripsi Sesi untuk koneksi pembanding. Konten ini didasarkan pada nilai parameter action. Jika action adalah "end", parameter ini dapat kosong.
Parameter respons sinyal

Responsnya bisa mencakup parameter berikut:

  • action: String. Nilai respons harus berupa jenis answer.
  • sdp: String. Pesan SDP untuk jawaban yang merespons.

Persyaratan dan Rekomendasi WebRTC

  • Google saat ini mendukung komunikasi 1 arah (setengah dupleks).
  • Anda harus mendukung pemaketan dan rtcp-mux.
  • Anda harus menggunakan (D)TLS 1.2 atau yang lebih baru.
  • Trickle ICE tidak didukung. Semua kandidat ICE harus dikumpulkan terlebih dahulu sebelum mengirim SDP.
  • Sebaiknya Anda menyertakan kandidat UDP/IPv4, TCP/IPv4, UDP/IPv6, dan TCP/IPv6 ICE untuk meningkatkan kemungkinan keberhasilan koneksi.

Resolusi video yang didukung:

  • Minimum: 480p
  • Maksimum: 1080p

Codec video yang didukung:

  • VP8
  • H.264

Codec audio yang didukung:

  • Opus (codec opsional)
  • G.711/PCMU
  • G.722

Berbagi Resource Lintas Asal

Cross-Origin Resource Sharing (CORS) adalah mekanisme yang menggunakan Header HTTP tambahan untuk memberi tahu browser agar mengizinkan aplikasi web yang berjalan di satu asal mengakses resource yang dipilih dari asal yang berbeda. Server yang menghosting cameraStreamSignalingUrl harus merespons dengan header berikut:

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

Contoh permintaan dan respons sinyal

Contoh berikut menunjukkan permintaan yang dikirim Google ke layanan sinyal Anda dan respons yang sesuai ke Google.

Permintaan
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"
}

Respons
// 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
{}