ডিপ-ডাইভ: ভিডিওএনজি

ডেল কার্টিস
Dale Curtis

আমি ডেল কার্টিস, ক্রোমিয়ামে মিডিয়া প্লেব্যাকের জন্য ইঞ্জিনিয়ারিং লিড৷ আমার টিম MSE এবং WebCodecs এর মত ভিডিও প্লেব্যাকের জন্য ওয়েব ফেসিং API এবং অডিও এবং ভিডিও ডিমুক্সিং, ডিকোডিং এবং রেন্ডারিং এর সাথে জড়িত প্ল্যাটফর্ম নির্দিষ্ট ইন্টারনালের জন্য দায়ী।

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

Chromium এর প্লেব্যাক আর্কিটেকচার বছরের পর বছর ধরে উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছে। যদিও আমরা এই সিরিজের প্রথম পোস্টে বর্ণিত সাফল্যের পিরামিডের ধারণা দিয়ে শুরু করিনি, আমরা শেষ পর্যন্ত অনুরূপ পদক্ষেপগুলি অনুসরণ করেছি: নির্ভরযোগ্যতা, কর্মক্ষমতা এবং তারপরে এক্সটেনসিবিলিটি।

শুরুতে , ভিডিও রেন্ডারিং বেশ সহজ ছিল- কোন সফ্টওয়্যার ডিকোড করা ভিডিও ফ্রেম কম্পোজিটরে পাঠাতে হবে তা বেছে নেওয়ার জন্য শুধুমাত্র একটি লুপ । বছরের পর বছর ধরে এটি যথেষ্ট নির্ভরযোগ্য ছিল, কিন্তু ওয়েবের জটিলতা বাড়ার সাথে সাথে আরও কর্মক্ষমতা এবং দক্ষতার প্রয়োজন স্থাপত্য পরিবর্তনের দিকে পরিচালিত করে। অনেক উন্নতির জন্য ওএস-নির্দিষ্ট আদিম প্রয়োজন; এইভাবে, আমাদের আর্কিটেকচারকেও ক্রোমিয়ামের সমস্ত প্ল্যাটফর্মে পৌঁছানোর জন্য আরও সম্প্রসারিত হতে হয়েছিল।

বিভিন্ন Chromium প্ল্যাটফর্মে রেন্ডারিং প্রবাহের চিত্র।

ভিডিও রেন্ডারিংকে দুটি ধাপে বিভক্ত করা যেতে পারে: কী সরবরাহ করতে হবে তা চয়ন করা এবং সেই তথ্যটি দক্ষতার সাথে সরবরাহ করা। পঠনযোগ্যতার স্বার্থে, ক্রোমিয়াম কীভাবে ডেলিভার করতে হবে তা বেছে নেওয়ার আগে আমি দক্ষ ডেলিভারি কভার করব।

কিছু শর্তাবলী এবং বিন্যাস

যেহেতু এই নিবন্ধটি রেন্ডারিংয়ের উপর দৃষ্টি নিবদ্ধ করে, তাই আমি পাইপলাইনের ডিমুক্সিং এবং ডিকোডিং দিকগুলিকে সংক্ষেপে স্পর্শ করব।

বাইট প্রবাহিত হচ্ছে, এবং কাঠামোগত প্যাকেটগুলি প্রবাহিত হচ্ছে।

আমাদের আধুনিক নিরাপত্তা-সচেতন বিশ্বে ডিকোডিং এবং ডিমাক্সিংয়ের জন্য যথেষ্ট যত্নের প্রয়োজন। বাইনারি পার্সার হল সমৃদ্ধ টার্গেট পরিবেশ, এবং মিডিয়া প্লেব্যাক বাইনারি পার্সিংয়ে পূর্ণ। যেমন, মিডিয়া পার্সারে নিরাপত্তা সমস্যা খুবই সাধারণ।

