DASH-এর মাধ্যমে লাইভ YouTube কন্টেন্ট ডেলিভার করা

এই ডকুমেন্ট থেকে আপনি এনকোডার থেকে YouTube-এ লাইভ ডেটা স্ট্রিম করার জন্য HTTP (DASH) ডেলিভারি ফর্ম্যাটে ডায়নামিক অ্যাডাপ্টিভ স্ট্রিমিং ব্যবহার করার নির্দেশিকা পাবেন। এনকোডার ভেন্ডরদের প্রোডাক্টে DASH ডেলিভারি সাপোর্ট যোগ করতে সাহায্য করার জন্য এটি তৈরি করা হয়েছে।

DASH সম্পর্কে বোঝা

নিচে DASH-এর কিছু গুরুত্বপূর্ণ ফিচার ও অ্যাট্রিবিউট তালিকাভুক্ত করা হল:

  • ওপেন স্ট্যান্ডার্ডের উপর ভিত্তি করে।
  • HTTP-ভিত্তিক। এর ফলে, DASH হল ইন্টারনেট পরিকাঠামো বান্ধব এবং ফায়ারওয়াল অতিক্রম করতে পারে।
  • ট্রান্সফার বিটরেট বেশি হলেও কাজ করে। DASH একাধিক, একই সাথে HTTP সেশন এবং নন-সিকোয়েন্সিয়াল সেগমেন্ট ডেলিভারি সমর্থন করে, যা একটি একক TCP কানেকশনের উপর নির্ভর করে এমন প্রোটোকলের চেয়ে বেশি স্থিতিস্থাপকতা প্রদান করে।
  • HTTPS-এর মাধ্যমে সুরক্ষিত ডেলিভারি।
  • HTTP ও HTTPS-এর মাধ্যমে লসলেস ডেলিভারি।
  • কোডেক অ্যাগনস্টিক।
  • H264 ও AAC সহ MP4 এবং VP8/VP9 ও Vorbis/Opus সহ WebM ফর্ম্যাট কাজ করে।

স্পেসিফিকেশন

প্রয়োজনীয়তা

YouTube-এ লাইভ স্ট্রিম ডেলিভার করার জন্য DASH ব্যবহার করার প্রয়োজনীয়তা নিম্নলিখিত উপবিভাগে ব্যাখ্যা করা হয়েছে।

টাইমিং

YouTube DASH এন্ডপয়েন্ট প্যাসিভ HTTP সার্ভার হিসেবে কাজ করে, এনকোডারের পাঠানো PUT মেথড কল রেকর্ড করে।

  • DASH এন্ডপয়েন্ট একই সাথে TCP কানেকশন কাজ করে। আপনি HTTP/1.1 অনুযায়ী কানেকশন আবার ব্যবহার করতে পারবেন।
  • প্রথম মিডিয়া সেগমেন্টের ৩ সেকেন্ডের মধ্যে MPD ও ইনিশিয়ালাইজেশন সেগমেন্ট PUT করতে হবে। (আমরা সাজেস্ট করি যে আপনি MPD-তে ইনিশিয়ালাইজেশন সেগমেন্ট যোগ করুন।)
  • প্রতিটি সেগমেন্ট বা MPD-এর জন্য আলাদা PUT অনুরোধ ব্যবহার করতে হবে; একাধিক সেগমেন্টের মাল্টি-পার্ট আপলোড কাজ করে না।
  • আপলোড ব্যান্ডউইথ উন্নত করতে, মিডিয়া সেগমেন্টের জন্য PUT অপারেশন সময়ে ওভারল্যাপ করতে পারে।
  • প্রায় ৩ সেকেন্ডের সময়সীমার মধ্যে সেগমেন্টগুলি ক্রমিক নয় এমন ক্রমে প্রদান করা হতে পারে।
  • MPD এবং ইনিশিয়ালাইজেশন সেগমেন্ট অন্তত প্রতি ৬০ সেকেন্ড অন্তর আপডেট করা উচিত, যার সাথে availabilityStartTime এবং startNumber আপডেট করা থাকবে। (উপরে উল্লেখ করা হয়েছে, ইনিশিয়ালাইজেশন সেগমেন্ট MPD-তে অন্তর্ভুক্ত করা যেতে পারে। সেক্ষেত্রে, একটি PUT অনুরোধের মাধ্যমে দুটি সেগমেন্টই আপডেট করা যাবে।)

