2017 সালের সেপ্টেম্বরে আমরা Chrome-এ অটোপ্লে আচরণ নীতির সাথে অডিও কীভাবে পরিচালনা করা হবে তার একটি আসন্ন পরিবর্তন ঘোষণা করেছি। নীতি পরিবর্তনটি 2018 সালের মে মাসে Chrome 66 Stable-এর সাথে প্রকাশ করা হয়েছিল।
ওয়েব অডিও ডেভেলপমেন্ট সম্প্রদায়ের প্রতিক্রিয়ার পর আমরা অটোপ্লে নীতির ওয়েব অডিও অংশ প্রকাশে বিলম্ব করেছি যাতে ডেভেলপারদের তাদের ওয়েবসাইট আপডেট করার জন্য আরও সময় দেওয়া হয়। আমরা ওয়েব অডিওর নীতির বাস্তবায়নে কিছু পরিবর্তন করেছি যা তাদের কোড সামঞ্জস্য করতে হবে এমন ওয়েবসাইটগুলির সংখ্যা কমিয়ে দেবে – বিশেষ করে ওয়েব গেমস – এবং সেইজন্য আমাদের ব্যবহারকারীদের জন্য আরও ভাল অভিজ্ঞতা প্রদান করবে।
এই নীতি পরিবর্তনটি এখন ডিসেম্বর 2018-এ Chrome 71-এর সাথে রোল আউট করার জন্য নির্ধারিত হয়েছে৷
নীতি পরিবর্তন ঠিক কি করে?
অটোপ্লে হল কন্টেন্টের একটি অংশকে দেওয়া নাম যা ওয়েবপেজ লোড হওয়ার সাথে সাথেই চলে। যে ওয়েবসাইটগুলি তাদের বিষয়বস্তু অটোপ্লে করতে সক্ষম হবে বলে আশা করা হয়েছিল, এই পরিবর্তনটি ডিফল্টরূপে প্লেব্যাক প্রতিরোধ করবে৷ বেশিরভাগ ক্ষেত্রে, প্লেব্যাক পুনরায় শুরু করা হবে কিন্তু অন্যদের ক্ষেত্রে, কোডে একটি ছোট সমন্বয় প্রয়োজন হবে। বিশেষত, ডেভেলপারদের অবশ্যই কোড যোগ করতে হবে যা তাদের বিষয়বস্তু পুনরায় শুরু করে যদি ব্যবহারকারী ওয়েবপৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করে।
যাইহোক, যদি ব্যবহারকারী অটোপ্লে কন্টেন্ট সহ একটি পৃষ্ঠায় আসে এবং তারা একই মূলের একটি পৃষ্ঠা থেকে সেই পৃষ্ঠায় নেভিগেট করে, তাহলে সেই সামগ্রীটি কখনই ব্লক করা হবে না। আরো বিস্তারিত উদাহরণের জন্য অটোপ্লে নীতিতে আমাদের আগের ব্লগ পোস্ট পড়ুন।
উপরন্তু, আমরা অটোপ্লে অডিও ওয়েবসাইট সংক্রান্ত ব্যবহারকারীদের অতীত আচরণ থেকে শিখতে একটি হিউরিস্টিক যোগ করেছি। আমরা শনাক্ত করি যখন ব্যবহারকারীরা একটি ওয়েবসাইটে তাদের বেশিরভাগ পরিদর্শনের সময় নিয়মিতভাবে 7 সেকেন্ডের বেশি অডিও চালাতে দেয় এবং সেই ওয়েবসাইটের জন্য অটোপ্লে সক্ষম করে।
আমরা এটি একটি সূচী দিয়ে করি যা একটি ডিভাইসে Chrome প্রোফাইলের প্রতি স্থানীয়ভাবে সংরক্ষণ করা হয় – এটি ডিভাইস জুড়ে সিঙ্ক করা হয় না এবং শুধুমাত্র বেনামী ব্যবহারকারী পরিসংখ্যানের অংশ হিসাবে ভাগ করা হয়। আমরা এই সূচকটিকে মিডিয়া এনগেজমেন্ট ইনডেক্স (MEI) বলি এবং আপনি এটি chrome://media-engagement এর মাধ্যমে দেখতে পারেন৷
MEI ট্র্যাক রাখে কোন সাইটে কতজন ভিজিট করেছে অডিও প্লেব্যাক যা 7 সেকেন্ডের বেশি দীর্ঘ। একজন ব্যবহারকারীর MEI-এর উপর ভিত্তি করে, আমরা বিশ্বাস করি যে একজন ব্যবহারকারী একটি নির্দিষ্ট ওয়েবসাইট থেকে অডিও আশা করে কি না - এবং ভবিষ্যতে ব্যবহারকারীর অভিপ্রায় সম্পর্কে আমরা বুঝতে পারি।
যদি ব্যবহারকারী প্রায়শই একটি ওয়েবসাইটের ডোমেনকে 7 সেকেন্ডের বেশি সময় ধরে অডিও চালাতে দেয় তাহলে আমরা ভবিষ্যতে অনুমান করি যে ব্যবহারকারী এই ওয়েবসাইটটির অটোপ্লে অডিও করার অধিকার আশা করছেন৷ অতএব, আমরা সেই ওয়েবসাইটটিকে সেই ডোমেন থেকে একটি ট্যাবের সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন ছাড়াই অডিও অটোপ্লে করার অধিকার প্রদান করি৷
যাইহোক, এই অধিকার অনির্দিষ্টকালের জন্য নিশ্চিত করা হয় না। যদি ব্যবহারকারীর আচরণ পরিবর্তন হয় - যেমন অডিও প্লেব্যাক বন্ধ করা বা বেশ কয়েকটি ভিজিট চলাকালীন 7 সেকেন্ডের থ্রেশহোল্ডের মধ্যে ট্যাব বন্ধ করা - তাহলে আমরা ওয়েবসাইটের অটোপ্লে করার অধিকার সরিয়ে দিই।
মিডিয়া এইচটিএমএল উপাদান (ভিডিও এবং অডিও) এবং ওয়েব অডিও (জাভাস্ক্রিপ্ট ইনস্ট্যান্টিয়েটেড অডিও কনটেক্সট অবজেক্ট) উভয়ের ব্যবহারই MEI-তে অবদান রাখবে। ওয়েব অডিও সম্পর্কিত এই নীতি ব্যবহারকারীর আচরণের রোলআউটের প্রস্তুতির জন্য Chrome 70 এবং তার পর থেকে MEI-তে অবদান রাখা শুরু করবে। এটি নিশ্চিত করবে যে আমরা অটোপ্লে এবং তারা সাধারণত যে ওয়েবসাইটগুলি পরিদর্শন করে সেগুলির বিষয়ে আমরা ইতিমধ্যেই ব্যবহারকারীর পছন্দসই অভিপ্রায় অনুমান করতে সক্ষম হয়েছি৷
এটি উল্লেখ করা উচিত যে iframes শুধুমাত্র ব্যবহারকারীর ইন্টারঅ্যাকশন ছাড়াই অটোপ্লে করার অধিকার পেতে পারে যদি আইফ্রেম এম্বেড করে এমন মূল ওয়েবপৃষ্ঠাটি প্রদত্ত iframe-এ সেই অধিকার প্রসারিত করে ।
সম্প্রদায়কে সমর্থন করার জন্য পরিবর্তন বিলম্বিত করা
ওয়েব অডিও ডেভেলপার সম্প্রদায় – বিশেষ করে ওয়েব গেম ডেভেলপার এবং এই সম্প্রদায়ের WebRTC ডেভেলপার অংশগুলি – যখন এই পরিবর্তনটি Chrome Stable চ্যানেলে উপস্থিত হয়েছিল তখন লক্ষ্য করেছিল৷
সম্প্রদায়ের প্রতিক্রিয়া ছিল যে অনেক ওয়েব গেম এবং ওয়েব অডিও অভিজ্ঞতা এই পরিবর্তন দ্বারা নেতিবাচকভাবে প্রভাবিত হবে - বিশেষত, অনেক সাইট যা আপডেট করা হয়নি সেগুলি আর ব্যবহারকারীদের কাছে অডিও চালাবে না। ফলস্বরূপ, আমাদের দল সিদ্ধান্ত নিয়েছে যে ওয়েব অডিও বিকাশকারীদের তাদের ওয়েবসাইটগুলি আপডেট করার জন্য আরও সময় দেওয়ার জন্য এই পরিবর্তনটি বিলম্বিত করা মূল্যবান।
উপরন্তু, আমরা এই সময় নিয়েছি:
- এই নীতি পরিবর্তনটি সর্বোত্তম পদক্ষেপ ছিল কি না তা গুরুত্ব সহকারে বিবেচনা করুন।
- অডিও সহ ওয়েবসাইটের সংখ্যা কমাতে সাহায্য করার উপায়গুলি অন্বেষণ করুন যা প্রভাবিত হবে৷
পূর্বের জন্য, আমরা শেষ পর্যন্ত সিদ্ধান্ত নিয়েছি যে আমাদের বেশিরভাগ ব্যবহারকারীর জন্য ব্যবহারকারীর অভিজ্ঞতা উন্নত করার জন্য নীতি পরিবর্তনটি সত্যিই প্রয়োজনীয়। নীতি পরিবর্তন কোন সমস্যার সমাধান করছে সে সম্পর্কে আরও বিস্তারিত এই নিবন্ধের পরবর্তী বিভাগে পড়তে পারেন।
পরেরটির জন্য, আমরা ওয়েব অডিওর জন্য আমাদের বাস্তবায়নে একটি সমন্বয় করেছি যা মূলত প্রভাবিত হওয়া ওয়েবসাইটের সংখ্যা কমিয়ে দেবে। আমরা জানতাম যে সাইটগুলি পরিবর্তন দ্বারা ভেঙে গেছে - যার মধ্যে অনেকগুলি ওয়েব গেম ডেভেলপমেন্ট সম্প্রদায় দ্বারা উদাহরণ হিসাবে সরবরাহ করা হয়েছিল - এই সমন্বয়ের অর্থ হল যে তাদের মধ্যে 80% এর বেশি স্বয়ংক্রিয়ভাবে কাজ করবে৷ এই উদাহরণ সাইটগুলির আমাদের বিশ্লেষণ এবং পরীক্ষা এখানে দেখা যেতে পারে । এই নতুন সমন্বয় নীচে আরো বিস্তারিত বর্ণনা করা হয়েছে.
আমরা WebRTC অ্যাপ্লিকেশন সমর্থন করার জন্য একটি পরিবর্তন করেছি; একটি সক্রিয় ক্যাপচার সেশন থাকাকালীন, অটোপ্লে অনুমোদিত হবে৷
এই আচরণ পরিবর্তন কি সমস্যা সমাধান করার লক্ষ্যে?
ব্যবহারকারীদের সাউন্ড পরিচালনায় সাহায্য করার ক্ষেত্রে ব্রাউজার ঐতিহাসিকভাবে দুর্বল। যখন ব্যবহারকারীরা একটি ওয়েবপেজ খোলে এবং তারা আশা করে না বা চায়নি এমন শব্দ পায়, তখন তাদের ব্যবহারকারীর অভিজ্ঞতা খারাপ থাকে। এই দুর্বল ব্যবহারকারীর অভিজ্ঞতা আমরা সমাধান করার চেষ্টা করছি সমস্যা. অবাঞ্ছিত শব্দ হল প্রাথমিক কারণ যে ব্যবহারকারীরা তাদের ব্রাউজার কন্টেন্ট অটোপ্লে করতে চায় না।
যাইহোক, কখনও কখনও ব্যবহারকারীরা কন্টেন্ট অটোপ্লে করতে চান, এবং Chrome-এ অর্থপূর্ণ সংখ্যক ব্লক করা অটোপ্লে পরবর্তীতে ব্যবহারকারী দ্বারা চালানো হয়।
অতএব, আমরা বিশ্বাস করি ব্যবহারকারীর কাছ থেকে শিখে - এবং প্রতি ওয়েবসাইটের ভিত্তিতে তাদের অভিপ্রায় অনুমান করে - আমরা সেরা ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে পারি। ব্যবহারকারীরা যদি কোনো ওয়েবসাইট থেকে কন্টেন্ট প্লে করতে দেয়, আমরা ভবিষ্যতে সেই সাইট থেকে কন্টেন্ট অটোপ্লে করব। বিপরীতভাবে, যদি ব্যবহারকারীরা একটি প্রদত্ত ওয়েবসাইট থেকে অটোপ্লে সামগ্রী বন্ধ করার প্রবণতা রাখে, আমরা সেই সামগ্রীর জন্য ডিফল্টরূপে অটোপ্লে প্রতিরোধ করব।
সম্প্রদায়ের দ্বারা উত্থাপিত একটি প্রস্তাব হল অটোপ্লে থামানোর পরিবর্তে একটি ট্যাবের অডিও নিঃশব্দ করা। যাইহোক, আমরা বিশ্বাস করি যে অটোপ্লে অভিজ্ঞতা বন্ধ করা ভাল যাতে ওয়েবসাইটটি সচেতন হয় যে অটোপ্লে ব্লক করা হয়েছে এবং ওয়েবসাইট ডেভেলপারকে এতে প্রতিক্রিয়া জানানোর অনুমতি দিন। উদাহরণস্বরূপ, যখন কিছু বিকাশকারী কেবল অডিও নিঃশব্দ করতে ইচ্ছুক হতে পারে, অন্যান্য বিকাশকারীরা তাদের অডিও বিষয়বস্তু পজ করতে পছন্দ করতে পারে যতক্ষণ না ব্যবহারকারী সক্রিয়ভাবে বিষয়বস্তুর সাথে জড়িত থাকে – অন্যথায় ব্যবহারকারী অডিও অভিজ্ঞতার অংশ মিস করতে পারে।
ওয়েব গেম ডেভেলপারদের সাহায্য করার জন্য নতুন সমন্বয়
ডেভেলপাররা ওয়েব অডিও API ব্যবহার করার সবচেয়ে সাধারণ উপায় হল অডিও চালানোর জন্য দুই ধরনের অবজেক্ট তৈরি করা:
- একটি অডিও প্রসঙ্গ
- এবং AudioNodes , যা একটি প্রসঙ্গে সংযুক্ত
ওয়েব অডিও বিকাশকারীরা অডিও চালানোর জন্য একটি অডিও কনটেক্সট তৈরি করবে। অটোপ্লে নীতি স্বয়ংক্রিয়ভাবে তাদের অডিও কনটেক্সট স্থগিত করার পরে তাদের অডিও পুনরায় শুরু করার জন্য, ব্যবহারকারী ট্যাবের সাথে ইন্টারঅ্যাক্ট করার পরে তাদের এই অবজেক্টে resume() ফাংশনটি কল করতে হবে:
const context = new AudioContext();
// Setup an audio graph with AudioNodes and schedule playback.
...
// Resume AudioContext playback when user clicks a button on the page.
document.querySelector('button').addEventListener('click', function() {
context.resume().then(() => {
console.log('AudioContext playback resumed successfully');
});
});
অনেকগুলি ইন্টারফেস রয়েছে যা AudioNode থেকে উত্তরাধিকারসূত্রে পাওয়া যায়, যার মধ্যে একটি হল AudioScheduledSourceNode ইন্টারফেস। AudioScheduledSourceNode ইন্টারফেস বাস্তবায়নকারী অডিওনোডগুলিকে সাধারণত সোর্স নোড হিসাবে উল্লেখ করা হয় (যেমন AudioBufferSourceNode, ConstantSourceNode, এবং OscillatorNode)। উত্স নোড একটি start() পদ্ধতি প্রয়োগ করে।
সোর্স নোডগুলি সাধারণত স্বতন্ত্র অডিও স্নিপেটগুলিকে উপস্থাপন করে যা গেমগুলি বাজায়, উদাহরণস্বরূপ: যখন কোনও খেলোয়াড় একটি মুদ্রা সংগ্রহ করে বা বর্তমান পর্যায়ে বাজানো ব্যাকগ্রাউন্ড মিউজিক যখন বাজানো হয়। গেম ডেভেলপাররা খুব সম্ভবত সোর্স নোডগুলিতে start() ফাংশনটিকে কল করছে যখনই গেমের জন্য এই শব্দগুলির যে কোনও একটির প্রয়োজন হয়৷
একবার আমরা ওয়েব গেমগুলিতে এই সাধারণ প্যাটার্নটিকে স্বীকৃতি দেওয়ার পরে আমরা আমাদের বাস্তবায়নকে নিম্নলিখিতগুলির সাথে সামঞ্জস্য করার সিদ্ধান্ত নিয়েছি:
দুটি শর্ত পূরণ হলে একটি অডিও কনটেক্সট স্বয়ংক্রিয়ভাবে পুনরায় শুরু হবে:
- ব্যবহারকারী একটি পৃষ্ঠার সাথে যোগাযোগ করেছে।
- একটি উৎস নোডের start() পদ্ধতি বলা হয়।
এই পরিবর্তনের কারণে, বেশিরভাগ ওয়েব গেমগুলি এখন তাদের অডিও পুনরায় শুরু করবে যখন ব্যবহারকারী গেমটি খেলতে শুরু করবে।
ওয়েব এগিয়ে যাচ্ছে
ওয়েব প্ল্যাটফর্মকে এগিয়ে নিয়ে যাওয়ার জন্য মাঝে মাঝে এমন পরিবর্তন করা প্রয়োজন যা সামঞ্জস্যতাকে ভেঙে দিতে পারে। দুর্ভাগ্যবশত, অডিও অটোপ্লে জটিল এবং পরিবর্তনের এই বিভাগে পড়ে। কিন্তু ওয়েব যাতে স্থবির হয়ে না যায় বা তার উদ্ভাবনী প্রান্ত হারায় না তা নিশ্চিত করার জন্য এই পরিবর্তন করা গুরুত্বপূর্ণ।
তা সত্ত্বেও, আমরা স্বীকার করি যে বিভিন্ন কারণে ওয়েবসাইটগুলির জন্য সমাধানগুলি প্রয়োগ করা সর্বদা স্বল্পমেয়াদে সম্ভব নয়:
- ওয়েব ডেভেলপাররা একটি নতুন প্রকল্পে মনোনিবেশ করতে পারে এবং একটি পুরানো ওয়েবসাইটের রক্ষণাবেক্ষণ অবিলম্বে সম্ভব নয়।
- ওয়েব গেম পোর্টালগুলির তাদের ক্যাটালগে গেমগুলি বাস্তবায়নের উপর নিয়ন্ত্রণ নাও থাকতে পারে এবং শত শত – হাজার হাজার না হলেও – আপডেট করা প্রকাশকদের জন্য সময়সাপেক্ষ এবং ব্যয়বহুল হতে পারে।
- কিছু ওয়েবসাইট খুব পুরানো হতে পারে এবং - একটি বা অন্য কারণে - আর রক্ষণাবেক্ষণ করা হয় না কিন্তু এখনও ঐতিহাসিক উদ্দেশ্যে হোস্ট করা হয়।
এখানে একটি সংক্ষিপ্ত জাভাস্ক্রিপ্ট কোড স্নিপেট যা নতুন AudioContext অবজেক্ট তৈরিতে বাধা দেয় এবং ব্যবহারকারী যখন বিভিন্ন ব্যবহারকারীর ইন্টারঅ্যাকশন করে তখন এই অবজেক্টের সারসংকলন ফাংশনটি স্বয়ংক্রিয়ভাবে ট্রিগার করে। আপনার ওয়েবপেজে কোনো AudioContext অবজেক্ট তৈরি করার আগে এই কোডটি কার্যকর করা উচিত - উদাহরণস্বরূপ, আপনি এই কোডটি আপনার ওয়েবপৃষ্ঠার ট্যাগ:
(function () {
// An array of all contexts to resume on the page
const audioContextList = [];
// An array of various user interaction events we should listen for
const userInputEventNames = [
'click',
'contextmenu',
'auxclick',
'dblclick',
'mousedown',
'mouseup',
'pointerup',
'touchend',
'keydown',
'keyup',
];
// A proxy object to intercept AudioContexts and
// add them to the array for tracking and resuming later
self.AudioContext = new Proxy(self.AudioContext, {
construct(target, args) {
const result = new target(...args);
audioContextList.push(result);
return result;
},
});
// To resume all AudioContexts being tracked
function resumeAllContexts(event) {
let count = 0;
audioContextList.forEach(context => {
if (context.state !== 'running') {
context.resume();
} else {
count++;
}
});
// If all the AudioContexts have now resumed then we
// unbind all the event listeners from the page to prevent
// unnecessary resume attempts
if (count == audioContextList.length) {
userInputEventNames.forEach(eventName => {
document.removeEventListener(eventName, resumeAllContexts);
});
}
}
// We bind the resume function for each user interaction
// event on the page
userInputEventNames.forEach(eventName => {
document.addEventListener(eventName, resumeAllContexts);
});
})();
এটি উল্লেখ করা উচিত যে এই কোড স্নিপেটটি আইফ্রেমের মধ্যে ইনস্ট্যান্টিয়েট করা অডিও কনটেক্সটগুলি পুনরায় শুরু করতে সহায়তা করবে না, যদি না এই কোড স্নিপেটটি আইফ্রেমের বিষয়বস্তুর সুযোগের মধ্যে অন্তর্ভুক্ত করা হয়।
আমাদের ব্যবহারকারীদের আরও ভাল পরিবেশন করা
নীতি পরিবর্তনের সাথে সাথে আমরা এমন একটি ব্যবস্থাও চালু করছি যাতে ব্যবহারকারীরা স্বয়ংক্রিয় শিক্ষা প্রত্যাশিতভাবে কাজ করছে না এমন ক্ষেত্রে বা পরিবর্তনের ফলে অব্যবহারযোগ্য হয়ে গেছে এমন ওয়েবসাইটগুলির জন্য অটোপ্লে নীতি নিষ্ক্রিয় করতে পারে৷ এই পরিবর্তনটি Chrome 71-এ নতুন নীতির সাথে চালু হবে এবং সাউন্ড সেটিংসে পাওয়া যাবে; সাইট যেখানে ব্যবহারকারী অটোপ্লে অনুমতি দিতে চান অনুমতি তালিকা যোগ করা যেতে পারে.
নতুন ব্যবহারকারীদের জন্য MEI কীভাবে তৈরি করা হয়?
যেমন আগে উল্লেখ করা হয়েছে, আমরা স্বয়ংক্রিয়ভাবে MEI তৈরি করি ব্যবহারকারীর আচরণের উপর ভিত্তি করে অটোপ্লে বিষয়বস্তু সহ একটি প্রদত্ত ওয়েবসাইটের বিষয়ে তাদের কাঙ্খিত অভিপ্রায় অনুমান করার জন্য। এই সূচকে প্রতিটি ওয়েবসাইটের স্কোর শূন্য থেকে একের মধ্যে রয়েছে। উচ্চতর স্কোর নির্দেশ করে যে ব্যবহারকারী সেই ওয়েবসাইট থেকে কন্টেন্ট প্লে হবে বলে আশা করেন।
যাইহোক, নতুন ব্যবহারকারীর প্রোফাইলের জন্য বা একজন ব্যবহারকারী তাদের ব্রাউজিং ডেটা সাফ করলে, সর্বত্র অটোপ্লে ব্লক করার পরিবর্তে, কোন ওয়েবসাইটগুলি অটোপ্লে করতে পারে তা নির্ধারণ করতে বেনামী ব্যবহারকারীর সমষ্টিগত MEI স্কোরের উপর ভিত্তি করে একটি প্রাক-বীজ তালিকা ব্যবহার করা হয়। এই ডেটা শুধুমাত্র ব্যবহারকারীর প্রোফাইল তৈরির সময় MEI-এর প্রাথমিক অবস্থা নির্ধারণ করে। ব্যবহারকারী যখন ওয়েব ব্রাউজ করে এবং অটোপ্লে বিষয়বস্তু সহ ওয়েবসাইটগুলির সাথে ইন্টারঅ্যাক্ট করে তখন তাদের ব্যক্তিগত MEI ডিফল্ট কনফিগারেশনকে ওভাররাইড করে।
প্রাক-বীজযুক্ত সাইট তালিকাটি ম্যানুয়ালি কিউরেট করার পরিবর্তে অ্যালগরিদমিকভাবে তৈরি করা হয় এবং যেকোন ওয়েবসাইট অন্তর্ভুক্ত হওয়ার যোগ্য। সাইটগুলিকে তালিকায় যুক্ত করা হয় যদি সেই সাইটটি দেখার পর্যাপ্ত ব্যবহারকারীরা সেই সাইটে অটোপ্লে অনুমতি দেয়৷ এই থ্রেশহোল্ড শতাংশ-ভিত্তিক যাতে বড় সাইটগুলির পক্ষে না যায়৷
ভারসাম্য খোঁজা
আমাদের সিদ্ধান্ত নেওয়ার প্রক্রিয়া এবং এই নীতির পিছনে নকশার যুক্তি সম্পর্কে আরও অন্তর্দৃষ্টি দিতে আমরা নতুন ডকুমেন্টেশন পোস্ট করেছি। পাশাপাশি প্রাক-বীজযুক্ত সাইট তালিকা কীভাবে কাজ করে তার নতুন ডকুমেন্টেশন।
আমরা সর্বদা আমাদের ব্যবহারকারীদের প্রথম রাখি কিন্তু আমরা ওয়েব ডেভেলপমেন্ট সম্প্রদায়কে হতাশ করতে চাই না। কখনও কখনও ব্রাউজার হওয়ার অর্থ হল এই দুটি লক্ষ্য অবশ্যই সাবধানে ভারসাম্যপূর্ণ হতে হবে। আমরা বিশ্বাস করি যে নীতির বাস্তবায়নে আমাদের সমন্বয় এবং ওয়েব অডিও ডেভেলপারদের তাদের কোড আপডেট করার জন্য আমরা যে অতিরিক্ত সময় দিয়েছি, আমরা Chrome 71 এর সাথে এই ভারসাম্য অর্জন করব।
প্রতিক্রিয়া
,2017 সালের সেপ্টেম্বরে আমরা Chrome-এ অটোপ্লে আচরণ নীতির সাথে অডিও কীভাবে পরিচালনা করা হবে তার একটি আসন্ন পরিবর্তন ঘোষণা করেছি। নীতি পরিবর্তনটি 2018 সালের মে মাসে Chrome 66 Stable-এর সাথে প্রকাশ করা হয়েছিল।
ওয়েব অডিও ডেভেলপমেন্ট সম্প্রদায়ের প্রতিক্রিয়ার পর আমরা অটোপ্লে নীতির ওয়েব অডিও অংশ প্রকাশে বিলম্ব করেছি যাতে ডেভেলপারদের তাদের ওয়েবসাইট আপডেট করার জন্য আরও সময় দেওয়া হয়। আমরা ওয়েব অডিওর নীতির বাস্তবায়নে কিছু পরিবর্তন করেছি যা তাদের কোড সামঞ্জস্য করতে হবে এমন ওয়েবসাইটগুলির সংখ্যা কমিয়ে দেবে – বিশেষ করে ওয়েব গেমস – এবং সেইজন্য আমাদের ব্যবহারকারীদের জন্য আরও ভাল অভিজ্ঞতা প্রদান করবে।
এই নীতি পরিবর্তনটি এখন ডিসেম্বর 2018-এ Chrome 71-এর সাথে রোল আউট করার জন্য নির্ধারিত হয়েছে৷
নীতি পরিবর্তন ঠিক কি করে?
অটোপ্লে হল কন্টেন্টের একটি অংশকে দেওয়া নাম যা ওয়েবপেজ লোড হওয়ার সাথে সাথেই চলে। যে ওয়েবসাইটগুলি তাদের বিষয়বস্তু অটোপ্লে করতে সক্ষম হবে বলে আশা করা হয়েছিল, এই পরিবর্তনটি ডিফল্টরূপে প্লেব্যাক প্রতিরোধ করবে৷ বেশিরভাগ ক্ষেত্রে, প্লেব্যাক পুনরায় শুরু করা হবে কিন্তু অন্যদের ক্ষেত্রে, কোডে একটি ছোট সমন্বয় প্রয়োজন হবে। বিশেষত, ডেভেলপারদের অবশ্যই কোড যোগ করতে হবে যা তাদের বিষয়বস্তু পুনরায় শুরু করে যদি ব্যবহারকারী ওয়েবপৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করে।
যাইহোক, যদি ব্যবহারকারী অটোপ্লে কন্টেন্ট সহ একটি পৃষ্ঠায় আসে এবং তারা একই মূলের একটি পৃষ্ঠা থেকে সেই পৃষ্ঠায় নেভিগেট করে, তাহলে সেই সামগ্রীটি কখনই ব্লক করা হবে না। আরো বিস্তারিত উদাহরণের জন্য অটোপ্লে নীতিতে আমাদের আগের ব্লগ পোস্ট পড়ুন।
উপরন্তু, আমরা অটোপ্লে অডিও ওয়েবসাইট সংক্রান্ত ব্যবহারকারীদের অতীত আচরণ থেকে শিখতে একটি হিউরিস্টিক যোগ করেছি। আমরা শনাক্ত করি যখন ব্যবহারকারীরা একটি ওয়েবসাইটে তাদের বেশিরভাগ পরিদর্শনের সময় নিয়মিতভাবে 7 সেকেন্ডের বেশি অডিও চালাতে দেয় এবং সেই ওয়েবসাইটের জন্য অটোপ্লে সক্ষম করে।
আমরা এটি একটি সূচী দিয়ে করি যা একটি ডিভাইসে Chrome প্রোফাইলের প্রতি স্থানীয়ভাবে সংরক্ষণ করা হয় – এটি ডিভাইস জুড়ে সিঙ্ক করা হয় না এবং শুধুমাত্র বেনামী ব্যবহারকারী পরিসংখ্যানের অংশ হিসাবে ভাগ করা হয়। আমরা এই সূচকটিকে মিডিয়া এনগেজমেন্ট ইনডেক্স (MEI) বলি এবং আপনি এটি chrome://media-engagement এর মাধ্যমে দেখতে পারেন৷
MEI ট্র্যাক রাখে কোন সাইটে কতজন ভিজিট করেছে অডিও প্লেব্যাক যা 7 সেকেন্ডের বেশি দীর্ঘ। একজন ব্যবহারকারীর MEI-এর উপর ভিত্তি করে, আমরা বিশ্বাস করি যে একজন ব্যবহারকারী একটি নির্দিষ্ট ওয়েবসাইট থেকে অডিও আশা করে কি না - এবং ভবিষ্যতে ব্যবহারকারীর অভিপ্রায় সম্পর্কে আমরা বুঝতে পারি।
যদি ব্যবহারকারী প্রায়শই একটি ওয়েবসাইটের ডোমেনকে 7 সেকেন্ডের বেশি সময় ধরে অডিও চালাতে দেয় তাহলে আমরা ভবিষ্যতে অনুমান করি যে ব্যবহারকারী এই ওয়েবসাইটটির অটোপ্লে অডিও করার অধিকার আশা করছেন৷ অতএব, আমরা সেই ওয়েবসাইটটিকে সেই ডোমেন থেকে একটি ট্যাবের সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন ছাড়াই অডিও অটোপ্লে করার অধিকার প্রদান করি৷
যাইহোক, এই অধিকার অনির্দিষ্টকালের জন্য নিশ্চিত করা হয় না। যদি ব্যবহারকারীর আচরণ পরিবর্তন হয় - যেমন অডিও প্লেব্যাক বন্ধ করা বা বেশ কয়েকটি ভিজিট চলাকালীন 7 সেকেন্ডের থ্রেশহোল্ডের মধ্যে ট্যাব বন্ধ করা - তাহলে আমরা ওয়েবসাইটের অটোপ্লে করার অধিকার সরিয়ে দিই।
মিডিয়া এইচটিএমএল উপাদান (ভিডিও এবং অডিও) এবং ওয়েব অডিও (জাভাস্ক্রিপ্ট ইনস্ট্যান্টিয়েটেড অডিও কনটেক্সট অবজেক্ট) উভয়ের ব্যবহারই MEI-তে অবদান রাখবে। ওয়েব অডিও সম্পর্কিত এই নীতি ব্যবহারকারীর আচরণের রোলআউটের প্রস্তুতির জন্য Chrome 70 এবং তার পর থেকে MEI-তে অবদান রাখা শুরু করবে। এটি নিশ্চিত করবে যে আমরা অটোপ্লে এবং তারা সাধারণত যে ওয়েবসাইটগুলি পরিদর্শন করে সেগুলির বিষয়ে আমরা ইতিমধ্যেই ব্যবহারকারীর পছন্দসই অভিপ্রায় অনুমান করতে সক্ষম হয়েছি৷
এটি উল্লেখ করা উচিত যে iframes শুধুমাত্র ব্যবহারকারীর ইন্টারঅ্যাকশন ছাড়াই অটোপ্লে করার অধিকার পেতে পারে যদি আইফ্রেম এম্বেড করে এমন মূল ওয়েবপৃষ্ঠাটি প্রদত্ত iframe-এ সেই অধিকার প্রসারিত করে ।
সম্প্রদায়কে সমর্থন করার জন্য পরিবর্তন বিলম্বিত করা
ওয়েব অডিও ডেভেলপার সম্প্রদায় – বিশেষ করে ওয়েব গেম ডেভেলপার এবং এই সম্প্রদায়ের WebRTC ডেভেলপার অংশগুলি – যখন এই পরিবর্তনটি Chrome Stable চ্যানেলে উপস্থিত হয়েছিল তখন লক্ষ্য করেছিল৷
সম্প্রদায়ের প্রতিক্রিয়া ছিল যে অনেক ওয়েব গেম এবং ওয়েব অডিও অভিজ্ঞতা এই পরিবর্তন দ্বারা নেতিবাচকভাবে প্রভাবিত হবে - বিশেষত, অনেক সাইট যা আপডেট করা হয়নি সেগুলি আর ব্যবহারকারীদের কাছে অডিও চালাবে না। ফলস্বরূপ, আমাদের দল সিদ্ধান্ত নিয়েছে যে ওয়েব অডিও বিকাশকারীদের তাদের ওয়েবসাইটগুলি আপডেট করার জন্য আরও সময় দেওয়ার জন্য এই পরিবর্তনটি বিলম্বিত করা মূল্যবান।
উপরন্তু, আমরা এই সময় নিয়েছি:
- এই নীতি পরিবর্তনটি সর্বোত্তম পদক্ষেপ ছিল কি না তা গুরুত্ব সহকারে বিবেচনা করুন।
- অডিও সহ ওয়েবসাইটের সংখ্যা কমাতে সাহায্য করার উপায়গুলি অন্বেষণ করুন যা প্রভাবিত হবে৷
পূর্বের জন্য, আমরা শেষ পর্যন্ত সিদ্ধান্ত নিয়েছি যে আমাদের বেশিরভাগ ব্যবহারকারীর জন্য ব্যবহারকারীর অভিজ্ঞতা উন্নত করার জন্য নীতি পরিবর্তনটি সত্যিই প্রয়োজনীয়। নীতি পরিবর্তন কোন সমস্যার সমাধান করছে সে সম্পর্কে আরও বিস্তারিত এই নিবন্ধের পরবর্তী বিভাগে পড়তে পারেন।
পরেরটির জন্য, আমরা ওয়েব অডিওর জন্য আমাদের বাস্তবায়নে একটি সমন্বয় করেছি যা মূলত প্রভাবিত হওয়া ওয়েবসাইটের সংখ্যা কমিয়ে দেবে। আমরা জানতাম যে সাইটগুলি পরিবর্তন দ্বারা ভেঙে গেছে - যার মধ্যে অনেকগুলি ওয়েব গেম ডেভেলপমেন্ট সম্প্রদায় দ্বারা উদাহরণ হিসাবে সরবরাহ করা হয়েছিল - এই সমন্বয়ের অর্থ হল যে তাদের মধ্যে 80% এর বেশি স্বয়ংক্রিয়ভাবে কাজ করবে৷ এই উদাহরণ সাইটগুলির আমাদের বিশ্লেষণ এবং পরীক্ষা এখানে দেখা যেতে পারে । এই নতুন সমন্বয় নীচে আরো বিস্তারিত বর্ণনা করা হয়েছে.
আমরা WebRTC অ্যাপ্লিকেশন সমর্থন করার জন্য একটি পরিবর্তন করেছি; একটি সক্রিয় ক্যাপচার সেশন থাকাকালীন, অটোপ্লে অনুমোদিত হবে৷
এই আচরণ পরিবর্তন কি সমস্যা সমাধান করার লক্ষ্যে?
ব্যবহারকারীদের সাউন্ড পরিচালনায় সাহায্য করার ক্ষেত্রে ব্রাউজার ঐতিহাসিকভাবে দুর্বল। যখন ব্যবহারকারীরা একটি ওয়েবপেজ খোলে এবং তারা আশা করে না বা চায়নি এমন শব্দ পায়, তখন তাদের ব্যবহারকারীর অভিজ্ঞতা খারাপ থাকে। এই দুর্বল ব্যবহারকারীর অভিজ্ঞতা আমরা সমাধান করার চেষ্টা করছি সমস্যা. অবাঞ্ছিত শব্দ হল প্রাথমিক কারণ যে ব্যবহারকারীরা তাদের ব্রাউজার কন্টেন্ট অটোপ্লে করতে চায় না।
যাইহোক, কখনও কখনও ব্যবহারকারীরা কন্টেন্ট অটোপ্লে করতে চান, এবং Chrome-এ অর্থপূর্ণ সংখ্যক ব্লক করা অটোপ্লে পরবর্তীতে ব্যবহারকারী দ্বারা চালানো হয়।
অতএব, আমরা বিশ্বাস করি ব্যবহারকারীর কাছ থেকে শিখে - এবং প্রতি ওয়েবসাইটের ভিত্তিতে তাদের অভিপ্রায় অনুমান করে - আমরা সেরা ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে পারি। ব্যবহারকারীরা যদি কোনো ওয়েবসাইট থেকে কন্টেন্ট প্লে করতে দেয়, আমরা ভবিষ্যতে সেই সাইট থেকে কন্টেন্ট অটোপ্লে করব। বিপরীতভাবে, যদি ব্যবহারকারীরা একটি প্রদত্ত ওয়েবসাইট থেকে অটোপ্লে সামগ্রী বন্ধ করার প্রবণতা রাখে, আমরা সেই সামগ্রীর জন্য ডিফল্টরূপে অটোপ্লে প্রতিরোধ করব।
সম্প্রদায়ের দ্বারা উত্থাপিত একটি প্রস্তাব হল অটোপ্লে থামানোর পরিবর্তে একটি ট্যাবের অডিও নিঃশব্দ করা। যাইহোক, আমরা বিশ্বাস করি যে অটোপ্লে অভিজ্ঞতা বন্ধ করা ভাল যাতে ওয়েবসাইটটি সচেতন হয় যে অটোপ্লে ব্লক করা হয়েছে এবং ওয়েবসাইট ডেভেলপারকে এতে প্রতিক্রিয়া জানানোর অনুমতি দিন। উদাহরণস্বরূপ, যখন কিছু বিকাশকারী কেবল অডিও নিঃশব্দ করতে ইচ্ছুক হতে পারে, অন্যান্য বিকাশকারীরা তাদের অডিও বিষয়বস্তু পজ করতে পছন্দ করতে পারে যতক্ষণ না ব্যবহারকারী সক্রিয়ভাবে বিষয়বস্তুর সাথে জড়িত থাকে – অন্যথায় ব্যবহারকারী অডিও অভিজ্ঞতার অংশ মিস করতে পারে।
ওয়েব গেম ডেভেলপারদের সাহায্য করার জন্য নতুন সমন্বয়
ডেভেলপাররা ওয়েব অডিও API ব্যবহার করার সবচেয়ে সাধারণ উপায় হল অডিও চালানোর জন্য দুই ধরনের অবজেক্ট তৈরি করা:
- একটি অডিও প্রসঙ্গ
- এবং AudioNodes , যা একটি প্রসঙ্গে সংযুক্ত
ওয়েব অডিও বিকাশকারীরা অডিও চালানোর জন্য একটি অডিও কনটেক্সট তৈরি করবে। অটোপ্লে নীতি স্বয়ংক্রিয়ভাবে তাদের অডিও কনটেক্সট স্থগিত করার পরে তাদের অডিও পুনরায় শুরু করার জন্য, ব্যবহারকারী ট্যাবের সাথে ইন্টারঅ্যাক্ট করার পরে তাদের এই অবজেক্টে resume() ফাংশনটি কল করতে হবে:
const context = new AudioContext();
// Setup an audio graph with AudioNodes and schedule playback.
...
// Resume AudioContext playback when user clicks a button on the page.
document.querySelector('button').addEventListener('click', function() {
context.resume().then(() => {
console.log('AudioContext playback resumed successfully');
});
});
অনেকগুলি ইন্টারফেস রয়েছে যা AudioNode থেকে উত্তরাধিকারসূত্রে পাওয়া যায়, যার মধ্যে একটি হল AudioScheduledSourceNode ইন্টারফেস। AudioScheduledSourceNode ইন্টারফেস বাস্তবায়নকারী অডিওনোডগুলিকে সাধারণত সোর্স নোড হিসাবে উল্লেখ করা হয় (যেমন AudioBufferSourceNode, ConstantSourceNode, এবং OscillatorNode)। উত্স নোড একটি start() পদ্ধতি প্রয়োগ করে।
সোর্স নোডগুলি সাধারণত স্বতন্ত্র অডিও স্নিপেটগুলিকে উপস্থাপন করে যা গেমগুলি বাজায়, উদাহরণস্বরূপ: যখন কোনও খেলোয়াড় একটি মুদ্রা সংগ্রহ করে বা বর্তমান পর্যায়ে বাজানো ব্যাকগ্রাউন্ড মিউজিক যখন বাজানো হয়। গেম ডেভেলপাররা খুব সম্ভবত সোর্স নোডগুলিতে start() ফাংশনটিকে কল করছে যখনই গেমের জন্য এই শব্দগুলির যে কোনও একটির প্রয়োজন হয়৷
একবার আমরা ওয়েব গেমগুলিতে এই সাধারণ প্যাটার্নটিকে স্বীকৃতি দেওয়ার পরে আমরা আমাদের বাস্তবায়নকে নিম্নলিখিতগুলির সাথে সামঞ্জস্য করার সিদ্ধান্ত নিয়েছি:
দুটি শর্ত পূরণ হলে একটি অডিও কনটেক্সট স্বয়ংক্রিয়ভাবে পুনরায় শুরু হবে:
- ব্যবহারকারী একটি পৃষ্ঠার সাথে যোগাযোগ করেছে।
- একটি উৎস নোডের start() পদ্ধতি বলা হয়।
এই পরিবর্তনের কারণে, বেশিরভাগ ওয়েব গেমগুলি এখন তাদের অডিও পুনরায় শুরু করবে যখন ব্যবহারকারী গেমটি খেলতে শুরু করবে।
ওয়েব এগিয়ে যাচ্ছে
ওয়েব প্ল্যাটফর্মকে এগিয়ে নিয়ে যাওয়ার জন্য মাঝে মাঝে এমন পরিবর্তন করা প্রয়োজন যা সামঞ্জস্যতাকে ভেঙে দিতে পারে। দুর্ভাগ্যবশত, অডিও অটোপ্লে জটিল এবং পরিবর্তনের এই বিভাগে পড়ে। কিন্তু ওয়েব যাতে স্থবির হয়ে না যায় বা তার উদ্ভাবনী প্রান্ত হারায় না তা নিশ্চিত করার জন্য এই পরিবর্তন করা গুরুত্বপূর্ণ।
তা সত্ত্বেও, আমরা স্বীকার করি যে বিভিন্ন কারণে ওয়েবসাইটগুলির জন্য সমাধানগুলি প্রয়োগ করা সর্বদা স্বল্পমেয়াদে সম্ভব নয়:
- ওয়েব ডেভেলপাররা একটি নতুন প্রকল্পে মনোনিবেশ করতে পারে এবং একটি পুরানো ওয়েবসাইটের রক্ষণাবেক্ষণ অবিলম্বে সম্ভব নয়।
- ওয়েব গেম পোর্টালগুলির তাদের ক্যাটালগে গেমগুলি বাস্তবায়নের উপর নিয়ন্ত্রণ নাও থাকতে পারে এবং শত শত – হাজার হাজার না হলেও – আপডেট করা প্রকাশকদের জন্য সময়সাপেক্ষ এবং ব্যয়বহুল হতে পারে।
- কিছু ওয়েবসাইট খুব পুরানো হতে পারে এবং - একটি বা অন্য কারণে - আর রক্ষণাবেক্ষণ করা হয় না কিন্তু এখনও ঐতিহাসিক উদ্দেশ্যে হোস্ট করা হয়।
এখানে একটি সংক্ষিপ্ত জাভাস্ক্রিপ্ট কোড স্নিপেট যা নতুন AudioContext অবজেক্ট তৈরিতে বাধা দেয় এবং ব্যবহারকারী যখন বিভিন্ন ব্যবহারকারীর ইন্টারঅ্যাকশন করে তখন এই অবজেক্টের সারসংকলন ফাংশনটি স্বয়ংক্রিয়ভাবে ট্রিগার করে। আপনার ওয়েবপেজে কোনো AudioContext অবজেক্ট তৈরি করার আগে এই কোডটি কার্যকর করা উচিত - উদাহরণস্বরূপ, আপনি এই কোডটি আপনার ওয়েবপৃষ্ঠার ট্যাগ:
(function () {
// An array of all contexts to resume on the page
const audioContextList = [];
// An array of various user interaction events we should listen for
const userInputEventNames = [
'click',
'contextmenu',
'auxclick',
'dblclick',
'mousedown',
'mouseup',
'pointerup',
'touchend',
'keydown',
'keyup',
];
// A proxy object to intercept AudioContexts and
// add them to the array for tracking and resuming later
self.AudioContext = new Proxy(self.AudioContext, {
construct(target, args) {
const result = new target(...args);
audioContextList.push(result);
return result;
},
});
// To resume all AudioContexts being tracked
function resumeAllContexts(event) {
let count = 0;
audioContextList.forEach(context => {
if (context.state !== 'running') {
context.resume();
} else {
count++;
}
});
// If all the AudioContexts have now resumed then we
// unbind all the event listeners from the page to prevent
// unnecessary resume attempts
if (count == audioContextList.length) {
userInputEventNames.forEach(eventName => {
document.removeEventListener(eventName, resumeAllContexts);
});
}
}
// We bind the resume function for each user interaction
// event on the page
userInputEventNames.forEach(eventName => {
document.addEventListener(eventName, resumeAllContexts);
});
})();
এটি উল্লেখ করা উচিত যে এই কোড স্নিপেটটি আইফ্রেমের মধ্যে ইনস্ট্যান্টিয়েট করা অডিও কনটেক্সটগুলি পুনরায় শুরু করতে সহায়তা করবে না, যদি না এই কোড স্নিপেটটি আইফ্রেমের বিষয়বস্তুর সুযোগের মধ্যে অন্তর্ভুক্ত করা হয়।
আমাদের ব্যবহারকারীদের আরও ভাল পরিবেশন করা
নীতি পরিবর্তনের সাথে সাথে আমরা এমন একটি ব্যবস্থাও চালু করছি যাতে ব্যবহারকারীরা স্বয়ংক্রিয় শিক্ষা প্রত্যাশিতভাবে কাজ করছে না এমন ক্ষেত্রে বা পরিবর্তনের ফলে অব্যবহারযোগ্য হয়ে গেছে এমন ওয়েবসাইটগুলির জন্য অটোপ্লে নীতি নিষ্ক্রিয় করতে পারে৷ এই পরিবর্তনটি Chrome 71-এ নতুন নীতির সাথে চালু হবে এবং সাউন্ড সেটিংসে পাওয়া যাবে; সাইট যেখানে ব্যবহারকারী অটোপ্লে অনুমতি দিতে চান অনুমতি তালিকা যোগ করা যেতে পারে.
নতুন ব্যবহারকারীদের জন্য MEI কীভাবে তৈরি করা হয়?
যেমন আগে উল্লেখ করা হয়েছে, আমরা স্বয়ংক্রিয়ভাবে MEI তৈরি করি ব্যবহারকারীর আচরণের উপর ভিত্তি করে অটোপ্লে বিষয়বস্তু সহ একটি প্রদত্ত ওয়েবসাইটের বিষয়ে তাদের কাঙ্খিত অভিপ্রায় অনুমান করার জন্য। এই সূচকে প্রতিটি ওয়েবসাইটের স্কোর শূন্য থেকে একের মধ্যে রয়েছে। উচ্চতর স্কোর নির্দেশ করে যে ব্যবহারকারী সেই ওয়েবসাইট থেকে কন্টেন্ট প্লে হবে বলে আশা করেন।
যাইহোক, নতুন ব্যবহারকারীর প্রোফাইলের জন্য বা একজন ব্যবহারকারী তাদের ব্রাউজিং ডেটা সাফ করলে, সর্বত্র অটোপ্লে ব্লক করার পরিবর্তে, কোন ওয়েবসাইটগুলি অটোপ্লে করতে পারে তা নির্ধারণ করতে বেনামী ব্যবহারকারীর সমষ্টিগত MEI স্কোরের উপর ভিত্তি করে একটি প্রাক-বীজ তালিকা ব্যবহার করা হয়। এই ডেটা শুধুমাত্র ব্যবহারকারীর প্রোফাইল তৈরির সময় MEI-এর প্রাথমিক অবস্থা নির্ধারণ করে। ব্যবহারকারী যখন ওয়েব ব্রাউজ করে এবং অটোপ্লে বিষয়বস্তু সহ ওয়েবসাইটগুলির সাথে ইন্টারঅ্যাক্ট করে তখন তাদের ব্যক্তিগত MEI ডিফল্ট কনফিগারেশনকে ওভাররাইড করে।
প্রাক-বীজযুক্ত সাইট তালিকাটি ম্যানুয়ালি কিউরেট করার পরিবর্তে অ্যালগরিদমিকভাবে তৈরি করা হয় এবং যেকোন ওয়েবসাইট অন্তর্ভুক্ত হওয়ার যোগ্য। সাইটগুলিকে তালিকায় যুক্ত করা হয় যদি সেই সাইটটি দেখার পর্যাপ্ত ব্যবহারকারীরা সেই সাইটে অটোপ্লে অনুমতি দেয়৷ এই থ্রেশহোল্ড শতাংশ-ভিত্তিক যাতে বড় সাইটগুলির পক্ষে না যায়৷
ভারসাম্য খোঁজা
আমাদের সিদ্ধান্ত গ্রহণের প্রক্রিয়া এবং এই নীতির পিছনে নকশার যুক্তি সম্পর্কে আরও অন্তর্দৃষ্টি দিতে আমরা নতুন ডকুমেন্টেশন পোস্ট করেছি। পাশাপাশি প্রাক-বীজযুক্ত সাইট তালিকা কীভাবে কাজ করে তার নতুন ডকুমেন্টেশন।
আমরা সর্বদা আমাদের ব্যবহারকারীদের প্রথম রাখি কিন্তু আমরা ওয়েব ডেভেলপমেন্ট সম্প্রদায়কে হতাশ করতে চাই না। কখনও কখনও ব্রাউজার হওয়ার অর্থ হল এই দুটি লক্ষ্য অবশ্যই সাবধানে ভারসাম্যপূর্ণ হতে হবে। আমরা বিশ্বাস করি যে নীতির বাস্তবায়নে আমাদের সমন্বয় এবং ওয়েব অডিও ডেভেলপারদের তাদের কোড আপডেট করার জন্য আমরা যে অতিরিক্ত সময় দিয়েছি, আমরা Chrome 71 এর সাথে এই ভারসাম্য অর্জন করব।
প্রতিক্রিয়া
,2017 সালের সেপ্টেম্বরে আমরা Chrome-এ অটোপ্লে আচরণ নীতির সাথে অডিও কীভাবে পরিচালনা করা হবে তার একটি আসন্ন পরিবর্তন ঘোষণা করেছি। নীতি পরিবর্তনটি 2018 সালের মে মাসে Chrome 66 Stable-এর সাথে প্রকাশ করা হয়েছিল।
ওয়েব অডিও ডেভেলপমেন্ট সম্প্রদায়ের প্রতিক্রিয়ার পর আমরা অটোপ্লে নীতির ওয়েব অডিও অংশ প্রকাশে বিলম্ব করেছি যাতে ডেভেলপারদের তাদের ওয়েবসাইট আপডেট করার জন্য আরও সময় দেওয়া হয়। আমরা ওয়েব অডিওর নীতির বাস্তবায়নে কিছু পরিবর্তন করেছি যা তাদের কোড সামঞ্জস্য করতে হবে এমন ওয়েবসাইটগুলির সংখ্যা কমিয়ে দেবে – বিশেষ করে ওয়েব গেমস – এবং সেইজন্য আমাদের ব্যবহারকারীদের জন্য আরও ভাল অভিজ্ঞতা প্রদান করবে।
এই নীতি পরিবর্তনটি এখন ডিসেম্বর 2018-এ Chrome 71-এর সাথে রোল আউট করার জন্য নির্ধারিত হয়েছে৷
নীতি পরিবর্তন ঠিক কি করে?
অটোপ্লে হল কন্টেন্টের একটি অংশকে দেওয়া নাম যা ওয়েবপেজ লোড হওয়ার সাথে সাথেই চলে। যে ওয়েবসাইটগুলি তাদের বিষয়বস্তু অটোপ্লে করতে সক্ষম হবে বলে আশা করা হয়েছিল, এই পরিবর্তনটি ডিফল্টরূপে প্লেব্যাক প্রতিরোধ করবে৷ বেশিরভাগ ক্ষেত্রে, প্লেব্যাক পুনরায় শুরু করা হবে কিন্তু অন্যদের ক্ষেত্রে, কোডে একটি ছোট সমন্বয় প্রয়োজন হবে। বিশেষত, ডেভেলপারদের অবশ্যই কোড যোগ করতে হবে যা তাদের বিষয়বস্তু পুনরায় শুরু করে যদি ব্যবহারকারী ওয়েবপৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করে।
যাইহোক, যদি ব্যবহারকারী অটোপ্লে কন্টেন্ট সহ একটি পৃষ্ঠায় আসে এবং তারা একই মূলের একটি পৃষ্ঠা থেকে সেই পৃষ্ঠায় নেভিগেট করে, তাহলে সেই সামগ্রীটি কখনই ব্লক করা হবে না। আরো বিস্তারিত উদাহরণের জন্য অটোপ্লে নীতিতে আমাদের আগের ব্লগ পোস্ট পড়ুন।
উপরন্তু, আমরা অটোপ্লে অডিও ওয়েবসাইট সংক্রান্ত ব্যবহারকারীদের অতীত আচরণ থেকে শিখতে একটি হিউরিস্টিক যোগ করেছি। আমরা শনাক্ত করি যখন ব্যবহারকারীরা একটি ওয়েবসাইটে তাদের বেশিরভাগ পরিদর্শনের সময় নিয়মিতভাবে 7 সেকেন্ডের বেশি অডিও চালাতে দেয় এবং সেই ওয়েবসাইটের জন্য অটোপ্লে সক্ষম করে।
আমরা এটি একটি সূচী দিয়ে করি যা একটি ডিভাইসে Chrome প্রোফাইলের প্রতি স্থানীয়ভাবে সংরক্ষণ করা হয় – এটি ডিভাইস জুড়ে সিঙ্ক করা হয় না এবং শুধুমাত্র বেনামী ব্যবহারকারী পরিসংখ্যানের অংশ হিসাবে ভাগ করা হয়। আমরা এই সূচকটিকে মিডিয়া এনগেজমেন্ট ইনডেক্স (MEI) বলি এবং আপনি এটি chrome://media-engagement এর মাধ্যমে দেখতে পারেন৷
MEI ট্র্যাক রাখে কোন সাইটে কতজন ভিজিট করেছে অডিও প্লেব্যাক যা 7 সেকেন্ডের বেশি দীর্ঘ। একজন ব্যবহারকারীর MEI-এর উপর ভিত্তি করে, আমরা বিশ্বাস করি যে একজন ব্যবহারকারী একটি নির্দিষ্ট ওয়েবসাইট থেকে অডিও আশা করে কি না - এবং ভবিষ্যতে ব্যবহারকারীর অভিপ্রায় সম্পর্কে আমরা বুঝতে পারি।
যদি ব্যবহারকারী প্রায়শই একটি ওয়েবসাইটের ডোমেনকে 7 সেকেন্ডের বেশি সময় ধরে অডিও চালাতে দেয় তাহলে আমরা ভবিষ্যতে অনুমান করি যে ব্যবহারকারী এই ওয়েবসাইটটির অটোপ্লে অডিও করার অধিকার আশা করছেন৷ অতএব, আমরা সেই ওয়েবসাইটটিকে সেই ডোমেন থেকে একটি ট্যাবের সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন ছাড়াই অডিও অটোপ্লে করার অধিকার প্রদান করি৷
যাইহোক, এই অধিকার অনির্দিষ্টকালের জন্য নিশ্চিত করা হয় না। যদি ব্যবহারকারীর আচরণ পরিবর্তন হয় - যেমন অডিও প্লেব্যাক বন্ধ করা বা বেশ কয়েকটি ভিজিট চলাকালীন 7 সেকেন্ডের থ্রেশহোল্ডের মধ্যে ট্যাব বন্ধ করা - তাহলে আমরা ওয়েবসাইটের অটোপ্লে করার অধিকার সরিয়ে দিই।
মিডিয়া এইচটিএমএল উপাদান (ভিডিও এবং অডিও) এবং ওয়েব অডিও (জাভাস্ক্রিপ্ট ইনস্ট্যান্টিয়েটেড অডিও কনটেক্সট অবজেক্ট) উভয়ের ব্যবহারই MEI-তে অবদান রাখবে। ওয়েব অডিও সম্পর্কিত এই নীতি ব্যবহারকারীর আচরণের রোলআউটের প্রস্তুতির জন্য Chrome 70 এবং তার পর থেকে MEI-তে অবদান রাখা শুরু করবে। এটি নিশ্চিত করবে যে আমরা অটোপ্লে এবং তারা সাধারণত যে ওয়েবসাইটগুলি পরিদর্শন করে সেগুলির বিষয়ে আমরা ইতিমধ্যেই ব্যবহারকারীর পছন্দসই অভিপ্রায় অনুমান করতে সক্ষম হয়েছি৷
এটি উল্লেখ করা উচিত যে iframes শুধুমাত্র ব্যবহারকারীর ইন্টারঅ্যাকশন ছাড়াই অটোপ্লে করার অধিকার পেতে পারে যদি আইফ্রেম এম্বেড করে এমন মূল ওয়েবপৃষ্ঠাটি প্রদত্ত iframe-এ সেই অধিকার প্রসারিত করে ।
সম্প্রদায়কে সমর্থন করার জন্য পরিবর্তন বিলম্বিত করা
ওয়েব অডিও ডেভেলপার সম্প্রদায় – বিশেষ করে ওয়েব গেম ডেভেলপার এবং এই সম্প্রদায়ের WebRTC ডেভেলপার অংশগুলি – যখন এই পরিবর্তনটি Chrome Stable চ্যানেলে উপস্থিত হয়েছিল তখন লক্ষ্য করেছিল৷
সম্প্রদায়ের প্রতিক্রিয়া ছিল যে অনেক ওয়েব গেম এবং ওয়েব অডিও অভিজ্ঞতা এই পরিবর্তন দ্বারা নেতিবাচকভাবে প্রভাবিত হবে - বিশেষত, অনেক সাইট যা আপডেট করা হয়নি সেগুলি আর ব্যবহারকারীদের কাছে অডিও চালাবে না। ফলস্বরূপ, আমাদের দল সিদ্ধান্ত নিয়েছে যে ওয়েব অডিও বিকাশকারীদের তাদের ওয়েবসাইটগুলি আপডেট করার জন্য আরও সময় দেওয়ার জন্য এই পরিবর্তনটি বিলম্বিত করা মূল্যবান।
উপরন্তু, আমরা এই সময় নিয়েছি:
- এই নীতি পরিবর্তনটি সর্বোত্তম পদক্ষেপ ছিল কি না তা গুরুত্ব সহকারে বিবেচনা করুন।
- অডিও সহ ওয়েবসাইটের সংখ্যা কমাতে সাহায্য করার উপায়গুলি অন্বেষণ করুন যা প্রভাবিত হবে৷
পূর্বের জন্য, আমরা শেষ পর্যন্ত সিদ্ধান্ত নিয়েছি যে আমাদের বেশিরভাগ ব্যবহারকারীর জন্য ব্যবহারকারীর অভিজ্ঞতা উন্নত করার জন্য নীতি পরিবর্তনটি সত্যিই প্রয়োজনীয়। নীতি পরিবর্তন কোন সমস্যার সমাধান করছে সে সম্পর্কে আরও বিস্তারিত এই নিবন্ধের পরবর্তী বিভাগে পড়তে পারেন।
পরেরটির জন্য, আমরা ওয়েব অডিওর জন্য আমাদের বাস্তবায়নে একটি সমন্বয় করেছি যা মূলত প্রভাবিত হওয়া ওয়েবসাইটের সংখ্যা কমিয়ে দেবে। আমরা জানতাম যে সাইটগুলি পরিবর্তন দ্বারা ভেঙে গেছে - যার মধ্যে অনেকগুলি ওয়েব গেম ডেভেলপমেন্ট সম্প্রদায় দ্বারা উদাহরণ হিসাবে সরবরাহ করা হয়েছিল - এই সমন্বয়ের অর্থ হল যে তাদের মধ্যে 80% এর বেশি স্বয়ংক্রিয়ভাবে কাজ করবে৷ এই উদাহরণ সাইটগুলির আমাদের বিশ্লেষণ এবং পরীক্ষা এখানে দেখা যেতে পারে । এই নতুন সমন্বয় নীচে আরো বিস্তারিত বর্ণনা করা হয়েছে.
আমরা WebRTC অ্যাপ্লিকেশন সমর্থন করার জন্য একটি পরিবর্তন করেছি; একটি সক্রিয় ক্যাপচার সেশন থাকাকালীন, অটোপ্লে অনুমোদিত হবে৷
এই আচরণ পরিবর্তন কি সমস্যা সমাধান করার লক্ষ্যে?
ব্যবহারকারীদের সাউন্ড পরিচালনায় সাহায্য করার ক্ষেত্রে ব্রাউজার ঐতিহাসিকভাবে দুর্বল। যখন ব্যবহারকারীরা একটি ওয়েবপেজ খোলে এবং তারা আশা করে না বা চায়নি এমন শব্দ পায়, তখন তাদের ব্যবহারকারীর অভিজ্ঞতা খারাপ থাকে। এই দুর্বল ব্যবহারকারীর অভিজ্ঞতা আমরা সমাধান করার চেষ্টা করছি সমস্যা. অবাঞ্ছিত শব্দ হল প্রাথমিক কারণ যে ব্যবহারকারীরা তাদের ব্রাউজার কন্টেন্ট অটোপ্লে করতে চায় না।
যাইহোক, কখনও কখনও ব্যবহারকারীরা কন্টেন্ট অটোপ্লে করতে চান, এবং Chrome-এ অর্থপূর্ণ সংখ্যক ব্লক করা অটোপ্লে পরবর্তীতে ব্যবহারকারী দ্বারা চালানো হয়।
অতএব, আমরা বিশ্বাস করি ব্যবহারকারীর কাছ থেকে শিখে - এবং প্রতি ওয়েবসাইটের ভিত্তিতে তাদের অভিপ্রায় অনুমান করে - আমরা সেরা ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে পারি। ব্যবহারকারীরা যদি কোনো ওয়েবসাইট থেকে কন্টেন্ট প্লে করতে দেয়, আমরা ভবিষ্যতে সেই সাইট থেকে কন্টেন্ট অটোপ্লে করব। বিপরীতভাবে, যদি ব্যবহারকারীরা একটি প্রদত্ত ওয়েবসাইট থেকে অটোপ্লে সামগ্রী বন্ধ করার প্রবণতা রাখে, আমরা সেই সামগ্রীর জন্য ডিফল্টরূপে অটোপ্লে প্রতিরোধ করব।
সম্প্রদায়ের দ্বারা উত্থাপিত একটি প্রস্তাব হল অটোপ্লে থামানোর পরিবর্তে একটি ট্যাবের অডিও নিঃশব্দ করা। যাইহোক, আমরা বিশ্বাস করি যে অটোপ্লে অভিজ্ঞতা বন্ধ করা ভাল যাতে ওয়েবসাইটটি সচেতন হয় যে অটোপ্লে ব্লক করা হয়েছে এবং ওয়েবসাইট ডেভেলপারকে এতে প্রতিক্রিয়া জানানোর অনুমতি দিন। উদাহরণস্বরূপ, যখন কিছু বিকাশকারী কেবল অডিও নিঃশব্দ করতে ইচ্ছুক হতে পারে, অন্যান্য বিকাশকারীরা তাদের অডিও বিষয়বস্তু পজ করতে পছন্দ করতে পারে যতক্ষণ না ব্যবহারকারী সক্রিয়ভাবে বিষয়বস্তুর সাথে জড়িত থাকে – অন্যথায় ব্যবহারকারী অডিও অভিজ্ঞতার অংশ মিস করতে পারে।
ওয়েব গেম ডেভেলপারদের সাহায্য করার জন্য নতুন সমন্বয়
ডেভেলপাররা ওয়েব অডিও API ব্যবহার করার সবচেয়ে সাধারণ উপায় হল অডিও চালানোর জন্য দুই ধরনের অবজেক্ট তৈরি করা:
- একটি অডিও প্রসঙ্গ
- এবং AudioNodes , যা একটি প্রসঙ্গে সংযুক্ত
ওয়েব অডিও বিকাশকারীরা অডিও চালানোর জন্য একটি অডিও কনটেক্সট তৈরি করবে। অটোপ্লে নীতি স্বয়ংক্রিয়ভাবে তাদের অডিও কনটেক্সট স্থগিত করার পরে তাদের অডিও পুনরায় শুরু করার জন্য, ব্যবহারকারী ট্যাবের সাথে ইন্টারঅ্যাক্ট করার পরে তাদের এই অবজেক্টে resume() ফাংশনটি কল করতে হবে:
const context = new AudioContext();
// Setup an audio graph with AudioNodes and schedule playback.
...
// Resume AudioContext playback when user clicks a button on the page.
document.querySelector('button').addEventListener('click', function() {
context.resume().then(() => {
console.log('AudioContext playback resumed successfully');
});
});
অনেকগুলি ইন্টারফেস রয়েছে যা AudioNode থেকে উত্তরাধিকারসূত্রে পাওয়া যায়, যার মধ্যে একটি হল AudioScheduledSourceNode ইন্টারফেস। AudioScheduledSourceNode ইন্টারফেস বাস্তবায়নকারী অডিওনোডগুলিকে সাধারণত সোর্স নোড হিসাবে উল্লেখ করা হয় (যেমন AudioBufferSourceNode, ConstantSourceNode, এবং OscillatorNode)। উত্স নোড একটি start() পদ্ধতি প্রয়োগ করে।
সোর্স নোডগুলি সাধারণত স্বতন্ত্র অডিও স্নিপেটগুলিকে উপস্থাপন করে যা গেমগুলি বাজায়, উদাহরণস্বরূপ: যখন কোনও খেলোয়াড় একটি মুদ্রা সংগ্রহ করে বা বর্তমান পর্যায়ে বাজানো ব্যাকগ্রাউন্ড মিউজিক যখন বাজানো হয়। গেম ডেভেলপাররা খুব সম্ভবত সোর্স নোডগুলিতে start() ফাংশনটিকে কল করছে যখনই গেমের জন্য এই শব্দগুলির যে কোনও একটির প্রয়োজন হয়৷
একবার আমরা ওয়েব গেমগুলিতে এই সাধারণ প্যাটার্নটিকে স্বীকৃতি দেওয়ার পরে আমরা আমাদের বাস্তবায়নকে নিম্নলিখিতগুলির সাথে সামঞ্জস্য করার সিদ্ধান্ত নিয়েছি:
দুটি শর্ত পূরণ হলে একটি অডিওকন্টেক্সট স্বয়ংক্রিয়ভাবে পুনরায় শুরু করা হবে:
- ব্যবহারকারী একটি পৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করেছেন।
- উত্স নোডের শুরু () পদ্ধতিটিকে বলা হয়।
এই পরিবর্তনের কারণে, বেশিরভাগ ওয়েব গেমগুলি এখন যখন ব্যবহারকারী গেমটি খেলতে শুরু করে তখন তাদের অডিও আবার শুরু করবে।
ওয়েবকে এগিয়ে নিয়ে যাওয়া
ওয়েব প্ল্যাটফর্মটিকে এগিয়ে নিয়ে যাওয়ার জন্য এটি কখনও কখনও পরিবর্তনগুলি তৈরি করা প্রয়োজন যা সামঞ্জস্যতা ভঙ্গ করতে পারে। দুর্ভাগ্যক্রমে, অডিও অটোপ্লে জটিল এবং পরিবর্তনের এই বিভাগে পড়ে। তবে ওয়েবটি স্থবির করে না বা তার উদ্ভাবনী প্রান্তটি হারাতে পারে না তা নিশ্চিত করার জন্য এই শিফটটি তৈরি করা গুরুত্বপূর্ণ।
তবুও, আমরা স্বীকার করি যে ওয়েবসাইটগুলির জন্য ফিক্স প্রয়োগ করা বিভিন্ন কারণে স্বল্পমেয়াদে সর্বদা সম্ভব হয় না:
- ওয়েব বিকাশকারীরা কোনও নতুন প্রকল্পের দিকে মনোনিবেশ করতে পারে এবং কোনও পুরানো ওয়েবসাইটে রক্ষণাবেক্ষণ তত্ক্ষণাত সম্ভব নয়।
- ওয়েব গেমের পোর্টালগুলি তাদের ক্যাটালগে গেমগুলির বাস্তবায়নের উপর নিয়ন্ত্রণ রাখতে পারে না এবং কয়েক হাজার - যদি হাজার হাজার না হয় - গেমগুলি সময় সাপেক্ষ এবং প্রকাশকদের জন্য ব্যয়বহুল হতে পারে।
- কিছু ওয়েবসাইটগুলি কেবল খুব পুরানো হতে পারে এবং - এক কারণে বা অন্য কারণে - আর রক্ষণাবেক্ষণ করা হয় না তবে এখনও historical তিহাসিক উদ্দেশ্যে হোস্ট করা হয়।
এখানে একটি সংক্ষিপ্ত জাভাস্ক্রিপ্ট কোড স্নিপেট রয়েছে যা নতুন অডিওকন্টেক্সট অবজেক্টগুলি তৈরি করতে বাধা দেয় এবং ব্যবহারকারী যখন বিভিন্ন ব্যবহারকারীর মিথস্ক্রিয়া সম্পাদন করে তখন এই অবজেক্টগুলির পুনঃসূচনা ফাংশনটি অটোট্রিগার করবে। এই কোডটি আপনার ওয়েবপৃষ্ঠায় কোনও অডিওকন্টেক্সট অবজেক্ট তৈরির আগে কার্যকর করা উচিত - উদাহরণস্বরূপ, আপনি এই কোডটি যুক্ত করতে পারেন আপনার ওয়েবপৃষ্ঠার ট্যাগ:
(function () {
// An array of all contexts to resume on the page
const audioContextList = [];
// An array of various user interaction events we should listen for
const userInputEventNames = [
'click',
'contextmenu',
'auxclick',
'dblclick',
'mousedown',
'mouseup',
'pointerup',
'touchend',
'keydown',
'keyup',
];
// A proxy object to intercept AudioContexts and
// add them to the array for tracking and resuming later
self.AudioContext = new Proxy(self.AudioContext, {
construct(target, args) {
const result = new target(...args);
audioContextList.push(result);
return result;
},
});
// To resume all AudioContexts being tracked
function resumeAllContexts(event) {
let count = 0;
audioContextList.forEach(context => {
if (context.state !== 'running') {
context.resume();
} else {
count++;
}
});
// If all the AudioContexts have now resumed then we
// unbind all the event listeners from the page to prevent
// unnecessary resume attempts
if (count == audioContextList.length) {
userInputEventNames.forEach(eventName => {
document.removeEventListener(eventName, resumeAllContexts);
});
}
}
// We bind the resume function for each user interaction
// event on the page
userInputEventNames.forEach(eventName => {
document.addEventListener(eventName, resumeAllContexts);
});
})();
এটি লক্ষ করা উচিত যে এই কোড স্নিপেটটি আইএফআরএএম -এর মধ্যে ইনস্ট্যান্টযুক্ত অডিওকন্টেক্সটগুলি পুনরায় শুরু করতে সহায়তা করবে না, যদি না এই কোড স্নিপেটটি আইএফআরএএমই নিজেই সামগ্রীর আওতার মধ্যে অন্তর্ভুক্ত না করা হয়।
আমাদের ব্যবহারকারীদের আরও ভাল পরিবেশন করা
নীতি পরিবর্তনের সাথে আমরা অটোপ্লে নীতিটি অক্ষম করার জন্য ব্যবহারকারীদের জন্য একটি প্রক্রিয়াও প্রবর্তন করছি যেখানে স্বয়ংক্রিয় শিক্ষণ প্রত্যাশার মতো কাজ করছে না, বা পরিবর্তনের দ্বারা অকেজো রেন্ডার করা ওয়েবসাইটগুলির জন্য। এই পরিবর্তনটি Chrome 71 -এ নতুন নীতিমালার সাথে রোল আউট হবে এবং সাউন্ড সেটিংসে পাওয়া যাবে; যে সাইটগুলি ব্যবহারকারী অটোপ্লেকে অনুমতি দিতে চায় সেখানে অনুমতি তালিকায় যুক্ত করা যেতে পারে।
নতুন ব্যবহারকারীদের জন্য এমইআই কীভাবে নির্মিত?
পূর্বে উল্লিখিত হিসাবে, আমরা অটোপ্লে সামগ্রী সহ একটি প্রদত্ত ওয়েবসাইট সম্পর্কিত তাদের কাঙ্ক্ষিত অভিপ্রায়টি অনুমান করার জন্য ব্যবহারকারীর আচরণের ভিত্তিতে সময়ের সাথে সাথে এমইআই স্বয়ংক্রিয়ভাবে তৈরি করি। প্রতিটি ওয়েবসাইটের এই সূচকে শূন্য এবং একটির মধ্যে একটি স্কোর রয়েছে। উচ্চতর স্কোরগুলি নির্দেশ করে যে ব্যবহারকারীরা সেই ওয়েবসাইট থেকে সামগ্রী খেলবে বলে আশা করে।
তবে, নতুন ব্যবহারকারীর প্রোফাইলগুলির জন্য বা যদি কোনও ব্যবহারকারী তাদের ব্রাউজিং ডেটা সাফ করে, সর্বত্র অটোপ্লে ব্লক করার পরিবর্তে, নামবিহীন ব্যবহারকারীর সমষ্টিগত এমইআই স্কোরের উপর ভিত্তি করে একটি প্রাক-বীজ তালিকাটি কোন ওয়েবসাইটগুলি অটোপ্লে করতে পারে তা নির্ধারণ করতে ব্যবহৃত হয়। এই ডেটা কেবল ব্যবহারকারী প্রোফাইল তৈরির সময় এমইআইয়ের প্রাথমিক অবস্থা নির্ধারণ করে। যেহেতু ব্যবহারকারী ওয়েবটি ব্রাউজ করে এবং অটোপ্লে সামগ্রী সহ ওয়েবসাইটগুলির সাথে যোগাযোগ করে তাদের ব্যক্তিগত এমইআই ডিফল্ট কনফিগারেশনটিকে ওভাররাইড করে।
প্রাক-বীজযুক্ত সাইটের তালিকাটি ম্যানুয়ালি কিউরেটেডের পরিবর্তে অ্যালগরিদমিকভাবে উত্পন্ন হয় এবং যে কোনও ওয়েবসাইট অন্তর্ভুক্ত করার যোগ্য। সেই সাইটে যে সাইটটি পরিদর্শন করে এমন পর্যাপ্ত ব্যবহারকারীরা সেই সাইটে অটোপ্লে অনুমতি দিলে তালিকায় সাইটগুলি যুক্ত করা হয়। এই প্রান্তিকতা শতাংশ-ভিত্তিক যাতে বৃহত্তর সাইটগুলির পক্ষে না যায়।
ভারসাম্য খোঁজা
আমরা আমাদের সিদ্ধান্ত গ্রহণের প্রক্রিয়া এবং এই নীতির পিছনে নকশার যুক্তি সম্পর্কে আরও অন্তর্দৃষ্টি দেওয়ার জন্য নতুন ডকুমেন্টেশন পোস্ট করেছি। পাশাপাশি প্রাক-বীজযুক্ত সাইটের তালিকা কীভাবে কাজ করে সে সম্পর্কে নতুন ডকুমেন্টেশন।
আমরা সর্বদা আমাদের ব্যবহারকারীদের প্রথমে রাখি তবে আমরা ওয়েব ডেভলপমেন্ট সম্প্রদায়কেও নামাতে চাই না। কখনও কখনও ব্রাউজার হওয়ার অর্থ এই দুটি লক্ষ্য অবশ্যই সাবধানে ভারসাম্যপূর্ণ হতে হবে। আমরা বিশ্বাস করি যে নীতি বাস্তবায়নের জন্য আমাদের সমন্বয় এবং ওয়েব অডিও বিকাশকারীদের তাদের কোড আপডেট করার জন্য আমরা যে অতিরিক্ত সময় সরবরাহ করেছি তার সাথে আমরা ক্রোম 71 এর সাথে এই ভারসাম্য অর্জন করব।
প্রতিক্রিয়া
,সেপ্টেম্বর 2017 এ আমরা ক্রোমে অটোপ্লে আচরণ নীতিমালার সাথে অডিও কীভাবে পরিচালনা করা হবে তার একটি আসন্ন পরিবর্তন ঘোষণা করেছি। নীতি পরিবর্তনটি মে 2018 এ ক্রোম 66 স্থিতিশীলতার সাথে প্রকাশিত হয়েছিল।
ওয়েব অডিও ডেভলপমেন্ট কমিউনিটি থেকে প্রতিক্রিয়ার পরে আমরা অটোপ্লে নীতিমালার ওয়েব অডিও অংশটি প্রকাশের জন্য বিকাশকারীদের তাদের ওয়েবসাইটগুলি আপডেট করার জন্য আরও সময় দেওয়ার জন্য বিলম্ব করেছিলাম। আমরা ওয়েব অডিওর জন্য নীতি বাস্তবায়নেও কিছু পরিবর্তন করেছি যা তাদের কোডগুলি - বিশেষত ওয়েব গেমস - সামঞ্জস্য করতে হবে এমন ওয়েবসাইটগুলির সংখ্যা হ্রাস করবে এবং তাই আমাদের ব্যবহারকারীদের জন্য আরও ভাল অভিজ্ঞতা সরবরাহ করে।
এই নীতি পরিবর্তনটি এখন ডিসেম্বর 2018 এ ক্রোম 71 এর সাথে রোল আউট হওয়ার কথা রয়েছে।
নীতি পরিবর্তন ঠিক কী করে?
অটোপ্লে হ'ল নামটি এমন একটি অংশকে দেওয়া হয়েছে যা তাত্ক্ষণিকভাবে ওয়েবপৃষ্ঠা লোডিংয়ের উপর বাজায়। যে ওয়েবসাইটগুলি তাদের বিষয়বস্তু অটোপ্লে করতে সক্ষম হবে বলে আশা করেছিল, এই পরিবর্তনটি ডিফল্টরূপে প্লেব্যাককে আটকাবে। বেশিরভাগ ক্ষেত্রে, প্লেব্যাকটি আবার শুরু করা হবে তবে অন্যদের মধ্যে কোডের একটি ছোট সামঞ্জস্যের প্রয়োজন হবে। বিশেষত, বিকাশকারীদের অবশ্যই কোড যুক্ত করতে হবে যা ব্যবহারকারী যদি ওয়েবপৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করে তবে তাদের সামগ্রী পুনরায় শুরু করে।
তবে, যদি ব্যবহারকারী অটোপ্লে সামগ্রী সহ কোনও পৃষ্ঠায় উপস্থিত হয় এবং তারা একই উত্সের একটি পৃষ্ঠা থেকে সেই পৃষ্ঠায় নেভিগেট করে, তবে সেই সামগ্রীটি কখনই অবরুদ্ধ করা হবে না। আরও বিস্তারিত উদাহরণগুলির জন্য অটোপ্লে নীতিতে আমাদের আগের ব্লগ পোস্টটি পড়ুন।
অতিরিক্তভাবে, আমরা অটোপ্লে অডিও ওয়েবসাইটগুলির সাথে ব্যবহারকারীদের অতীত আচরণ থেকে শিখতে একটি হিউরিস্টিক যুক্ত করেছি। ব্যবহারকারীরা যখন নিয়মিতভাবে কোনও ওয়েবসাইটে তাদের বেশিরভাগ ভিজিটের সময় 7 সেকেন্ডেরও বেশি সময় ধরে অডিও খেলতে দেয় এবং সেই ওয়েবসাইটের জন্য অটোপ্লে সক্ষম করে তখন আমরা সনাক্ত করি।
আমরা এটি একটি সূচক দিয়ে করি যা কোনও ডিভাইসে ক্রোম প্রোফাইলের জন্য স্থানীয়ভাবে সঞ্চিত থাকে - এটি ডিভাইসগুলিতে সিঙ্ক হয় না এবং এটি কেবল নামবিহীন ব্যবহারকারীর পরিসংখ্যানের অংশ হিসাবে ভাগ করা হয়। আমরা এই সূচককে মিডিয়া এনগেজমেন্ট ইনডেক্স (এমইআই) বলি এবং আপনি এটি ক্রোম: // মিডিয়া-ব্যস্ততার মাধ্যমে দেখতে পারেন।
এমইআই কোনও সাইটে কতগুলি পরিদর্শনগুলিতে অডিও প্লেব্যাক অন্তর্ভুক্ত রয়েছে যা 7 সেকেন্ডেরও বেশি দীর্ঘ। কোনও ব্যবহারকারীর এমইআইয়ের উপর ভিত্তি করে, আমরা বিশ্বাস করি যে কোনও ব্যবহারকারী কোনও নির্দিষ্ট ওয়েবসাইট থেকে অডিও প্রত্যাশা করে কিনা তা আমরা বুঝতে পারি - এবং ভবিষ্যতে ব্যবহারকারীর অভিপ্রায়টি প্রত্যাশা করে।
যদি ব্যবহারকারী প্রায়শই কোনও ওয়েবসাইটের ডোমেনটি 7 সেকেন্ডেরও বেশি সময় ধরে অডিও খেলতে দেয় তবে আমরা ভবিষ্যতে ধরে নিই যে ব্যবহারকারী এই ওয়েবসাইটটি অডিওটি অটোপ্লে করার অধিকার রাখবেন বলে আশা করছেন। অতএব, আমরা সেই ওয়েবসাইটটিকে সেই ডোমেন থেকে কোনও ট্যাবের সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন ছাড়াই অটোপ্লে অডিওর অধিকার মঞ্জুর করি।
তবে এই অধিকারটি অনির্দিষ্টকালের জন্য গ্যারান্টিযুক্ত নয়। যদি ব্যবহারকারীর আচরণটি স্যুইচ করে - যেমন অডিও প্লেব্যাক বন্ধ করা বা বেশ কয়েকটি পরিদর্শনকালে 7 সেকেন্ডের প্রান্তিকের মধ্যে ট্যাবটি বন্ধ করা - তবে আমরা ওয়েবসাইটটির অটোপ্লে করার অধিকারটি সরিয়ে ফেলি।
মিডিয়া এইচটিএমএল উপাদানগুলির (ভিডিও এবং অডিও) এবং ওয়েব অডিও (জাভাস্ক্রিপ্ট ইনস্ট্যান্টেড অডিও কনটেক্সট অবজেক্টস) উভয়ই এমইআইতে অবদান রাখবে। ওয়েব অডিওর সাথে সম্পর্কিত এই নীতি ব্যবহারকারীর আচরণের রোলআউটের প্রস্তুতির জন্য ক্রোম 70 এবং এর পরে এমইআইতে অবদান শুরু করবে। এটি নিশ্চিত করবে যে আমরা ইতিমধ্যে অটোপ্লে এবং তারা সাধারণত যে ওয়েবসাইটগুলি পরিদর্শন করেন সেগুলির বিষয়ে ব্যবহারকারীর কাঙ্ক্ষিত অভিপ্রায়টি অনুমান করতে সক্ষম হয়েছি।
এটি লক্ষ করা উচিত যে আইফ্রেমগুলি কেবলমাত্র ব্যবহারকারীর ইন্টারঅ্যাকশন ছাড়াই অটোপ্লে করার অধিকার অর্জন করতে পারে যদি আইফ্রেম এম্বেড করে এমন প্যারেন্ট ওয়েবপৃষ্ঠা প্রদত্ত আইফ্রেমে সেই অধিকারটি প্রসারিত করে ।
সম্প্রদায়কে সমর্থন করার জন্য পরিবর্তন বিলম্বিত
ওয়েব অডিও বিকাশকারী সম্প্রদায় - বিশেষত ওয়েব গেম ডেভেলপার এবং এই সম্প্রদায়ের ওয়েবআরটিটিসি বিকাশকারী অংশগুলি - যখন এই পরিবর্তনটি ক্রোম স্থিতিশীল চ্যানেলে উপস্থিত হয়েছিল তখন নজরে নিয়েছিল।
সম্প্রদায়ের প্রতিক্রিয়া হ'ল অনেকগুলি ওয়েব গেমস এবং ওয়েব অডিও অভিজ্ঞতা এই পরিবর্তনের দ্বারা নেতিবাচকভাবে প্রভাবিত হবে - বিশেষত, অনেকগুলি সাইট যা আপডেট করা হয়নি সেগুলি ব্যবহারকারীদের কাছে আর অডিও খেলবে না। ফলস্বরূপ, আমাদের দল সিদ্ধান্ত নিয়েছে যে ওয়েব অডিও বিকাশকারীদের তাদের ওয়েবসাইটগুলি আপডেট করার জন্য আরও সময় দেওয়ার জন্য এই পরিবর্তনটি বিলম্বিত করা উপযুক্ত।
অতিরিক্তভাবে, আমরা এই সময়টি নিয়েছি:
- এই নীতি পরিবর্তনটি কর্মের সেরা কোর্স ছিল কিনা তা গুরুত্ব সহকারে বিবেচনা করুন।
- যেভাবে প্রভাবিত হবে তা অডিও সহ ওয়েবসাইটের সংখ্যা হ্রাস করতে আমরা সহায়তা করতে পারি এমন উপায়গুলি অনুসন্ধান করুন।
পূর্বের জন্য, আমরা শেষ পর্যন্ত সিদ্ধান্ত নিয়েছি যে আমাদের বেশিরভাগ ব্যবহারকারীর জন্য ব্যবহারকারীর অভিজ্ঞতা উন্নত করার জন্য নীতি পরিবর্তনটি সত্যই প্রয়োজনীয়। নীতি পরিবর্তনটি কী সমস্যা সমাধান করছে সে সম্পর্কে আরও বিশদ এই নিবন্ধের পরবর্তী বিভাগে পড়া যেতে পারে।
পরবর্তীকালের জন্য, আমরা ওয়েব অডিওর জন্য আমাদের বাস্তবায়নে একটি সামঞ্জস্য করেছি যা মূলত প্রভাবিত হওয়া ওয়েবসাইটগুলির সংখ্যা হ্রাস করবে। আমরা যে সাইটগুলি জানতাম সেগুলির মধ্যে পরিবর্তনগুলি ভেঙে গেছে - যার মধ্যে অনেকগুলি ওয়েব গেম ডেভলপমেন্ট কমিউনিটি দ্বারা উদাহরণ হিসাবে সরবরাহ করা হয়েছিল - এই সমন্বয়ের অর্থ হ'ল তাদের মধ্যে 80% এরও বেশি স্বয়ংক্রিয়ভাবে কাজ করবে। এই উদাহরণ সাইটগুলির আমাদের বিশ্লেষণ এবং পরীক্ষা এখানে দেখা যেতে পারে । এই নতুন সমন্বয়টি নীচে আরও বিশদে বর্ণিত হয়েছে।
আমরা ওয়েবআরটিসি অ্যাপ্লিকেশনগুলিকে সমর্থন করার জন্য একটি পরিবর্তনও করেছি; সক্রিয় ক্যাপচার সেশন থাকলেও অটোপ্লে অনুমতি দেওয়া হবে।
এই আচরণ পরিবর্তনটি সমাধান করার লক্ষ্যে কী সমস্যা?
ব্রাউজারগুলি histor তিহাসিকভাবে ব্যবহারকারীকে শব্দ পরিচালনা করতে সহায়তা করতে দুর্বল ছিল। ব্যবহারকারীরা যখন কোনও ওয়েবপৃষ্ঠা খুলেন এবং শব্দ পান যা তারা প্রত্যাশা করেন না বা চান না, তখন তাদের ব্যবহারকারীর দুর্বল অভিজ্ঞতা রয়েছে। এই দুর্বল ব্যবহারকারীর অভিজ্ঞতা হ'ল সমস্যাটি আমরা সমাধান করার চেষ্টা করছি। অযাচিত শব্দ হ'ল প্রাথমিক কারণ যে ব্যবহারকারীরা তাদের ব্রাউজারটি অটোপ্লে সামগ্রী করতে চান না।
যাইহোক, কখনও কখনও ব্যবহারকারীরা সামগ্রী অটোপ্লে করতে চান এবং ক্রোমে একটি অর্থপূর্ণ সংখ্যক অবরুদ্ধ অটোপ্লেগুলি পরবর্তীকালে ব্যবহারকারী দ্বারা বাজানো হয়।
অতএব, আমরা ব্যবহারকারীর কাছ থেকে শেখার মাধ্যমে বিশ্বাস করি - এবং প্রতি ওয়েবসাইটের ভিত্তিতে তাদের উদ্দেশ্যটি প্রত্যাশা করে - আমরা সেরা ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে পারি। যদি ব্যবহারকারীরা কোনও ওয়েবসাইট থেকে সামগ্রী খেলতে দেয় তবে আমরা ভবিষ্যতে সেই সাইট থেকে সামগ্রী অটোপ্লে করব। বিপরীতে, যদি ব্যবহারকারীরা কোনও প্রদত্ত ওয়েবসাইট থেকে অটোপ্লে সামগ্রী বন্ধ করে দেয় তবে আমরা ডিফল্টরূপে সেই সামগ্রীর জন্য অটোপ্লে প্রতিরোধ করব।
সম্প্রদায়ের সামনে রাখা একটি প্রস্তাব হ'ল অটোপ্লে বিরতি দেওয়ার পরিবর্তে একটি ট্যাবের অডিও নিঃশব্দ করা। তবে, আমরা বিশ্বাস করি যে অটোপ্লে অভিজ্ঞতাটি থামানো ভাল যাতে ওয়েবসাইটটি সচেতন যে অটোপ্লেটি অবরুদ্ধ ছিল এবং ওয়েবসাইট বিকাশকারীকে এটির প্রতিক্রিয়া জানাতে অনুমতি দেয়। উদাহরণস্বরূপ, যখন কিছু বিকাশকারীরা কেবল অডিও নিঃশব্দ করতে ইচ্ছুক হতে পারে, অন্য বিকাশকারীরা তাদের অডিও সামগ্রীটি বিরতি দেওয়া পছন্দ করতে পারে যতক্ষণ না ব্যবহারকারী সক্রিয়ভাবে সামগ্রীর সাথে জড়িত না হয় - অন্যথায় ব্যবহারকারী অডিও অভিজ্ঞতার অংশটি মিস করতে পারে।
ওয়েব গেম বিকাশকারীদের সহায়তা করার জন্য নতুন সামঞ্জস্য
বিকাশকারীরা ওয়েব অডিও এপিআই ব্যবহার করার সর্বাধিক সাধারণ উপায় হ'ল অডিও খেলতে দুটি ধরণের অবজেক্ট তৈরি করা:
- একটি অডিওকন্টেক্সট
- এবং অডিওনোডস , যা একটি প্রসঙ্গে সংযুক্ত থাকে
ওয়েব অডিও বিকাশকারীরা অডিও খেলার জন্য একটি অডিওকন্টেক্সট তৈরি করবে। অটোপ্লে নীতিটি স্বয়ংক্রিয়ভাবে তাদের অডিওকন্টেক্সট স্থগিত করার পরে তাদের অডিও পুনরায় শুরু করার জন্য, ব্যবহারকারী ট্যাবের সাথে ইন্টারঅ্যাক্ট করার পরে তাদের এই অবজেক্টে পুনরায় শুরু () ফাংশনটি কল করতে হবে:
const context = new AudioContext();
// Setup an audio graph with AudioNodes and schedule playback.
...
// Resume AudioContext playback when user clicks a button on the page.
document.querySelector('button').addEventListener('click', function() {
context.resume().then(() => {
console.log('AudioContext playback resumed successfully');
});
});
অনেকগুলি ইন্টারফেস রয়েছে যা অডিওনোড থেকে উত্তরাধিকারী হয়, যার মধ্যে একটি হ'ল অডিওসেডুলেডসোর্সেনোড ইন্টারফেস। অডিওচেডুলেডসোর্সেনোড ইন্টারফেস প্রয়োগ করে এমন অডিওনোডগুলি সাধারণত উত্স নোড হিসাবে পরিচিত (যেমন অডিওবুফারসোর্সেনোড, কনস্ট্যান্টসোর্সেনোড এবং অসিলেটর্নোড)। উত্স নোডগুলি একটি শুরু () পদ্ধতি প্রয়োগ করে।
উত্স নোডগুলি সাধারণত গেমগুলি খেলায় পৃথক অডিও স্নিপেটগুলি উপস্থাপন করে, উদাহরণস্বরূপ: যখন কোনও খেলোয়াড় কোনও মুদ্রা সংগ্রহ করে বা বর্তমান পর্যায়ে খেলে ব্যাকগ্রাউন্ড সংগীত সংগ্রহ করে তখন শব্দটি বাজানো হয়। গেম বিকাশকারীরা যখনই গেমটির জন্য এই শব্দগুলির কোনও প্রয়োজন তখনই উত্স নোডগুলিতে স্টার্ট () ফাংশনটি কল করার সম্ভাবনা খুব সম্ভবত।
একবার আমরা ওয়েব গেমসে এই সাধারণ প্যাটার্নটি স্বীকৃতি দিয়ে আমরা আমাদের বাস্তবায়নকে নিম্নলিখিতগুলির সাথে সামঞ্জস্য করার সিদ্ধান্ত নিয়েছি:
দুটি শর্ত পূরণ হলে একটি অডিওকন্টেক্সট স্বয়ংক্রিয়ভাবে পুনরায় শুরু করা হবে:
- ব্যবহারকারী একটি পৃষ্ঠার সাথে ইন্টারঅ্যাক্ট করেছেন।
- উত্স নোডের শুরু () পদ্ধতিটিকে বলা হয়।
এই পরিবর্তনের কারণে, বেশিরভাগ ওয়েব গেমগুলি এখন যখন ব্যবহারকারী গেমটি খেলতে শুরু করে তখন তাদের অডিও আবার শুরু করবে।
ওয়েবকে এগিয়ে নিয়ে যাওয়া
ওয়েব প্ল্যাটফর্মটিকে এগিয়ে নিয়ে যাওয়ার জন্য এটি কখনও কখনও পরিবর্তনগুলি তৈরি করা প্রয়োজন যা সামঞ্জস্যতা ভঙ্গ করতে পারে। দুর্ভাগ্যক্রমে, অডিও অটোপ্লে জটিল এবং পরিবর্তনের এই বিভাগে পড়ে। তবে ওয়েবটি স্থবির করে না বা তার উদ্ভাবনী প্রান্তটি হারাতে পারে না তা নিশ্চিত করার জন্য এই শিফটটি তৈরি করা গুরুত্বপূর্ণ।
তবুও, আমরা স্বীকার করি যে ওয়েবসাইটগুলির জন্য ফিক্স প্রয়োগ করা বিভিন্ন কারণে স্বল্পমেয়াদে সর্বদা সম্ভব হয় না:
- ওয়েব বিকাশকারীরা কোনও নতুন প্রকল্পের দিকে মনোনিবেশ করতে পারে এবং কোনও পুরানো ওয়েবসাইটে রক্ষণাবেক্ষণ তত্ক্ষণাত সম্ভব নয়।
- ওয়েব গেমের পোর্টালগুলি তাদের ক্যাটালগে গেমগুলির বাস্তবায়নের উপর নিয়ন্ত্রণ রাখতে পারে না এবং কয়েক হাজার - যদি হাজার হাজার না হয় - গেমগুলি সময় সাপেক্ষ এবং প্রকাশকদের জন্য ব্যয়বহুল হতে পারে।
- কিছু ওয়েবসাইটগুলি কেবল খুব পুরানো হতে পারে এবং - এক কারণে বা অন্য কারণে - আর রক্ষণাবেক্ষণ করা হয় না তবে এখনও historical তিহাসিক উদ্দেশ্যে হোস্ট করা হয়।
এখানে একটি সংক্ষিপ্ত জাভাস্ক্রিপ্ট কোড স্নিপেট রয়েছে যা নতুন অডিওকন্টেক্সট অবজেক্টগুলি তৈরি করতে বাধা দেয় এবং ব্যবহারকারী যখন বিভিন্ন ব্যবহারকারীর মিথস্ক্রিয়া সম্পাদন করে তখন এই অবজেক্টগুলির পুনঃসূচনা ফাংশনটি অটোট্রিগার করবে। এই কোডটি আপনার ওয়েবপৃষ্ঠায় কোনও অডিওকন্টেক্সট অবজেক্ট তৈরির আগে কার্যকর করা উচিত - উদাহরণস্বরূপ, আপনি এই কোডটি যুক্ত করতে পারেন আপনার ওয়েবপৃষ্ঠার ট্যাগ:
(function () {
// An array of all contexts to resume on the page
const audioContextList = [];
// An array of various user interaction events we should listen for
const userInputEventNames = [
'click',
'contextmenu',
'auxclick',
'dblclick',
'mousedown',
'mouseup',
'pointerup',
'touchend',
'keydown',
'keyup',
];
// A proxy object to intercept AudioContexts and
// add them to the array for tracking and resuming later
self.AudioContext = new Proxy(self.AudioContext, {
construct(target, args) {
const result = new target(...args);
audioContextList.push(result);
return result;
},
});
// To resume all AudioContexts being tracked
function resumeAllContexts(event) {
let count = 0;
audioContextList.forEach(context => {
if (context.state !== 'running') {
context.resume();
} else {
count++;
}
});
// If all the AudioContexts have now resumed then we
// unbind all the event listeners from the page to prevent
// unnecessary resume attempts
if (count == audioContextList.length) {
userInputEventNames.forEach(eventName => {
document.removeEventListener(eventName, resumeAllContexts);
});
}
}
// We bind the resume function for each user interaction
// event on the page
userInputEventNames.forEach(eventName => {
document.addEventListener(eventName, resumeAllContexts);
});
})();
এটি লক্ষ করা উচিত যে এই কোড স্নিপেটটি আইএফআরএএম -এর মধ্যে ইনস্ট্যান্টযুক্ত অডিওকন্টেক্সটগুলি পুনরায় শুরু করতে সহায়তা করবে না, যদি না এই কোড স্নিপেটটি আইএফআরএএমই নিজেই সামগ্রীর আওতার মধ্যে অন্তর্ভুক্ত না করা হয়।
আমাদের ব্যবহারকারীদের আরও ভাল পরিবেশন করা
নীতি পরিবর্তনের সাথে আমরা অটোপ্লে নীতিটি অক্ষম করার জন্য ব্যবহারকারীদের জন্য একটি প্রক্রিয়াও প্রবর্তন করছি যেখানে স্বয়ংক্রিয় শিক্ষণ প্রত্যাশার মতো কাজ করছে না, বা পরিবর্তনের দ্বারা অকেজো রেন্ডার করা ওয়েবসাইটগুলির জন্য। এই পরিবর্তনটি Chrome 71 -এ নতুন নীতিমালার সাথে রোল আউট হবে এবং সাউন্ড সেটিংসে পাওয়া যাবে; যে সাইটগুলি ব্যবহারকারী অটোপ্লেকে অনুমতি দিতে চায় সেখানে অনুমতি তালিকায় যুক্ত করা যেতে পারে।
নতুন ব্যবহারকারীদের জন্য এমইআই কীভাবে নির্মিত?
পূর্বে উল্লিখিত হিসাবে, আমরা অটোপ্লে সামগ্রী সহ একটি প্রদত্ত ওয়েবসাইট সম্পর্কিত তাদের কাঙ্ক্ষিত অভিপ্রায়টি অনুমান করার জন্য ব্যবহারকারীর আচরণের ভিত্তিতে সময়ের সাথে সাথে এমইআই স্বয়ংক্রিয়ভাবে তৈরি করি। প্রতিটি ওয়েবসাইটের এই সূচকে শূন্য এবং একটির মধ্যে একটি স্কোর রয়েছে। উচ্চতর স্কোরগুলি নির্দেশ করে যে ব্যবহারকারীরা সেই ওয়েবসাইট থেকে সামগ্রী খেলবে বলে আশা করে।
তবে, নতুন ব্যবহারকারীর প্রোফাইলগুলির জন্য বা যদি কোনও ব্যবহারকারী তাদের ব্রাউজিং ডেটা সাফ করে, সর্বত্র অটোপ্লে ব্লক করার পরিবর্তে, নামবিহীন ব্যবহারকারীর সমষ্টিগত এমইআই স্কোরের উপর ভিত্তি করে একটি প্রাক-বীজ তালিকাটি কোন ওয়েবসাইটগুলি অটোপ্লে করতে পারে তা নির্ধারণ করতে ব্যবহৃত হয়। এই ডেটা কেবল ব্যবহারকারী প্রোফাইল তৈরির সময় এমইআইয়ের প্রাথমিক অবস্থা নির্ধারণ করে। যেহেতু ব্যবহারকারী ওয়েবটি ব্রাউজ করে এবং অটোপ্লে সামগ্রী সহ ওয়েবসাইটগুলির সাথে যোগাযোগ করে তাদের ব্যক্তিগত এমইআই ডিফল্ট কনফিগারেশনটিকে ওভাররাইড করে।
প্রাক-বীজযুক্ত সাইটের তালিকাটি ম্যানুয়ালি কিউরেটেডের পরিবর্তে অ্যালগরিদমিকভাবে উত্পন্ন হয় এবং যে কোনও ওয়েবসাইট অন্তর্ভুক্ত করার যোগ্য। সেই সাইটে যে সাইটটি পরিদর্শন করে এমন পর্যাপ্ত ব্যবহারকারীরা সেই সাইটে অটোপ্লে অনুমতি দিলে তালিকায় সাইটগুলি যুক্ত করা হয়। এই প্রান্তিকতা শতাংশ-ভিত্তিক যাতে বৃহত্তর সাইটগুলির পক্ষে না যায়।
ভারসাম্য খোঁজা
আমরা আমাদের সিদ্ধান্ত গ্রহণের প্রক্রিয়া এবং এই নীতির পিছনে নকশার যুক্তি সম্পর্কে আরও অন্তর্দৃষ্টি দেওয়ার জন্য নতুন ডকুমেন্টেশন পোস্ট করেছি। পাশাপাশি প্রাক-বীজযুক্ত সাইটের তালিকা কীভাবে কাজ করে সে সম্পর্কে নতুন ডকুমেন্টেশন।
আমরা সর্বদা আমাদের ব্যবহারকারীদের প্রথমে রাখি তবে আমরা ওয়েব ডেভলপমেন্ট সম্প্রদায়কেও নামাতে চাই না। কখনও কখনও ব্রাউজার হওয়ার অর্থ এই দুটি লক্ষ্য অবশ্যই সাবধানে ভারসাম্যপূর্ণ হতে হবে। আমরা বিশ্বাস করি যে নীতি বাস্তবায়নের জন্য আমাদের সমন্বয় এবং ওয়েব অডিও বিকাশকারীদের তাদের কোড আপডেট করার জন্য আমরা যে অতিরিক্ত সময় সরবরাহ করেছি তার সাথে আমরা ক্রোম 71 এর সাথে এই ভারসাম্য অর্জন করব।