طرحواره CameraLiveStream

Nest Cam (قدیمی) Nest Cam (در فضای باز یا داخلی، باتری) Nest Cam با نورافکن Nest Cam (داخلی، سیمی) Nest Hub Max Nest Doorbell (قدیمی) Nest Doorbell (باتری) Nest Doorbell (سیمی)

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 (قدیمی) Nest Hub Max Nest Doorbell (قدیمی)

برای دسترسی به 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 (قدیمی) Nest Hub Max Nest Doorbell (قدیمی)

برای جایگزینی نشانه دسترسی معتبر RTSP قبل از انقضا، یک نشانه دسترسی مستقیم به URL جاری‌سازی زنده RTSP درخواست کنید. این همچنین برای جایگزینی یک نشانه معتبر RTSP از یک درخواست فرمان قبلی ExtendRtspStream استفاده می شود.

جلسات پخش زنده دوربین فقط 5 دقیقه معتبر است. اگر می‌خواهید طول عمر پخش زنده را افزایش دهید، از دستور مناسب Extend Format Stream استفاده کنید. CameraLiveStream ویژگی برای قالب جریانی که ایجاد کردید.

درخواست و پاسخ 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 (قدیمی) Nest Hub Max Nest Doorbell (قدیمی)

یک نشانه دسترسی معتبر 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..."

WebRtcStream را ایجاد کنید

Nest Cam (قدیمی) Nest Cam (در فضای باز یا داخلی، باتری) Nest Cam با نورافکن Nest Cam (داخلی، با سیم) Nest Doorbell (باتری) Nest Doorbell (سیمی)

یک جریان زنده WebRTC برای یک دستگاه ایجاد کنید.

درخواست و پاسخ WebRtcStream را ایجاد کنید

درخواست کنید

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" : "e80PGQ1EyjmNePonB4zu9LojSs..."
  }
}

ایجاد فیلدهای درخواست WebRtcStream

توصیه می کنیم از نمونه برنامه کاربردی وب برای یادگیری نحوه ایجاد یک جریان زنده موفق استفاده کنید. این نمونه یک offerSdp معتبر ایجاد می‌کند که با تمام محدودیت‌های پیشنهاد SDP برای دوربین‌های Nest مطابقت دارد.

پیشنهاد SDP برای دوربین‌های Nest باید دارای محدودیت‌های زیر باشد:

  • فقط فرمت Unified پشتیبانی می شود. طرح B پشتیبانی نمی شود.
  • تمام خطوط رسانه ( m= ) باید در پیشنهاد موجود باشد و باید به ترتیب زیر باشد:
    1. صوتی
    2. ویدئو
    3. کاربرد
  • 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 "

ایجاد فیلدهای پاسخ WebRtcStream

answerSdp باید برای تولید جریان زنده در عرض 30 ثانیه پس از دریافت پاسخ استفاده شود، در غیر این صورت منقضی می شود. اگر منقضی شد، دستور GenerateWebRtcStream را دوباره اجرا کنید تا یک answerSdp جدید دریافت کنید.

هنگام باز کردن کانال های WebRTC برای پخش زنده، مطمئن شوید که یک کانال داده و همچنین یک کانال ویدیویی ایجاد کنید.

میدان توضیحات نوع داده
answerSdp یک پاسخ SDP برای استفاده با دستگاه محلی که جریان زنده WebRTC را نمایش می دهد. string
مثال: " answerSdp "
expiresAt زمانی که دسترسی به جریان زنده WebRTC در قالب RFC 3339 منقضی می‌شود. string
مثال: "2020-01-04T18:30:00.000Z"
mediaSessionId شناسه جلسه رسانه پخش زنده WebRTC ایجاد شده. string
مثال: "e80PGQ1EyjmNePonB4zu9LojSs..."

ExtendWebRtcStream

Nest Cam (قدیمی) Nest Cam (در فضای باز یا داخلی، باتری) Nest Cam با نورافکن Nest Cam (داخلی، با سیم) Nest Doorbell (سیمی) سیمی

درخواست کنید که دسترسی به یک جریان زنده WebRTC قبل از منقضی شدن آن تمدید شود.

پخش جریانی WebRTC را فقط می‌توان در دوربین‌های سیمی گسترش داد. دوربینی که با باتری کار می کند، در حالی که برای شارژ به برق وصل است، سیمی در نظر گرفته می شود. اگر دوربین از باتری استفاده می کند، درخواست برای گسترش جریان WebRTC فعال نادیده گرفته می شود.

جلسات پخش زنده دوربین فقط 5 دقیقه معتبر است. اگر می‌خواهید طول عمر پخش زنده را افزایش دهید، از دستور مناسب Extend Format Stream استفاده کنید. CameraLiveStream ویژگی برای قالب جریانی که ایجاد کردید.

درخواست و پاسخ ExtendWebRtcStream

درخواست کنید

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

پاسخ

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

ExtendWebRtcStream فیلدهای درخواست

میدان توضیحات نوع داده
mediaSessionId شناسه جلسه رسانه جریان زنده WebRTC تمدید می شود. string
مثال: "e80PGQ1EyjmNePonB4zu9LojSs..."

ExtendWebRtcStream فیلدهای پاسخ

میدان توضیحات نوع داده
expiresAt زمان جدیدی که در آن دسترسی به جریان زنده WebRTC در قالب RFC 3339 منقضی می‌شود. string
مثال: "2018-01-04T18:30:00.000Z"
mediaSessionId شناسه جلسه رسانه جریان زنده WebRTC که تمدید شد. string
مثال: "e80PGQ1EyjmNePonB4zu9LojSs..."

StopWebRtcStream

Nest Cam (قدیمی) Nest Cam (در فضای باز یا داخلی، باتری) Nest Cam با نورافکن Nest Cam (داخلی، با سیم) Nest Doorbell (باتری) Nest Doorbell (سیمی)

یک جلسه رسانه WebRTC معتبر را باطل می کند و جریان زنده WebRTC مرتبط با آن جلسه را متوقف می کند.

درخواست و پاسخ StopWebRtcStream

درخواست کنید

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

پاسخ

{}

فیلدهای درخواست StopWebRtcStream

میدان توضیحات نوع داده
mediaSessionId شناسه جلسه رسانه جریان زنده WebRTC متوقف شود. string
مثال: "e80PGQ1EyjmNePonB4zu9LojSs..."

خطاها

کد(های) خطای زیر ممکن است در رابطه با این ویژگی برگردانده شوند:

پیغام خطا RPC عیب یابی
دوربین برای پخش در دسترس نیست. FAILED_PRECONDITION دوربین یا آفلاین است یا به دلیل مشکل فنی برای پخش در دسترس نیست.
فرمان برای زنگ در پشتیبانی نمی شود. FAILED_PRECONDITION پخش جریانی WebRTC را نمی‌توان در زنگ‌های درب باطری گسترش داد. اگر جریانی روی زنگ در باید بیش از طول جلسه اولیه مشاهده شود، جریان موجود را متوقف کنید و یک جریان جدید ایجاد کنید.
اجازه رد شد. PERMISSION_DENIED این user را اعطا نکرده است developerمجوزهای مناسب در سطح دستگاه در Partner Connections Manager (PCM) مورد نیاز برای اجرای یک فرمان.

هنگام ایجاد یک جریان زنده WebRTC، این خطا همچنین می تواند به این معنی باشد که تنظیمات صوتی در offerSdp نادرست است.

برای لیست کامل کدهای خطای API به مرجع کد خطای API مراجعه کنید.