Skema CameraLiveStream

sdm.devices.traits.CameraLiveStream

Sifat ini dimiliki oleh perangkat apa pun yang mendukung live streaming.

Kolom

Kolom Deskripsi Jenis Data
maxVideoResolution Resolusi maksimum video live stream. VideoResolution
videoCodecs Codec video yang didukung untuk live stream. array(string)
Nilai: ["H264"]
audioCodecs Codec audio yang didukung untuk live stream. array(string)
Nilai: ["AAC"]
supportedProtocols Protokol streaming yang didukung oleh perangkat. Nilai kolom ini menunjukkan perintah yang didukung untuk perangkat. Misalnya, jika kolom ini berisi WEB_RTC, hanya perintah WEB_RTC yang didukung. array(string)
Nilai: ["RTSP", "WEB_RTC"]

Resolusi Video (maxVideoResolution)

Kolom Deskripsi Jenis Data
width Lebar resolusi gambar maksimum. Juga dapat digunakan sebagai parameter kueri pada URL download. int32
Contoh: 640
height Tinggi resolusi gambar maksimum. Juga dapat digunakan sebagai parameter kueri pada URL download. int32
Contoh: 480

Contoh permintaan dan respons GET

Permintaan

GET /enterprises/project-id/devices/device-id

Respons

{
  "name" : "enterprises/project-id/devices/device-id",
  "traits" : {
    "sdm.devices.traits.CameraLiveStream" : {
      "maxVideoResolution" : {
        "width" : 640,
        "height" : 480
      },
      "videoCodecs" : ["H264"],
      "audioCodecs" : ["AAC"],
      "supportedProtocols" : ["WEB_RTC"]
    }
  }
}

Perintah

GenerateRtspStream

Nest Cam (lama) Nest Hub Max Nest Doorbell (lama) 

Meminta token untuk mengakses URL live stream RTSP.

URL live stream RTSP tidak dapat dibagikan antarklien. URL streaming hanya dapat digunakan oleh satu klien pada satu waktu. Jika beberapa klien ingin melakukan streaming dari kamera yang sama secara bersamaan, perintah RTSP harus dikirim untuk setiap klien, dan setiap klien harus menggunakan URL streaming-nya sendiri.

Permintaan dan respons GenerateRtspStream

Permintaan

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
  "params" : {}
}

Respons

