الكاميرا (قديمة)

Nest Cam

يمكن استخدام جميع كاميرات Nest Cam القديمة في واجهة برمجة التطبيقات Smart Device Management (SDM):

  1. كاميرا Google Nest Cam للأماكن الداخلية
  2. كاميرا Google Nest Cam الخارجية
  3. Nest Cam IQ داخل المنزل
  4. Nest Cam IQ خارج المنزل

تعرض هذه الأجهزة نوع جهاز CAMERA:

sdm.devices.types.CAMERA

ويعمل أيضًا جرس الباب Google Nest Doorbell (الإصدار القديم) وGoogle Nest Hub Max ككاميرات ويتضمّنان سمات متشابهة، على الرغم من أنّهما يعرضان أنواع أجهزة جرس الباب وشاشة العرض على التوالي.

يمكن استخدام كاميرا Google Nest Cam Outdoor وكاميرا Nest Cam Outdoor إما في تطبيق Nest أو في تطبيق Google Home، ولكن لا يمكن استخدامهما في الوقت نفسه. عندما تكون الكاميرا مثبتة على تطبيق Nest، فإنها تتوافق مع بروتوكول RTSP. وعندما تكون الكاميرا في تطبيق Google Home، فإنها متوافقة مع WebRTC. يُظهر الحقل supportedProtocols في السمة CameraLiveStream التنسيق المتوافق. يمكنك الاطّلاع على مقالة الدعم حول نقل الأجهزة إلى تطبيق Google Home للحصول على شرح إضافي.

يمكنك الاطّلاع على دليلَي جرس الباب وجهاز العرض للحصول على مزيد من المعلومات عن الميزات الفريدة لهذه الأنواع من الأجهزة.

السمات

مَراجع

السمات أو الأوامر أو الأحداث التالية ذات صلة بهذا الجهاز:

السمةالوصفالطلبات الصوتيةفعاليات
CameraEventImageتنتمي هذه السمة إلى أي جهاز يتيح إنشاء الصور من الأحداث.GenerateImage
CameraImageتنتمي هذه السمة إلى أي جهاز يتيح التقاط الصور.
CameraLiveStreamتنتمي هذه السمة إلى أي جهاز يتيح البث المباشر.GenerateRtspStream
ExtendRtspStream
StopRtspStream
GenerateWebRtcStream
ExtendWebRtcStream
StopWebRtcStream
CameraMotionتنتمي هذه السمة إلى أي جهاز يتيح استخدام أحداث كشف الحركة.حركة
CameraPersonتنتمي هذه السمة إلى أي جهاز يتيح تفعيل أحداث رصد الأشخاص.الشخص
CameraSoundتنتمي هذه السمة إلى أي جهاز يتيح تفعيل أحداث رصد الصوت.الصوت
معلوماتتنتمي هذه السمة إلى أي جهاز يقدّم المعلومات المتعلقة بالجهاز.

JSON

يشير عدم توفّر سمة في استجابة GET إلى أنّ السمة أو الميزة غير متاحة حاليًا للجهاز. يمكنك الاطّلاع على أنواع الأجهزة للحصول على مزيد من المعلومات.

{
  "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 Doorbell (القديم) أو Google Nest Hub Max :

Type عنصر الوصف
حدث حدث Motion لسمة CameraMotion رصدت الكاميرا حركة.
حدث حدث شخص لسمة Cameraperson رصدت الكاميرا شخصًا.
حدث حدث الصوت لسمة CameraSound رصدت الكاميرا الصوت.
على سبيل المثال، هنا رصدت الكاميرا حركة:

المحتوى

{
  "eventId" : "410f5401-899b-437e-9571-90c48140824f",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "_xpmVEpdSGooct2VRBetrB5_zv...", } } } "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" : "zJiExvKeyVYYUhNK7Bdpq928y7..."
  }
}

الإجابة

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

تنزيل صورة كاميرا

يمكنك إجراء استدعاء GET لـ url من استجابة الأمر GenerateImage، باستخدام token في عنوان تفويض HTTP مع التفويض الأساسي، لتنزيل صورة الكاميرا:

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

استخدِم مَعلمتَي طلب البحث width أو height لتخصيص درجة دقة الصورة التي تم تنزيلها. يجب تحديد معلمة واحدة فقط من هذه المعلمات. ويتم ضبط قيمة المَعلمة الأخرى تلقائيًا وفقًا لنسبة العرض إلى الارتفاع في الكاميرا.

على سبيل المثال، إذا كانت نسبة العرض إلى الارتفاع للكاميرا 4:3، إذا أردت تنزيل صورة الكاميرا بدقة 480 × 360، حدِّد إما العرض أو الارتفاع:

العرض

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، سيتم اختيار قيمة تلقائية 480 للسمة width.

اطّلِع على سمة CameraImage للحصول على معلومات عن خصائص الصور.

الوصول إلى بث مباشر

يمكن الوصول إلى البث المباشر من كاميرا. إنّ تنسيقات البث التالية متوافقة مع هذا الجهاز:

  • RTSP
  • WebRTC

