دوربین (میراث)

دوربین نست

تمام دوربین‌های قدیمی Nest در رابط برنامه‌نویسی کاربردی (API) مدیریت دستگاه هوشمند (SDM) پشتیبانی می‌شوند:

  1. دوربین داخلی گوگل نست
  2. دوربین گوگل نست در فضای باز
  3. گوگل نست کم آی کیو داخلی
  4. دوربین گوگل نست کم آی کیو در فضای باز

این دستگاه‌ها نوع دستگاه CAMERA را برمی‌گردانند:

sdm.devices.types.CAMERA

زنگ درب گوگل نست (قدیمی) و گوگل نست هاب مکس نیز به عنوان دوربین عمل می‌کنند و ویژگی‌های مشابهی دارند، هرچند که به ترتیب نوع دستگاه آنها زنگ درب و نمایشگر است.

دوربین‌های Google Nest Cam Indoor و Google Nest Cam Outdoor را می‌توان هم در برنامه Nest و هم در برنامه Google Home استفاده کرد، اما نه همزمان در هر دو. وقتی دوربین در برنامه Nest است، از RTSP پشتیبانی می‌کند. و وقتی دوربین در برنامه Google Home است، از WebRTC پشتیبانی می‌کند. فیلد supportedProtocolsپخش زنده دوربین ویژگی نشان می‌دهد که از کدام فرمت پشتیبانی می‌شود. برای توضیحات بیشتر به مقاله پشتیبانی از برنامه مهاجرت دستگاه‌ها به Google Home مراجعه کنید.

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

صفات

مرجع

ویژگی‌ها، دستورات یا رویدادهای زیر مربوط به این دستگاه هستند:

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

جی‌سون

عدم وجود یک ویژگی (trait) در پاسخ GET نشان می‌دهد که آن ویژگی یا قابلیت در حال حاضر برای دستگاه در دسترس نیست. برای اطلاعات بیشتر به بخش انواع دستگاه (Device types) مراجعه کنید.

{
  "type" : "sdm.devices.types.CAMERA",
  "traits" : {
    "sdm.devices.traits.CameraEventImage" : {},
    "sdm.devices.traits.CameraImage" : {
      "maxImageResolution" : {
        "width" : 1280,
        "height" : 960
      }
    },
    "sdm.devices.traits.CameraLiveStream" : {
      "maxVideoResolution" : {
        "width" : 640,
        "height" : 480
      },
      "videoCodecs" : ["H264"],
      "audioCodecs" : ["AAC"],
      "supportedProtocols" : ["WEB_RTC"]
    },
    "sdm.devices.traits.CameraMotion" : {},
    "sdm.devices.traits.CameraPerson" : {},
    "sdm.devices.traits.CameraSound" : {},
    "sdm.devices.traits.Info" : {
      "customName" : "My device"
    }
  }
}

مدیریت رویدادهای دوربین

رویدادهای زیر ممکن است از طریق یک دستگاه از نوع دوربین یا یک زنگ درب یا نمایشگر که دارای دوربین است، مانند زنگ درب Google Nest (قدیمی) یا Google Nest Hub Max، فعال شوند:

نوع عنصر توضیحات
رویداد رویداد حرکت از ویژگی CameraMotion حرکت توسط دوربین تشخیص داده شده است.
رویداد رویداد Person از ویژگی CameraPerson یک نفر توسط دوربین شناسایی شده است.
رویداد رویداد صدا از ویژگی CameraSound صدا توسط دوربین شناسایی شده است.
برای مثال، در اینجا دوربین حرکت را تشخیص داده است:

بار مفید

{
  "eventId" : "2315e964-9f5b-43cb-820e-e5d88324ae68",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "Yx3t6CjVYDcs9eyzY-NbZiDsWY...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
فایل اجرایی این رویداد شامل یک eventId است که می‌تواند با دستور GenerateImage مورد استفاده قرار گیرد. این دستور یک URL دانلود برای تصویر دوربین مربوط به رویداد را برمی‌گرداند:

درخواست

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraEventImage.GenerateImage",
  "params" : {
    "eventId" : "qN4LSzeI04f1bMugsT4m8zMbQt..."
  }
}

پاسخ

{
  "results" : {
    "url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "token" : "g.0.eventToken"
  }
}

دانلود تصویر دوربین

با استفاده از token موجود در هدر HTTP Authorization با مجوز Basic، از پاسخ دستور GenerateImage یک فراخوانی GET به url انجام دهید تا تصویر دوربین دانلود شود:

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...

از پارامترهای کوئری width یا height برای سفارشی‌سازی وضوح تصویر دانلود شده استفاده کنید. فقط یکی از این پارامترها باید مشخص شود. پارامتر دیگر به طور خودکار با توجه به نسبت ابعاد دوربین مقیاس‌بندی می‌شود.

برای مثال، اگر نسبت تصویر دوربین ۴:۳ باشد، برای دانلود تصویر دوربین با وضوح ۴۸۰ در ۳۶۰، عرض یا ارتفاع را مشخص کنید:

