১. শুরু করার আগে
CameraStream ট্রেইটটি সেইসব ডিভাইসের অন্তর্ভুক্ত, যেগুলো স্মার্ট ডিসপ্লে, ক্রোমকাস্ট ডিভাইস এবং স্মার্টফোনে ভিডিও ফিড স্ট্রিম করতে সক্ষম। CameraStream ট্রেইটের মধ্যে এখন WebRTC প্রোটোকল সমর্থিত, যার ফলে আপনি একটি ক্যামেরা ডিভাইস থেকে গুগল নেস্ট ডিসপ্লে ডিভাইসে স্টার্টআপ এবং স্ট্রিমিং ল্যাটেন্সি উল্লেখযোগ্যভাবে কমাতে পারবেন।

পূর্বশর্ত
- ক্লাউড-টু-ক্লাউড প্রাইমার পর্যালোচনা করুন।
আপনি যা শিখবেন
- কীভাবে একটি স্মার্ট হোম ক্লাউড পরিষেবা স্থাপন করবেন।
- আপনার পরিষেবাটিকে গুগল অ্যাসিস্ট্যান্টের সাথে কীভাবে সংযুক্ত করবেন।
- WebRTC প্রোটোকল ব্যবহার করে কীভাবে গুগল নেস্ট ডিসপ্লে ডিভাইসে স্ট্রিম করবেন।
আপনার যা যা লাগবে
- একটি ওয়েব ব্রাউজার, যেমন গুগল ক্রোম ।
- গুগল হোম অ্যাপসহ একটি আইওএস বা অ্যান্ড্রয়েড ডিভাইস।
- Node.js সংস্করণ ২৪ বা তার পরবর্তী সংস্করণ।
- ফায়ারবেসের জন্য ব্লেজ (ব্যবহার অনুযায়ী অর্থ প্রদানের) প্ল্যান।
- একটি অন্তর্নির্মিত বা বাহ্যিক ওয়েবক্যাম ডিভাইস যা ফুল এইচডি রেজোলিউশন সমর্থন করতে পারে।
- একটি গুগল নেস্ট ডিসপ্লে ডিভাইস।
২. শুরু করুন
Firebase CLI ইনস্টল করুন
Firebase CLI ব্যবহার করে আপনি আপনার ওয়েব অ্যাপগুলো স্থানীয়ভাবে পরিবেশন করতে এবং Firebase হোস্টিং-এ স্থাপন করতে পারেন।
Firebase CLI ইনস্টল করতে, এই ধাপগুলো অনুসরণ করুন:
- আপনার টার্মিনালে Firebase CLI ডাউনলোড এবং ইনস্টল করুন:
$ npm install -g firebase-tools
- যাচাই করুন যে CLI সঠিকভাবে ইনস্টল হয়েছে:
$ firebase --version
- আপনার গুগল অ্যাকাউন্ট দিয়ে Firebase CLI-কে অনুমোদন দিন:
$ firebase login
একটি প্রকল্প তৈরি করুন
- গুগল হোম ডেভেলপার কনসোলে যান।
- Create Project-এ ক্লিক করুন, প্রজেক্টের জন্য একটি নাম লিখুন এবং Create Project-এ আবার ক্লিক করুন।