للحصول على قائمة كاملة بالكاميرات وتنسيقات البث المتوافقة، يُرجى الاطّلاع على الأجهزة المتوافقة.

للوصول إلى بث مباشر، استخدِم الأمر "إنشاءFormatبث" المناسب للسمة CameraLiveStream.

WebRTC


لبث 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" : "1Sr2zkty2MoGXCwZa2a88mctQZ..."
  }
}

ننصح باستخدام نموذج تطبيق الويب للتعرّف على كيفية إنشاء بث مباشر ناجح. ينشئ هذا النموذج ملف offerSdp صالحًا يستوفي جميع قيود عرض بروتوكول وصف الجلسة (SDP) لكاميرات Nest.

يجب أن يستوفي عرض بروتوكول وصف الجلسة (SDP) لكاميرات Nest القيود التالية:

  • لا يتوفّر سوى التنسيق الموحّد. الخطة "ب" غير متاحة.
  • يجب أن تكون جميع خطوط الوسائط (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

بالنسبة إلى بث RTSP، يعرض الأمر GenerateRtspStream لالأمر CameraLiveStream عنوان URL الخاص بالبث و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"
  }
}

بعد ذلك، استخدِم عنوان URL للبث للوصول إلى البث المباشر للكاميرا:

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

لا يمكن مشاركة عناوين URL للبث المباشر لبروتوكول RTSP بين العملاء. يمكن لعميل واحد فقط استخدام عنوان URL الخاص بالبث في الوقت نفسه. إذا أراد عدة برامج البث من الكاميرا نفسها في الوقت نفسه، يجب إرسال أوامر RTSP لكل برنامج على حدة، ويجب أن يستخدم كل عميل فردي عنوان URL للبث الخاص به.

تمديد البث المباشر

تكون جلسات البث المباشر للكاميرا صالحة لمدة 5 دقائق فقط. إذا أردت إطالة مدة البث المباشر، استخدِم أمر ExtendFormatStream (البث) المناسب ضمن سمة CameraLiveStream لتنسيق البث الذي أنشأته.

WebRTC


  سلكي   

لا يمكن تمديد البث عبر WebRTC إلا باستخدام الكاميرات التي تعمل بالأسلاك. تُعد الكاميرا التي تعمل بالبطارية متصلة بسلك سلكي أثناء توصيلها بمصدر طاقة، وذلك لشحنها. إذا كانت الكاميرا تعمل على طاقة البطارية، سيتم تجاهل طلب تمديد بث WebRTC النشط.

لتوسيع بث WebRTC، حدِّد معرِّف جلسة الوسائط للبث باستخدام الأمر ExtendWebRtcStream لسمة CameraLiveStream:

الطلب

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

الإجابة

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

RTSP

لمد فترة بث RTSP، استخدِم الأمر ExtendRtspStream لأمر سمة CameraLiveStream للحصول على قيمتين 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"
  }
}

عدِّل عنوان URL للبث باستخدام القيم الجديدة التالية لمواصلة عرض البث المباشر:

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

إيقاف بث مباشر

عندما تتوقف عن استخدام البث المباشر للكاميرا، يجب إيقافه وإلغاء صلاحية البث. لإجراء ذلك، استخدِم الأمر "إيقاف"Format"البث" المناسب للسمة بث مباشر للكاميرا المناسب لتنسيق مجموعة البث الذي أنشأته.

WebRTC


لإيقاف بث WebRTC، حدِّد معرِّف جلسة الوسائط باستخدام الأمر StopWebRtcStream لسمة CameraLiveStream:

الطلب

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

الإجابة

{}

RTSP

لإيقاف بث RTSP، استخدِم الرمز المميّز لإلغاء الصلاحية باستخدام الأمر StopRtspStream لأمر سمة CameraLiveStream:

الطلب

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

الإجابة

{}

الأخطاء

قد يتم عرض رموز الخطأ التالية في ما يتعلق بهذا الجهاز:

رسالة الخطأ متوسط عائد النقرة تحديد المشاكل وحلّها
الأمر غير متوافق. INVALID_ARGUMENT استخدام أمر بث مباشر عبر RTSP لكاميرا متوافقة مع WebRTC، أو استخدام أمر بث مباشر عبر WebRTC لكاميرا متوافقة مع بروتوكول RTSP
لم تعُد صورة الكاميرا متاحة للتنزيل. DEADLINE_EXCEEDED تنتهي صلاحية صور الحدث بعد 30 ثانية من نشر الحدث. احرص على تنزيل الصورة قبل انتهاء الصلاحية.
لا ينتمي رقم تعريف الحدث إلى الكاميرا. FAILED_PRECONDITION استخدِم القيمة eventID الصحيحة التي يعرضها حدث الكاميرا.

ويمكنك الاطّلاع على مرجع رموز الأخطاء في واجهة برمجة التطبيقات للاطّلاع على القائمة الكاملة لرموز الأخطاء في واجهة برمجة التطبيقات.