DASH-এর মাধ্যমে লাইভ YouTube সামগ্রী বিতরণ করা হচ্ছে

এই নথিটি একটি এনকোডার থেকে YouTube-এ লাইভ ডেটা স্ট্রিম করতে DASH ডেলিভারি ফর্ম্যাট ব্যবহার করার জন্য নির্দেশিকা প্রদান করে। এটি এনকোডার বিক্রেতাদের তাদের পণ্যগুলিতে DASH ডেলিভারি সমর্থন যোগ করতে সহায়তা করার উদ্দেশ্যে করা হয়েছে৷

DASH বোঝা

নীচের তালিকায় কিছু মূল DASH বৈশিষ্ট্য এবং গুণাবলী রয়েছে:

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

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

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

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

টাইমিং

YouTube DASH এন্ডপয়েন্ট একটি প্যাসিভ HTTP সার্ভার হিসাবে আচরণ করে, একটি এনকোডার দ্বারা পাঠানো PUT পদ্ধতি কলগুলি রেকর্ড করে৷

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

URL গঠন

আপনার এনকোডারকে YouTube এন্ডপয়েন্ট বেস ইউআরএলে একটি স্ট্রিং যুক্ত করে PUT URL গঠন করতে হবে। আপনাকে YouTube লাইভ স্ট্রিমিং API ব্যবহার করে DASH ইনজেশন এন্ডপয়েন্ট তৈরি করতে হবে।

এনকোডার পরবর্তীতে YouTube লাইভ স্ট্রিমিং API-এর মাধ্যমে প্রোগ্রাম্যাটিকভাবে এন্ডপয়েন্টের বেস ইউআরএল পেতে পারে। আপনি যদি ম্যানুয়ালি এনকোডারে URL প্রদান করতে চান তবে বেস URLটি YouTube লাইভ ইভেন্ট UI-তেও দৃশ্যমান।

বেস ইউআরএলে যুক্ত স্ট্রিংটিতে ASCII অক্ষরগুলির নিম্নলিখিত সেট থাকতে পারে:

  • ছোট হাতের অক্ষর: az
  • বড় হাতের অক্ষর: AZ
  • সংখ্যা: 0-9
  • বিশেষ অক্ষর: _ (আন্ডারস্কোর), - (হাইফেন), . (সময়কাল)

MPD URL

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

সূচনা এবং মিডিয়া সেগমেন্ট URL

ইনিশিয়ালাইজেশন সেগমেন্ট ইউআরএল এবং সমস্ত মিডিয়া সেগমেন্ট ইউআরএল অবশ্যই .mp4 দিয়ে শেষ হতে হবে যদি ডেটা একটি ISO BMFF কন্টেনারে থাকে বা .webm দিয়ে থাকে যদি ডেটা 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 অ্যাট্রিবিউট অবশ্যই 60 সেকেন্ডের ( PT60S ) সমান বা তার কম মান নির্ধারণ করতে হবে।
  • <SegmentTemplate> উপাদানটির media অ্যাট্রিবিউট অবশ্যই উল্লেখ করবে যে মিডিয়া সেগমেন্ট URL $Number$ ব্যবহার করে তৈরি করা হয়েছে। ( startNumber অ্যাট্রিবিউটটি সেই নম্বরটিকে চিহ্নিত করে যা প্রথম মিডিয়া সেগমেন্টে বরাদ্দ করা হবে।)

প্রারম্ভিক সেগমেন্টের দৈর্ঘ্য

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

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

ইনিশিয়ালাইজেশন সেগমেন্ট এবং মিডিয়া সেগমেন্টগুলিকে অবশ্যই একটি মাল্টিপ্লেক্সড ISO BMFF বা WebM ফাইল স্ট্রিম বদ্ধ GOPs (ছবির গোষ্ঠী) সহ গঠন করতে হবে।

  • GOP আকার প্রায় 2 সেকেন্ড হওয়া উচিত এবং 8 সেকেন্ডের কম হওয়া উচিত।
  • মাল্টিপ্লেক্সড স্ট্রীমে অডিও এবং ভিডিও উভয় ট্র্যাক থাকতে হবে।

অতিরিক্ত সেরা অনুশীলন

জোড়া লাগানো

YouTube HTTPS এর মাধ্যমে স্ট্রিম এনক্রিপশন সমর্থন করে। আমরা দৃঢ়ভাবে সুপারিশ করি যে আপনি এই বৈশিষ্ট্যটি ব্যবহার করুন৷

MPD-তে সূচনা সেগমেন্ট

আপনি একটি data: URL, প্রতি RFC 2397 । এটি আপনার স্ট্রীম সেটআপকে সরল করে এবং সূচনা বিভাগটি বাকি স্ট্রিমের সাথে সঙ্গতিপূর্ণ না হওয়ার সম্ভাবনাকে হ্রাস করে৷

