סכימת תכונות של CameraStream לבית חכם

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

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

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

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

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

חובה.

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

[item, ...] String

סוג מדיה.

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

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

חובה.

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

דוגמאות

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

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

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

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

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

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

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

למידע נוסף על אפליקציות של Custom Web Receiver, כדאי לבקר במדריך לאתר למפתחים.

מכשיר STATES

ללא.

מכשיר COMMANDS

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

action.devices.commands.GetCameraStream

פרמטרים

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

חובה.

האם השידור יופעל במכשיר Chromecast.

SupportedStreamProtocols מערך

חובה.

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

[item, ...] String

סוג מדיה.

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

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

תוצאות

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

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

cameraStreamProtocol String

חובה.

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

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

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

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

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

חובה.

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

cameraStreamReceiverAppId String

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

תוצאות WebRTC

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

חובה.

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

cameraStreamOffer String

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

cameraStreamIceServers String

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

דוגמאות

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

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

מכשיר ERRORS

מומלץ לעיין ברשימה המלאה של שגיאות וחריגים.

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

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

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

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

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

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

  • אימות: כותרת האימות צריכה להשתמש באסימון האימות מהערך המוחזר של GetCameraStream עבור cameraStreamAuthToken עם סוג האסימון Bearer.
  • Content-Type: 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 ואילך.
  • אין תמיכה ב-Trickle ICE. יש לאסוף תחילה את כל מועמדי ה-ICE לפני שליחת ה-SDP.
  • מומלץ מאוד לכלול את המועמדים UDP/IPv4, TCP/IPv4, UDP/IPv6 ו-TCP/IPv6 ICE כדי להגדיל את הסיכוי להצלחת החיבור.

רזולוציות סרטונים נתמכות:

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

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

  • VP8
  • H.264

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

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