مرحبًا بك في "مركز مطوّري Google Home"، الوجهة الجديدة لتعلّم كيفية تطوير المهام المنزلية الذكية. ملاحظة: ستواصل إنشاء إجراءات في "وحدة تحكّم المهام".

مخطط ميزة "البث عبر كاميرا المنزل" الذكية

action.devices.traits.CameraStream: تتناول هذه السمة كيفية التحكّم في بث الكاميرا على الجهاز.

تنتمي هذه السمة إلى الأجهزة التي يمكنها بث خلاصات الفيديو إلى شاشات ذكية أو أجهزة مزوّدة بتكنولوجيا Chromecast أو هواتف ذكية. هذه الكاميرات الكبيرة أو الكبيرة هي كاميرات المراقبة أو كاميرات الأطفال. تنطبق هذه السمة أيضًا على الأجهزة الأكثر تعقيدًا التي تتضمن كاميرا عليها (على سبيل المثال، أجهزة اجتماعات الفيديو أو روبوت كهربائي مع كاميرا).

سمات الجهاز

قد تُبلغ الأجهزة التي تتضمّن هذه السمة عن السمات التالية كجزء من عملية SYNC. للاطّلاع على مزيد من المعلومات حول التعامل مع عناصر intent في SYNC، يُرجى الاطّلاع على تنفيذ النية بالشراء.

السمات Type الوصف
cameraStreamSupportedProtocols مصفوفة

مطلوب:

أنواع الوسائط المتوافقة مع بث الكاميرا، والتي يتم ترتيبها حسب الخيار المفضّل عادةً ما يتم طلب البروتوكول الأول المتوافق مع العرض على هذه المصفوفة.

[item, ...] سلسلة

نوع الوسائط

القيم المسموح بها

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. للاطّلاع على مزيد من المعلومات حول التعامل مع عناصر intent في EXECUTE، يُرجى الاطّلاع على تنفيذ النية بالشراء.

action.devices.commands.GetCameraStream

المعلّمات

المعلّمات Type الوصف
StreamToChromecast منطقي

مطلوب:

لتحديد ما إذا كان سيتم تشغيل البث على جهاز Chromecast.

SupportedStreamProtocols مصفوفة

مطلوب:

أنواع الوسائط/التنسيقات المتوافقة مع الوجهة المطلوبة.

[item, ...] سلسلة

نوع الوسائط

القيم المسموح بها

hls
البث المباشر عبر HTTP
dash
البث الديناميكي التكيُّفي عبر HTTP
smooth_stream
بث سلس
progressive_mp4
تنسيق MP4 التقدمي (غالبًا ما يتم استخدامه للمقاطع)
webrtc
WebRTC

النتائج

النتائج Type الوصف
cameraStreamAuthToken سلسلة

رمز مميَّز للمصادقة للمستلِم المحدد للسماح بالوصول إلى البث إذا كانت السياسة cameraStreamNeedAuthToken صحيحة ولم يتم تقديم هذه القيمة، سيتم استخدام بيانات اعتماد OAuth للمستخدم كرمز مميّز للمصادقة.

cameraStreamProtocol سلسلة

مطلوب:

تنسيق الوسائط الذي يشير إليه عنوان URL للبث. ويجب أن يكون أحد البروتوكولات المدرَجة في مَعلمة أمر SupportedStreamProtocols.

القيم المسموح بها

hls
البث المباشر عبر HTTP
dash
البث الديناميكي التكيُّفي عبر HTTP
smooth_stream
بث سلس
progressive_mp4
تنسيق MP4 التقدمي (غالبًا ما يتم استخدامه للمقاطع)
webrtc
WebRTC

نتائج غير WebRTC

النتائج Type الوصف
cameraStreamAccessUrl سلسلة

مطلوب:

نقطة نهاية عنوان URL لاسترداد البث في الوقت الفعلي بالتنسيق الذي تحدّده cameraStreamProtocol

cameraStreamReceiverAppId سلسلة

رقم تعريف جهاز استقبال البث لمعالجة بث الكاميرا عندما تكون المَعلمة StreamToChromecast صحيحة، وسيتم استخدام جهاز الاستقبال التلقائي في حال عدم تقديمه

نتائج WebRTC

النتائج Type الوصف
cameraStreamSignalingUrl سلسلة

مطلوب:

نقطة نهاية عنوان URL لاسترداد وتبادل بروتوكولات وصف الجلسة (SDP) للكاميرا والعميل يجب أن يعرض العميل عنوان URL للإشارة الذي يستخدم cameraStreamAuthToken كرمز مميز للمصادقة في عنوان الطلب.

cameraStreamOffer سلسلة

بروتوكول وصف جلسة العرض (SDP)

cameraStreamIceServers سلسلة

تمثل خوادم مؤسسة الاتصال التفاعلي (ICE) باستخدام سلسلة JSON مشفّرة مع وصف RTCIceServer. إذا لم تحدِّد خوادم STUN (برامج الخدمات لتحويل الجلسات إلى NAT) في الشبكة الافتراضية الخاصة (NAT)، سيتم ضبط المنصة تلقائيًا على خوادم STUN العامة في Google. ولا يُطلب من خوادم turn (Traversal using Relays about 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"
}

أخطاء الجهاز

راجِع القائمة الكاملة للأخطاء والاستثناءات.

مواصفات بروتوكول 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: سلسلة. رقم تعريف الجهاز كما هو موضَّح في طلب المزامنة أو EXECUTE.
  • sdp: سلسلة. يحتوي على رسالة "وصف وصف الجلسة" لاتصال التطبيقات المشابهة. يستند المحتوى إلى قيمة المعلَمة action. إذا كانت action هي "end"، يمكن أن تكون هذه المعلّمة فارغة.
مَعلمات استجابة الإشارة

يمكن أن تتضمّن الإجابة المعلّمات التالية:

  • action: سلسلة. يجب أن تكون قيمة الردّ من النوع answer.
  • sdp: سلسلة. رسالة بروتوكول وصف الجلسة (SDP) للإجابة.

متطلبات واقتراحات WebRTC

  • توفّر Google حاليًا الاتصال باتجاه واحد (نصف مزدوج).
  • يجب أن تتوفّر إمكانية التجميع وrtcp-mux.
  • يجب استخدام الإصدار 1.2 (D) من بروتوكول أمان طبقة النقل (TLS) أو إصدار أحدث.
  • وبالتالي، لا تتوفّر ميزة Trickle 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
{}