CameraStream ক্লায়েন্ট অ্যাপটি চালান
এই কোডল্যাবের সোর্স কোডে একটি WebRTC ক্লায়েন্ট অন্তর্ভুক্ত রয়েছে, যা ওয়েবক্যাম এবং গুগল স্মার্ট হোম ডিসপ্লে ডিভাইসের মধ্যে WebRTC সেশন স্থাপন, আলোচনা এবং পরিচালনা করে।
CameraStream WebRTC ক্লায়েন্ট অ্যাপটি চালানোর জন্য, নিম্নলিখিতগুলির মধ্যে একটি করুন:
- আপনার ডেভেলপমেন্ট মেশিনে সোর্স কোডটি ডাউনলোড করতে নিচের বাটনটিতে ক্লিক করুন:
- এই গিটহাব রিপোজিটরিটি ক্লোন করুন:
$ git clone https://github.com/google-home/smarthome-camerastream-webrtc.git
কোডটিতে নিম্নলিখিত ডিরেক্টরিগুলো রয়েছে:
-
camerastream-startডিরেক্টরি, যেখানে স্টার্টার কোড থাকে যার উপর ভিত্তি করে আপনি বিল্ড করেন। -
camerastream-doneডিরেক্টরি, যেখানে সমাপ্ত কোডল্যাবের সমাধান কোড রয়েছে।
camerastream-start ডিরেক্টরিতে নিম্নলিখিত সাবডিরেক্টরিগুলো রয়েছে:
-
publicসাবডিরেক্টরি, যেখানে আপনার ক্যামেরা ডিভাইসের অবস্থা সহজে নিয়ন্ত্রণ ও পর্যবেক্ষণ করার জন্য একটি ফ্রন্টএন্ড ইউআই রয়েছে। -
functionsসাবডিরেক্টরিতে একটি সম্পূর্ণ বাস্তবায়িত ক্লাউড পরিষেবা রয়েছে, যা `Cloud Functions for Firebase` এবং `Realtime Database` ব্যবহার করে ক্যামেরাটি পরিচালনা করে।
স্টার্টার কোডে TODO কমেন্ট থাকে যা নির্দেশ করে কোথায় আপনাকে কোড যোগ বা পরিবর্তন করতে হবে, যেমন নিচের উদাহরণটি:
// TODO: Implement full SYNC response.
আপনার গুগল হোম ডেভেলপার কনসোল প্রকল্পে ফায়ারবেস যুক্ত করুন
পদ্ধতি ১: ফায়ারবেস কনসোলের মাধ্যমে
- ফায়ারবেসে যান।
- একটি Firebase প্রজেক্ট তৈরি করুন -এ ক্লিক করুন।

- প্রজেক্ট তৈরি করার স্ক্রিনে, ‘Add Firebase to Google Cloud project’-এ ক্লিক করুন।

- 'Get started ' স্ক্রিনে, আপনি Google Home Developer console-এ এইমাত্র তৈরি করা Google Cloud প্রজেক্টটি নির্বাচন করুন এবং তারপর 'Continue'-তে ক্লিক করুন।

পদ্ধতি ২: ফায়ারবেস সিএলআই এর মাধ্যমে
firebase projects:addfirebase
Firebase যোগ করতে আপনার এইমাত্র তৈরি করা Google Home Developer Console প্রজেক্টটি নির্বাচন করুন।
যখন আপনার গুগল হোম ডেভেলপার কনসোল প্রজেক্টে ফায়ারবেস যোগ করা হবে, তখন এটি ফায়ারবেস কনসোলে দেখা যাবে। ফায়ারবেস প্রজেক্টের প্রজেক্ট আইডি আপনার গুগল হোম ডেভেলপার কনসোল প্রজেক্ট আইডির সাথে মিলে যাবে।

