הסכימה של מאפיין 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 בוליאני

חובה.

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

דוגמאות

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

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

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

מצבי המכשיר

ללא.

CommandS במכשיר

מכשירים עם המאפיין הזה עשויים להגיב לפקודות הבאות כחלק מהפעולה 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

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

cameraStreamProtocol String

חובה.

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

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

hls
HTTP Live Streaming
dash
סטרימינג דינמי ודינמי ב-HTTP
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.
  • סוג התוכן: application/json.
פרמטרים של בקשת איתות

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

  • action: מחרוזת. הערכים החוקיים הם:
    • offer: הודעת SDP של הצעה מהספק.
    • answer: מענה להודעת SDP מהספק.
    • end: סגירת הסשן הנוכחי.
  • deviceId: מחרוזת. מזהה המכשיר כפי שדווח בבקשת SYNC או EXECUTE.
  • sdp: מחרוזת. מכילה את הודעת פרוטוקול תיאור הסשן לחיבור בין אפליקציות. התוכן מבוסס על הערך של הפרמטר 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
{}