ইউআরএলের স্ট্রাকচার

YouTube এন্ডপয়েন্ট বেস URL-এর সাথে একটি স্ট্রিং যোগ করে আপনার এনকোডারকে অবশ্যই PUT URL তৈরি করতে হবে। আপনাকে YouTube Live Streaming API ব্যবহার করে DASH ইনজেশন এন্ডপয়েন্ট তৈরি করতে হবে।

এনকোডারটি পরবর্তীতে YouTube Live Streaming API-এর মাধ্যমে প্রোগ্রাম্যাটিকভাবে এন্ডপয়েন্টের বেস URL পেতে পারে। আপনি যদি এনকোডারে ম্যানুয়ালি URL দিতে চান, তাহলে YouTube Live Events UI-তেও বেস URL দেখতে পাবেন।

বেস URL-এর সাথে যোগ করা স্ট্রিংয়ে ASCII অক্ষরের নিম্নলিখিত সেট থাকতে পারে:

  • ছোট হাতের অক্ষর: a-z
  • বড় হাতের অক্ষর: A-Z
  • সংখ্যা: ০-৯
  • বিশেষ অক্ষর: _ (আন্ডারস্কোর), - (হাইফেন), . (ফুলস্টপ)

MPD URL

উপরের প্রয়োজনীয়তা ছাড়াও, MPD URL-এর শেষে অবশ্যই .mpd থাকতে হবে, যাতে YouTube সার্ভার সহজেই MPD শনাক্ত করতে পারে। অন্যান্য সেগমেন্টের URL অবশ্যই .mpd দিয়ে শেষ হবে না।

ইনিশিয়ালাইজেশন এবং মিডিয়া সেগমেন্ট URL

ডেটা ISO BMFF কন্টেনারে থাকলে, ইনিশিয়ালাইজেশন সেগমেন্ট URL এবং সব মিডিয়া সেগমেন্ট URL-এর শেষে .mp4 থাকতে হবে অথবা ডেটা WebM কন্টেনারে থাকলে, URL-এর শেষে .webm থাকতে হবে।

MPD কন্টেন্ট

MPD সম্পূর্ণ হতে হবে এবং DASH স্ট্যান্ডার্ড মেনে চলতে হবে। এতে নিম্নলিখিত প্রতিটি এলিমেন্টের মধ্যে ঠিক একটি করে থাকতে হবে। এই তালিকায় YouTube-এর জন্য বিশেষভাবে প্রয়োজনীয় এলিমেন্টগুলি শনাক্ত করা হয় এবং DASH স্ট্যান্ডার্ড অতিরিক্ত প্রয়োজনীয় এলিমেন্ট শনাক্ত করতে পারে। XPath সিনট্যাক্স ব্যবহার করে এলিমেন্টগুলি দেখানো হয় এবং সেগুলি DASH স্ট্যান্ডার্ড মেনে চলে।

  • /mpd:MPD/attribute::type
  • /mpd:MPD/mpd:Period
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/attribute::mimeType (video/mp4 or video/webm)
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::media
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::initialization
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::startNumber

