स्मार्ट होम कैमरा स्ट्रीम की विशेषता का स्कीमा

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

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

डिवाइस के एट्रिब्यूट

इस विशेषता वाले डिवाइस, SYNC ऑपरेशन के हिस्से के तौर पर, इन एट्रिब्यूट की जानकारी दे सकते हैं. SYNC इंटेंट को मैनेज करने के बारे में ज़्यादा जानने के लिए, इंटेंट पूरा करना लेख पढ़ें.

विशेषताएं टाइप ब्यौरा
cameraStreamSupportedProtocols कलेक्शन

ज़रूरी है.

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

[item, ...] String

मीडिया टाइप.

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

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

ज़रूरी है.

इससे पता चलता है कि कैमरे के फ़ीड को स्ट्रीम करने के लिए, पुष्टि करने वाले टोकन की ज़रूरत है या नहीं.

उदाहरण

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

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

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

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

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

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

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

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

डिवाइस की स्थितियां

कोई नहीं.

डिवाइस के लिए निर्देश

इस विशेषता वाले डिवाइस, EXECUTE ऑपरेशन के तहत, इन निर्देशों का जवाब दे सकते हैं. EXECUTE इंटेंट को मैनेज करने के बारे में ज़्यादा जानने के लिए, इंटेंट पूरा करना लेख पढ़ें.

action.devices.commands.GetCameraStream

पैरामीटर

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

ज़रूरी है.

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

SupportedStreamProtocols कलेक्शन

ज़रूरी है.

आपके चुने गए डेस्टिनेशन के साथ काम करने वाले मीडिया टाइप/फ़ॉर्मैट.

[item, ...] String

मीडिया टाइप.

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

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

नतीजे

नतीजे टाइप ब्यौरा
cameraStreamAuthToken String

स्ट्रीम को ऐक्सेस करने की अनुमति देने के लिए, किसी खास रिसीवर के लिए ऑथेंटिकेशन टोकन. अगर cameraStreamNeedAuthToken सही है, तो cameraStreamAuthToken की वैल्यू देना ज़रूरी है. साथ ही, टोकन का दायरा सिर्फ़ टारगेट किए गए डिवाइस तक होना चाहिए.

cameraStreamProtocol String

ज़रूरी है.

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

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

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

WebRTC के अलावा अन्य नतीजे

नतीजे टाइप ब्यौरा
cameraStreamAccessUrl String

ज़रूरी है.

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

cameraStreamReceiverAppId String

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

WebRTC के नतीजे

नतीजे टाइप ब्यौरा
cameraStreamSignalingUrl String

ज़रूरी है.

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

cameraStreamOffer String

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

अगर ऑफ़र एसडीपी को एक्सीक्यूशन(WebRTC) के नतीजे के तौर पर शामिल किया गया है, तो Google सिग्नल एंडपॉइंट पर जवाब एसडीपी उपलब्ध कराएगा.

अगर इसे 'कार्रवाई के इंटेंट' में शामिल नहीं किया गया है, तो Google ऑफ़र एसडीपी जनरेट करेगा और सिग्नल भेजने वाले एंडपॉइंट पर पोस्ट करेगा. साथ ही, जवाब के तौर पर जवाब एसडीपी की उम्मीद करेगा. कृपया यहां भी देखें.

cameraStreamIceServers String

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

उदाहरण

सामने के दरवाज़े पर लगे कैमरे का वीडियो दिखाओ (डिफ़ॉल्ट रूप से सेट किया गया 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"
}

डिवाइस से जुड़ी गड़बड़ियां

गड़बड़ियों और अपवादों की पूरी सूची देखें.

WebRTC प्रोटोकॉल की खास बातें

WebRTC का इस्तेमाल करने के फ़ायदे: कम लेटेंसी और एकतरफ़ा बातचीत. WebRTC, POST बॉडी और JSON फ़ॉर्मैट में रिस्पॉन्स के साथ POST तरीके का इस्तेमाल करता है.

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

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

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

हेडर को ये ज़रूरी शर्तें पूरी करनी होंगी:

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

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

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

जवाब में ये पैरामीटर शामिल हो सकते हैं:

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

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

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

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

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

काम करने वाले वीडियो कोडेक:

  • VP8
  • H.264

इसके साथ काम करने वाले ऑडियो कोडेक:

  • Opus (पसंदीदा कोडेक)
  • G.711/PCMU
  • G.722

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

क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग (सीओआरएस) एक ऐसा तरीका है जो अतिरिक्त एचटीटीपी हेडर का इस्तेमाल करके, ब्राउज़र को यह बताता है कि एक ऑरिजिन पर चल रहे वेब ऐप्लिकेशन को, किसी दूसरे ऑरिजिन से चुने गए रिसॉर्स ऐक्सेस करने की अनुमति दें. 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
{}