ডিজাইন ডীপ ডাইভ
হাই-লেভেল ডিজাইনে পুরো সিস্টেমকে দুই ভাগে ভাগ করা হয়েছে: ভিডিও আপলোডিং ফ্লো এবং ভিডিও স্ট্রিমিং ফ্লো। এই অংশে আমরা এই দুইটি ফ্লো আরও বিস্তারিতভাবে উন্নত করবো এবং গুরুত্বপূর্ণ অপটিমাইজেশন ও এরর হ্যান্ডলিং মেকানিজম যোগ করবো।
ভিডিও ট্রান্সকোডিং
যখন আপনি একটি ভিডিও রেকর্ড করেন, ডিভাইস (সাধারণত ফোন বা ক্যামেরা) ভিডিওটিকে একটি নির্দিষ্ট ফরম্যাটে সংরক্ষণ করে। যদি আপনি চান ভিডিওটি অন্য ডিভাইসে সহজে চালানো যায়, তাহলে ভিডিওটিকে উপযুক্ত বিটরেট এবং ফরম্যাটে এনকোড করতে হয়।
বিটরেট হলো প্রতি সেকেন্ডে কত বিট প্রসেস হচ্ছে তার হার। উচ্চ বিটরেট সাধারণত উচ্চ মানের ভিডিও নির্দেশ করে, তবে এতে বেশি প্রসেসিং পাওয়ার এবং দ্রুত ইন্টারনেট প্রয়োজন হয়।
ভিডিও ট্রান্সকোডিং কেন গুরুত্বপূর্ণ:
- কাঁচা ভিডিও অনেক বেশি স্টোরেজ ব্যবহার করে (১ ঘণ্টা HD ভিডিও কয়েক শত GB হতে পারে)
- সব ডিভাইস সব ফরম্যাট সাপোর্ট করে না
- বিভিন্ন নেটওয়ার্কে বিভিন্ন রেজোলিউশন দরকার
- মোবাইল নেটওয়ার্ক পরিবর্তনশীল হওয়ায় adaptive quality দরকার
এনকোডিং ফরম্যাট:
Container: ভিডিও, অডিও, মেটাডাটা ধারণ করে (.mp4, .avi) Codecs: ভিডিও কমপ্রেস করে (H.264, VP9, HEVC)
DAG মডেল
ভিডিও ট্রান্সকোডিংকে ছোট ছোট টাস্কে ভাগ করতে DAG ব্যবহার করা হয়।
অরিজিনাল ভিডিও → ভিডিও / অডিও / মেটাডাটা → প্রসেসিং → ফাইনাল ভিডিও
টাস্ক:
- Inspection
- Encoding
- Thumbnail generation
- Watermark
আর্কিটেকচার
মূল কম্পোনেন্ট:
- Preprocessor
- DAG Scheduler
- Resource Manager
- Task Workers
- Temporary Storage
- Encoded Video
Preprocessor
- ভিডিও GOP ভাগ করা
- পুরানো ডিভাইস support
- DAG তৈরি করা
- cache হিসেবে কাজ করা
DAG Scheduler
টাস্কগুলো ভাগ করে resource manager-এ পাঠায়
Resource Manager
৩টি কিউ:
- Task Queue
- Worker Queue
- Running Queue
সঠিক worker-কে সঠিক কাজ দেয়
Task Workers
- Encoder
- Watermark
- Thumbnail
- Merger
Temporary Storage
intermediate data রাখে
Speed Optimization
- GOP splitting
- resumable upload
- region-based upload center
Safety Optimization
Pre-signed URL:
- API থেকে URL নেওয়া
- সরাসরি storage-এ upload
DRM / AES / Watermark ব্যবহার
Cost Optimization
- শুধু popular ভিডিও CDN-এ
- less popular server থেকে serve
- on-demand encoding
- region-based distribution
Error Handling
- Upload → retry
- Transcoding → retry
- Scheduler → reschedule
- Worker down → new worker
- DB fail → replica/failover