আমাদের ব্যবহারকারীদের নিরাপত্তা সংক্রান্ত সমস্যার ঝুঁকি কমাতে Chromium গভীরভাবে প্রতিরক্ষা অনুশীলন করে। ব্যবহারিক পরিভাষায়, এর অর্থ হল ডিমুক্সিং এবং সফ্টওয়্যার ডিকোডিং সর্বদা একটি কম বিশেষাধিকার প্রক্রিয়ার মধ্যে ঘটে, যখন হার্ডওয়্যার ডিকোডিং এমন একটি প্রক্রিয়ায় ঘটে যেখানে সিস্টেমের GPU-এর সাথে কথা বলার জন্য যথেষ্ট সুবিধা রয়েছে।

রেন্ডারার, GPU এবং অডিও প্রক্রিয়াগুলির জন্য Chromium স্যান্ডবক্সগুলি৷

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

তাই অনেক বিট

আজকের ভিডিও রেন্ডারিং পাইপলাইনগুলি বোঝার জন্য ভিডিও কেন বিশেষ: ব্যান্ডউইথের জ্ঞান প্রয়োজন৷ 60 ফ্রেম প্রতি সেকেন্ডে একটি 3840x2160 (4K) রেজোলিউশন প্লেব্যাক 9-12 গিগাবিট/সেকেন্ড মেমরি ব্যান্ডউইথ ব্যবহার করে। যদিও আধুনিক সিস্টেমে প্রতি সেকেন্ডে শত শত গিগাবিটের সর্বোচ্চ ব্যান্ডউইথ থাকতে পারে, ভিডিও প্লেব্যাক এখনও একটি উল্লেখযোগ্য অংশ উপস্থাপন করে। যত্ন ছাড়াই, GPU এবং CPU মেমরির মধ্যে অনুলিপি বা ভ্রমণের কারণে মোট ব্যান্ডউইথ সহজেই গুণিত হতে পারে।

দক্ষতার কথা মাথায় রেখে যেকোনো আধুনিক ভিডিও প্লেব্যাক ইঞ্জিনের লক্ষ্য হল ডিকোডার এবং চূড়ান্ত রেন্ডারিং ধাপের মধ্যে ব্যান্ডউইথ কমিয়ে আনা। এই কারণে, ভিডিও রেন্ডারিং মূলত Chromium-এর প্রধান রেন্ডারিং পাইপলাইন থেকে ডিকপল করা হয়েছে৷ বিশেষত, আমাদের প্রধান রেন্ডারিং পাইপলাইনের দৃষ্টিকোণ থেকে, ভিডিও হল অস্বচ্ছতা সহ একটি নির্দিষ্ট-আকারের গর্ত। ক্রোমিয়াম সারফেস নামক একটি ধারণা ব্যবহার করে এটি অর্জন করে — যার মাধ্যমে প্রতিটি ভিডিও সরাসরি ভিজ- এর সাথে কথা বলে।

'ভিডিও এখানে যায়' বলে একটি ছিদ্র এবং একটি তীর সহ একটি ওয়েবপৃষ্ঠা৷

মোবাইল কম্পিউটিং জনপ্রিয়তার কারণে, বর্তমান প্রজন্মের মধ্যে শক্তি এবং দক্ষতা একটি উল্লেখযোগ্য ফোকাস হয়ে উঠেছে। এর ফল হল যে ডিকোডিং এবং রেন্ডারিং হার্ডওয়্যার স্তরে আগের চেয়ে আরও বেশি মিলিত হয়েছে-ফলে ভিডিওটি অস্বচ্ছতা সহ একটি গর্তের মতো দেখায়, এমনকি OS-তেও! প্ল্যাটফর্ম স্তরের ডিকোডারগুলি প্রায়শই কেবলমাত্র অস্বচ্ছ বাফারগুলি সরবরাহ করে যা ক্রোমিয়াম ওভারলে আকারে প্ল্যাটফর্ম স্তরের কম্পোজিটিং সিস্টেমের মধ্য দিয়ে যায়।

