طرحواره CameraLiveStream

دوربین نست (قدیمی) دوربین نست (خارج یا داخل، باتری) دوربین نست با نورافکن دوربین نست (داخل، سیمی) هاب نست مکس زنگ در نست (قدیمی) زنگ در نست (با باتری) زنگ در نست (سیمی)

sdm.devices.traits.CameraLiveStream

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

فیلدها

میدان توضیحات نوع داده
maxVideoResolution حداکثر وضوح پخش زنده ویدیو. VideoResolution
videoCodecs کدک‌های ویدیویی برای پخش زنده پشتیبانی می‌شوند. array(string)
مقدار: ["H264"]
audioCodecs کدک‌های صوتی برای پخش زنده پشتیبانی می‌شوند. array(string)
مقدار: ["AAC"]
supportedProtocols پروتکل‌های استریمینگ پشتیبانی‌شده توسط دستگاه. مقدار این فیلد نشان می‌دهد که کدام دستورات برای دستگاه پشتیبانی می‌شوند. برای مثال، اگر این فیلد شامل WEB_RTC باشد، فقط دستورات WEB_RTC پشتیبانی می‌شوند. array(string)
مقدار: ["RTSP", "WEB_RTC"]

وضوح تصویر (حداکثر وضوح تصویر)

میدان توضیحات نوع داده
width حداکثر عرض وضوح تصویر. همچنین می‌تواند به عنوان پارامتر پرس‌وجو در URL دانلود استفاده شود. int32
مثال: ۶۴۰
height حداکثر ارتفاع وضوح تصویر. همچنین می‌تواند به عنوان پارامتر پرس‌وجو در URL دانلود استفاده شود. int32
مثال: ۴۸۰

نمونه درخواست و پاسخ 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"]
    }
  }
}

دستورات

تولیدRtspStream

دوربین نست (قدیمی) نست هاب مکس زنگ درب نست (قدیمی)

برای دسترسی به URL پخش زنده RTSP، یک توکن درخواست کنید.

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

درخواست و پاسخ RtspStream را تولید کنید

درخواست

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

فیلدهای پاسخ RtspStream را تولید کنید

میدان توضیحات نوع داده
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"

گسترش RtspStream

دوربین نست (قدیمی) نست هاب مکس زنگ درب نست (قدیمی)

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

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

درخواست و پاسخ 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"

استریم متوقف شود

دوربین نست (قدیمی) نست هاب مکس زنگ درب نست (قدیمی)

یک توکن دسترسی 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

دوربین نست (قدیمی) دوربین نست (خارج یا داخل، باتری) دوربین نست با نورافکن دوربین نست (داخل، سیمی) زنگ در نست (باتری) زنگ در نست (سیمی)

یک پخش زنده 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" : "Ku0grInbzzjVVjv2hZO9ySg0AK..."
  }
}

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

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

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

  • فقط فرمت Unified پشتیبانی می‌شود. فرمت Plan 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
مثال: "Ku0grInbzzjVVjv2hZO9ySg0AK..."

گسترش WebRtcStream

دوربین نست (قدیمی) دوربین نست (خارج یا داخل، باتری) دوربین نست با نورافکن دوربین نست (داخل، سیمی) زنگ در نست (سیمی) سیمی

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

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

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

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

درخواست

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

پاسخ

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

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

میدان توضیحات نوع داده
mediaSessionId شناسه جلسه رسانه‌ای پخش زنده WebRTC که باید تمدید شود. string
مثال: "Ku0grInbzzjVVjv2hZO9ySg0AK..."

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

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

استریم وب آر تی سی را متوقف کنید

دوربین نست (قدیمی) دوربین نست (خارج یا داخل، باتری) دوربین نست با نورافکن دوربین نست (داخل، سیمی) زنگ در نست (باتری) زنگ در نست (سیمی)

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

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

درخواست

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

پاسخ

{}

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

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

خطاها

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

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

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

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