লাইভ স্ট্রিমগুলির জন্য ম্যানিফেস্ট ম্যানিপুলেটর

পড সার্ভিং এপিআই এনকোডেড এবং কন্ডিশন্ড অ্যাড সেগমেন্টগুলিতে অ্যাক্সেস প্রদান করে, এমনভাবে প্রস্তুত করা হয় যাতে সেগুলি সরাসরি ব্যবহারকারীর মুখোমুখি HLS বা MPEG-DASH মিডিয়া প্লেলিস্টে সেলাই করা যায়। MPEG-DASH-এর জন্য, Pod Serving API এই বিজ্ঞাপন বিভাগগুলির জন্য অতিরিক্ত তথ্য এবং প্রসঙ্গ সরবরাহ করার জন্য একটি ম্যানিফেস্ট টেমপ্লেটও প্রদান করে।

এই নির্দেশিকাটি লাইভ স্ট্রিমগুলির জন্য একটি মৌলিক পড সার্ভিং ম্যানিফেস্ট ম্যানিপুলেশন সার্ভার বাস্তবায়নের উপর দৃষ্টি নিবদ্ধ করে৷

পূর্বশর্ত: Google Ad Manager-এ লাইভস্ট্রিম ইভেন্ট কনফিগার করুন

পড সার্ভিং এপিআই থেকে কোনো অনুরোধ করার আগে, আপনার প্রক্রিয়া করা প্রতিটি স্ট্রিমের জন্য আপনাকে অবশ্যই একটি অ্যাড ম্যানেজার লাইভস্ট্রিম ইভেন্ট তৈরি করতে হবে। আপনি LiveStreamEventService API বা Google Ad Manager ওয়েব ইন্টারফেস ব্যবহার করে একটি লাইভস্ট্রিম ইভেন্ট তৈরি করতে পারেন।