এই উপাদানটির জন্য XPath হল:

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

টার্গেট সেগমেন্টের সময়কাল

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

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

এই বৈশিষ্ট্যগুলি থেকে গণনা করা সময়কাল সমস্ত প্রকৃত সেগমেন্টের সময়কালের 2 এর মধ্যে হওয়া উচিত বা স্ট্রিমিং কার্যক্ষমতা ক্ষতিগ্রস্ত হতে পারে।

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

পুনরায় চেষ্টা এবং সূচকীয় ব্যাকঅফ

সমস্ত HTTP PUT অনুরোধগুলি একটি টাইমআউটের সাথে সঞ্চালিত হওয়া উচিত, যা আমরা সেগমেন্টের সময়কালের চেয়ে 500 মিলিসেকেন্ডের বেশি মান সেট করার পরামর্শ দিই।

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

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

নোট করুন যে বারবার ব্যর্থতাগুলি এনকোডার অপারেটরকে সংকেত করা উচিত কারণ তারা একটি ব্যর্থ সম্প্রচারের সাথে সম্পর্কিত৷

HTTP প্রতিক্রিয়া কোড

নিম্নলিখিত বিভাগগুলি প্রতিক্রিয়া কোডগুলি ব্যাখ্যা করে যা YouTube DASH এর মাধ্যমে বিতরণ করা অংশগুলির প্রতিক্রিয়া হিসাবে ফেরত দেয়৷

200 (ঠিক আছে)

একটি HTTP 200 (OK) প্রতিক্রিয়া নির্দেশ করে যে YouTube সার্ভার একটি প্রত্যাশিত অপারেশন পেয়েছে এবং এটি সফলভাবে পরিচালনা করেছে৷

202 (স্বীকৃত)

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

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

উদাহরণস্বরূপ, YouTube নিম্নলিখিত যেকোনো ক্ষেত্রে একটি 202 প্রতিক্রিয়া ফেরত দিতে পারে:

  • MPD এর আগে একটি ইনিশিয়ালাইজেশন সেগমেন্ট প্রাপ্ত হয়।
  • মিডিয়া সেগমেন্ট এমপিডি এবং ইনিশিয়ালাইজেশন সেগমেন্টের আগে প্রাপ্ত হয়।
  • একটি মিডিয়া সেগমেন্ট আগের সেগমেন্টের আগে প্রাপ্ত হয়, যেমন সেগমেন্ট 3 সেগমেন্ট 2 এর আগে প্রাপ্ত হয়।

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

400 খারাপ অনুরোধ)

একটি HTTP 400 (খারাপ অনুরোধ) প্রতিক্রিয়া নিম্নলিখিত সমস্যাগুলির মধ্যে একটি নির্দেশ করে:

  • URLটি বিকৃত
  • পোস্টটি খুব বড় (> 10MB)
  • MPD পার্স করা যাবে না
  • MPD-তে ইনিশিয়ালাইজেশন সেগমেন্ট দুর্নীতিগ্রস্ত

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

একটি HTTP 401 (অননুমোদিত) প্রতিক্রিয়া ইঙ্গিত করে যে YouTube DASH এন্ডপয়েন্টের ভিত্তি URLটি দূষিত বা মেয়াদ শেষ হয়ে গেছে।

405 (পদ্ধতি অনুমোদিত নয়)

একটি HTTP 405 (পদ্ধতি অনুমোদিত নয়) প্রতিক্রিয়া নির্দেশ করে যে POST বা PUT ছাড়া অন্য একটি অনুরোধ পাঠানো হয়েছিল৷

409 (দ্বন্দ্ব)

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

500 অভ্যন্তরীণ সার্ভার সমস্যা)

একটি 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 এবং সূচনা বিভাগগুলি অন্তত প্রতি 60 সেকেন্ডে আপডেট করা উচিত। সুতরাং, অবশেষে, এই ক্রমানুসারে সেই অংশগুলির জন্য 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, যার কোনো এমবেডেড ইনিশিয়ালাইজেশন সেগমেন্ট নেই, সেটিও 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 ক্লাস্টার নিয়ে গঠিত। একটি 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, যার কোনো এমবেডেড ইনিশিয়ালাইজেশন সেগমেন্ট নেই, YouTube-এ ISO BMFF (H.264, AAC) ইনজেশনের জন্যও সঙ্গতিপূর্ণ:

<?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 ইনিশিয়ালাইজেশন সেগমেন্টের বিন্যাস দেখায়। ইউটিউব অগত্যা পরমাণু ব্যবহার করে না, তবে এটি একটি উপযুক্ত উদাহরণ। বিশেষ করে, উভয় অডিও এবং ভিডিও ট্র্যাক প্রতিনিধিত্ব করা হয়.

মিডিয়া

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

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

RTMP এবং DASH ইনজেশন

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