{
  "results" : {
    "streamUrls" : {
      "rtspUrl" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken"
    },
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
    "streamToken" : "g.0.streamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

Kolom respons GenerateRtspStream

Kolom Deskripsi Jenis Data
streamUrls Peta URL live stream RTSP. object
streamExtensionToken Token yang akan digunakan untuk memperluas streamToken untuk live stream RTSP. string
Contoh: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
streamToken Token yang akan digunakan untuk mengakses live stream RTSP. string
Contoh: "g.0.streamingToken"
expiresAt Waktu saat streamExtensionToken dan streamToken berakhir masa berlakunya, dalam format RFC 3339. string
Contoh: "2018-01-04T18:30:00.000Z"

ExtendRtspStream

Nest Cam (lama) Nest Hub Max Nest Doorbell (lama) 

Meminta token akses URL live stream RTSP baru untuk mengganti token akses RTSP yang valid sebelum masa berlakunya habis. Ini juga digunakan untuk mengganti token RTSP yang valid dari permintaan perintah ExtendRtspStream sebelumnya.

Sesi live stream kamera hanya berlaku selama 5 menit. Jika Anda perlu memperpanjang live stream, gunakan perintah ExtendFormatStream yang sesuai pada karakteristik CameraLiveStream untuk format streaming yang Anda buat.

Permintaan dan respons ExtendRtspStream

Permintaan

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.ExtendRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

Respons

{
  "results" : {
    "streamExtensionToken" : "dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "streamToken" : "g.0.newStreamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

Kolom permintaan ExtendRtspStream

Kolom Deskripsi Jenis Data
streamExtensionToken Token yang akan digunakan untuk meminta ekstensi ke token streaming RTSP. string
Contoh: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."

Kolom respons ExtendRtspStream

Kolom Deskripsi Jenis Data
streamExtensionToken Token yang akan digunakan untuk melihat live stream RTSP yang ada dan meminta perpanjangan ke token streaming. string
Contoh: "dGNUlTU2CjY5Y3VKaTZwR3o4Y1..."
streamToken Token baru yang akan digunakan untuk mengakses live stream RTSP yang ada. string
Contoh: "g.0.newStreamingToken"
expiresAt Waktu saat streamExtensionToken dan streamToken berakhir masa berlakunya, dalam format RFC 3339. string
Contoh: "2018-01-04T18:30:00.000Z"

StopRtspStream

Nest Cam (lama) Nest Hub Max Nest Doorbell (lama) 

Membatalkan token akses RTSP yang valid dan menghentikan live stream RTSP yang terkait dengan token akses tersebut.

Permintaan dan respons StopRtspStream

Permintaan

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

Respons

{}

Kolom permintaan StopRtspStream

Kolom Deskripsi Jenis Data
streamExtensionToken Token yang akan digunakan untuk membatalkan live stream RTSP yang ada. string
Contoh: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."

GenerateWebRtcStream

Nest Cam (lama) Nest Cam (outdoor atau indoor, baterai) Nest Cam dengan lampu sorot Nest Cam (indoor, berkabel) Nest Doorbell (baterai) Nest Doorbell (berkabel) 

Membuat live stream WebRTC untuk perangkat.

Respons dan permintaan GenerateWebRtcStream

Permintaan

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream",
  "params" : {
    "offerSdp" : "offerSdp"
  }
}

Respons

{
  "results" : {
    "answerSdp" : "answerSdp",
    "expiresAt" : "2020-01-04T18:30:00.000Z",
    "mediaSessionId" : "utbOVJepsMYYo85qWLghFwpd6b..."
  }
}

Membuat kolom permintaan WebRtcStream

Sebaiknya gunakan Contoh Aplikasi Web untuk mempelajari cara membuat live stream yang sukses. Contoh ini menghasilkan offerSdp valid yang memenuhi semua batasan penawaran SDP untuk kamera Nest.

Penawaran SDP untuk kamera Nest harus memenuhi batasan berikut:

  • Hanya format Terpadu yang didukung. Paket B tidak didukung.
  • Semua baris media (m=) harus ada dalam penawaran dan harus dalam urutan berikut:
    1. audio
    2. video
    3. aplikasi
  • Trickle ICE didukung, tetapi tidak wajib.
  • Hanya codec Opus yang didukung untuk audio.
  • Setelan audio harus disetel ke a=recvonly (khusus terima).
  • Penawaran harus diakhiri dengan karakter baris baru \r\n atau \n.

Lihat contoh penawaran yang valid

Tidak terformat:

v=0\r\no=- 2214114893783582286 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:6ReD\r\na=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:63 red/48000/2\r\na=fmtp:63 111/111\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 35 36 124 119 123 118 114 115 116 37\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:6ReD\r\na=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 VP9/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 profile-id=2\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:122 VP9/90000\r\na=rtcp-fb:122 goog-remb\r\na=rtcp-fb:122 transport-cc\r\na=rtcp-fb:122 ccm fir\r\na=rtcp-fb:122 nack\r\na=rtcp-fb:122 nack pli\r\na=fmtp:122 profile-id=1\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=102\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:120 rtx/90000\r\na=fmtp:120 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 H264/90000\r\na=rtcp-fb:108 goog-remb\r\na=rtcp-fb:108 transport-cc\r\na=rtcp-fb:108 ccm fir\r\na=rtcp-fb:108 nack\r\na=rtcp-fb:108 nack pli\r\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:35 AV1/90000\r\na=rtcp-fb:35 goog-remb\r\na=rtcp-fb:35 transport-cc\r\na=rtcp-fb:35 ccm fir\r\na=rtcp-fb:35 nack\r\na=rtcp-fb:35 nack pli\r\na=rtpmap:36 rtx/90000\r\na=fmtp:36 apt=35\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032\r\na=rtpmap:119 rtx/90000\r\na=fmtp:119 apt=124\r\na=rtpmap:123 H264/90000\r\na=rtcp-fb:123 goog-remb\r\na=rtcp-fb:123 transport-cc\r\na=rtcp-fb:123 ccm fir\r\na=rtcp-fb:123 nack\r\na=rtcp-fb:123 nack pli\r\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032\r\na=rtpmap:118 rtx/90000\r\na=fmtp:118 apt=123\r\na=rtpmap:114 red/90000\r\na=rtpmap:115 rtx/90000\r\na=fmtp:115 apt=114\r\na=rtpmap:116 ulpfec/90000\r\na=rtpmap:37 flexfec-03/90000\r\na=rtcp-fb:37 goog-remb\r\na=rtcp-fb:37 transport-cc\r\na=fmtp:37 repair-window=10000000\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:6ReD\r\na=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4\r\na=ice-options:trickle\r\na=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C\r\na=setup:actpass\r\na=mid:2\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n

Diformat:

v=0
o=- 2214114893783582286 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 2
a=extmap-allow-mixed
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:6ReD
a=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4
a=ice-options:trickle
a=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 102 121 127 120 125 107 108 109 35 36 124 119 123 118 114 115 116 37
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:6ReD
a=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4
a=ice-options:trickle
a=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:122 VP9/90000
a=rtcp-fb:122 goog-remb
a=rtcp-fb:122 transport-cc
a=rtcp-fb:122 ccm fir
a=rtcp-fb:122 nack
a=rtcp-fb:122 nack pli
a=fmtp:122 profile-id=1
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:35 AV1/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:124 H264/90000
a=rtcp-fb:124 goog-remb
a=rtcp-fb:124 transport-cc
a=rtcp-fb:124 ccm fir
a=rtcp-fb:124 nack
a=rtcp-fb:124 nack pli
a=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
a=rtpmap:123 H264/90000
a=rtcp-fb:123 goog-remb
a=rtcp-fb:123 transport-cc
a=rtcp-fb:123 ccm fir
a=rtcp-fb:123 nack
a=rtcp-fb:123 nack pli
a=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032
a=rtpmap:118 rtx/90000
a=fmtp:118 apt=123
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=rtpmap:37 flexfec-03/90000
a=rtcp-fb:37 goog-remb
a=rtcp-fb:37 transport-cc
a=fmtp:37 repair-window=10000000
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:6ReD
a=ice-pwd:QBmcZYd/t+InpMVkxQEEXnE4
a=ice-options:trickle
a=fingerprint:sha-256 DD:7E:6F:CD:B8:13:4E:37:D2:92:6D:8E:30:FB:FE:13:29:C9:F8:FD:78:0B:C4:59:42:61:BC:CF:02:91:6B:3C
a=setup:actpass
a=mid:2
a=sctp-port:5000
a=max-message-size:262144
Kolom Deskripsi Jenis Data
offerSdp Penawaran SDP, khusus untuk perangkat lokal yang akan menampilkan live stream WebRTC. string
Contoh: "offerSdp"

Membuat kolom respons WebRtcStream

answerSdp harus digunakan untuk membuat live stream dalam waktu 30 detik setelah menerima respons. Jika tidak, masa berlakunya akan habis. Jika masa berlakunya habis, jalankan perintah GenerateWebRtcStream lagi untuk menerima answerSdp baru.

Saat membuka saluran WebRTC untuk live stream, pastikan untuk membuat saluran data serta saluran video.

Kolom Deskripsi Jenis Data
answerSdp Jawaban SDP yang akan digunakan dengan perangkat lokal yang akan menampilkan live stream WebRTC. string
Contoh: "answerSdp"
expiresAt Waktu saat akses ke live stream WebRTC berakhir, dalam format RFC 3339. string
Contoh: "2020-01-04T18:30:00.000Z"
mediaSessionId ID sesi media dari live stream WebRTC yang dibuat. string
Contoh: "utbOVJepsMYYo85qWLghFwpd6b..."

ExtendWebRtcStream

Nest Cam (lama) Nest Cam (outdoor atau indoor, baterai) Nest Cam dengan lampu sorot Nest Cam (indoor, berkabel) Nest Doorbell (berkabel)   Berkabel   

Minta agar akses ke live stream WebRTC yang ada diperpanjang sebelum masa berlakunya habis.

Streaming WebRTC hanya dapat diperpanjang pada kamera yang didukung kabel. Kamera bertenaga baterai dianggap bertenaga kabel saat dicolokkan untuk mengisi daya. Jika kamera menggunakan daya baterai, permintaan untuk memperpanjang aliran WebRTC yang aktif akan diabaikan.

Sesi live stream kamera hanya berlaku selama 5 menit. Jika Anda perlu memperpanjang live stream, gunakan perintah ExtendFormatStream yang sesuai pada karakteristik CameraLiveStream untuk format streaming yang Anda buat.

Permintaan dan respons ExtendWebRtcStream

Permintaan

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.ExtendWebRtcStream",
  "params" : {
    "mediaSessionId" : "utbOVJepsMYYo85qWLghFwpd6b..."
  }
}

Respons

{
  "results" : {
    "expiresAt" : "2018-01-04T18:30:00.000Z",
    "mediaSessionId" : "utbOVJepsMYYo85qWLghFwpd6b..."
  }
}

Kolom permintaan ExtendWebRtcStream

Kolom Deskripsi Jenis Data
mediaSessionId ID sesi media live stream WebRTC yang akan diperpanjang. string
Contoh: "utbOVJepsMYYo85qWLghFwpd6b..."

Kolom respons ExtendWebRtcStream

Kolom Deskripsi Jenis Data
expiresAt Waktu baru saat akses ke live stream WebRTC berakhir, dalam format RFC 3339. string
Contoh: "2018-01-04T18:30:00.000Z"
mediaSessionId ID sesi media live stream WebRTC yang diperpanjang. string
Contoh: "utbOVJepsMYYo85qWLghFwpd6b..."

StopWebRtcStream

Nest Cam (lama) Nest Cam (outdoor atau indoor, baterai) Nest Cam dengan lampu sorot Nest Cam (indoor, berkabel) Nest Doorbell (baterai) Nest Doorbell (berkabel) 

Membatalkan sesi media WebRTC yang valid dan menghentikan live stream WebRTC yang terkait dengan sesi tersebut.

Permintaan dan respons StopWebRtcStream

Permintaan

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.StopWebRtcStream",
  "params" : {
    "mediaSessionId" : "utbOVJepsMYYo85qWLghFwpd6b..."
  }
}

Respons

{}

Kolom permintaan StopWebRtcStream

Kolom Deskripsi Jenis Data
mediaSessionId ID sesi media live stream WebRTC untuk berhenti. string
Contoh: "utbOVJepsMYYo85qWLghFwpd6b..."

Error

Kode error berikut mungkin ditampilkan terkait dengan fitur ini:

Pesan Error PPK Pemecahan masalah
Kamera tidak tersedia untuk streaming. FAILED_PRECONDITION Kamera sedang offline atau tidak tersedia untuk streaming karena masalah teknis.
Perintah tidak didukung untuk bel pintu. FAILED_PRECONDITION Streaming WebRTC tidak dapat diperpanjang pada bel pintu bertenaga baterai. Jika streaming di bel pintu perlu ditonton setelah durasi sesi awal, hentikan streaming yang ada dan buat yang baru.
Izin ditolak. PERMISSION_DENIED user tidak memberikan izin developer izin tingkat perangkat yang sesuai di Partner Connections Manager (PCM) yang diperlukan untuk menjalankan command.

Saat membuat live stream WebRTC, error ini juga dapat berarti setelan audio di offerSdp salah.

Lihat Referensi Kode Error API untuk daftar lengkap kode error API.