סכימה של תכונות סטרימינג מהמצלמה בבית החכם

action.devices.traits.CameraStream – התכונה הזו קובעת איך לשלוט בשידור המצלמה של מכשיר.

התכונה הזו שייכת למכשירים שיכולים לשדר פידים של סרטונים למסכים חכמים, למכשירים שתומכים ב-Chromecast או לסמארטפונים. באופן כללי, אלה מצלמות אבטחה או מצלמות לתינוקות. אבל התכונה הזו חלה גם על מכשירים מורכבים יותר שיש בהם מצלמה (לדוגמה, מכשירים לשיחות ועידה בווידאו או רובוט ואקום עם מצלמה).

ATTRIBUTES במכשיר

מכשירים עם התכונה הזו עשויים לדווח על המאפיינים הבאים כחלק מהפעולה של SYNC. מידע נוסף על טיפול ב-SYNC כוונות זמין בקטע מימוש כוונה.

מאפיינים Type תיאור
cameraStreamSupportedProtocols מערך

חובה.

סוגי מדיה נתמכים בסטרימינג של המצלמה, מסודרים לפי ההעדפה. בדרך כלל, הפרוטוקול הראשון במערך הזה שתואם למשטח היעד, הוא הבקשה.

[item, ...] String

סוג מדיה.

ערכים נתמכים:

hls
סטרימינג בשידור חי ב-HTTP
dash
סטרימינג דינמי שניתן להתאמה באמצעות HTTP
smooth_stream
סטרימינג חלק
progressive_mp4
גרסת MP4 מתקדמת (משמשת בעיקר לקליפים)
webrtc
WebRTC
cameraStreamNeedAuthToken בוליאני

חובה.

מצוין אם יישלח אסימון אימות דרך cameraStreamAuthToken כדי שפלטפורמת היעד תשדר את פיד המצלמה.

דוגמאות

תמיכה במצלמה עם פרוטוקולים מרובים, ללא צורך באסימון אימות.

{
  "cameraStreamSupportedProtocols": [
    "webrtc",
    "hls",
    "dash",
    "smooth_stream",
    "progressive_mp4"
  ],
  "cameraStreamNeedAuthToken": false
}

מצלמה שתומכת בפרוטוקול יחיד, ונדרש אסימון אימות.

{
  "cameraStreamSupportedProtocols": [
    "hls"
  ],
  "cameraStreamNeedAuthToken": true
}

פרוטוקולים נתמכים של סטרימינג

התכונה הזו תומכת בפרוטוקולים הבאים של סטרימינג:

מצבים של המכשיר

ללא.

פקודות מכשיר

מכשירים עם התכונה הזו עשויים להגיב לפקודות הבאות, במסגרת הפעולה EXECUTE. מידע נוסף על טיפול ב-EXECUTE כוונות זמין בקטע מימוש כוונה.

action.devices.commands.GetCameraStream

פרמטרים

פרמטרים Type תיאור
StreamToChromecast בוליאני

חובה.

אם הסטרימינג יופעל במכשיר Chromecast.

SupportedStreamProtocols מערך

חובה.

סוגי מדיה או פורמטים שנתמכים על ידי היעד הרצוי.

[item, ...] String

סוג מדיה.

ערכים נתמכים:

hls
סטרימינג בשידור חי ב-HTTP
dash
סטרימינג דינמי שניתן להתאמה באמצעות HTTP
smooth_stream
סטרימינג חלק
progressive_mp4
גרסת MP4 מתקדמת (משמשת בעיקר לקליפים)
webrtc
WebRTC

תוצאות

תוצאות Type תיאור
cameraStreamAuthToken String

אסימון אימות שהנמען הספציפי יכול לאשר את הגישה לשידור. אם הערך cameraStreamNeedAuthToken הוא True והערך הזה לא יסופק, פרטי הכניסה של OAuth של המשתמש ישמשו כאות אימות.

cameraStreamProtocol String

