สคีมา CameraLiveStream
Nest Cam (รุ่นเดิม) 
sdm.devices.traits.CameraLiveStream
ลักษณะนี้เป็นของอุปกรณ์ที่รองรับการไลฟ์สด
ช่อง
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| maxVideoResolution | ความละเอียดสูงสุดของไลฟ์สดวิดีโอ | VideoResolution | 
| videoCodecs | ตัวแปลงรหัสวิดีโอที่รองรับสำหรับไลฟ์สด | array(string)ค่า: ["H264"] | 
| audioCodecs | ตัวแปลงสัญญาณเสียงที่รองรับสำหรับไลฟ์สด | array(string)ค่า: ["AAC"] | 
| supportedProtocols | โปรโตคอลการสตรีมที่อุปกรณ์รองรับ ค่าของฟิลด์นี้จะระบุว่าอุปกรณ์รองรับคำสั่งใด เช่น หากฟิลด์นี้มี WEB_RTC ระบบจะรองรับเฉพาะคำสั่ง WEB_RTC | array(string)ค่า: ["RTSP", "WEB_RTC"] | 
ความละเอียดวิดีโอ (maxVideoResolution)
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| width | ความกว้างของความละเอียดรูปภาพสูงสุด อาจใช้เป็นพารามิเตอร์การค้นหาใน URL การดาวน์โหลดได้ด้วย | int32ตัวอย่าง: 640 | 
| height | ความสูงของความละเอียดรูปภาพสูงสุด อาจใช้เป็นพารามิเตอร์การค้นหาใน URL การดาวน์โหลดได้ด้วย | int32ตัวอย่าง: 480 | 
ตัวอย่างคำขอและการตอบกลับ GET
ส่งคำขอ
GET /enterprises/project-id/devices/device-id
การตอบกลับ
{
  "name" : "enterprises/project-id/devices/device-id",
  "traits" : {
    "sdm.devices.traits.CameraLiveStream" : {
      "maxVideoResolution" : {
        "width" : 640,
        "height" : 480
      },
      "videoCodecs" : ["H264"],
      "audioCodecs" : ["AAC"],
      "supportedProtocols" : ["WEB_RTC"]
    }
  }
}คำสั่ง
GenerateRtspStream
Nest Cam (รุ่นเดิม)ขอโทเค็นเพื่อเข้าถึง URL ของไลฟ์สด RTSP
คุณแชร์ URL ของไลฟ์สด RTSP ระหว่างไคลเอ็นต์ไม่ได้ URL ของสตรีมใช้ได้โดยไคลเอ็นต์เพียงรายเดียวเท่านั้นในแต่ละครั้ง หากไคลเอ็นต์หลายรายต้องการสตรีมจากกล้องตัวเดียวกันในเวลาเดียวกัน คุณต้องส่งคำสั่ง RTSP สำหรับไคลเอ็นต์แต่ละราย และไคลเอ็นต์แต่ละรายต้องใช้ URL สตรีมของตนเอง
คำขอและการตอบกลับ GenerateRtspStream
ส่งคำขอ
POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
  "params" : {}
}
การตอบกลับ
{
  "results" : {
    "streamUrls" : {
      "rtspUrl" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken"
    },
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
    "streamToken" : "g.0.streamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}
ฟิลด์การตอบกลับ GenerateRtspStream
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| streamUrls | แผนที่ของ URL ของไลฟ์สด RTSP | object | 
| streamExtensionToken | โทเค็นที่จะใช้เพื่อขยาย streamTokenสำหรับไลฟ์สด RTSP | stringตัวอย่าง: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..." | 
| streamToken | โทเค็นที่จะใช้เพื่อเข้าถึงไลฟ์สด RTSP | stringตัวอย่าง: "g.0.streamingToken" | 
| expiresAt | เวลาที่ทั้ง streamExtensionTokenและstreamTokenหมดอายุในรูปแบบ RFC 3339 | stringตัวอย่าง: "2018-01-04T18:30:00.000Z" | 
ExtendRtspStream
Nest Cam (รุ่นเดิม)ขอโทเค็นเพื่อการเข้าถึง URL ของสตรีมแบบสด RTSP ใหม่เพื่อแทนที่โทเค็นเพื่อการเข้าถึง RTSP ที่ถูกต้องก่อนที่โทเค็นจะหมดอายุ นอกจากนี้ยังใช้เพื่อแทนที่โทเค็น RTSP ที่ถูกต้องจากคำขอก่อนหน้าของคำสั่ง ExtendRtspStream ได้ด้วย
เซสชันไลฟ์สดของกล้องจะใช้ได้เพียง 5 นาทีเท่านั้น หากต้องการขยายอายุการใช้งานของไลฟ์สด ให้ใช้คำสั่ง ExtendFormatStream ที่เหมาะสมของ CameraLiveStream trait สำหรับรูปแบบสตรีมที่คุณสร้างขึ้น
คำขอและการตอบกลับ ExtendRtspStream
ส่งคำขอ
POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.ExtendRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}
การตอบกลับ
{
  "results" : {
    "streamExtensionToken" : "dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "streamToken" : "g.0.newStreamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}
ฟิลด์คำขอ ExtendRtspStream
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| streamExtensionToken | โทเค็นที่จะใช้เพื่อขอขยายเวลาโทเค็นการสตรีม RTSP | stringตัวอย่าง: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..." | 
ฟิลด์การตอบกลับ ExtendRtspStream
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| streamExtensionToken | โทเค็นที่จะใช้เพื่อดูสตรีมแบบสด RTSP ที่มีอยู่และเพื่อขอต่ออายุโทเค็นการสตรีม | stringตัวอย่าง: "dGNUlTU2CjY5Y3VKaTZwR3o4Y1..." | 
| streamToken | โทเค็นใหม่ที่จะใช้เพื่อเข้าถึงไลฟ์สด RTSP ที่มีอยู่ | stringตัวอย่าง: "g.0.newStreamingToken" | 
| expiresAt | เวลาที่ทั้ง streamExtensionTokenและstreamTokenหมดอายุในรูปแบบ RFC 3339 | stringตัวอย่าง: "2018-01-04T18:30:00.000Z" | 
StopRtspStream
Nest Cam (รุ่นเดิม)ยกเลิกโทเค็นเพื่อการเข้าถึง RTSP ที่ถูกต้องและหยุดไลฟ์สด RTSP ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึงนั้น
คำขอและการตอบกลับ StopRtspStream
ส่งคำขอ
POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}
การตอบกลับ
{}
ฟิลด์คำขอ StopRtspStream
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| streamExtensionToken | โทเค็นที่จะใช้เพื่อยกเลิกไลฟ์สด RTSP ที่มีอยู่ | stringตัวอย่าง: "CjY5Y3VKaTZwR3o4Y19YbTVfMF..." | 
GenerateWebRtcStream
Nest Cam (รุ่นเดิม)สร้างไลฟ์สด WebRTC สำหรับอุปกรณ์
คำขอและการตอบกลับ GenerateWebRtcStream
ส่งคำขอ
POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream",
  "params" : {
    "offerSdp" : "offerSdp"
  }
}
การตอบกลับ
{
  "results" : {
    "answerSdp" : "answerSdp",
    "expiresAt" : "2020-01-04T18:30:00.000Z",
    "mediaSessionId" : "Fkz1FuAENsFxp6Ne1ZyqzaEHtU..."
  }
}
ฟิลด์คำขอ GenerateWebRtcStream
เราขอแนะนำให้ใช้ตัวอย่างเว็บแอปพลิเคชันเพื่อดูวิธีสร้างไลฟ์สดที่ประสบความสำเร็จ ตัวอย่างนี้
            สร้าง offerSdp ที่ถูกต้องซึ่งเป็นไปตามข้อจำกัดของข้อเสนอ SDP ทั้งหมดสำหรับกล้อง Nest