এলিমেন্টের ভ্যালু সংক্রান্ত নিম্নলিখিত প্রয়োজনীয়তাগুলি মনে রাখবেন:

  • <MPD> এলিমেন্টের minimumUpdatePeriod অ্যাট্রিবিউট ৬০ সেকেন্ডের (PT60S) সমান বা তার কম ভ্যালুতে সেট করতে হবে।
  • <SegmentTemplate> এলিমেন্টের media অ্যাট্রিবিউটে অবশ্যই উল্লেখ করতে হবে যে মিডিয়া সেগমেন্ট URL, $Number$ ব্যবহার করে তৈরি করা হয়েছে। (startNumber অ্যাট্রিবিউটটি সেই সংখ্যাকে শনাক্ত করে যা প্রথম মিডিয়া সেগমেন্টে অ্যাসাইন করা হবে।)

ইনিশিয়ালাইজেশন সেগমেন্টের দৈর্ঘ্য

ইনিশিয়ালাইজেশন সেগমেন্ট ১০০ কেবির বেশি হলে চলবে না। (সাধারণত, ইনিশিয়ালাইজেশন সেগমেন্ট এর থেকে অনেক ছোট হয়।) MPD-তে ইনিশিয়ালাইজেশন সেগমেন্ট অন্তর্ভুক্ত থাকলে, data: URL-এর দৈর্ঘ্য ১০০kb-এর বেশি হওয়া চলবে না, যার মধ্যে সেগমেন্ট থাকে।

এনকোডার আউটপুট

ইনিশিয়ালাইজেশন সেগমেন্ট ও মিডিয়া সেগমেন্টকে অবশ্যই ক্লোজড GOP (গ্রুপ অফ পিকচার) সহ মাল্টিপ্লেক্সড ISO BMFF বা WebM ফাইল স্ট্রিম হতে হবে।

  • GOP সাইজ প্রায় ২ সেকেন্ড হতে হবে এবং ৮ সেকেন্ডের কম হতে হবে।
  • মাল্টিপ্লেক্সড স্ট্রিমে অডিও ও ভিডিও ট্র্যাক, দুটিই থাকতে হবে।

অতিরিক্ত পেশাদার পদ্ধতি

এনক্রিপশন

YouTube, HTTPS-এর মাধ্যমে স্ট্রিম এনক্রিপশন সাপোর্ট করে। আমরা আপনাকে এই ফিচার ব্যবহার করার জন্য বিশেষভাবে সাজেস্ট করি।

MPD-তে ইনিশিয়ালাইজেশন সেগমেন্ট

RFC 2397 অনুযায়ী, আপনি data: URL ব্যবহার করে সরাসরি MPD-তে ইনিশিয়ালাইজেশন সেগমেন্ট দেখাতে পারবেন। এটি আপনার স্ট্রিম সেট-আপকে সহজ করে তোলে এবং ইনিশিয়ালাইজেশন সেগমেন্ট স্ট্রিমের বাকি অংশের সাথে মিল না হওয়ার সম্ভাবনা কমায়।

এই এলিমেন্টের XPath হল:

/mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute:data

টার্গেট সেগমেন্টের সময়সীমা

ভালো ইনজেশন পারফর্ম্যান্স এবং থ্রুপুট ও লেটেন্সির মধ্যে ভালো ট্রেড-অফের জন্য, আপনার মিডিয়া সেগমেন্টের দৈর্ঘ্য ১ থেকে ৫ সেকেন্ডের মধ্যে হওয়া উচিত। আমরা বিশেষভাবে সাজেস্ট করি যে আপনি এই দুটি এলিমেন্ট ব্যবহার করে MPD-তে সেইসব সেগমেন্টের টার্গেট করা সময়সীমা সম্পর্কে জানান:

  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::duration
  • /mpd:MPD/mpd:Period/mpd:AdaptationSet/mpd:SegmentTemplate/attribute::timescale

এইসব অ্যাট্রিবিউট থেকে গণনা করা সময়সীমা যেন সব প্রকৃত সেগমেন্টের সময়সীমার দ্বিগুণ হয়, তা না হলে স্ট্রিমিং পারফর্ম্যান্স খারাপ হতে পারে।