חובה.

פורמט המדיה שאליו מפנה כתובת ה-URL של השידור. הוא צריך להיות אחד מהפרוטוקולים הרשומים בפרמטר הפקודה SupportedStreamProtocols.

ערכים נתמכים:

hls
סטרימינג בשידור חי ב-HTTP
dash
סטרימינג דינמי שניתן להתאמה באמצעות HTTP
smooth_stream
סטרימינג חלק
progressive_mp4
גרסת MP4 מתקדמת (משמשת בעיקר לקליפים)
webrtc
WebRTC

תוצאות שאינן WebRTC

תוצאות Type תיאור
cameraStreamAccessUrl String

חובה.

נקודת הקצה של כתובת URL לאחזור השידור בזמן אמת בפורמט שצוין על ידי cameraStreamProtocol.

cameraStreamReceiverAppId String

מזהה של מקלט העברה לעיבוד עיבוד המצלמה כשהפרמטר StreamToChromecast אמיתי. המערכת תשתמש במקלט ברירת המחדל אם לא יסופק.

תוצאות WebRTC

תוצאות Type תיאור
cameraStreamSignalingUrl String

חובה.

נקודת קצה לכתובת URL לאחזור והחלפה של פרוטוקולים לתיאור סשן ושל מצלמות ולקוחות. הלקוח צריך להחזיר את כתובת ה-URL לאותות שמשתמשת ב-cameraStreamAuthToken בתור אסימון האימות בכותרת הבקשה.

cameraStreamOffer String

הפרוטוקול של תיאור הסשן של המבצע (SDP).

cameraStreamIceServers String

מצב זה מייצג את שרתי הקישוריות האינטראקטיבית (ICE) באמצעות מחרוזת JSON מקודדת עם תיאור של RTCIceServer. אם לא תציינו שרתי STUN (Session Traversal Utilities for NAT), הפלטפורמה תשתמש כברירת מחדל בשרתי STUN של Google. שרתי TURN (מעבר בעזרת ממסר מסביב ל-NAT) נדרשים רק אם אין לך אפשרות להבטיח שכתובות ה-IP / המועמדים ל-ICE שסופקו יהיו נגישים לציבור (למשל, דרך שרת מדיה, מועמד ICE של מארח, מועמד ל-ICE וכו').

דוגמאות

הצגת המצלמה של הדלת הקדמית (מקלט ברירת המחדל).

{
  "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4",
  "cameraStreamProtocol": "progressive_mp4"
}

הצגת המצלמה של הדלת הקדמית (מקלט מותאם אישית).

{
  "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4",
  "cameraStreamReceiverAppId": "1g2f89213hg",
  "cameraStreamAuthToken": "12657342190192783",
  "cameraStreamProtocol": "progressive_mp4"
}

הצגת מצלמה של דלת הכניסה (הזרם WebRTC).

{
  "cameraStreamIceServers": "[{\"urls\": \"stun:stun.l.partner.com:19302\"},{\"urls\":\"turn:192.158.29.39:3478?transport=udp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"},{\"urls\": \"turn:192.158.29.39:3478?transport=tcp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"}]",
  "cameraStreamSignalingUrl": "https://example.com/signaling/answer",
  "cameraStreamOffer": "o=- 4611731400430051336 2 IN IP4 127.0.0.1...",
  "cameraStreamProtocol": "webrtc"
}

ERRORS מכשיר

לצפייה ברשימה המלאה של השגיאות והחריגים

המפרטים של פרוטוקול WebRTC

יתרונות השימוש ב-WebRTC הם זמן אחזור קצר ודיבור חד-כיווני. WebRTC משתמש בשיטה POST עם גוף POST ותגובה בפורמט JSON.

WebRTC נתמך כרגע במסך החכם של Google Nest וב-Chromecast עם מכשירי Google TV.

בקטע הזה מתוארות הדרישות לשימוש בפרוטוקול הסטרימינג של WebRTC.