একটি ছিদ্র এবং একটি তীর সহ একটি ওয়েবপৃষ্ঠা যা বলছে 'ভিডিও এখানে চলে', অপারেটিং সিস্টেমের প্রতিনিধিত্বকারী একটি বাক্স দ্বারা মোড়ানো৷

প্রতিটি প্ল্যাটফর্মের ওভারলেগুলির নিজস্ব ফর্ম রয়েছে যেগুলির সাথে তাদের প্ল্যাটফর্ম ডিকোডিং APIগুলি একত্রে কাজ করে৷ উইন্ডোজের রয়েছে ডাইরেক্ট কম্পোজিশন এবং মিডিয়া ফাউন্ডেশন ট্রান্সফর্ম , macOS-এ রয়েছে কোরঅ্যানিমেশন লেয়ার এবং ভিডিও টুলবক্স , অ্যান্ড্রয়েডের রয়েছে সারফেসভিউ এবং মিডিয়াকোডেক , এবং লিনাক্সে রয়েছে VASsurfaces এবং VA-API । এই ধারণাগুলির জন্য ক্রোমিয়ামের বিমূর্ততাগুলি যথাক্রমে OverlayProcessor এবং mojo::VideoDecoder ইন্টারফেস দ্বারা পরিচালিত হয়।

কিছু ক্ষেত্রে এই বাফারগুলিকে সিস্টেম মেমরিতে ম্যাপযোগ্য করা সম্ভব, তাই তাদের অস্বচ্ছ হওয়ারও প্রয়োজন নেই এবং অ্যাক্সেস না হওয়া পর্যন্ত কোনো ব্যান্ডউইথ ব্যবহার করবেন না—Chromium এই GpuMemoryBuffers কে কল করে। উইন্ডোজে এগুলি DXGI বাফার দ্বারা সমর্থিত, macOS IOSurfaces- এ, Android AHardwareBuffers এবং Linux DMA বাফারগুলিতে । যদিও ভিডিও প্লেব্যাকের জন্য সাধারণত এই অ্যাক্সেসের প্রয়োজন হয় না, এই বাফারগুলি ভিডিও ক্যাপচারের জন্য গুরুত্বপূর্ণ যাতে ক্যাপচার ডিভাইস এবং চূড়ান্ত এনকোডারগুলির মধ্যে ন্যূনতম ব্যান্ডউইথ নিশ্চিত করা যায়৷

পূর্ববর্তী পাঠে উল্লিখিত বাফারগুলির চিত্র।

যেহেতু জিপিইউ প্রায়শই ডিকোডিং এবং প্রদর্শন উভয়ের জন্য দায়ী, এই (এছাড়াও প্রায়শই) অস্বচ্ছ বাফারগুলির ব্যবহার নিশ্চিত করে যে উচ্চ ব্যান্ডউইথ ভিডিও ডেটা আসলে জিপিইউ থেকে বেরিয়ে যায় না। যেমনটি আমরা আগে আলোচনা করেছি, GPU-তে ডেটা রাখা দক্ষতার জন্য অবিশ্বাস্যভাবে গুরুত্বপূর্ণ; বিশেষ করে উচ্চ রেজোলিউশন এবং ফ্রেম হারে।

