M3U8 / HLS
Apple এটা আবিষ্কার করেছে, প্রতিটা Apple ডিভাইস এটা চালায়, আর এদের কোনোটাই এটা সেভ করবে না।
একটা .m3u8 ফাইল একটা প্লেলিস্ট, ভিডিও না: হাজার হাজার ছোট সেগমেন্ট ক্রমানুসারে আনার তালিকা দেওয়া কয়েক কিলোবাইট টেক্সট। এই ডিজাইনটাই কারণ কেন HLS প্রতিটা Apple ডিভাইসে নিখুঁতভাবে চলে আর কেন "এই ফাইলটা সেভ করো" একটা টেক্সট ডকুমেন্ট বানায়। একটা ডাউনলোড করা মানে প্রতিটা সেগমেন্ট আনা আর কখনো অস্তিত্বই ছিল না এমন একটা ফাইল আবার বানানো।
৩০ জুলাই, ২০২৬
সাহায্য ছাড়াই খোলে যেখানে
HLS হলো Apple-এর নিজের স্পেসিফিকেশন আর সবখানে প্রথম-শ্রেণির সাপোর্ট আছে — Safari, AVPlayer, AirPlay। সিস্টেমের কোথাও সাপোর্ট করা না তা হলো একটা লাইভ স্ট্রিমকে ডিস্কে একটা ফাইলে পরিণত করা। চালানো আর রাখা পুরোপুরি ভিন্ন সমস্যা।
তথ্যগুলো
| পুরো নাম | HTTP Live Streaming; প্লেলিস্টটা UTF-8-এ একটা M3U |
|---|---|
| ধরন | স্ট্রিমিং প্রোটোকল, একটা টেক্সট প্লেলিস্ট হিসেবে দেওয়া |
| এক্সটেনশন | .m3u8 (প্লেলিস্ট), .ts বা .m4s (এটা যে সেগমেন্টের দিকে নির্দেশ করে) |
| প্রকাশিত | ২০০৯, Apple; ২০১৭ সালে RFC 8216 হিসেবে স্ট্যান্ডার্ডাইজড |
| সাধারণ সেগমেন্ট দৈর্ঘ্য | প্রতিটা ২ থেকে ১০ সেকেন্ড — এক ঘণ্টার ভিডিও কয়েকশো থেকে কয়েক হাজার ফাইল |
| মাস্টার বনাম মিডিয়া প্লেলিস্ট | একটা মাস্টার কোয়ালিটি লেভেল তালিকাভুক্ত করে; এগুলোর প্রতিটা আসল সেগমেন্টের একটা মিডিয়া প্লেলিস্টের দিকে নির্দেশ করে |
| সেগমেন্টের ভেতরের ভিডিও | H.264 বা HEVC, মাঝেমধ্যে AV1 |
| লাইভ স্ট্রিম | প্লেলিস্টটা কয়েক সেকেন্ড পরপর আবার আনা হয় আর সম্প্রচার চলতে থাকলে বাড়তে থাকে |
একটা বইয়ের সূচিপত্র, একটা বই না
একটা টেক্সট এডিটরে একটা .m3u8 খোলো আর তুমি কয়েক ডজন লাইন পাবে: একটা হেডার, কিছু প্যারামিটার, আর ঠিকানার একটা লম্বা তালিকা। এটাই পুরো ফাইল। ভিডিওটা অন্য কোথাও থাকে, প্রতিটা কয়েক সেকেন্ডের সেগমেন্টে কাটা, একটা সার্ভারে হাজার হাজার আলাদা ছোট ফাইল হিসেবে বসে।
প্লেয়ারটা তালিকাটা পড়ে, প্রথম কয়েকটা সেগমেন্ট আনে, চালানো শুরু করে, আর নিজের আগে আগে আনতে থাকে। তোমার কানেকশন ধীর হলে, এটা মাস্টার প্লেলিস্টে তালিকাভুক্ত একটা কম-কোয়ালিটি ভ্যারিয়েন্টে বদলায় — একটা ভিন্ন বিটরেটে সেগমেন্টের একটা ভিন্ন সেট — আর সেগমেন্টের মাঝখানে এটা করে যাতে তুমি একটা থামার বদলে একটা কোয়ালিটি বদল দেখো। এই অ্যাডাপ্টিভ সুইচিংই কারণ কেন ফরম্যাটটা জিতেছে।
এটা মানুষকে অবাক করে এমন কিছুও ব্যাখ্যা করে: থাকার মতো একক কোনো ফাইল নেই। তুমি যে সিনেমাটা দেখছ তা কোথাও একটা অবজেক্ট হিসেবে নেই। এটা হাজারটা টুকরো আর নির্দেশনার একটা সেট।
এটা সেভ করলে কেন একটা টেক্সট ফাইল পাও
কারণ তুমি সেটাই সেভ করেছ। ব্রাউজারটা তোমার দেওয়া ঠিকানাটা চেয়েছিল, চার কিলোবাইট প্লেলিস্ট পেয়েছিল, আর সেটা ডিস্কে লিখেছিল। তুমি আসলে যা দেখেছিলে তা হাজারটা আলাদা রিকোয়েস্টের মাধ্যমে এসেছিল যা সেভ অপারেশনটা কিছুই জানত না।
HLS ঠিকমতো ডাউনলোড করা মানে প্লেয়ার যা করে তাই করা, কিন্তু ডিস্কে: প্লেলিস্টটা পড়ো, একটা কোয়ালিটি ভ্যারিয়েন্ট বাছো, ক্রমানুসারে প্রতিটা সেগমেন্ট আনো, আর তারপর এগুলো একটা কন্টেইনারে জোড়া লাগাও। এই শেষ ধাপটাকে বলা হয় রিমাক্সিং — ভিডিও আর অডিও আবার এনকোড হয় না, শুধু একটা যথাযথ ইনডেক্সসহ একটা একক MP4-এ আবার লেখা হয় যাতে ফলাফলটা স্ক্রাব করা যায়।
দুটো জিনিস এটাকে শোনার চেয়ে কঠিন করে তোলে। সেগমেন্ট ঠিকানা প্রায়ই আপেক্ষিক আর প্রতি সেশনে বদলায়, তাই এক ঘণ্টা আগে আনা একটা তালিকা মৃত হতে পারে। আর স্ট্রিম প্রায়ই প্লেলিস্টে রেফারেন্স করা একটা চাবি দিয়ে এনক্রিপ্ট করা, আলাদাভাবে দেওয়া, আর প্লেব্যাকের সময় ঘোরানো।
একটা ডিভাইসে একটা পাওয়া
শুধু রাখার অধিকার আছে এমন স্ট্রিমের জন্যই — তোমার নিজের রেকর্ডিং, তোমার নিজের IPTV সাবস্ক্রিপশন, একটা ডাউনলোড দেওয়া একটা ব্রডকাস্টার। যা আসে তা হলো ব্যবস্থাটা কীভাবে কাজ করে, এটা যেকোনো কিছুর দিকে নির্দেশ করার অনুমতি না।
- একটা ডাউনলোড ইঞ্জিনকে সেগমেন্ট সামলাতে দাও
হাজারটা ফাইল আনা আর এগুলো রিমাক্স করা ঠিক সেই কাজ যা FoxDL-এর ডাউনলোডার একটা HLS সোর্স দিয়ে করে: এটা প্লেলিস্টটা হাঁটে, সমান্তরালে সেগমেন্ট টানে, আর একটা MP4 লেখে যা একটা সাধারণ ফাইলের মতো স্ক্রাব করে। যা নামে তা একটা ফাইল, টুকরোর একটা ফোল্ডার না।
- একটা থাকলে সরাসরি ফাইলটা নাও
অনেক সাইট HLS আর একটা সাধারণ প্রোগ্রেসিভ MP4 দুটোই দেয়। MP4-টা একটা রিকোয়েস্ট, একটা ফাইল আর কোনো আবার-বানানো ছাড়াই — প্রস্তাব থাকলে সবসময় ভালো বিকল্প।
- মেনে নাও কিছু রাখা যায় না
DRM দিয়ে সুরক্ষিত স্ট্রিম — FairPlay, Widevine — শুরু থেকে শেষ এনক্রিপ্টেড আর ডিজাইন অনুযায়ী ডাউনলোডযোগ্য না। কোনো টুলই এটা বদলায় না, আর এটা দাবি করা যেকোনো কিছু কিছু নিয়ে মিথ্যা বলছে।
HLS ডাউনলোড যেখানে ভুল হয়
রিমাক্স না করে জোড়া লাগানো সেগমেন্ট একটা চালানোর যোগ্য ফাইল বানায় যাতে কোনো ইনডেক্স নেই। এটা শুরু থেকে চলে আর কোথাও লাফ দেয় না। রিমাক্সিং সেই ইনডেক্সটা লেখে যা এটা ঠিক করে।
একটা লাইভ প্লেলিস্টের কোনো শেষ নেই — এটা বাড়তেই থাকে। একটা ডাউনলোড করা মানে রেকর্ড করা, আর এটা থামে যখন তুমি থামাও, ফাইলটা শেষ হলে না।
প্লেলিস্ট ঠিকানা সাধারণত সাইন করা আর সময়-সীমিত। আজ সকালে সেভ করা একটা .m3u8 প্রায়ই বিকেলের মধ্যেই কিছুরই দিকে নির্দেশ করে না।
এই ফরম্যাট নিয়ে প্রশ্ন
এই তথ্যগুলোর উৎস
- RFC 8216 — HTTP Live Streaming IETF
- HTTP Live Streaming Apple Developer
কাছাকাছি ফরম্যাট
তোমার লাইব্রেরি, অবশেষে এক জায়গায়।
ডাউনলোড ফ্রি। অ্যাকাউন্ট নেই, সাইন-আপ নেই, কিছুই দিতে হবে না।