ফায়ারবেসের সাথে সংযোগ করুন
-
camerastream-startডিরেক্টরিতে যান এবং তারপরে আপনার Actions প্রজেক্ট দিয়ে Firebase CLI সেট আপ করুন:
$ cd camerastream-start $ firebase use <project-id>
-
camerastream-startডিরেক্টরিতে,functionsফোল্ডারে যান এবং তারপরে সমস্ত প্রয়োজনীয় ডিপেন্ডেন্সি ইনস্টল করুন:
$ cd functions $ npm install
- আপনি যদি নিম্নলিখিত বার্তাটি দেখতে পান, তবে এটিকে উপেক্ষা করুন। এই সতর্কতাটি পুরোনো ডিপেন্ডেন্সিগুলোর কারণে দেখাচ্ছে। আরও তথ্যের জন্য, এই গিটহাব ইস্যুটি দেখুন।
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
- একটি ফায়ারবেস প্রজেক্ট শুরু করুন:
$ firebase init
- ফাংশন এবং হোস্টিং নির্বাচন করুন। এটি আপনার প্রোজেক্টের জন্য প্রয়োজনীয় এপিআই এবং ফিচারগুলো চালু করবে।
? Which Firebase features do you want to set up for this directory? Press Space to select features, then Enter to confirm your choices. (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed) >( ) Data Connect: Set up a Firebase Data Connect service ( ) Firestore: Configure security rules and indexes files for Firestore ( ) Genkit: Setup a new Genkit project with Firebase (*) Functions: Configure a Cloud Functions directory and its files ( ) App Hosting: Configure an apphosting.yaml file for App Hosting (*) Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys ( ) Storage: Configure a security rules file for Cloud Storage ( ) Emulators: Set up local emulators for Firebase products ( ) Remote Config: Configure a template file for Remote Config ( ) Extensions: Set up an empty Extensions manifest (*) Realtime Database: Configure a security rules file for Realtime Database and (optionally) provision default instance ( ) Data Connect: Set up a Firebase Data Connect service ( ) Firestore: Configure security rules and indexes files for Firestore
- ডিফল্ট ফাইলগুলো দিয়ে ক্লাউড ফাংশন কনফিগার করুন, এবং নিশ্চিত করুন যে আপনি প্রজেক্ট স্যাম্পলে থাকা
index.jsএবংpackage.jsonফাইলগুলো ওভাররাইট করছেন না:
? Would you like to initialize a new codebase, or overwrite an existing one? Overwrite ? What language would you like to use to write Cloud Functions? JavaScript ? File functions/package.json already exists. Overwrite? No ? File functions/index.js already exists. Overwrite? No ? Do you want to install dependencies with npm now? Yes
- প্রজেক্ট কোডে
publicডিরেক্টরি দিয়ে হোস্টিং কনফিগার করুন এবং বিদ্যমানindex.htmlফাইলটি ব্যবহার করুন:
? What do you want to use as your public directory? public ? Configure as a single-page app (rewrite all urls to /index.html)? Yes ? Set up automatic builds and deploys with GitHub? No ? File public/index.html already exists. Overwrite? No
৩. সেশন ডেসক্রিপশন প্রোটোকল (এসডিপি) বার্তা বিনিময়
একটি WebRTC স্ট্রিম স্থাপনের ক্ষেত্রে SDP মেসেজের আদান-প্রদান একটি গুরুত্বপূর্ণ ধাপ। SDP হলো একটি টেক্সট-ভিত্তিক প্রোটোকল যা একটি মাল্টিমিডিয়া সেশনের বৈশিষ্ট্য বর্ণনা করে। WebRTC-তে এটি একটি পিয়ার-টু-পিয়ার সংযোগের প্যারামিটারগুলো, যেমন ব্যবহৃত কোডেক, অংশগ্রহণকারীদের আইপি অ্যাড্রেস এবং মিডিয়া পরিবহনের জন্য ব্যবহৃত পোর্টগুলো নিয়ে আলোচনার জন্য ব্যবহৃত হয়।
আপনার ওয়েবক্যাম এবং স্মার্ট হোম CameraStream ক্লায়েন্ট অ্যাপের মধ্যে SDP মেসেজ আদান-প্রদানের জন্য Realtime Database-কে হোস্ট হিসেবে ব্যবহার করতে, এই ধাপগুলো অনুসরণ করুন:
- Firebase কনসোলে , Build > Realtime Database > Create database- এ ক্লিক করুন।

- রিয়েলটাইম ডেটাবেস লোকেশন ড্রপ-ডাউন মেনু থেকে আপনার ডেটাবেস হোস্ট করার জন্য একটি উপযুক্ত স্থান নির্বাচন করুন।