ওভারলে এবং জিপিইউ বাফারের মতো আমরা যত বেশি ওএস প্রাইমিটিভের সুবিধা নিতে পারি, তত কম ব্যান্ডউইথ অপ্রয়োজনীয়ভাবে ভিডিও বাইটগুলিকে এলোমেলো করার জন্য ব্যয় করা হয়। ডিকোডিং থেকে রেন্ডারিং পর্যন্ত সমস্ত কিছু এক জায়গায় রাখা অবিশ্বাস্য শক্তি দক্ষতার দিকে নিয়ে যেতে পারে। উদাহরণস্বরূপ, যখন ক্রোমিয়াম ম্যাকওএস-এ ওভারলে সক্ষম করে , তখন পূর্ণস্ক্রীন ভিডিও প্লেব্যাকের সময় পাওয়ার খরচ অর্ধেক হয়ে যায়! Windows , Android এবং ChromeOS- এর মতো অন্যান্য প্ল্যাটফর্মে, আমরা ওভারলেগুলি ব্যবহার করতে পারি এমনকি নন-ফুলস্ক্রিন ক্ষেত্রেও, প্রায় সর্বত্র 50% পর্যন্ত সঞ্চয় করে৷

রেন্ডারিং

এখন যেহেতু আমরা সর্বোত্তম ডেলিভারি মেকানিজম কভার করেছি, আমরা আলোচনা করতে পারি কিভাবে Chromium কি ডেলিভারি করবে তা বেছে নেয়। ক্রোমিয়ামের প্লেব্যাক স্ট্যাক একটি "টান" ভিত্তিক আর্কিটেকচার ব্যবহার করে, যার অর্থ স্ট্যাকের প্রতিটি উপাদান অনুক্রমিক ক্রমে এটির নীচের থেকে তার ইনপুটগুলির জন্য অনুরোধ করে৷ স্ট্যাকের শীর্ষে রয়েছে অডিও এবং ভিডিও ফ্রেমের রেন্ডারিং, পরবর্তী নীচে ডিকোডিং, তারপরে ডিমাক্সিং এবং অবশেষে I/O। প্রতিটি রেন্ডার করা অডিও ফ্রেম একটি ঘড়ি অগ্রসর করে যা উপস্থাপনা ব্যবধানের সাথে মিলিত হলে রেন্ডারিংয়ের জন্য ভিডিও ফ্রেম বেছে নিতে ব্যবহৃত হয়।

প্রতিটি উপস্থাপনা ব্যবধানে (প্রতিটি প্রদর্শনের রিফ্রেশ ), ভিডিও রেন্ডারারকে পূর্বে উল্লেখিত SurfaceLayer- এর সাথে সংযুক্ত একটি CompositorFrameSink দ্বারা একটি ভিডিও ফ্রেম প্রদান করতে বলা হয়। ডিসপ্লে রেট থেকে কম ফ্রেম রেট সহ কন্টেন্টের জন্য, এর অর্থ একই ফ্রেম একাধিকবার দেখানো, যখন ফ্রেম রেট ডিসপ্লে রেট থেকে বেশি হলে, কিছু ফ্রেম কখনই দেখানো হয় না।

দর্শকদের আনন্দদায়ক উপায়ে অডিও এবং ভিডিও সিঙ্ক্রোনাইজ করার জন্য আরও অনেক কিছু আছে। Chromium-এ কীভাবে সর্বোত্তম ভিডিও মসৃণতা সম্পন্ন হয় সে সম্পর্কে দীর্ঘ আলোচনার জন্য প্রজেক্ট মাখন দেখুন। এটি ব্যাখ্যা করে কিভাবে ভিডিও রেন্ডারিংকে আদর্শ সিকোয়েন্সে বিভক্ত করা যেতে পারে যা প্রতিনিধিত্ব করে প্রতিটি ফ্রেম কতবার দেখানো উচিত। যেমন: "প্রতি ডিসপ্লে ইন্টারভালে 1 ফ্রেম ([1], 60 Hz এ 60 fps)", "1 ফ্রেম প্রতি 2 ইন্টারভালে ([2], 60 Hz এ 30 fps)", বা আরও জটিল প্যাটার্ন যেমন [2:3 :2:3:2] (60 Hz এ 25 fps) একাধিক স্বতন্ত্র ফ্রেম এবং ডিসপ্লে ইন্টারভাল কভার করে। একটি ভিডিও রেন্ডারার যত কাছাকাছি এই আদর্শ প্যাটার্নে আটকে থাকবে একজন ব্যবহারকারী প্লেব্যাককে মসৃণ বলে বুঝতে পারবে।

