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)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)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)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)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:- audio
- video
- 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)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)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.