ข้อเสนอ SDP สำหรับกล้อง Nest ต้องเป็นไปตามข้อจำกัดต่อไปนี้
- รองรับเฉพาะรูปแบบ Unified ไม่รองรับ Plan B
- รายการสื่อทั้งหมด (m=) ต้องอยู่ในข้อเสนอและต้องอยู่ในลำดับต่อไปนี้- เสียง
- วิดีโอ
- แอปพลิเคชัน
 
- ระบบรองรับ Trickle ICE แต่ไม่บังคับ
- รองรับเฉพาะตัวแปลงสัญญาณ Opus สำหรับเสียง
- การตั้งค่าเสียงต้องตั้งค่าเป็น a=recvonly(รับเท่านั้น)
- ข้อเสนอต้องลงท้ายด้วยอักขระขึ้นบรรทัดใหม่ของ \r\nหรือ\n
ดูตัวอย่างข้อเสนอที่ถูกต้อง
ไม่ได้จัดรูปแบบ
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
จัดรูปแบบ:
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
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| offerSdp | ข้อเสนอ SDP ที่เฉพาะเจาะจงสำหรับอุปกรณ์ในเครื่องที่จะแสดงไลฟ์สด WebRTC | stringตัวอย่าง: "offerSdp" | 
ฟิลด์การตอบกลับ GenerateWebRtcStream
ต้องใช้ answerSdp เพื่อสร้างไลฟ์สดภายใน 30 วินาทีหลังจากได้รับคำตอบ มิฉะนั้นโทเค็นจะหมดอายุ หากหมดอายุ ให้เรียกใช้คำสั่ง GenerateWebRtcStream อีกครั้งเพื่อรับ answerSdp ใหม่
เมื่อเปิดช่อง WebRTC สำหรับไลฟ์สด ให้ตรวจสอบว่าได้สร้างช่องข้อมูลและช่องวิดีโอ
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| answerSdp | คำตอบ SDP ที่จะใช้กับอุปกรณ์ในเครื่องซึ่งจะแสดงไลฟ์สด WebRTC | stringตัวอย่าง: "answerSdp" | 
| expiresAt | เวลาที่สิทธิ์เข้าถึงไลฟ์สด WebRTC หมดอายุในรูปแบบ RFC 3339 | stringตัวอย่าง: "2020-01-04T18:30:00.000Z" | 
| mediaSessionId | รหัสเซสชันสื่อของไลฟ์สด WebRTC ที่สร้างขึ้น | stringตัวอย่าง: "Fkz1FuAENsFxp6Ne1ZyqzaEHtU..." | 
ExtendWebRtcStream
Nest Cam (รุ่นเดิม)ขอขยายสิทธิ์เข้าถึงไลฟ์สด WebRTC ที่มีอยู่ก่อนที่สิทธิ์จะหมดอายุ
คุณจะขยายสตรีม WebRTC ได้เฉพาะในกล้องที่ใช้สายไฟเท่านั้น กล้องที่ใช้แบตเตอรี่จะถือว่าเป็นกล้องแบบใช้สายขณะเสียบปลั๊กเพื่อชาร์จ หากกล้องใช้พลังงานแบตเตอรี่ ระบบจะไม่สนใจคำขอขยายสตรีม WebRTC ที่ใช้งานอยู่
เซสชันไลฟ์สดของกล้องจะใช้ได้เพียง 5 นาทีเท่านั้น หากต้องการขยายอายุการใช้งานของไลฟ์สด ให้ใช้คำสั่ง ExtendFormatStream ที่เหมาะสมของ CameraLiveStream trait สำหรับรูปแบบสตรีมที่คุณสร้างขึ้น
คำขอและการตอบกลับ ExtendWebRtcStream
ส่งคำขอ
POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.ExtendWebRtcStream",
  "params" : {
    "mediaSessionId" : "Fkz1FuAENsFxp6Ne1ZyqzaEHtU..."
  }
}
การตอบกลับ
{
  "results" : {
    "expiresAt" : "2018-01-04T18:30:00.000Z",
    "mediaSessionId" : "Fkz1FuAENsFxp6Ne1ZyqzaEHtU..."
  }
}
ฟิลด์คำขอ ExtendWebRtcStream
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| mediaSessionId | รหัสเซสชันสื่อของไลฟ์สด WebRTC ที่จะขยายเวลา | stringตัวอย่าง: "Fkz1FuAENsFxp6Ne1ZyqzaEHtU..." | 
ช่องการตอบกลับ ExtendWebRtcStream
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| expiresAt | เวลาใหม่ที่สิทธิ์เข้าถึงไลฟ์สด WebRTC จะหมดอายุในรูปแบบ RFC 3339 | stringตัวอย่าง: "2018-01-04T18:30:00.000Z" | 
| mediaSessionId | รหัสเซสชันสื่อของไลฟ์สด WebRTC ที่ขยายเวลา | stringตัวอย่าง: "Fkz1FuAENsFxp6Ne1ZyqzaEHtU..." | 
StopWebRtcStream
Nest Cam (รุ่นเดิม)ทำให้เซสชันสื่อ WebRTC ที่ถูกต้องเป็นโมฆะและหยุดไลฟ์สด WebRTC ที่เชื่อมโยงกับเซสชันนั้น
คำขอและการตอบกลับ StopWebRtcStream
ส่งคำขอ
POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.StopWebRtcStream",
  "params" : {
    "mediaSessionId" : "Fkz1FuAENsFxp6Ne1ZyqzaEHtU..."
  }
}
การตอบกลับ
{}
ฟิลด์คำขอ StopWebRtcStream
| ช่อง | คำอธิบาย | ประเภทข้อมูล | 
|---|---|---|
| mediaSessionId | รหัสเซสชันสื่อของไลฟ์สด WebRTC ที่จะหยุด | stringตัวอย่าง: "Fkz1FuAENsFxp6Ne1ZyqzaEHtU..." | 
ข้อผิดพลาด
ระบบอาจแสดงรหัสข้อผิดพลาดต่อไปนี้ที่เกี่ยวข้องกับลักษณะนี้
| ข้อความแสดงข้อผิดพลาด | RPC | การแก้ปัญหา | 
|---|---|---|
| กล้องไม่พร้อมใช้งานสำหรับการสตรีม | FAILED_PRECONDITION | กล้องออฟไลน์หรือสตรีมไม่ได้เนื่องจากปัญหาทางเทคนิค | 
| กริ่งประตูไม่รองรับคำสั่ง | FAILED_PRECONDITION | ขยายสตรีม WebRTC ในกริ่งประตูแบบใช้แบตเตอรี่ไม่ได้ หากต้องการดูสตรีมในกริ่งประตูเกินระยะเวลาเซสชันเริ่มต้น ให้หยุดสตรีมที่มีอยู่แล้วสร้างสตรีมใหม่ | 
| ปฏิเสธสิทธิ์การใช้งาน | PERMISSION_DENIED | user ไม่ได้ให้สิทธิ์ระดับอุปกรณ์ที่เหมาะสมแก่ developer
  ในเครื่องมือจัดการการเชื่อมต่อกับพาร์ทเนอร์ (PCM) ซึ่งจำเป็นต่อการเรียกใช้คำสั่ง เมื่อสร้างไลฟ์สด WebRTC ข้อผิดพลาดนี้อาจหมายความว่าการตั้งค่าเสียงใน offerSdpไม่ถูกต้องด้วย | 
ดูรายการรหัสข้อผิดพลาดของ API ทั้งหมดได้ที่เอกสารอ้างอิงรหัสข้อผิดพลาดของ API