ডিমুক্সিং, ডিকোডিং এবং রেন্ডারিংয়ের ক্রম।

যদিও বেশিরভাগ ক্রোমিয়াম প্ল্যাটফর্ম ফ্রেম দ্বারা ফ্রেম রেন্ডার করে, সবাই তা করে না। আমাদের এক্সটেনসিবল আর্কিটেকচার ব্যাচড রেন্ডারিংয়ের জন্যও অনুমতি দেয়। ব্যাচড রেন্ডারিং হল একটি দক্ষতার কৌশল যেখানে OS স্তরের কম্পোজিটরকে একাধিক ফ্রেম সম্পর্কে আগেই বলা হয় এবং একটি অ্যাপ্লিকেশন প্রদত্ত সময়ের সময়সূচীতে সেগুলি প্রকাশ করার জন্য পরিচালনা করে৷

এখন ই ভবিষ্যত?

ক্লাস প্লেব্যাকের অভিজ্ঞতায় সেরা প্রদান করতে ক্রোমিয়াম কীভাবে OS আদিমগুলির সুবিধা নেয় সেদিকে আমরা ফোকাস করেছি৷ কিন্তু ওয়েবসাইটগুলি সম্পর্কে কী যা মৌলিক ভিডিও প্লেব্যাকের বাইরে যেতে চায়? আমরা কি তাদের সেই একই শক্তিশালী আদিম অফার করতে পারি যা ক্রোমিয়াম নিজেই পরবর্তী প্রজন্মের ওয়েব সামগ্রী তৈরি করতে ব্যবহার করে?

আমরা মনে করি উত্তর হ্যাঁ! আজকাল ওয়েব প্ল্যাটফর্ম সম্পর্কে আমরা কীভাবে চিন্তা করি তার মূলে রয়েছে এক্সটেনসিবিলিটি । আমরা WebGPU এবং WebCodecs- এর মতো নতুন প্রযুক্তি তৈরি করতে অন্যান্য ব্রাউজার এবং ডেভেলপারদের সাথে কাজ করছি যাতে ওয়েব ডেভেলপাররা OS-এর সাথে কথা বলার সময় Chromium-এর মতো একই আদিম ব্যবহার করতে পারে। WebGPU GPU বাফারগুলির জন্য সমর্থন নিয়ে আসে এবং WebCodecs পূর্বোক্ত ওভারলে এবং GPU বাফার সিস্টেমগুলির সাথে সামঞ্জস্যপূর্ণ প্ল্যাটফর্ম ডিকোডিং এবং এনকোডিং আদিম নিয়ে আসে।

WebCodecs এবং WebGPU-এর মধ্যে সম্পর্ক।

প্রবাহের শেষ

পড়ার জন্য ধন্যবাদ! আমি আশা করি আপনি আধুনিক প্লেব্যাক সিস্টেম সম্পর্কে আরও ভালভাবে বুঝতে পেরেছেন এবং কীভাবে Chromium প্রতিদিন কয়েক মিলিয়ন ঘন্টা দেখার সময়কে শক্তি দেয়৷ আপনি যদি কোডেক এবং আধুনিক ওয়েব ভিডিও সম্পর্কে আরও পড়ার জন্য খুঁজছেন তবে আমি সুপারিশ করছি H.264 হল সিড বালার ম্যাজিক , এরিকা বিভসের হাউ মডার্ন ভিডিও প্লেয়ার্স ওয়ার্ক এবং সিরিল কনকোলাটোর পুরষ্কার বিজয়ী প্রযুক্তি সহ প্যাকেজিং পুরস্কারপ্রাপ্ত শো।

উনা ক্রেভেটসের একটি চিত্র (সুন্দর এক!)।