মনে রাখবেন, ইনজেশনের জন্য টার্গেট করা সময়সীমা YouTube-এর তৈরি করা লাইভ স্ট্রিমের চাঙ্ক সময়সীমার সমান নয়। YouTube ইনপুট ট্রান্সকোড ও রি-চাঙ্ক করে এবং আউটপুট টার্গেট সময়সীমা নির্ভর করে স্ট্রিমটি স্ট্রিমিং কোয়ালিটি নাকি লেটেন্সির জন্য অপ্টিমাইজ করা হয়েছে তার উপর।

আবার চেষ্টা করা এবং এক্সপোনেনশিয়াল ব্যাকঅফ

সব HTTP PUT অনুরোধ টাইমআউট সহ করা উচিত, যা আমরা সেগমেন্টের সময়সীমার চেয়ে ৫০০ মিলিসেকেন্ড বেশি ভ্যালুতে সেট করার সাজেশন দিই।

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

  1. ব্যর্থ হওয়ার পরে, [0 ... 100] মিলিসেকেন্ডের মধ্যে একটি র্যান্ডম সময়ের জন্য অপেক্ষা করুন এবং অনুরোধটি আবার চেষ্টা করুন।
  2. অনুরোধ আবার ব্যর্থ হলে, [0 ... 200] মিলিসেকেন্ডের মধ্যে একটি র্যান্ডম সময়ের জন্য অপেক্ষা করুন এবং অনুরোধটি আবার চেষ্টা করুন।
  3. অনুরোধটি আবার ব্যর্থ হলে, [0 ... 400] মিলিসেকেন্ডের মধ্যে যেকোনও সময় অপেক্ষা করুন এবং অনুরোধটি আবার চেষ্টা করুন।
  4. ইত্যাদি

মনে রাখবেন, বার বার ব্যর্থ হলে এনকোডার অপারেটরকে জানাতে হবে, কারণ এর অর্থ হল ব্রডকাস্টে সমস্যা হচ্ছে।

HTTP রেসপন্স কোড

DASH-এর মাধ্যমে ডেলিভার করা সেগমেন্টের উত্তরে YouTube যেসব রেসপন্স কোড রিটার্ন করে, নিম্নলিখিত বিভাগে সেগুলি ব্যাখ্যা করা হয়েছে।

200 (ঠিক আছে)

HTTP 200 (OK) রেসপন্স থেকে বোঝা যায় যে YouTube সার্ভার প্রত্যাশিত অপারেশন পেয়েছে এবং সেটি সফলভাবে ম্যানেজ করেছে।

২০২ (গ্রহণ করা হয়েছে)

যেকোনও PUT বা POST অপারেশনের জন্য HTTP 202 (গৃহীত) উত্তর ইঙ্গিত করে যে অপারেশনটি অপ্রত্যাশিত ছিল এবং পরে প্রসেস করার জন্য গ্রহণ করা হয়েছে। তবে, স্থগিত অপারেশন সফল বা ব্যর্থ হতে পারে, তাই YouTube যে অপারেশনটি সফলভাবে প্রসেস করতে পারবেই, তার কোনও গ্যারান্টি নেই।

কোনও সেগমেন্ট ক্রমানুসারে ডেলিভার না করা হলে, এই রেসপন্স সবচেয়ে বেশি দেখা যায়। সাধারণত, YouTube আগের সেগমেন্টগুলি পাওয়ার পরে গৃহীত সেগমেন্টটি সঠিকভাবে প্রসেস করতে পারে এবং আপনাকে সেগমেন্টটি আবার পাঠাতে হবে না।

যেমন, নিম্নলিখিত যেকোনও ক্ষেত্রে YouTube ২০২ রেসপন্স পাঠাতে পারে:

  • MPD-র আগে একটি ইনিশিয়ালাইজেশন সেগমেন্ট পাওয়া যায়।
  • MPD এবং ইনিশিয়ালাইজেশন সেগমেন্টের আগে মিডিয়া সেগমেন্ট পাওয়া যায়।
  • আগের সেগমেন্টের আগে কোনও মিডিয়া সেগমেন্ট পাওয়া গেলে, যেমন সেগমেন্ট ২-এর আগে সেগমেন্ট ৩ পাওয়া গেলে।

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