عرض

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?width=480

ارتفاع

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?height=360

محدودیت‌های دیگری نیز برای URL دانلود اعمال می‌شود:

  • اگر هر دو پارامتر در URL ارائه شوند، width استفاده می‌شود و height نادیده گرفته می‌شود.
  • اگر هیچ یک از پارامترها در URL ارائه نشوند، مقدار پیش‌فرض ۴۸۰ برای width انتخاب می‌شود.

ببینید دوربین ایمیج ویژگی برای اطلاعات در مورد ویژگی‌های تصویر.

دسترسی به پخش زنده

پخش زنده از دوربین قابل دسترسی است. فرمت‌های پخش زیر برای این دستگاه پشتیبانی می‌شوند:

  • آر تی اس پی
  • وب‌آرتی‌سی

برای مشاهده لیست کامل دوربین‌ها و فرمت‌های استریم پشتیبانی‌شده، به دستگاه‌های پشتیبانی‌شده مراجعه کنید.

برای دسترسی به یک پخش زنده، از دستور Generate Format Stream مربوط بهپخش زنده دوربینصفت.

وب‌آرتی‌سی


برای یک استریم WebRTC، یک offerSdp در دستور GenerateWebRtcStream از ویژگی CameraLiveStream ارسال کنید تا answerSdp دریافت شود:

درخواست

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

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

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

  • فقط فرمت Unified پشتیبانی می‌شود. فرمت Plan B پشتیبانی نمی‌شود.
  • تمام خطوط رسانه‌ای ( m= ) باید در پیشنهاد وجود داشته باشند و به این ترتیب باشند:
    1. صوتی
    2. ویدئو
    3. کاربرد
  • Trickle ICE پشتیبانی می‌شود، اما الزامی نیست.
  • فقط کدک Opus برای صدا پشتیبانی می‌شود.
  • تنظیمات صدا باید روی a=recvonly (فقط دریافت) تنظیم شود.
  • پیشنهاد باید با یک کاراکتر خط جدید \r\n یا \n پایان یابد.

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

هنگام باز کردن کانال‌های WebRTC برای پخش زنده، حتماً علاوه بر کانال ویدیویی، یک کانال داده نیز ایجاد کنید.

نمونه‌ای از یک پیشنهاد معتبر را ببینید

قالب‌بندی نشده:

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

آر تی اس پی

برای یک جریان RTSP، دستور GenerateRtspStream از دستور CameraLiveStream trait، آدرس اینترنتی جریان و streamToken مربوطه را برمی‌گرداند:

درخواست

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

سپس از آدرس اینترنتی پخش زنده برای دسترسی به پخش زنده دوربین استفاده کنید:

rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken

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

پخش زنده را گسترش دهید

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

وب‌آرتی‌سی


سیمی

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

برای گسترش یک جریان WebRTC، شناسه جلسه رسانه جریان را با دستور ExtendWebRtcStream از ویژگی CameraLiveStream مشخص کنید:

درخواست

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

پاسخ

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

آر تی اس پی

برای گسترش یک جریان RTSP، از دستور ExtendRtspStream از دستور CameraLiveStream trait برای دریافت مقادیر جدید streamExtensionToken و streamToken استفاده کنید:

درخواست

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

برای ادامه مشاهده پخش زنده، آدرس اینترنتی پخش زنده را با این مقادیر جدید به‌روزرسانی کنید:

rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken

توقف پخش زنده

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

وب‌آرتی‌سی


برای متوقف کردن یک جریان WebRTC، شناسه جلسه رسانه را با دستور StopWebRtcStream از ویژگی CameraLiveStream مشخص کنید:

درخواست

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

پاسخ

{}

آر تی اس پی

برای متوقف کردن یک جریان RTSP، از توکن برای نامعتبر کردن با دستور StopRtspStream از دستور trait CameraLiveStream استفاده کنید:

درخواست

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

پاسخ

{}

خطاها

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

پیام خطا آر پی سی عیب‌یابی
دوربین برای پخش جریانی در دسترس نیست. FAILED_PRECONDITION دوربین یا آفلاین است یا به دلیل مشکل فنی برای پخش جریانی در دسترس نیست.
فرمان پشتیبانی نمی‌شود. INVALID_ARGUMENT از یک دستور پخش زنده RTSP برای دوربینی که از WebRTC پشتیبانی می‌کند استفاده شده است، یا از یک دستور پخش زنده WebRTC برای دوربینی که از RTSP پشتیبانی می‌کند استفاده شده است.
تصویر دوربین دیگر برای دانلود در دسترس نیست. DEADLINE_EXCEEDED تصاویر رویداد ۳۰ ثانیه پس از انتشار رویداد منقضی می‌شوند. حتماً قبل از انقضا، تصویر را دانلود کنید.
شناسه رویداد متعلق به دوربین نیست. FAILED_PRECONDITION از eventID صحیح برگردانده شده توسط رویداد دوربین استفاده کنید.

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