स्मार्ट होम CameraStream Trait स्कीमा

action.devices.traits.CameraStream - इस सुविधा में किसी डिवाइस के कैमरा स्ट्रीम को कंट्रोल करने का तरीका बताया गया है.

यह सुविधा उन डिवाइसों में है जिनमें स्मार्ट डिसप्ले, Chromecast की सुविधा वाले डिवाइसों या स्मार्टफ़ोन पर वीडियो फ़ीड स्ट्रीम करने की सुविधा है. ज़्यादातर मामलों में, ये सुरक्षा कैमरे या बेबी कैमरे होते हैं. हालांकि, यह सुविधा ज़्यादा मुश्किल डिवाइसों पर भी लागू होती है, जिनमें कैमरा लगा होता है. उदाहरण के लिए, वीडियो कॉन्फ़्रेंसिंग डिवाइस या वैक्यूम रोबोट, जिस पर कैमरा लगा हो.

डिवाइस ATTRIBUTES

SYNC कार्रवाई के तहत, इस सुविधा वाले डिवाइस यहां दिए गए एट्रिब्यूट रिपोर्ट कर सकते हैं. SYNC इंटेंट को मैनेज करने के बारे में ज़्यादा जानने के लिए, इंटेंट पूरा करना देखें.

एट्रिब्यूट Type ब्यौरा
cameraStreamSupportedProtocols अरे

ज़रूरी है.

कैमरा स्ट्रीम के लिए इस्तेमाल किए जा सकने वाले मीडिया, प्राथमिकता के हिसाब से क्रम में लगाए जाते हैं. आम तौर पर, इस कैटगरी में टारगेट प्लैटफ़ॉर्म के साथ काम करने वाले पहले प्रोटोकॉल का अनुरोध किया जाता है.

[item, ...] स्ट्रिंग

मीडिया प्रकार.

इस्तेमाल की जा सकने वाली वैल्यू:

hls
एचटीटीपी लाइव स्ट्रीमिंग
dash
डाइनैमिक अडैप्टिव स्ट्रीमिंग ओवर एचटीटीपी
smooth_stream
बिना किसी रुकावट के स्ट्रीम करने की सुविधा
progressive_mp4
प्रोग्रेसिव MP4 (ज़्यादातर क्लिप के लिए इस्तेमाल किया जाता है)
webrtc
वेबआरटीसी
cameraStreamNeedAuthToken बूलियन

ज़रूरी है.

कैमरा फ़ीड स्ट्रीम करने के लिए, टारगेट किए गए प्लैटफ़ॉर्म के लिए cameraStreamAuthToken से, पुष्टि करने वाला टोकन दिया जाएगा या नहीं.

उदाहरण

एक से ज़्यादा प्रोटोकॉल वाला कैमरा, जिसके लिए पुष्टि करने वाला टोकन होना ज़रूरी नहीं है.

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

सिर्फ़ एक प्रोटोकॉल के साथ काम करने वाला कैमरा, जिसके लिए पुष्टि करने वाला टोकन ज़रूरी है.

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

इस्तेमाल किए जा सकने वाले स्ट्रीमिंग प्रोटोकॉल

यह सुविधा इन स्ट्रीमिंग प्रोटोकॉल के साथ काम करती है:

डिवाइसों (Chromecast, स्मार्ट डिसप्ले, और Chromecast की सुविधा वाले स्मार्ट टीवी) पर कास्ट करने के लिए, hls,dash,smooth_stream, और progressive_mp4 प्रोटोकॉल को स्ट्रीम करते समय, कास्ट वेब रिसीवर लॉन्च किया जाता है. इससे स्ट्रीम को प्रोसेस करने और डिवाइस पर उसे रेंडर करने में मदद मिलती है. यह सुझाव दिया जाता है कि डेवलपर कस्टम वेब रिसीवर बनाएं, ताकि वह डीबग करने वाले टूल का ऐक्सेस चालू कर सके, प्लेयर के काम करने के तरीके को पसंद के मुताबिक बना सके, यूज़र इंटरफ़ेस (यूआई) ब्रैंडिंग को पसंद के मुताबिक बना सके, और आंकड़ों को शामिल कर सके. कस्टम रिसीवर का इस्तेमाल चालू करने और डिफ़ॉल्ट रिसीवर का इस्तेमाल करने की सुविधा से ऑप्ट आउट करने के लिए, EXECUTE रिस्पॉन्स के cameraStreamReceiverAppId फ़ील्ड में अपना कास्ट ऐप्लिकेशन रजिस्टर करते समय, जनरेट होने वाला रिसीवर ऐप्लिकेशन आईडी सेट करें.

कस्टम वेब रिसीवर ऐप्लिकेशन के बारे में ज़्यादा जानने के लिए, डेवलपर की साइट गाइड पर जाएं.

डिवाइस के STATES

कोई नहीं.

डिवाइस COMMANDS