400 (ত্রুটিপূর্ণ অনুরোধ)

HTTP 400 (অনুরোধ ঠিক নয়) উত্তর থেকে বোঝা যায় যে নিম্নলিখিত সমস্যাগুলির মধ্যে একটি হয়েছে:

  • URL-এর ফর্ম্যাটটি ভুল।
  • পোস্টটি অনেক বড় (> ১০ এমবি)।
  • MPD পার্স করা যায়নি।
  • MPD-তে ইনিশিয়ালাইজেশন সেগমেন্টটি খারাপ হয়ে গেছে।

401 (অননুমোদিত)

HTTP 401 (অননুমোদিত) উত্তর থেকে বোঝা যায় যে YouTube DASH এন্ডপয়েন্টের বেস URL খারাপ হয়ে গেছে বা সেটির মেয়াদ শেষ হয়ে গেছে।

৪০৫ (পদ্ধতি অনুমোদিত নয়)

HTTP 405 (পদ্ধতির অনুমতি নেই) উত্তর থেকে বোঝা যায় যে POST বা PUT ছাড়া অন্য কোনও অনুরোধ পাঠানো হয়েছে।

৪০৯ (দ্বন্দ্ব)

কোনও PUT বা POST অপারেশনের জন্য HTTP 409 (কনফ্লিক্ট) রেসপন্স পেলে বুঝতে হবে যে YouTube অনুরোধটি প্রসেস করতে পারছে না। যেমন, অনুরোধকারী অসংখ্য মিডিয়া সেগমেন্ট পাঠালেও YouTube-এর কাছে এখনও MPD, ইনিশিয়ালাইজেশন সেগমেন্ট বা দুটিই না থাকলে এই উত্তর আসতে পারে। এই উদাহরণে, ব্যর্থ অনুরোধ আবার করার আগে এনকোডারকে MPD এবং ইনিশিয়ালাইজেশন সেগমেন্ট আবার ট্রান্সমিট করতে হবে।

৫০০ (ইন্টার্নাল সার্ভার এরর)

HTTP 500 (ইন্টার্নাল সার্ভার সমস্যা) উত্তর থেকে বোঝা যায় যে সার্ভার অনুরোধ প্রসেস করতে পারেনি। এই সমস্যার জন্য, আমরা সাজেস্ট করি যে আপনি এক্সপোনেনশিয়াল ব্যাকঅফ সহ অনুরোধটি আবার করার চেষ্টা করুন।

উদাহরণ

URL সিকোয়েন্স

নিচে দেখানো URL ক্রম থেকে PUT অনুরোধের সিরিজ দেখা যায় যা DASH-এর মাধ্যমে কন্টেন্ট ডেলিভার করার জন্য করা হয়। এই সিকোয়েন্স ধরে নেয় যে YouTube DASH এন্ডপয়েন্টের বেস URL হল:

http://upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=

এই সিকোয়েন্সে MPD এবং ইনিশিয়ালাইজেশন সেগমেন্ট আলাদাভাবে পাঠানো হয়েছে। তবে, ইনিশিয়ালাইজেশন সেগমেন্ট সরাসরি MPD-তে দেখানো যেতে পারে এবং এটি করার জন্য সাজেস্ট করা হয়। এছাড়াও, MPD ও ইনিশিয়ালাইজেশন সেগমেন্ট কমপক্ষে প্রতি ৬০ সেকেন্ডে আপডেট করতে হবে। তাই, শেষ পর্যন্ত, সেইসব সেগমেন্টের URL এই ক্রমে আবার দেখা যাবে এবং তারপরে আরও মিডিয়া সেগমেন্টের URL দেখা যাবে।

PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=dash.mpd
PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=init.mp4
PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media001.mp4
PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media002.mp4
PUT upload.youtube.com/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media003.mp4
...

WebM সেগমেন্ট

এম্বেড করা ইনিশিয়ালাইজেশন সেগমেন্ট সহ MPD

নিম্নলিখিত স্যাম্পেল MPD-তে RFC 2397 ডেটা URL-এ এম্বেড করা ইনিশিয়ালাইজেশন সেগমেন্ট আছে। আমরা সাজেস্ট করি যে আপনি আলাদাভাবে পাঠানোর পরিবর্তে এই পদ্ধতিতে ইনিশিয়ালাইজেশন সেগমেন্ট এম্বেড করুন।

এই উদাহরণটি YouTube-এ WebM (VP8 বা VP9, Opus) ইনজেশনের জন্য উপযুক্ত। পড়ার সুবিধার জন্য ডেটা URL-এর বেশিরভাগ অংশ বাদ দেওয়া হয়েছে:

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="urn:mpeg:dash:schema:mpd:2011"
     xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd"
     type="dynamic" 
     profiles="urn:mpeg:dash:profile:isoff-live:2011" 
     minimumUpdatePeriod="PT60S"
     minBufferTime="PT12S"
     availabilityStartTime="2016-04-13T20:52:58" >
  <Period start="PT0S" id="1">
    <AdaptationSet mimeType="video/webm">
      <ContentComponent contentType="video" id="1"/>
      <SegmentTemplate timescale="1000"
           duration="2000"
           startNumber="1"
           initialization="data:video/mp4;base64,AAAAGGZ0eXBpc...AAA"
           media="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media-$Number%09d$.webm"/>
      <Representation id="1" width="1920" height="1080">
        <SubRepresentation contentComponent="1"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

MPD

নিম্নলিখিত স্যাম্পেল MPD, যাতে কোনও এম্বেড করা ইনিশিয়ালাইজেশন সেগমেন্ট নেই, সেটিও YouTube-এ WebM (VP8 বা VP9, Opus) ইনজেশনের জন্য উপযুক্ত:

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="urn:mpeg:dash:schema:mpd:2011"
     xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd"
     type="dynamic" 
     profiles="urn:mpeg:dash:profile:isoff-live:2011" 
     minimumUpdatePeriod="PT60S"
     minBufferTime="PT12S"
     availabilityStartTime="2016-04-13T20:52:58" >
  <Period start="PT0S" id="1">
    <AdaptationSet mimeType="video/webm">
      <ContentComponent contentType="video" id="1"/>
      <SegmentTemplate timescale="1000"
           duration="2000"
           startNumber="1"
           initialization="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=init.webm"
           media="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media-$Number%09d$.webm"/>
      <Representation id="1" width="1920" height="1080">
        <SubRepresentation contentComponent="1"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

ইনিশিয়ালাইজেশন

নিচে একটি স্যাম্পেল WebM ইনিশিয়ালাইজেশন সেগমেন্টের লেআউট দেখানো হয়েছে। এতে WebM স্ট্রিমের প্রথম ক্লাস্টার পর্যন্ত অংশ থাকে, তবে প্রথম ক্লাস্টারটি অন্তর্ভুক্ত থাকে না।

মিডিয়া

নিচে একটি স্যাম্পেল WebM মিডিয়া সেগমেন্টের লেআউট দেখানো হয়েছে। এতে একটি WebM ক্লাস্টার থাকে। ISO BMFF স্ট্রিমের মতো, ক্লাস্টারের সিরিজের আগে ইনিশিয়ালাইজেশন সেগমেন্ট যোগ করলে একটি সঠিক WebM স্ট্রিম তৈরি হওয়া উচিত।

ISO BMFF সেগমেন্ট

এম্বেড করা ইনিশিয়ালাইজেশন সেগমেন্ট সহ MPD