- টেস্ট মোডে স্টার্ট নির্বাচন করুন এবং তারপরে এনাবল-এ ক্লিক করুন। রিয়েলটাইম ডেটাবেস সক্রিয় থাকলে, ক্যামেরাস্ট্রিম ক্লায়েন্ট অ্যাপ থেকে এটিকে রেফারেন্স করার ক্ষমতা আপনার প্রয়োজন হবে।
- ফায়ারবেস কনসোলে, নির্বাচন করুন
প্রজেক্ট সেটিংস > প্রজেক্ট সেটিংস >
সেটআপ প্রক্রিয়াটি চালু করতে আপনার ওয়েব অ্যাপে ফায়ারবেস যুক্ত করুন । - আপনি যদি আপনার Firebase প্রজেক্টে আগে থেকেই কোনো অ্যাপ যোগ করে থাকেন, তাহলে প্ল্যাটফর্ম অপশনগুলো দেখতে 'Add app'-এ ক্লিক করুন।
- অ্যাপটির জন্য একটি ডাকনাম লিখুন, যেমন
My web app, এবং তারপর ‘রেজিস্টার অ্যাপ’-এ ক্লিক করুন। - Add Firebase SDK সেকশনে, Use <script> tag সিলেক্ট করুন।
-
firebasebaseConfigঅবজেক্ট থেকে মানগুলো কপি করেcamaerastream-start/public/webrtc_generator.jsফাইলে পেস্ট করুন।
const firebaseConfig = {
apiKey: "XXXXX",
authDomain: "XXXXX",
projectId: "XXXXX",
storageBucket: "XXXXX",
messagingSenderId: "XXXXX",
appId: "XXXXX",
measurementId: "XXXXX"
};
- প্রক্রিয়াটি সম্পূর্ণ করতে 'Continue to console'-এ ক্লিক করুন। আপনি প্রজেক্ট সেটিংস পৃষ্ঠায় নতুন তৈরি করা ওয়েব অ্যাপটি দেখতে পাবেন।
৪. একটি WebRTC ক্যামেরা তৈরি করুন
এখন যেহেতু আপনি আপনার অ্যাকশন কনফিগার করেছেন, আপনার ক্লাউড পরিষেবাটিকে নিম্নলিখিত ইন্টেন্টগুলি পরিচালনা করতে হবে:
- একটি
SYNCইন্টেন্ট যা তখন তৈরি হয় যখন অ্যাসিস্ট্যান্ট জানতে চায় যে ব্যবহারকারী কোন কোন ডিভাইস সংযুক্ত করেছেন। ব্যবহারকারী যখন একটি অ্যাকাউন্ট লিঙ্ক করেন, তখন এটি আপনার সার্ভিসে পাঠানো হয়। এর জবাবে আপনার ব্যবহারকারীর ডিভাইস এবং সেগুলোর সক্ষমতার একটি JSON পেলোড পাঠানো উচিত। - একটি
EXECUTE/QUERYইন্টেন্ট যা তখন সক্রিয় হয় যখন অ্যাসিস্ট্যান্ট কোনো ব্যবহারকারীর পক্ষ থেকে একটি ডিভাইস নিয়ন্ত্রণ করতে চায়। আপনাকে অনুরোধ করা প্রতিটি ডিভাইসের এক্সিকিউশন স্ট্যাটাস সহ একটি JSON পেলোড দিয়ে সাড়া দিতে হবে।
এই অংশে, আপনি এই ইনটেন্টগুলো পরিচালনা করার জন্য পূর্বে স্থাপন করা ফাংশনগুলো আপডেট করবেন।
SYNC প্রতিক্রিয়া আপডেট করুন
-
functions/index.jsফাইলটিতে যান। এতে অ্যাসিস্ট্যান্টের অনুরোধে সাড়া দেওয়ার কোড রয়েছে। - ডিভাইসের মেটাডেটা ও সক্ষমতাগুলো ফেরত পেতে
SYNCইন্টেন্টটি সম্পাদনা করুন:
index.js
app.onSync((body) => {
return {
requestId: body.requestId,
payload: {
agentUserId: USER_ID,
devices: [{
id: 'camera',
type: 'action.devices.types.CAMERA',
traits: [
'action.devices.traits.OnOff',
'action.devices.traits.CameraStream',
],
name: {
defaultNames: ['My WebRTC Camera'],
name: 'Camera',
nicknames: ['Camera'],
},
deviceInfo: {
manufacturer: 'Acme Co',
model: 'acme-camera',
hwVersion: '1.0',
swVersion: '1.0.1',
},
willReportState: false,
attributes: {
cameraStreamSupportedProtocols:['webrtc'],
cameraStreamNeedAuthToken: true,
cameraStreamSupportsPreview: true
},
}],
},
};
});
- কোডে
USER_IDসংজ্ঞায়িত করা নেই।const _ = require('underscore');এর নিচে নিম্নলিখিতটি যোগ করুন:
// Hardcoded user ID
const USER_ID = '123';
EXECUTE ইন্টেন্টটি পরিচালনা করুন
EXECUTE ইন্টেন্টটি ডিভাইসের অবস্থা আপডেট করার কমান্ডগুলো পরিচালনা করে। এর প্রতিক্রিয়ায় প্রতিটি কমান্ডের স্ট্যাটাস—যেমন, SUCCESS , ERROR , বা PENDING এবং ডিভাইসের নতুন অবস্থা ফেরত দেওয়া হয়।
একটি EXECUTE ইন্টেন্ট হ্যান্ডেল করার জন্য, functions/index.js ফাইলে EXECUTE ইন্টেন্টটি এডিট করে Firebase প্রজেক্টের signaling এন্ডপয়েন্টটি রিটার্ন করার ব্যবস্থা করুন:
index.js
app.onExecute(async (body,headers) => {
var array = headers.authorization.split(' ');
var snapshot = await firebaseRef.ref('/userId/'+array[1]).once('value');
var offerGenLocation = snapshot.val().type;
const {requestId} = body;
var result = {
status: 'SUCCESS',
states: {
cameraStreamProtocol: 'webrtc',
cameraStreamSignalingUrl:'https://us-central1-<project-id>.cloudfunctions.net/signaling?token='+array[1], // TODO: Add Firebase hosting URL
cameraStreamIceServers: '',
cameraStreamOffer:'',
cameraStreamAuthToken:'',
},
ids: [
'camera'
],
};
return {
requestId: requestId,
payload: {
commands: [result],
},
};
});
ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) পরিচালনা করুন
SDP পাঠানোর জন্য POST মেথড ব্যবহারের কারণে উদ্ভূত CORS হ্যান্ডেল করতে, functions/index.js ফাইলের allowlist অ্যারেতে Firebase হোস্টিং URL-টি যোগ করুন:
index.js
'use strict';
.....
var allowList = ['https://www.gstatic.com','https://<project-id>.web.app']; //TODO Add Firebase hosting URL.
CORS সম্পর্কে আরও তথ্যের জন্য, ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) দেখুন।
স্ট্রিম টার্মিনেশন পরিচালনা করুন
WebRTC স্ট্রিম টার্মিনেশন পরিচালনা করতে, public/webrtc_generator.js ফাইলে Firebase-এর 'signaling' ফাংশনের URL যোগ করুন:
webrtc_generator.js
terminateButton.onclick = function(){
console.log('Terminating Stream!!')
var signalingURL = 'https://us-central1-<project-id>.cloudfunctions.net/signaling'; //TODO Add Firebase hosting URL
var http = new XMLHttpRequest();
ফায়ারবেসে স্থাপন করুন
Firebase-এ ডেপ্লয় করতে, Firebase CLI ব্যবহার করে আপডেট করা ক্লাউড ফুলফিলমেন্টটি ডেপ্লয় করুন:
$ firebase deploy
এই কমান্ডটি একটি ওয়েব অ্যাপ এবং ফায়ারবেসের জন্য কয়েকটি ক্লাউড ফাংশন ডেপ্লয় করে:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.web.app
আপনার ডেভেলপার কনসোল প্রজেক্ট কনফিগার করুন
- ডেভেলপার কনসোলে যান।
- Create Project-এ ক্লিক করুন, প্রজেক্টের জন্য একটি নাম লিখুন এবং Create Project-এ আবার ক্লিক করুন।

ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন নির্বাচন করুন
ডেভেলপার কনসোলের প্রজেক্ট হোমে , ক্লাউড-টু-ক্লাউড-এর অধীনে অ্যাড ক্লাউড-টু-ক্লাউড ইন্টিগ্রেশন নির্বাচন করুন।

- একটি ইন্টিগ্রেশন নাম লিখুন এবং ডিভাইস টাইপ-এর অধীনে ক্যামেরা নির্বাচন করুন। পরবর্তীতে যখন কোনো ডিভাইস সেট আপ করার প্রয়োজন হবে, তখন এই নামটি গুগল হোম অ্যাপে দেখা যাবে। এই কোডল্যাবের জন্য, আমরা ডিসপ্লে নাম হিসেবে WebRTC Codelab লিখেছি, কিন্তু আপনি অন্য কোনো নামও ব্যবহার করতে পারেন।

- অ্যাপ ব্র্যান্ডিং-এর অধীনে, অ্যাপ আইকনের জন্য 144 x 144 পিক্সেল আকারের এবং একটি নামযুক্ত
pngফাইল আপলোড করুন।..png

অ্যাকাউন্ট লিঙ্কিং সক্ষম করুন
আপনার প্রজেক্ট ডেপ্লয় করার পর অ্যাকাউন্ট লিঙ্কিং সক্রিয় করতে, এই ধাপগুলো অনুসরণ করুন:
- ডেভেলপার কনসোলে গিয়ে প্রজেক্টটি খুলুন।
- ক্লাউড-টু-ক্লাউড সেকশনের অধীনে, ইন্টিগ্রেশনটির পাশে থাকা Develop > Edit-এ ক্লিক করুন।
- সেটআপ ও কনফিগারেশন পেজে, অ্যাকাউন্ট লিঙ্কিং সেকশনটি খুঁজুন এবং সংশ্লিষ্ট টেক্সট বক্সগুলোতে নিম্নলিখিত তথ্যগুলো প্রবেশ করান:
ক্লায়েন্ট আইডি | |
ক্লায়েন্টের গোপনীয়তা | |
অনুমোদন ইউআরএল | |
টোকেন ইউআরএল | |

- সংরক্ষণ করুন > পরীক্ষা করুন- এ ক্লিক করুন।
৫. ভার্চুয়াল WebRTC ক্যামেরাটি পরীক্ষা করুন
- আপনার Firebase প্রজেক্টটি ডিপ্লয় করার সময় দেখা হোস্টিং URL-টিতে যান। আপনি নিম্নলিখিত ইন্টারফেসটি দেখতে পাবেন, যেটি হলো CameraStream ক্লায়েন্ট অ্যাপ:

- লোকাল ভিডিও রেজোলিউশন প্যানেলে, কাঙ্ক্ষিত ভিডিওটি নির্বাচন করুন।
- CameraStream ক্লায়েন্ট অ্যাপকে আপনার ওয়েবক্যাম এবং মাইক্রোফোন অ্যাক্সেস করার অনুমতি দিন। আপনার ওয়েবক্যাম থেকে একটি ভিডিও ফিড ক্লায়েন্টে দেখা যাবে।
স্মার্ট হোম CameraStream অ্যাকশন-এর লিঙ্ক
- Google Home অ্যাপে, Add > Works with Google-এ ট্যাপ করুন।

- আপনার তৈরি করা অ্যাকশনটি খুঁজুন এবং তারপর সেটি নির্বাচন করুন।

- অনন্য, পাঁচ-অক্ষরের, আলফানিউমেরিক কোডটি মনে রাখুন, কারণ পরে আপনার এটি প্রয়োজন হবে।

- ‘আমাকে ফিরিয়ে নিয়ে যান ’ ট্যাপ করুন। Google Home অ্যাপে আপনার কাঠামোতে WebRTC ক্যামেরাটি যুক্ত হয়ে যাবে।
একটি WebRTC স্ট্রিম শুরু করুন
- CameraStream ক্লায়েন্ট অ্যাপের ওয়েব পেজে, শেষ বিভাগ থেকে আলফানিউমেরিক কোডটি 'Account linking token value' টেক্সট বক্সে প্রবেশ করান এবং তারপর 'Submit'-এ ক্লিক করুন।

- আপনার গুগল স্মার্ট ডিসপ্লে ডিভাইস থেকে একটি WebRTC সেশন শুরু করতে, নিম্নলিখিতগুলির মধ্যে একটি করুন:
- বলুন "হে গুগল, ওয়েবআরটিসি ক্যামেরা স্ট্রিম করো।"
- আপনার গুগল স্মার্ট ডিসপ্লে ডিভাইসে, হোম কন্ট্রোল > ক্যামেরা > ওয়েবআরটিসি ক্যামেরা ট্যাপ করুন।
গুগল স্মার্ট হোম ক্যামেরাস্ট্রিম ক্লায়েন্ট অ্যাপ থেকে আপনি দেখতে পাচ্ছেন যে, অফার এসপিডি এবং অ্যানসার এসডিপি সফলভাবে তৈরি ও আদান-প্রদান হয়েছে। আপনার ওয়েবক্যাম থেকে ছবিটি ওয়েবআরটিসি (WebRTC) ব্যবহার করে আপনার গুগল স্মার্ট ডিসপ্লে ডিভাইসে স্ট্রিম করা হচ্ছে।
৬. অভিনন্দন
অভিনন্দন! আপনি WebRTC প্রোটোকল ব্যবহার করে আপনার ওয়েবক্যাম থেকে একটি গুগল নেস্ট ডিসপ্লে ডিভাইসে স্ট্রিম করার পদ্ধতি শিখেছেন।