EXECUTE कार्रवाई के तहत, इस सुविधा वाले डिवाइस नीचे दिए गए निर्देशों का जवाब दे सकते हैं. EXECUTE इंटेंट को मैनेज करने के बारे में ज़्यादा जानने के लिए, इंटेंट पूरा करना देखें.

action.devices.commands.GetCameraStream

पैरामीटर

पैरामीटर Type ब्यौरा
StreamToChromecast बूलियन

ज़रूरी है.

Chromecast डिवाइस पर स्ट्रीम चलाई जाएगी या नहीं.

SupportedStreamProtocols अरे

ज़रूरी है.

पसंदीदा डेस्टिनेशन के साथ काम करने वाले मीडिया टाइप/फ़ॉर्मैट.

[item, ...] स्ट्रिंग

मीडिया प्रकार.

इस्तेमाल की जा सकने वाली वैल्यू:

hls
एचटीटीपी लाइव स्ट्रीमिंग
dash
डाइनैमिक अडैप्टिव स्ट्रीमिंग ओवर एचटीटीपी
smooth_stream
बिना किसी रुकावट के स्ट्रीम करने की सुविधा
progressive_mp4
प्रोग्रेसिव MP4 (ज़्यादातर क्लिप के लिए इस्तेमाल किया जाता है)
webrtc
वेबआरटीसी

नतीजे

नतीजे Type ब्यौरा
cameraStreamAuthToken स्ट्रिंग

खास तौर पर पाने वाले के लिए, स्ट्रीम को ऐक्सेस करने की अनुमति देने वाला टोकन. अगर cameraStreamNeedAuthToken सही है और यह वैल्यू नहीं दी गई है, तो उपयोगकर्ता के OAuth क्रेडेंशियल का इस्तेमाल, पुष्टि करने वाले टोकन के तौर पर किया जाएगा.

cameraStreamProtocol स्ट्रिंग

ज़रूरी है.

वह मीडिया फ़ॉर्मैट जिस पर स्ट्रीम यूआरएल ले जाता है. यह SupportedStreamProtocols कमांड पैरामीटर में मौजूद प्रोटोकॉल में से एक होना चाहिए.

इस्तेमाल की जा सकने वाली वैल्यू:

hls
एचटीटीपी लाइव स्ट्रीमिंग
dash
डाइनैमिक अडैप्टिव स्ट्रीमिंग ओवर एचटीटीपी
smooth_stream
बिना किसी रुकावट के स्ट्रीम करने की सुविधा
progressive_mp4
प्रोग्रेसिव MP4 (ज़्यादातर क्लिप के लिए इस्तेमाल किया जाता है)
webrtc
वेबआरटीसी

WebRTC के अलावा दूसरे नतीजे

नतीजे Type ब्यौरा
cameraStreamAccessUrl स्ट्रिंग

ज़रूरी है.

रीयल-टाइम स्ट्रीम को वापस पाने के लिए, cameraStreamProtocol के बताए गए फ़ॉर्मैट में यूआरएल एंडपॉइंट.

cameraStreamReceiverAppId स्ट्रिंग

StreamToChromecast पैरामीटर के सही होने पर, कैमरा स्ट्रीम प्रोसेस करने के लिए रिसीवर का आईडी कास्ट करें. अगर यह आईडी नहीं दिया गया है, तो डिफ़ॉल्ट रिसीवर का इस्तेमाल किया जाएगा.

WebRTC के नतीजे

नतीजे Type ब्यौरा
cameraStreamSignalingUrl स्ट्रिंग

ज़रूरी है.

कैमरे और क्लाइंट के सेशन की जानकारी के प्रोटोकॉल (एसडीपी) को वापस पाने और एक्सचेंज करने के लिए यूआरएल एंडपॉइंट. क्लाइंट को सिग्नलिंग यूआरएल दिखाना चाहिए, जो अनुरोध के हेडर में पुष्टि करने वाले टोकन के तौर पर cameraStreamAuthToken का इस्तेमाल करता है.

cameraStreamOffer स्ट्रिंग

ऑफ़र सेशन की जानकारी का प्रोटोकॉल (एसडीपी).

cameraStreamIceServers स्ट्रिंग

यह इंटरैक्टिव कनेक्टिविटी इस्टैब्लिशमेंट (ICE) सर्वर के बारे में बताता है. इसके लिए, यह RTCIceServer के ब्यौरे के साथ कोड में बदली गई JSON स्ट्रिंग का इस्तेमाल करता है. अगर आपने STUN (NAT के लिए सेशन ट्रेवर्सल यूटिलिटी) सर्वर की जानकारी नहीं दी है, तो प्लैटफ़ॉर्म डिफ़ॉल्ट रूप से Google के सार्वजनिक STUN सर्वर का इस्तेमाल करता है. टर्न (NAT के आस-पास रिले का इस्तेमाल करके) सर्वर की ज़रूरत सिर्फ़ तब होती है, जब आप यह गारंटी न दे पाएं कि आईपी / आईसीई उम्मीदवार सार्वजनिक तौर पर उपलब्ध होंगे (उदाहरण के लिए, मीडिया सर्वर, पब्लिक होस्ट आईसीई कैंडिडेट, रिले आईसीई कैंडिडेट वगैरह के ज़रिए).