סוג הנתונים פרמטרים/הגדרות
כותרת של בקשת חתימה

הכותרת צריכה לעמוד בדרישות הבאות:

  • אימות: כותרת האימות צריכה להשתמש באסימון האימות מהערך המוחזר של GetCameraStream עבור cameraStreamAuthToken עם סוג האסימון Bearer.
  • סוג התוכן: application/json.
פרמטרים של בקשת אותות

הבקשה יכולה לכלול את הפרמטרים האלה:

  • action: מחרוזת. הערכים התקינים הם:
    • offer: הצעת הודעת SDP מהספק.
    • answer: מענה להודעת SDP מהספק.
    • end: סגירת הסשן הנוכחי.
  • deviceId: מחרוזת. מזהה המכשיר, כפי שמתואר בבקשת SYNC או EXECUTE.
  • sdp: מחרוזת. מכיל את ההודעה של פרוטוקול תיאור הסשן עבור החיבור בין אפליקציות. התוכן מבוסס על הערך של הפרמטר action. אם הערך "action" הוא "end", הפרמטר יכול להיות ריק.
פרמטרים של תגובות אותות

התשובה יכולה לכלול את הפרמטרים האלה:

  • action: מחרוזת. ערך התשובה חייב להיות מסוג answer.
  • sdp: מחרוזת. הודעת SDP על התשובה הרספונסיבית.

דרישות והמלצות של WebRTC

  • Google תומכת בשלב זה בתקשורת חד-כיוונית (חצי דו-צדדית).
  • עליך לתמוך בחבילה וב-rtcp-mux.
  • צריך להשתמש ב-(D)TLS 1.2 ואילך.
  • אין תמיכה ב-Itrque ICE. יש לאסוף את כל המועמדים ל-ICE לפני שליחת ה-SDP.
  • מומלץ מאוד לכלול את המועמדים UDP/IPv4, TCP/IPv4, UDP/IPv6 ו-TCP/IPv6 ICE כדי להגדיל את ההסתברות לחיבור מוצלח.

רזולוציות וידאו נתמכות:

  • מינימום: 480p
  • מקסימום: 1080p

רכיבי קודק וידאו נתמכים:

  • VP8
  • H.264

רכיבי קודק נתמכים של אודיו:

  • Opus (קודק מועדף)
  • G.711/PCMU
  • G.722

שיתוף משאבים בין מקורות

'שיתוף משאבים בין מקורות' (CORS) הוא מנגנון שמשתמש בכותרות HTTP נוספות כדי לומר לדפדפנים כדי לאפשר לאפליקציית אינטרנט שפועלת במקור אחד לגשת למשאבים שנבחרו ממקור אחר. השרת שמארח את cameraStreamSignalingUrl צריך להגיב עם הכותרת הבאה:

Access-Control-Allow-Origin: https://www.gstatic.com

בקשה לאותת לדוגמה ותגובה

בדוגמה הבאה מוצגת בקשה ש-Google שולחת לשירות האות שלך ואת התשובה המתאימה ל-Google.

בקשה
Header:

Authentication: Bearer <cameraStreamAuthToken>
Content-Type: application/json

POST body:

// When camera offer SDP is provided in the execution response, Google provides an answer SDP.
{
  "action": "answer",
  "deviceId": "123",
  "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..."
}

// When camera offer SDP is not provided in execution response, Google generates and provides an offer SDP.
{
  "action": "offer",
  "deviceId": "123",
  "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..."
}

// Close the current stream session.
{
  "action": "end"
  "deviceId": "123"
}

תשובה
// Response to accept the answer SDP in the request.
Response Code : 200
{}

// Response to provide the answer SDP from the service provider.
Response Code : 200
{
  // When the camera offer SDP is not provided in the execution response,
  // Google provides the answer SDP via the signaling response.
  "action": "answer"
  "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..."
}

// Response to close current session.
Response Code : 200
{}