স্ট্রিম HTTP Live Streaming

M3U8 / HLS

Apple এটা আবিষ্কার করেছে, প্রতিটা Apple ডিভাইস এটা চালায়, আর এদের কোনোটাই এটা সেভ করবে না।

সংক্ষেপে

একটা .m3u8 ফাইল একটা প্লেলিস্ট, ভিডিও না: হাজার হাজার ছোট সেগমেন্ট ক্রমানুসারে আনার তালিকা দেওয়া কয়েক কিলোবাইট টেক্সট। এই ডিজাইনটাই কারণ কেন HLS প্রতিটা Apple ডিভাইসে নিখুঁতভাবে চলে আর কেন "এই ফাইলটা সেভ করো" একটা টেক্সট ডকুমেন্ট বানায়। একটা ডাউনলোড করা মানে প্রতিটা সেগমেন্ট আনা আর কখনো অস্তিত্বই ছিল না এমন একটা ফাইল আবার বানানো।

৩০ জুলাই, ২০২৬

সাহায্য ছাড়াই খোলে যেখানে

iPhone · iPad চলে
Mac চলে
FoxDL চলে

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 সাবস্ক্রিপশন, একটা ডাউনলোড দেওয়া একটা ব্রডকাস্টার। যা আসে তা হলো ব্যবস্থাটা কীভাবে কাজ করে, এটা যেকোনো কিছুর দিকে নির্দেশ করার অনুমতি না।

  1. একটা ডাউনলোড ইঞ্জিনকে সেগমেন্ট সামলাতে দাও

    হাজারটা ফাইল আনা আর এগুলো রিমাক্স করা ঠিক সেই কাজ যা FoxDL-এর ডাউনলোডার একটা HLS সোর্স দিয়ে করে: এটা প্লেলিস্টটা হাঁটে, সমান্তরালে সেগমেন্ট টানে, আর একটা MP4 লেখে যা একটা সাধারণ ফাইলের মতো স্ক্রাব করে। যা নামে তা একটা ফাইল, টুকরোর একটা ফোল্ডার না।

  2. একটা থাকলে সরাসরি ফাইলটা নাও

    অনেক সাইট HLS আর একটা সাধারণ প্রোগ্রেসিভ MP4 দুটোই দেয়। MP4-টা একটা রিকোয়েস্ট, একটা ফাইল আর কোনো আবার-বানানো ছাড়াই — প্রস্তাব থাকলে সবসময় ভালো বিকল্প।

  3. মেনে নাও কিছু রাখা যায় না

    DRM দিয়ে সুরক্ষিত স্ট্রিম — FairPlay, Widevine — শুরু থেকে শেষ এনক্রিপ্টেড আর ডিজাইন অনুযায়ী ডাউনলোডযোগ্য না। কোনো টুলই এটা বদলায় না, আর এটা দাবি করা যেকোনো কিছু কিছু নিয়ে মিথ্যা বলছে।

HLS ডাউনলোড যেখানে ভুল হয়

একটা সিক বার ছাড়া একটা ফাইল

রিমাক্স না করে জোড়া লাগানো সেগমেন্ট একটা চালানোর যোগ্য ফাইল বানায় যাতে কোনো ইনডেক্স নেই। এটা শুরু থেকে চলে আর কোথাও লাফ দেয় না। রিমাক্সিং সেই ইনডেক্সটা লেখে যা এটা ঠিক করে।

একটা লাইভ স্ট্রিম যা কখনো শেষ হয় না

একটা লাইভ প্লেলিস্টের কোনো শেষ নেই — এটা বাড়তেই থাকে। একটা ডাউনলোড করা মানে রেকর্ড করা, আর এটা থামে যখন তুমি থামাও, ফাইলটা শেষ হলে না।

গতকাল কাজ করেছিল এমন একটা লিংক

প্লেলিস্ট ঠিকানা সাধারণত সাইন করা আর সময়-সীমিত। আজ সকালে সেভ করা একটা .m3u8 প্রায়ই বিকেলের মধ্যেই কিছুরই দিকে নির্দেশ করে না।

বিস্তারিত সংস্করণ একটা ডাউনলোড ম্যানেজার যা করে, একটা ওয়েব ব্রাউজার যা করবে না অ্যাপ বদলালে ট্রান্সফার কেন থেমে যায়, রিজিউম করতে আসলে কী লাগে, আর স্ট্রিম কীভাবে ফাইল হয়ে ওঠে।

এই ফরম্যাট নিয়ে প্রশ্ন

FoxDL কি একটা HLS (m3u8) স্ট্রিম ডাউনলোড করতে পারে? হ্যাঁ। HLS স্ট্রিম সেগমেন্ট ধরে ধরে আনা হয় আর একটা একক MP4-এ রিমাক্স করা হয়, তাই লাইব্রেরিতে যা আসে সেটা একটা সাধারণ ফাইল যা চালানো, সরানো বা শেয়ার করা যায় — বিশেষজ্ঞ প্লেয়ার ছাড়া কিছু বোঝে না এমন .ts টুকরার একটা ফোল্ডার না। আমার IPTV চ্যানেল বাফার করে বা খোলে না কেন? প্রায় সবসময়ই প্রোভাইডারের সমস্যা, অ্যাপের না। একই নেটওয়ার্কে একই চ্যানেল অন্য একটা প্লেয়ারে চেষ্টা করো: সেখানেও ফেল করলে, স্ট্রিমটা মৃত, অ্যাকাউন্টের মেয়াদ শেষ, বা প্যানেলের অনুমতি দেওয়া একসাথে কানেকশন তুমি আগেই ব্যবহার করে ফেলেছ। অন্য চলা ডিভাইস বন্ধ করলে সাধারণত ঠিক হয়ে যায়। একটা ওয়েব পেজ থেকে ফাইল কীভাবে ডাউনলোড করব? পেজটা FoxDL-এর বিল্ট-ইন ওয়েব ব্রাউজারে খোলো। ব্রাউজ করার সময়ই চালানো যায় এমন মিডিয়া আর ডাউনলোডযোগ্য ফাইল ধরা পড়ে, আর PDF, ZIP আর ডকুমেন্ট এক ট্যাপে লাইব্রেরিতে চলে আসে। ব্রাউজারটা আছে তোমার নিজের ফাইল আর তোমার অ্যাক্সেসের অধিকার আছে এমন লিংকে পৌঁছানোর জন্য।

এই তথ্যগুলোর উৎস

কাছাকাছি ফরম্যাট

তোমার লাইব্রেরি, অবশেষে এক জায়গায়।

ডাউনলোড ফ্রি। অ্যাকাউন্ট নেই, সাইন-আপ নেই, কিছুই দিতে হবে না।

ডাউনলোড করো App Store থেকে