उदाहरण

सामने के दरवाज़े पर लगा कैमरा दिखाएं (डिफ़ॉल्ट कास्ट रिसीवर).

{
  "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, JSON फ़ॉर्मैट में POST बॉडी और रिस्पॉन्स के साथ, POST तरीके का इस्तेमाल करता है.

फ़िलहाल, WebRTC की सुविधा, Google Nest स्मार्ट डिसप्ले और Chromecast with Google TV डिवाइसों पर काम करती है.

इस सेक्शन में WebRTC स्ट्रीम प्रोटोकॉल का इस्तेमाल करने की ज़रूरी शर्तों के बारे में बताया गया है.

डेटा टाइप पैरामीटर/परिभाषाएं
सिग्नलिंग अनुरोध का हेडर

हेडर को इन शर्तों के मुताबिक होना चाहिए:

  • पुष्टि करना: पुष्टि करने वाले हेडर को Bearer टोकन टाइप वाले cameraStreamAuthToken के लिए, GetCameraStream रिटर्न वैल्यू से मिले पुष्टि टोकन का इस्तेमाल करना चाहिए.
  • कॉन्टेंट-टाइप: application/json.
सिग्नलिंग अनुरोध के पैरामीटर

अनुरोध में ये पैरामीटर शामिल हो सकते हैं:

  • action: स्ट्रिंग. मान्य वैल्यू ये हैं:
    • offer: कंपनी से SDP मैसेज ऑफ़र करें.
    • answer: कंपनी से अपने एसडीपी मैसेज का जवाब दें.
    • end: मौजूदा सेशन बंद करें.
  • deviceId: स्ट्रिंग. डिवाइस आईडी, जैसा कि सिंक या EXECUTE अनुरोध में रिपोर्ट किया गया है.
  • sdp: स्ट्रिंग. इसमें पीयर कनेक्शन के लिए सेशन ब्यौरे प्रोटोकॉल मैसेज शामिल होता है. यह कॉन्टेंट, action पैरामीटर की वैल्यू पर आधारित होता है. अगर action "end" है, तो यह पैरामीटर खाली हो सकता है.
सिग्नलिंग रिस्पॉन्स पैरामीटर

रिस्पॉन्स में ये पैरामीटर शामिल हो सकते हैं:

  • action: स्ट्रिंग. रिस्पॉन्स वैल्यू, answer टाइप की होनी चाहिए.
  • sdp: स्ट्रिंग. जवाब देने के लिए SDP मैसेज.

WebRTC की ज़रूरी शर्तें और सुझाव

  • Google, फ़िलहाल एकतरफ़ा (हाल्फ़ डूप्लेक्स) कम्यूनिकेशन की सुविधा देता है.
  • आपको बंडल करने और rtcp-mux की सुविधा देनी होगी.
  • आपको (D)TLS 1.2 या इसके बाद के वर्शन का इस्तेमाल करना होगा.
  • Trickle ICE इस्तेमाल नहीं किया जा सकता. SDP भेजने से पहले सभी ICE उम्मीदवारों को इकट्ठा करना ज़रूरी है.
  • हमारा सुझाव है कि सफल कनेक्शन की संभावना बढ़ाने के लिए, आप UDP/IPv4, टीसीपी/IPv4, UDP/IPv6, और टीसीपी/IPv6 ICE उम्मीदवारों को शामिल करें.

इस्तेमाल किए जा सकने वाले वीडियो रिज़ॉल्यूशन:

  • कम से कम: 480 पिक्सल
  • ज़्यादा से ज़्यादा: 1080 पिक्सल

इस्तेमाल किए जा सकने वाले वीडियो कोडेक:

  • VP8
  • H.264

इस्तेमाल किए जा सकने वाले ऑडियो कोडेक:

  • Opus (पसंदीदा कोडेक)
  • जी.711/पीसीएमयू
  • G.722

क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग

क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग (सीओआरएस) एक ऐसी सुविधा है जो ब्राउज़र को यह बताने के लिए अतिरिक्त एचटीटीपी हेडर का इस्तेमाल करती है कि किसी एक ऑरिजिन पर चल रहे वेब ऐप्लिकेशन को किसी अलग ऑरिजिन से, चुने गए रिसॉर्स को ऐक्सेस करने की अनुमति दी जाए. cameraStreamSignalingUrl को होस्ट करने वाले सर्वर को इस हेडर के साथ जवाब देना चाहिए:

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

सैंपल सिग्नलिंग अनुरोध और उसके जवाब

इस उदाहरण में, सिग्नल सेवा देने वाली कंपनी को भेजे गए अनुरोध और 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
{}