নিম্নলিখিত স্যাম্পেল MPD-তে RFC 2397 ডেটা URL-এ এম্বেড করা ইনিশিয়ালাইজেশন সেগমেন্ট আছে। আমরা সাজেস্ট করি যে আপনি ইনিশিয়ালাইজেশন সেগমেন্টটি আলাদাভাবে না পাঠিয়ে এই পদ্ধতিতে এম্বেড করুন।

এই উদাহরণটি YouTube-এ ISO BMFF (H.264, AAC) ইনজেশনের জন্য উপযুক্ত। পড়ার সুবিধার জন্য ডেটা URL-এর বেশিরভাগ অংশ বাদ দেওয়া হয়েছে:

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="urn:mpeg:dash:schema:mpd:2011"   
    xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" 
    type="dynamic"
    minimumUpdatePeriod="PT30S" 
    availabilityStartTime="2016-05-04T20:47:25" 
    minBufferTime="PT12S" 
    profiles="urn:mpeg:dash:profile:isoff-live:2011">
  <Period start="PT0S" id="1">
    <AdaptationSet mimeType="video/mp4" codecs="avc1.4d401e,mp4a.40.2">
      <ContentComponent contentType="video" id="1"/>
      <ContentComponent contentType="audio" id="2"/>
      <SegmentTemplate timescale="600"
             media="/dash_upload?cid=ug50-xg26-cbc1-2p0h&staging=1&copy=0&file=media$Number%09d$.mp4"
             initialization="data:video/mp4;base64,AAAAGGZ0eXBpc281AA...AA"
             duration="306"
             startNumber="1"/>
      <Representation id="1" width="640" height="360" bandwidth="526952">
        <SubRepresentation contentComponent="1" bandwidth="526952" 
codecs="avc1.4d401e"/>
        <SubRepresentation contentComponent="2" bandwidth="125584" codecs="mp4a.40.2"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

MPD

নিচে দেওয়া স্যাম্পেল MPD-তে কোনও এম্বেড করা ইনিশিয়ালাইজেশন সেগমেন্ট নেই, এটিও ISO BMFF (H.264, AAC) ইনজেশনের জন্য YouTube-এ কাজ করে:

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="urn:mpeg:dash:schema:mpd:2011"
     xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd"
     type="dynamic"
     profiles="urn:mpeg:dash:profile:isoff-live:2011"
     minimumUpdatePeriod="PT60S" 
     minBufferTime="PT12S"
     availabilityStartTime="2016-04-13T20:51:31" >
  <Period start="PT0S" id="1">
    <AdaptationSet mimeType="video/mp4" codecs="avc1.4d401e,mp4a.40.2">
      <ContentComponent contentType="video" id="1"/>
      <ContentComponent contentType="audio" id="2"/>
      <SegmentTemplate timescale="600"
           duration="1200"
           startNumber="1"
           initialization="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=init.mp4"
           media="/dash_upload?cid=xxxx-xxxx-xxxx-xxxx&copy=0&file=media$Number%09d$.mp4"/>
      <Representation id="1" width="640" height="360" bandwidth="526952">
        <SubRepresentation contentComponent="1" bandwidth="526952" codecs="avc1.4d401e"/>
        <SubRepresentation contentComponent="2" bandwidth="125584" codecs="mp4a.40.2"/>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

শুরু করা

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

মিডিয়া

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

পরিচিত সীমাবদ্ধতা

RTMP ও DASH ইনজেশন

YouTube-এ RTMP ও DASH ইনজেশন একসাথে ব্যবহার করা যায় না। এটি কোনও ব্রডকাস্ট চলাকালীন দুটি ইনজেশন পদ্ধতির মধ্যে পরিবর্তন করার পাশাপাশি একটিকে প্রাথমিক ইনজেশন পদ্ধতি হিসেবে এবং অন্যটিকে ব্যাক-আপ ইনজেশন পদ্ধতি হিসেবে ব্যবহার করার ক্ষেত্রেও প্রযোজ্য।