स्मार्ट होम कैमरास्ट्रीम ट्रेल स्कीमा

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

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

डिवाइस की विशेषताएं

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

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

ज़रूरी है.

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

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

मीडिया किस तरह का है.

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

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

ज़रूरी है.

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

उदाहरण

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

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

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

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

स्ट्रीमिंग के लिए उपलब्ध प्रोटोकॉल

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

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

कोई नहीं.

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

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

action.devices.commands.GetCameraStream

पैरामीटर

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

ज़रूरी है.

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

SupportedStreamProtocols रेंज

ज़रूरी है.

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

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

मीडिया किस तरह का है.

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

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

नतीजे

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

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

cameraStreamProtocol स्ट्रिंग

ज़रूरी है.

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

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

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

WebRTC से जुड़े नतीजे नहीं

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

ज़रूरी है.

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

cameraStreamReceiverAppId स्ट्रिंग

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

WebRTC के नतीजे

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

ज़रूरी है.

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

cameraStreamOffer स्ट्रिंग

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

cameraStreamIceServers स्ट्रिंग

यह कोड, इंटरैक्टिव यूआरएल कनेक्शन की मदद से, कोड में बदले गए JSON स्ट्रिंग का इस्तेमाल करता है. इस स्ट्रिंग में RTCIceServer का इस्तेमाल होता है. अगर आपने STUN (सेशन ट्रैवर्सल यूटिलिटी फ़ॉर एनएटी) सर्वर की जानकारी नहीं दी है, तो प्लैटफ़ॉर्म डिफ़ॉल्ट रूप से Google के सार्वजनिक STUN सर्वर के तौर पर काम करेगा. टर्न (NAT के आस-पास रिलेशनल रिले का इस्तेमाल करना) सर्वर की सिर्फ़ तब ज़रूरत होती है, जब आप इस बात की गारंटी नहीं दे सकते कि दिए गए आईपी / 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 बॉडी और JSON फ़ॉर्मैट में जवाब के साथ POST तरीके का इस्तेमाल करता है.

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

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

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

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

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

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

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

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

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

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

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

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

  • कम से कम: 480p
  • ज़्यादा से ज़्यादा: 1080p

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

  • वीपी8
  • H.264

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

  • Opus (पसंदीदा कोडेक)
  • G.711/पीसीएमयू
  • जी.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
{}