הסכימה של מאפיין CameraStream לבית חכם

action.devices.traits.CameraStream – המאפיין הזה מכיל מידע על האופן שבו אפשר לשלוט בשידור הווידאו של המצלמה במכשיר.

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

מאפייני המכשיר

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

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

חובה.

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

[item, ...] String

סוג המדיה.

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

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

חובה.

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

דוגמאות

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

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

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

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

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

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

כשמשדרים בסטרימינג את הפרוטוקולים hls,‏ dash,‏ smooth_stream ו-progressive_mp4 למכשירי Cast (מכשירי Chromecast, מסכים חכמים וטלוויזיות חכמות שתומכות ב-Chromecast), מופעל מקלט אינטרנט של Cast כדי לעבד את הסטרימינג ולעבד אותו במכשיר. מומלץ למפתח ליצור Custom Web Receiver כדי לאפשר גישה לכלים לניפוי באגים, להתאמה אישית של התנהגות הנגן, להתאמה אישית של מיתוג ממשק המשתמש ולכלול ניתוח נתונים. כדי להפעיל את השימוש במכשיר המקבל המותאם אישית ולבטל את השימוש במכשיר המקבל שמוגדר כברירת מחדל, צריך להגדיר את מזהה האפליקציה של המכשיר המקבל שנוצר כאשר רושמים את אפליקציית ה-Cast בשדה cameraStreamReceiverAppId בתגובה EXECUTE.

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

מצבי המכשיר

ללא.

פקודות למכשיר

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

action.devices.commands.GetCameraStream

פרמטרים

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

חובה.

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

SupportedStreamProtocols מערך

חובה.

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

[item, ...] String

סוג המדיה.

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

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

תוצאות

תוצאות סוג תיאור
cameraStreamAuthToken String

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

cameraStreamProtocol String

חובה.

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

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

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

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

תוצאות סוג תיאור
cameraStreamAccessUrl String

חובה.

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

cameraStreamReceiverAppId String

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

תוצאות WebRTC

תוצאות סוג תיאור
cameraStreamSignalingUrl String

חובה.

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

cameraStreamOffer String

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

cameraStreamIceServers String

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

דוגמאות

Show the front door camera (default Cast receiver)

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

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

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

שגיאות במכשיר

הרשימה המלאה של השגיאות והחריגות

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

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

נכון לעכשיו, WebRTC נתמך במכשירי Google Nest Smart Display ו-Chromecast with Google TV.

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

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

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

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

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

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

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

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

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

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

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

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

קודיקי הווידאו הנתמכים:

  • VP8
  • H.264

קודיקי האודיו הנתמכים:

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

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

שיתוף משאבים בין מקורות (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
{}