বর্ণনা
ট্যাব মিডিয়া স্ট্রিমের সাথে ইন্টারঅ্যাক্ট করতে chrome.tabCapture API ব্যবহার করুন।
অনুমতি
tabCaptureসংক্ষিপ্ত বিবরণ
chrome.tabCapture API আপনাকে বর্তমান ট্যাবের ভিডিও এবং অডিও ধারণকারী একটি MediaStream অ্যাক্সেস করার সুযোগ দেয়। এটি শুধুমাত্র তখনই কল করা যায় যখন ব্যবহারকারী কোনো এক্সটেনশন চালু করেন, যেমন এক্সটেনশনটির অ্যাকশন বাটনে ক্লিক করার মাধ্যমে। এটি activeTab পারমিশনের আচরণের অনুরূপ।
সিস্টেম অডিও সংরক্ষণ
যখন কোনো ট্যাবের জন্য একটি MediaStream পাওয়া যায়, তখন সেই ট্যাবের অডিও ব্যবহারকারীকে আর শোনানো হবে না। এটি getDisplayMedia() ফাংশনের আচরণের অনুরূপ, যখন suppressLocalAudioPlayback ফ্ল্যাগটি true-তে সেট করা থাকে।
ব্যবহারকারীকে অডিও শোনানো চালিয়ে যেতে, নিম্নলিখিতটি ব্যবহার করুন:
const output = new AudioContext();
const source = output.createMediaStreamSource(stream);
source.connect(output.destination);
এটি একটি নতুন AudioContext তৈরি করে এবং ট্যাবের MediaStream এর অডিওকে ডিফল্ট গন্তব্যের সাথে সংযুক্ত করে।
স্ট্রিম আইডি
chrome.tabCapture.getMediaStreamId কল করলে একটি স্ট্রিম আইডি ফেরত আসবে। পরবর্তীতে সেই আইডি থেকে কোনো MediaStream অ্যাক্সেস করতে, নিম্নলিখিতটি ব্যবহার করুন:
navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
video: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
});
ব্যবহারের সীমাবদ্ধতা
getMediaStreamId() কল করার পর, ফেরত আসা স্ট্রিম আইডিটি কোথায় ব্যবহার করা যাবে তার উপর কিছু বিধিনিষেধ রয়েছে:
- যদি
consumerTabIdনির্দিষ্ট করা থাকে, তাহলে প্রদত্ত ট্যাবের একই সিকিউরিটি অরিজিনযুক্ত যেকোনো ফ্রেমেgetUserMedia()কল করার জন্য আইডিটি ব্যবহার করা যাবে। - যখন এটি নির্দিষ্ট করা থাকে না, তখন ক্রোম ১১৬ থেকে শুরু করে, কলারের মতো একই রেন্ডার প্রসেসে থাকা একই সিকিউরিটি অরিজিনের যেকোনো ফ্রেমে আইডিটি ব্যবহার করা যেতে পারে। এর মানে হলো, একটি সার্ভিস ওয়ার্কারে প্রাপ্ত স্ট্রিম আইডি একটি অফস্ক্রিন ডকুমেন্টে ব্যবহার করা সম্ভব।
ক্রোম ১১৬-এর আগে, যখন কোনো consumerTabId নির্দিষ্ট করা থাকত না, তখন স্ট্রিম আইডিটি কলারের সিকিউরিটি অরিজিন, রেন্ডার প্রসেস এবং রেন্ডার ফ্রেমে সীমাবদ্ধ থাকত।
আরও জানুন
chrome.tabCapture API কীভাবে ব্যবহার করতে হয় সে সম্পর্কে আরও জানতে, অডিও রেকর্ডিং এবং স্ক্রিন ক্যাপচার দেখুন। এখানে দেখানো হয়েছে কীভাবে tabCapture এবং সম্পর্কিত API ব্যবহার করে বেশ কিছু সাধারণ সমস্যার সমাধান করা যায়।
প্রকারভেদ
CaptureInfo
বৈশিষ্ট্য
- পূর্ণ পর্দা
বুলিয়ান
ক্যাপচার করা ট্যাবের কোনো এলিমেন্ট ফুলস্ক্রিন মোডে আছে কি না।
- অবস্থা
ট্যাবটির নতুন ক্যাপচার স্ট্যাটাস।
- ট্যাবআইডি
সংখ্যা
যে ট্যাবটির অবস্থা পরিবর্তিত হয়েছে, তার আইডি।
CaptureOptions
বৈশিষ্ট্য
- অডিও
বুলিয়ান ঐচ্ছিক
- অডিও সীমাবদ্ধতা
মিডিয়াস্ট্রিমকনস্ট্রেইন্ট ঐচ্ছিক
- ভিডিও
বুলিয়ান ঐচ্ছিক
- ভিডিও সীমাবদ্ধতা
মিডিয়াস্ট্রিমকনস্ট্রেইন্ট ঐচ্ছিক
GetMediaStreamOptions
বৈশিষ্ট্য
- consumerTabId
সংখ্যা ঐচ্ছিক
ঐচ্ছিক ট্যাব আইডি, যা সেই ট্যাবের জন্য ব্যবহৃত হবে যেখান থেকে পরবর্তীতে স্ট্রিমটি ব্যবহারের জন্য
getUserMedia()কল করা হবে। যদি এটি নির্দিষ্ট না করা হয়, তবে প্রাপ্ত স্ট্রিমটি শুধুমাত্র কলকারী এক্সটেনশন দ্বারা ব্যবহার করা যাবে। স্ট্রিমটি শুধুমাত্র প্রদত্ত ট্যাবের সেইসব ফ্রেম দ্বারা ব্যবহার করা যাবে, যাদের সিকিউরিটি অরিজিন ব্যবহারকারী ট্যাবের অরিজিনের সাথে মেলে। ট্যাবটির অরিজিন অবশ্যই একটি সুরক্ষিত অরিজিন হতে হবে, যেমন HTTPS। - টার্গেট ট্যাব আইডি
সংখ্যা ঐচ্ছিক
যে ট্যাবটি ক্যাপচার করা হবে তার ঐচ্ছিক ট্যাব আইডি। যদি তা নির্দিষ্ট না করা হয়, তবে বর্তমান সক্রিয় ট্যাবটি নির্বাচিত হবে। শুধুমাত্র সেইসব ট্যাবই টার্গেট ট্যাব হিসেবে ব্যবহার করা যাবে, যেগুলোর জন্য এক্সটেনশনটিকে '
activeTabপারমিশন দেওয়া হয়েছে।
MediaStreamConstraint
বৈশিষ্ট্য
- বাধ্যতামূলক
বস্তু
- ঐচ্ছিক
বস্তু ঐচ্ছিক
TabCaptureState
এনাম
"বিচারাধীন" "সক্রিয়" "থামানো" "ত্রুটি"
পদ্ধতি
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
বর্তমানে সক্রিয় ট্যাবের দৃশ্যমান অংশ ক্যাপচার করে। এক্সটেনশনটি চালু করার পরেই কেবল বর্তমানে সক্রিয় ট্যাবে ক্যাপচার শুরু করা যায়, যা activeTab-এর কাজের পদ্ধতির মতোই। ট্যাবের মধ্যে পৃষ্ঠা পরিবর্তনের সময়ও ক্যাপচার বজায় থাকে এবং ট্যাবটি বন্ধ করা হলে বা এক্সটেনশন দ্বারা মিডিয়া স্ট্রিম বন্ধ করা হলে এটি বন্ধ হয়ে যায়।
প্যারামিটার
- বিকল্পগুলি
ফেরত আসা মিডিয়া স্ট্রিমটি কনফিগার করে।
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(stream: LocalMediaStream) => void
- স্রোত
লোকালমিডিয়াস্ট্রিম
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(
callback?: function,
): Promise<CaptureInfo[]>
যেসব ট্যাব ক্যাপচারের জন্য অনুরোধ করেছে বা ক্যাপচার করা হচ্ছে, অর্থাৎ যাদের স্ট্যাটাস ‘স্টপড’ বা ‘এরর’ নয়, তাদের একটি তালিকা ফেরত দেয়। এর মাধ্যমে এক্সটেনশনগুলো ব্যবহারকারীকে জানাতে পারে যে, আগে থেকেই একটি ট্যাব ক্যাপচার চালু আছে, যা নতুন করে ট্যাব ক্যাপচার সফল হতে বাধা দেবে (অথবা একই ট্যাবের জন্য বারবার অনুরোধ করা থেকে বিরত থাকতে পারে)।
প্যারামিটার
- কলব্যাক
ফাংশন ঐচ্ছিক
callbackপ্যারামিটারটি দেখতে এইরকম:(result: CaptureInfo[]) => void
- ফলাফল
ফেরত
প্রতিশ্রুতি< ক্যাপচার তথ্য []>
ক্রোম ১১৬+একটি প্রমিজ রিটার্ন করে যা ক্যাপচার করা ট্যাবগুলির জন্য CaptureInfo[] সহ রিজলভ হয়।
প্রমিস শুধুমাত্র ম্যানিফেস্ট ভি৩ এবং এর পরবর্তী সংস্করণগুলোতে সমর্থিত, অন্যান্য প্ল্যাটফর্মে কলব্যাক ব্যবহার করতে হবে।
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
callback?: function,
): Promise<string>
টার্গেট ট্যাবটি ক্যাপচার করার জন্য একটি স্ট্রিম আইডি তৈরি করে। এটি chrome.tabCapture.capture() মেথডের অনুরূপ, কিন্তু এটি কনজিউমার ট্যাবে মিডিয়া স্ট্রিমের পরিবর্তে একটি মিডিয়া স্ট্রিম আইডি রিটার্ন করে।
প্যারামিটার
- বিকল্পগুলি
GetMediaStreamOptions (ঐচ্ছিক)
- কলব্যাক
ফাংশন ঐচ্ছিক
callbackপ্যারামিটারটি দেখতে এইরকম:(streamId: string) => void
- স্ট্রিমআইডি
স্ট্রিং
ফেরত
প্রতিশ্রুতি<string>
ক্রোম ১১৬+একটি প্রমিজ রিটার্ন করে যা ফলাফল সহ রিজলভ হয়। সফল হলে, ফলাফলটি একটি অস্বচ্ছ স্ট্রিং হয় যা টার্গেট ট্যাবের সাথে সঙ্গতিপূর্ণ একটি মিডিয়া স্ট্রিম তৈরি করার জন্য
getUserMedia()API-তে পাস করা যেতে পারে। তৈরি করাstreamIdশুধুমাত্র একবার ব্যবহার করা যায় এবং ব্যবহার না করা হলে কয়েক সেকেন্ড পরে এর মেয়াদ শেষ হয়ে যায়।প্রমিস শুধুমাত্র ম্যানিফেস্ট ভি৩ এবং এর পরবর্তী সংস্করণগুলোতে সমর্থিত, অন্যান্য প্ল্যাটফর্মে কলব্যাক ব্যবহার করতে হবে।
ইভেন্টগুলি
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
যখন কোনো ট্যাবের ক্যাপচার স্ট্যাটাস পরিবর্তিত হয়, তখন এই ইভেন্টটি ফায়ার হয়। এর মাধ্যমে এক্সটেনশন নির্মাতারা ট্যাবগুলোর ক্যাপচার স্ট্যাটাসের উপর নজর রাখতে পারেন, যাতে পেজ অ্যাকশনের মতো UI এলিমেন্টগুলোকে সিঙ্ক করে রাখা যায়।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(info: CaptureInfo) => void
- তথ্য