একটি লাইভস্ট্রিম ইভেন্ট পড সার্ভিং API এর সাথে ব্যবহার করার জন্য, আপনাকে আপনার ইভেন্টের বেশ কয়েকটি বৈশিষ্ট্য পূরণ করতে হবে:

  • customAssetKey - এই ইভেন্টের জন্য একটি কাস্টম শনাক্তকারী ব্যবহার করা হবে। নেটওয়ার্কের জন্য সমস্ত ইভেন্ট জুড়ে অনন্য হতে হবে।
  • adTags - অ্যাড ম্যানেজার ট্রাফিকিং ওয়ার্কফ্লো দ্বারা তৈরি প্রাথমিক বিজ্ঞাপন ট্যাগ URL।
  • dynamicAdInsertionType - POD_SERVING_REDIRECT তে সেট করা আবশ্যক।
  • streamingFormat - সেই অনুযায়ী HLS বা DASH এ সেট করুন।
  • segmentUrlAuthenticationKeyIds - অন্তত একটি HMAC কী বিজ্ঞাপন সেগমেন্টের অনুরোধে স্বাক্ষর করতে ব্যবহৃত হয়।
  • daiEncodingProfileIds - এই ইভেন্টের জন্য সক্রিয় করা DAIEncodingProfile আইডিগুলির একটি তালিকা৷
  • startDateTime - ইভেন্টের শুরুর তারিখ এবং সময়
  • endDateTime - এই ইভেন্টের নির্ধারিত শেষ তারিখ এবং সময়। unlimitedEndDateTime is false and ignored if অসীমিত শেষ তারিখের সময় is true. unlimitedEndDateTime` - বুলিয়ান। উপরে দেখুন.

স্ট্রিম ম্যানিফেস্ট অনুরোধ গ্রহণ করুন

ভিডিও প্লেয়ার ক্লায়েন্ট অ্যাপ থেকে ম্যানিফেস্ট অনুরোধ শোনার জন্য আপনার ম্যানিফেস্ট ম্যানিপুলেটরকে অবশ্যই একটি API এন্ডপয়েন্ট প্রদান করতে হবে। ন্যূনতম, এই এন্ডপয়েন্টটিকে অবশ্যই ক্লায়েন্ট প্লেয়ার অ্যাপ থেকে একটি স্ট্রিম আইডি সংগ্রহ করতে হবে এবং অবশ্যই একটি সেলাই করা স্ট্রিম ম্যানিফেস্ট ফেরত দিতে হবে। অ্যাড ম্যানেজারের কাছে স্ট্রিমিং সেশন শনাক্ত করতে স্ট্রিম আইডি ব্যবহার করা হয়।

উপযুক্ত কন্টেন্ট স্ট্রিম শনাক্ত করার জন্য আপনাকে আরও কিছু তথ্য সংগ্রহ করতে হবে, উদাহরণস্বরূপ, একটি সামগ্রী আইডি।

সম্ভাব্য ম্যানিফেস্ট অনুরোধের শেষ পয়েন্টের উদাহরণ

GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
পাথ প্যারামিটার
asset_key আপনার সিস্টেমে অনুরোধ করা লাইভস্ট্রিমের সাথে সম্পর্কিত একটি অনুমানমূলক আইডি।
format স্ট্রিম ফর্ম্যাটের সাথে সম্পর্কিত একটি অনুমানমূলক পরামিতি। যেকোনো একটি:
mpd MPEG-DASH স্ট্রীমের জন্য
m3u8 HLS স্ট্রিমগুলির জন্য
ক্যোয়ারী প্যারামিটার
stream_id ক্লায়েন্ট ভিডিও প্লেয়ার অ্যাপ থেকে অ্যাড ম্যানেজার স্ট্রিম আইডি।

বিষয়বস্তু স্ট্রীম পুনরুদ্ধার করুন

বিজ্ঞাপনের সাথে স্টিচ করার জন্য সামগ্রী স্ট্রীম নির্বাচন করতে ম্যানিফেস্ট অনুরোধ থেকে সংগৃহীত সামগ্রী আইডি ব্যবহার করুন।

কন্টেন্ট স্ট্রীমে বিজ্ঞাপন বিভাগ সেলাই

আপনার স্ট্রিম ফর্ম্যাটের উপর নির্ভর করে বিজ্ঞাপন সেগমেন্টের URL গুলি আলাদা হবে৷

HLS স্ট্রীম

HLS স্ট্রীমগুলি সাধারণত একটি মাল্টিভেরিয়েন্ট ম্যানিফেস্ট হিসাবে পরিবেশন করা হয়, এতে ভেরিয়েন্ট ম্যানিফেস্টের লিঙ্কগুলির একটি সেট থাকবে, যা প্রতিটি এনকোডিং প্রোফাইলের সাথে মিলে যায়।

দ্রষ্টব্য: সরলতার জন্য, এই নির্দেশিকাটি অনুমান করে যে আপনার HLS মিডিয়া একটি বিন্যাসে এনকোড করা হয়েছে যা একই সেগমেন্ট ফাইলে অডিও এবং ভিডিও মিক্স করে।

প্রক্সি মাল্টিভেরিয়েন্ট প্লেলিস্ট

প্লেয়ারের নির্বাচিত বৈকল্পিক ম্যানিফেস্ট প্রক্রিয়া করার জন্য আপনাকে ম্যানিপুলেটরের কাছে অন্য এন্ডপয়েন্ট কলের সাথে মূল মাল্টিভেরিয়েন্ট প্লেলিস্টের প্রতিটি ভেরিয়েন্ট প্লেলিস্ট URL প্রতিস্থাপন করতে হবে।

HLS সেলাই করার অবশিষ্ট ধাপগুলি অনুমান করবে যে একটি একক বৈকল্পিক ম্যানিফেস্ট প্রক্রিয়া করা হচ্ছে।

সম্ভাব্য বৈকল্পিক অনুরোধের শেষ পয়েন্টের উদাহরণ
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
পাথ প্যারামিটার
asset_key আপনার সিস্টেমে অনুরোধ করা লাইভস্ট্রিমের সাথে সম্পর্কিত একটি অনুমানমূলক আইডি।
variant একটি অনুমানমূলক পরামিতি যেখানে প্রক্রিয়া করা হচ্ছে নির্দিষ্ট বৈকল্পিকটির জন্য একটি শনাক্তকারী রয়েছে৷
ক্যোয়ারী প্যারামিটার
stream_id ক্লায়েন্ট ভিডিও প্লেয়ার অ্যাপ থেকে অ্যাড ম্যানেজার স্ট্রিম আইডি। ম্যানিফেস্ট ম্যানিপুলেটরের সাথে একটি ব্যবহারকারীর সেশন সনাক্ত করতে এখানে ব্যবহৃত হয়।
অপ্রসেসড মাল্টিভেরিয়েন্ট ম্যানিফেস্টের উদাহরণ
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/360p.m3u8
প্রক্সিড মাল্টিভেরিয়েন্ট ম্যানিফেস্টের উদাহরণ
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/1080p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/720p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/360p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS

বিজ্ঞাপন বিরতি বিভাগগুলি সনাক্ত করুন এবং বিরতিগুলি সন্নিবেশ করুন৷

আপনি বৈকল্পিক ম্যানিফেস্ট প্রক্রিয়া করার সময়, পরবর্তী আসন্ন বিজ্ঞাপন বিরতির শুরুর সময়, সময়কাল এবং সূচী ট্র্যাক রাখুন, যতক্ষণ না ডায়নামিক ম্যানিফেস্ট প্রক্রিয়া করা হচ্ছে সেগমেন্টগুলি বিজ্ঞাপন সামগ্রী দ্বারা প্রতিস্থাপিত হবে।

আপনার এনকোডারের উপর নির্ভর করে বিজ্ঞাপন বিরতিগুলি বিষয়বস্তু বিভাগ থেকে বিভিন্ন উপায়ে চিত্রিত করা হতে পারে। একটি বিজ্ঞাপন বিরতি চিত্রিত করার একটি সাধারণ উপায় হল একটি #EXT-X-CUE-OUT ট্যাগ দিয়ে বিজ্ঞাপনের অংশগুলিকে প্রিফেস করা এবং একটি #EXT-X-CUE-IN ট্যাগ দিয়ে অনুসরণ করা৷

আপনার বিষয়বস্তু বিভাগ থেকে Google-হোস্ট করা বিজ্ঞাপন বিরতিগুলিকে আলাদা করতে, আপনাকে অবশ্যই প্রতিটি বিজ্ঞাপন বিরতির শুরুতে এবং শেষে #EXT-X-DISCONTINUITY ট্যাগ সন্নিবেশ করতে হবে। যদি এই বিচ্ছিন্নতা ট্যাগগুলি চূড়ান্ত ম্যানিফেস্টে উপস্থিত না হয়, প্লেব্যাক ব্যর্থ হবে৷

ঢোকানো বিজ্ঞাপন সেগমেন্ট URIগুলি এনক্রিপ্ট করা হয়নি৷ যদি আপনার বিষয়বস্তু এনক্রিপ্ট করা থাকে, তাহলে আপনাকে প্রতিটি বিজ্ঞাপন বিরতির প্রথম বিজ্ঞাপন অংশের আগে #EXT-X-KEY:METHOD=NONE উল্লেখ করে এনক্রিপশন মুছে ফেলতে হবে এবং বিজ্ঞাপন বিরতির পরে আবার যোগ করতে হবে।

নমুনা ম্যানিফেস্ট (মূল)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.005,
contentorigin.com/3.ts
#EXTINF:5.005,
contentorigin.com/4.ts
#EXTINF:5.005,
contentorigin.com/5.ts
#EXTINF:5.000,d
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4
ঢোকানো discontinuities সঙ্গে ম্যানিফেস্ট
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXTINF:5.005,
#EXT-X-DISCONTINUITY
{... New segments will go here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

বিজ্ঞাপন পড সেগমেন্ট প্রক্রিয়া

একটি বিজ্ঞাপন পডের মধ্যে প্রতিটি বিভাগের জন্য, আপনাকে কয়েকটি অতিরিক্ত মান ট্র্যাক করতে হবে:

  • segment_number : বিজ্ঞাপন পডের মধ্যে সেগমেন্ট সূচক, শূন্য দিয়ে শুরু। অথবা mp4 ইনিশিয়ালাইজেশন সেগমেন্টের জন্য "init"।
  • segment_duration : বর্তমান সেগমেন্টের সময়কাল মিলিসেকেন্ডে। এই মানটি পডের শেষটি ছাড়া সমস্ত বিভাগের জন্য একই হওয়া উচিত।
  • segment_offset : সেগমেন্ট অফসেট মিলিসেকেন্ডে তার সেগমেন্ট অফসেটে পূর্ববর্তী সেগমেন্টের সময়কাল যোগ করে গণনা করা হয়
  • last : বুলিয়ান মান একটি বিজ্ঞাপন পডের শেষ অংশকে চিহ্নিত করে। ডিফল্ট থেকে মিথ্যা.

বিজ্ঞাপন সেগমেন্ট URL গুলি তৈরি করুন৷

বিজ্ঞাপন বিরতির মধ্যে প্রতিটি সেগমেন্ট ফরম্যাটের একটি URL দিয়ে প্রতিস্থাপন করুন:

/linear/pods/v1/seg/network/{network_code}/custom_asset/{custom_asset_key}/pod/{pod_id}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
পাথ প্যারামিটার
network_code এই নেটওয়ার্কের জন্য Ad Manager 360 নেটওয়ার্ক কোড।
custom_asset_key LiveStreamEventService API-এ বা Ad Manager 360 ওয়েব ইন্টারফেসে লাইভস্ট্রিম পৃষ্ঠায় নির্দিষ্ট করা কাস্টম লাইভস্ট্রিম সম্পদ কী।
pod_id বিজ্ঞাপন বিরতির জন্য শনাক্তকারী. প্রতিটি বিজ্ঞাপন বিরতির জন্য 1 থেকে শুরু হওয়া এবং একটি করে বৃদ্ধি করা একটি পূর্ণসংখ্যা হওয়া উচিত।

বর্তমান ইভেন্টে একই বিজ্ঞাপন বিরতি দেখার সমস্ত ব্যবহারকারীদের মধ্যে এই মান অবশ্যই একই হতে হবে।

profile_name প্রোফাইলের জন্য শনাক্তকারী অনুরোধ করা হচ্ছে,
segment_number বর্তমান বিজ্ঞাপন পডের মধ্যে এই বিভাগের সূচী, শূন্য থেকে শুরু।
MP4 কন্টেইনার ব্যবহার করার সময়, প্রাথমিক সেগমেন্টকে সেগমেন্ট_নম্বর "init" এ সেট করে অনুরোধ করা যেতে পারে।
ক্যোয়ারী প্যারামিটার
stream_id প্রয়োজন ব্যবহারকারীর stream_id প্যারামটি স্ট্রিম তৈরির অনুরোধ থেকে ফিরে এসেছে।
sd প্রয়োজন segment_duration
so ঐচ্ছিক segment_offset

যদি so অনুপস্থিত থাকে, তাহলে অনুমান করা হয় যে পূর্ববর্তী সেগমেন্টের সবকটি একই সময়কাল রয়েছে এবং সেগমেন্ট অফসেটটি segment_number এবং sd থেকে গণনা করা হয়।

pd প্রয়োজন, সময়হীন বিজ্ঞাপন বিরতি সক্ষম ইভেন্ট ছাড়া বিজ্ঞাপন বিরতির সময়কাল (মিলিসেকেন্ডে)। এছাড়াও ad_pod_duration হিসাবে উল্লেখ করা হয়।
auth-token প্রয়োজন এই বিজ্ঞাপন পডের জন্য একটি স্বাক্ষরিত, url-এনকোড করা HMAC টোকেন
last ঐচ্ছিক বিজ্ঞাপন বিরতিতে শেষ সেগমেন্ট নির্দেশ করে বুলিয়ান। ডিফল্ট থেকে মিথ্যা.

ক্যোয়ারী প্যারামিটার মান সঠিকভাবে ইউআরএল-নিরাপদ হতে এনকোড করা আবশ্যক। এটি auth-token ক্ষেত্রের জন্য বিশেষভাবে গুরুত্বপূর্ণ, কারণ এতে / , + , এবং = অক্ষর থাকতে পারে।

নমুনা ম্যানিফেস্ট (সেগমেন্ট প্রতিস্থাপনের পরে)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:3.000,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2&last=true
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

অভিনন্দন! আপনি এখন DAI Pod Serving API দ্বারা প্রদত্ত বিজ্ঞাপন বিভাগগুলির সাথে একটি লাইভস্ট্রিম পরিবেশন করছেন৷

ড্যাশ স্ট্রীম

ড্যাশ স্ট্রীমগুলি একটি MPD ফাইল হিসাবে সরবরাহ করা হয়, যা একটি একক ফাইলে সমস্ত স্ট্রীম এনকোডিং ধারণ করে, যেখানে বিষয়বস্তুকে পিরিয়ডের একটি সিরিজ হিসাবে উপস্থাপন করা হয়।

অনুরোধ সময় টেমপ্লেট

Google Ad Manager থেকে একটি পিরিয়ড টেমপ্লেটের অনুরোধ করুন। এই টেমপ্লেটটি আপনার বিজ্ঞাপন বিরতির সময় হয়ে উঠবে, একবার এতে থাকা ম্যাক্রোগুলি জনবহুল হয়ে গেলে৷

প্রতি স্ট্রীম সেশনে আপনার শুধুমাত্র একবার এই টেমপ্লেটের জন্য অনুরোধ করা উচিত এবং প্রতিটি বিজ্ঞাপন বিরতির সাথে পুনরায় ব্যবহারের জন্য এটি ক্যাশে করা উচিত।

পিরিয়ড টেমপ্লেট অনুরোধ endpointhjf
GET /linear/pods/v1/dash/network/{network_code}/custom_asset/{custom_asset}/pods.json
Host: dai.google.com
Content-Type: application/json
পাথ প্যারামিটার
network_code প্রকাশকের Ad Manager 360 নেটওয়ার্ক কোড।
custom_asset Google Ad Manager-এ লাইভস্ট্রিম ইভেন্টের কাস্টম সম্পদ কী।
ক্যোয়ারী প্যারামিটার
stream_id ক্লায়েন্ট ভিডিও প্লেয়ার থেকে অ্যাড ম্যানেজার স্ট্রিম আইডি।
প্রতিক্রিয়া JSON
dash_period_template পিরিয়ড টেমপ্লেট XML স্ট্রিং।
segment_duration_ms ড্যাশ পিরিয়ড টেমপ্লেটে প্রতিটি বিজ্ঞাপন মিডিয়া সেগমেন্টের সময়কাল, মিলিসেকেন্ডে।
উদাহরণ অনুরোধ (cURL)
curl https://dai.google.com/linear/pods/v1/dash/network/21775744923/custom_asset/tears_of_steel/pods.json?stream-id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS
উদাহরণ প্রতিক্রিয়া
{"dash_period_template":"<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$> <BaseURL>https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/</BaseURL>
 <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">
  <SegmentTimeline>
    <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
  </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>

    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>",
"segment_duration_ms":5000}

পিরিয়ড টেমপ্লেট পপুলেট করুন

পিরিয়ড টেমপ্লেটটিতে বেশ কয়েকটি ম্যাক্রো রয়েছে যা আপনাকে প্রতিটি বিজ্ঞাপন বিরতির জন্য প্রতিস্থাপন করতে হবে। সমস্ত ম্যাক্রো প্রতিস্থাপন করা আবশ্যক. অব্যবহৃত ম্যাক্রো একটি খালি স্ট্রিং ("") দিয়ে প্রতিস্থাপন করা উচিত।

ম্যাক্রো বর্ণনা উদাহরণ
$$pod-id$$ বিজ্ঞাপন পডের সূচক এই সময়ের প্রতিনিধিত্ব করে। এই মানটি অবশ্যই সমস্ত দর্শক সেশন জুড়ে একই পডের জন্য মেলে। 1
$$period-start$$ বর্তমান এমপিডিতে পিরিয়ড শুরু হওয়ার সময়। একটি ঐচ্ছিক বৈশিষ্ট্য যা start="###" দ্বারা প্রতিস্থাপিত হওয়া উচিত, যেখানে ### হল উপস্থাপনার সময় যেখানে বিজ্ঞাপন বিরতি শুরু হয়৷ যদি পিরিয়ডের শুরুর সময় দেওয়া না থাকে, তাহলে এই ম্যাক্রোটিকে একটি খালি স্ট্রিং দিয়ে প্রতিস্থাপন করা উচিত। start="PT2H33M30S"
$$period-duration$$ সম্পূর্ণ বিজ্ঞাপনের সময়কাল। একটি ঐচ্ছিক বৈশিষ্ট্য যা duration="###" দ্বারা প্রতিস্থাপিত হওয়া উচিত, যেখানে ### হল স্ট্যান্ডার্ড DASH সময়কাল বিন্যাসে বিজ্ঞাপনের সময়কাল। যদি পিরিয়ডের সময়কাল প্রদান না করা হয়, তাহলে এই ম্যাক্রোটিকে একটি খালি স্ট্রিং দিয়ে প্রতিস্থাপন করা উচিত। duration="PT15S"
$$pod-duration$$ এই পডের জন্য বিজ্ঞাপনের প্রত্যাশিত সময়কাল মিলিসেকেন্ডে সিদ্ধান্ত নেওয়া হবে। 15000
$$number-of-repeated-segments$$ বিজ্ঞাপনের সময়কালকে (মিলিসেকেন্ডে) segment_duration_ms এর মানের দ্বারা ভাগ করে এবং নিকটতম পূর্ণ সংখ্যা পর্যন্ত রাউন্ডিং করে এই মানটি গণনা করা হয়। 3
$$cust_params$$ এই ম্যাক্রোটি বর্তমান বিজ্ঞাপন বিরতির অনন্য কাস্টম টার্গেটিং প্যারামিটার দ্বারা প্রতিস্থাপিত হতে পারে, যদি। প্রদান করা হয় এই অ্যাড ম্যানেজার সহায়তা কেন্দ্র নিবন্ধে বর্ণিত মানটিকে অবশ্যই ফর্ম্যাট করতে হবে। কোনো কাস্টম প্যারামের প্রয়োজন না হলে এই ম্যাক্রোটি একটি খালি স্ট্রিং দিয়ে প্রতিস্থাপন করা উচিত। &cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
$$scte35$$ এই ম্যাক্রোটিকে বিজ্ঞাপন বিরতির জন্য অনন্য একটি scte35 মান দিয়ে প্রতিস্থাপন করতে হবে, যদি একটি প্রদান করা হয়। যদি কোন scte35 তথ্যের প্রয়োজন না হয়, এই ম্যাক্রোটি একটি খালি স্ট্রিং দিয়ে প্রতিস্থাপন করা উচিত। /DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
$$token$$ একটি স্বাক্ষরিত, url-এনকোড করা HMAC টোকেন । এই টোকেন প্রয়োজন. custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9
কাঁচা সময়ের টেমপ্লেট, ম্যাক্রো সমন্বিত
<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$>
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/
  </BaseURL>
  <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">  
    <SegmentTimeline>
      <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>
    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>
জনবহুল বিজ্ঞাপন সময়কাল
<Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>

DASH ম্যানিফেস্টে আপনার জনবহুল সময় ঢোকান

অবশেষে, আপনার কাঁচা ম্যানিফেস্টের উপযুক্ত সময়টিকে নতুন জনবহুল বিজ্ঞাপন সময়কালের সাথে প্রতিস্থাপন করুন এবং প্লেব্যাকের জন্য অনুরোধকারী ভিডিও ক্লায়েন্টকে চূড়ান্ত সেলাই করা ম্যানিফেস্টটি ফিরিয়ে দিন।

উদাহরণ কাঁচা বিষয়বস্তু ম্যানিফেস্ট
<?xml version="1.0"?>
  <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" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    <Period start="PT0S">
      <AdaptationSet bitstreamSwitching="true">

        <Representation id="0" codecs="avc1" mimeType="video/mp4" width="1920" height="1080" startWithSAP="1" bandwidth="500000">
          <SegmentBase>
            <Initialization sourceURL="segments/1080/1.m4s" range="0-862"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/1080p/2.m4s" mediaRange="863-7113"/>
            <SegmentURL media="segments/1080p/3.m4s" mediaRange="7114-14104"/>
            <SegmentURL media="segments/1080p/4.m4s" mediaRange="14105-17990"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="1280" height="720" startWithSAP="1" bandwidth="250000">
          <SegmentBase>
            <Initialization sourceURL="segments/720p/1.m4s" range="0-864"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/720p/2.m4s" mediaRange="865-11523"/>
            <SegmentURL media="segments/720p/3.m4s" mediaRange="11524-25621"/>
            <SegmentURL media="segments/720p/4.m4s" mediaRange="25622-33693"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="640" height="480" startWithSAP="1" bandwidth="100000">
          <SegmentBase>
            <Initialization sourceURL="segment/480p/1.m4s" range="0-865"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segment/480p/2.m4s" mediaRange="866-26970"/>
            <SegmentURL media="segment/480p/3.m4s" mediaRange="26971-72543"/>
            <SegmentURL media="segment/480p/4.m4s" mediaRange="72544-95972"/>
            ...
          </SegmentList>
        </Representation>
        ...
      </AdaptationSet>
    </Period end>
  </MPD>
উদাহরণ সেলাই ম্যানিফেস্ট
<?xml version="1.0"?>
  <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" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    
    <Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>
    
</MPD>

অভিনন্দন! আপনি এখন DAI Pod Serving API দ্বারা প্রদত্ত বিজ্ঞাপন বিভাগগুলির সাথে একটি DASH লাইভস্ট্রিম পরিবেশন করছেন৷

অতিরিক্ত সম্পদ