পড পরিবেশন পুনঃনির্দেশের জন্য ক্লায়েন্ট প্রস্তুত করুন

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

পূর্বশর্ত

এগিয়ে যাওয়ার আগে, আপনার নিম্নলিখিত জিনিসগুলো অবশ্যই থাকতে হবে:

একটি স্ট্রিম অনুরোধ করুন

যখন আপনার ব্যবহারকারী একটি স্ট্রিম নির্বাচন করবেন, তখন নিম্নলিখিত কাজগুলো করুন:

  1. লাইভস্ট্রিম সার্ভিস মেথডে একটি POST রিকোয়েস্ট পাঠান। বিস্তারিত জানতে, Method: stream দেখুন।

  2. বিজ্ঞাপন টার্গেটিং প্যারামিটারগুলো application/x-www-form-urlencoded অথবা application/json ফরম্যাটে দিন। এই অনুরোধটি Google DAI-এর সাথে একটি স্ট্রিম সেশন নিবন্ধন করে।

    নিম্নলিখিত উদাহরণটি একটি স্ট্রিম অনুরোধ তৈরি করে:

    ফর্ম এনকোডিং

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const params = new URLSearchParams({
            cust_params: 'section=sports&page=golf,tennis'
    }).toString();
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/x-www-form-urlencoded'
            },
            body: params
    });
    
    console.log(await response.json());
    

    JSON এনকোড

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json'
            },
            body: JSON.stringify({
              cust_params: {
                section: 'sports',
                page: 'golf,tennis'
              }
            })
    });
    
    console.log(await response.json());
    

    সফল হলে, আপনি নিম্নলিখিতের অনুরূপ আউটপুট দেখতে পাবেন:

    {
    "stream_id": "c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS",
    "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata",
    "session_update_url": "https://dai.google.com/linear/.../session",
    "polling_frequency": 10
    }
    
  3. JSON রেসপন্স থেকে স্ট্রিম সেশন আইডিটি খুঁজে বের করুন এবং পরবর্তী ধাপগুলোর জন্য অন্যান্য ডেটা সংরক্ষণ করুন।

পোল বিজ্ঞাপনের মেটাডেটা

বিজ্ঞাপনের মেটাডেটা পোল করতে, নিম্নলিখিতগুলি করুন:

  1. স্ট্রিম রেজিস্ট্রেশন রেসপন্স থেকে metadata_url ভ্যালুটি পড়ুন।

  2. metadata_url এন্ডপয়েন্টে একটি প্রাথমিক GET অনুরোধ পাঠান।

    • delta_token কোয়েরি প্যারামিটারটি বাদ দিন। এই প্রক্রিয়ার মাধ্যমে সার্ভার স্ট্রিমের ডিজিটাল ভিডিও রেকর্ডার (DVR) উইন্ডোর সম্পূর্ণ মেটাডেটা ফেরত দিতে পারে। DVR উইন্ডোতে সম্প্রচারের সেই সময়কাল থাকে যা একজন দর্শক রিওয়াইন্ড করে প্লে করতে পারেন। রেসপন্সে একটি next_delta_token ফিল্ড অন্তর্ভুক্ত থাকে।
  3. ব্যান্ডউইথ অপ্টিমাইজ করতে, সর্বশেষ রেসপন্স থেকে next_delta_token ভ্যালুটি স্টোর করুন।

  4. আপনার পরবর্তী অনুরোধে, সেই মানটি delta_token কোয়েরি প্যারামিটার হিসেবে পাঠান। সার্ভার শুধুমাত্র সেই মেটাডেটা ফেরত দেয় যা টোকেনটি তৈরি হওয়ার পর থেকে পরিবর্তিত হয়েছে। সর্বদা আপনার প্রাপ্ত সর্বশেষ টোকেনটি পাঠান। টোকেনটি পার্স, পরিবর্তন বা তৈরি করার চেষ্টা করবেন না। বিস্তারিত জানতে, Method: metadata দেখুন।

    নিম্নলিখিত উদাহরণটি বিজ্ঞাপনের মেটাডেটা সংগ্রহ করে:

    // Initial request (returns full metadata and next_delta_token)
    let response = await fetch(metadata_url);
    let metadata = await response.json();
    let deltaToken = metadata.next_delta_token;
    
    // Subsequent request (returns only changes since deltaToken)
    if (deltaToken) {
      const url = new URL(metadata_url);
      url.searchParams.append('delta_token', deltaToken);
      response = await fetch(url.toString());
      const deltaMetadata = await response.json();
      // Merge deltaMetadata into your local cache
      mergeMetadata(metadata, deltaMetadata);
      deltaToken = deltaMetadata.next_delta_token;
    }
    

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

    {
      "next_delta_token": "eyJyYW5nZXMiOlt7InMiOjEsImUiOjN9XX0",
      "obsolete_ad_break_ids": ["0003069407"],
      "tags":{
        "google_1022389921":{
          "ad":"0003069408_ad1",
          "ad_break_id":"0003069408",
          "type":"start"
        },
        ...
      },
      "ads":{
        "0003069408_ad1":{
          "ad_break_id":"0003069408",
          "position":1,
          "duration":10.01,
          "title":"External - Pod Midroll 1",
          "clickthrough_url":"https://.../",
          ...
        },
        ...
      },
      "ad_breaks":{
        "0003069408":{
          "type":"mid",
          "duration":30,
          "ads":3
        },
        ...
      }
    }
    
  5. tags অবজেক্টটি সংরক্ষণ করুন এবং আপডেটগুলি আপনার স্থানীয় ক্যাশে মার্জ করুন। যদি obsolete_ad_break_ids প্যারামিটারটি উপস্থিত থাকে, তাহলে আপনার ক্যাশে থেকে সেই অ্যাড ব্রেক এবং সংশ্লিষ্ট বিজ্ঞাপন ও ট্যাগগুলি সরিয়ে ফেলুন।

  6. নিয়মিত মেটাডেটা অনুরোধ করার জন্য polling_frequency ভ্যালুটি ব্যবহার করে একটি টাইমার সেট করুন। প্রতিটি পোলে, সর্বশেষ মেটাডেটা রেসপন্সে প্রাপ্ত next_delta_token ভ্যালুটি delta_token কোয়েরি প্যারামিটার হিসেবে পাঠান।

আপনার ভিডিও প্লেয়ারে স্ট্রিমটি লোড করুন

রেজিস্ট্রেশন রেসপন্স থেকে সেশন আইডি পাওয়ার পর, সেই আইডিটি আপনার ম্যানিফেস্ট ম্যানিপুলেটরে পাঠান, অথবা ভিডিও প্লেয়ারে স্ট্রিমটি লোড করার জন্য একটি ম্যানিফেস্ট ইউআরএল তৈরি করুন।

সেশন আইডি পাস করার জন্য, আপনার ম্যানিফেস্ট ম্যানিপুলেটরের ডকুমেন্টেশন দেখুন। আপনি যদি একটি ম্যানিফেস্ট ম্যানিপুলেটর তৈরি করেন, তবে ‘লাইভস্ট্রিমের জন্য ম্যানিফেস্ট ম্যানিপুলেটর’ দেখুন।

নিম্নলিখিত উদাহরণটি একটি ম্যানিফেস্ট ইউআরএল তৈরি করে:

https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"

আপনার প্লেয়ার প্রস্তুত হলে, প্লেব্যাক শুরু করুন।

বিজ্ঞাপনের ইভেন্টগুলির জন্য শুনুন

টাইমড মেটাডেটার জন্য আপনার স্ট্রিমের কন্টেইনার ফরম্যাট চেক করুন:

  • ট্রান্সপোর্ট স্ট্রিম (TS) কন্টেইনার সহ HLS স্ট্রিমগুলি সময়ভিত্তিক মেটাডেটা বহন করার জন্য সময়ভিত্তিক ID3 ট্যাগ ব্যবহার করে। বিস্তারিত জানতে, HTTP লাইভ স্ট্রিমিং (HLS) সহ কমন মিডিয়া অ্যাপ্লিকেশন ফরম্যাট সম্পর্কে দেখুন।

  • DASH স্ট্রিমগুলো ম্যানিফেস্টে ইভেন্ট নির্দিষ্ট করার জন্য EventStream এলিমেন্ট ব্যবহার করে।

  • যখন সেগমেন্টগুলিতে পেলোড ডেটার জন্য ইভেন্ট মেসেজ ( emsg ) বক্স থাকে, যার মধ্যে ID3 ট্যাগও অন্তর্ভুক্ত, তখন DASH স্ট্রিমগুলি InbandEventStream এলিমেন্ট ব্যবহার করে। বিস্তারিত জানতে, InbandEventStream দেখুন।

  • DASH এবং HLS সহ CMAF স্ট্রিমগুলি ID3 ট্যাগযুক্ত emsg বক্স ব্যবহার করে।

আপনার স্ট্রিম থেকে ID3 ট্যাগ পুনরুদ্ধার করতে, আপনার ভিডিও প্লেয়ারের নির্দেশিকা দেখুন। বিস্তারিত জানতে, 'হ্যান্ডেল টাইমড মেটাডেটা গাইড' দেখুন।

ID3 ট্যাগ থেকে বিজ্ঞাপন ইভেন্ট আইডি পুনরুদ্ধার করতে, নিম্নলিখিতগুলি করুন:

  1. urn:google:dai:2018 অথবা https://aomedia.org/emsg/ID3 ব্যবহার করে scheme_id_uri অনুযায়ী ইভেন্টগুলো ফিল্টার করুন।
  2. message_data ফিল্ড থেকে বাইট অ্যারেটি বের করুন।

    নিম্নলিখিত উদাহরণটি emsg ডেটাকে JSON-এ ডিকোড করে:

    {
      "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
      "presentation_time": 27554,
      "timescale": 1000,
      "message_data": "ID3TXXXgoogle_1022389921",
      ...
    }
    
  3. TXXXgoogle_{ad_event_ID} ফরম্যাট ব্যবহার করে ID3 ট্যাগগুলো ফিল্টার করুন:

    TXXXgoogle_1022389921
    

বিজ্ঞাপন ইভেন্টের ডেটা দেখান

TagSegment অবজেক্টটি খুঁজে পেতে, নিম্নলিখিতগুলি করুন:

  1. 'Poll ad metadata' থেকে বিজ্ঞাপনের মেটাডেটা tags অবজেক্টটি পুনরুদ্ধার করুন। tags অবজেক্টটি হলো TagSegment অবজেক্টের একটি অ্যারে।

  2. ' progress টাইপের একটি TagSegment অবজেক্ট খুঁজে পেতে সম্পূর্ণ বিজ্ঞাপন ইভেন্ট আইডিটি ব্যবহার করুন।

  3. অন্যান্য ধরনের TagSegment অবজেক্ট খুঁজে পেতে অ্যাড ইভেন্ট আইডির প্রথম ১৭টি অক্ষর ব্যবহার করুন।

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

  4. TagSegment পাওয়ার পর, বিজ্ঞাপনের মেটাডেটার ad_breaks অবজেক্টের মধ্যে AdBreak অবজেক্টটি খুঁজে বের করার জন্য ad_break_id প্রপার্টিটিকে কী (key) হিসেবে ব্যবহার করুন।

    নিম্নলিখিত উদাহরণটি একটি AdBreak অবজেক্ট খুঁজে বের করে:

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. অ্যাড ব্রেকে বিজ্ঞাপনের অবস্থান সম্পর্কে তথ্য দেখানোর জন্য TagSegment এবং AdBreak ডেটা ব্যবহার করুন। উদাহরণস্বরূপ, Ad 1 of 3 ।

মিডিয়া যাচাইকরণ পিং পাঠান

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

একটি বিজ্ঞাপন ইভেন্টের সম্পূর্ণ মিডিয়া যাচাইকরণ URL তৈরি করতে, নিম্নলিখিতগুলি করুন:

  1. স্ট্রিম রেসপন্স থেকে, সম্পূর্ণ অ্যাড ইভেন্ট আইডিটি media_verification_url ভ্যালুর সাথে যুক্ত করুন।

  2. সম্পূর্ণ URL সহ একটি GET অনুরোধ পাঠান:

    // media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/"
    const completeUrl = `${media_verification_url}google_1022389921`;
    
    const response = await fetch(completeUrl);
    

    সফল হলে, আপনি একটি কোড স্ট্যাটাস 202 রেসপন্স পাবেন। অন্যথায়, আপনি একটি 404 এরর কোড পাবেন।

আপনি সমস্ত বিজ্ঞাপন ইভেন্টের ঐতিহাসিক লগ পরিদর্শন করতে স্ট্রিম অ্যাক্টিভিটি মনিটর (SAM) ব্যবহার করতে পারেন। বিস্তারিত জানার জন্য, একটি লাইভস্ট্রিম মনিটর এবং ট্রাবলশুট করুন দেখুন।

,

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

পূর্বশর্ত

এগিয়ে যাওয়ার আগে, আপনার নিম্নলিখিত জিনিসগুলো অবশ্যই থাকতে হবে:

একটি স্ট্রিম অনুরোধ করুন

যখন আপনার ব্যবহারকারী একটি স্ট্রিম নির্বাচন করবেন, তখন নিম্নলিখিত কাজগুলো করুন:

  1. লাইভস্ট্রিম সার্ভিস মেথডে একটি POST রিকোয়েস্ট পাঠান। বিস্তারিত জানতে, Method: stream দেখুন।

  2. বিজ্ঞাপন টার্গেটিং প্যারামিটারগুলো application/x-www-form-urlencoded অথবা application/json ফরম্যাটে দিন। এই অনুরোধটি Google DAI-এর সাথে একটি স্ট্রিম সেশন নিবন্ধন করে।

    নিম্নলিখিত উদাহরণটি একটি স্ট্রিম অনুরোধ তৈরি করে:

    ফর্ম এনকোডিং

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const params = new URLSearchParams({
            cust_params: 'section=sports&page=golf,tennis'
    }).toString();
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/x-www-form-urlencoded'
            },
            body: params
    });
    
    console.log(await response.json());
    

    JSON এনকোড

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json'
            },
            body: JSON.stringify({
              cust_params: {
                section: 'sports',
                page: 'golf,tennis'
              }
            })
    });
    
    console.log(await response.json());
    

    সফল হলে, আপনি নিম্নলিখিতের অনুরূপ আউটপুট দেখতে পাবেন:

    {
    "stream_id": "c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS",
    "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata",
    "session_update_url": "https://dai.google.com/linear/.../session",
    "polling_frequency": 10
    }
    
  3. JSON রেসপন্স থেকে স্ট্রিম সেশন আইডিটি খুঁজে বের করুন এবং পরবর্তী ধাপগুলোর জন্য অন্যান্য ডেটা সংরক্ষণ করুন।

পোল বিজ্ঞাপনের মেটাডেটা

বিজ্ঞাপনের মেটাডেটা পোল করতে, নিম্নলিখিতগুলি করুন:

  1. স্ট্রিম রেজিস্ট্রেশন রেসপন্স থেকে metadata_url ভ্যালুটি পড়ুন।

  2. metadata_url এন্ডপয়েন্টে একটি প্রাথমিক GET অনুরোধ পাঠান।

    • delta_token কোয়েরি প্যারামিটারটি বাদ দিন। এই প্রক্রিয়ার মাধ্যমে সার্ভার স্ট্রিমের ডিজিটাল ভিডিও রেকর্ডার (DVR) উইন্ডোর সম্পূর্ণ মেটাডেটা ফেরত দিতে পারে। DVR উইন্ডোতে সম্প্রচারের সেই সময়কাল থাকে যা একজন দর্শক রিওয়াইন্ড করে প্লে করতে পারেন। রেসপন্সে একটি next_delta_token ফিল্ড অন্তর্ভুক্ত থাকে।
  3. ব্যান্ডউইথ অপ্টিমাইজ করতে, সর্বশেষ রেসপন্স থেকে next_delta_token ভ্যালুটি স্টোর করুন।

  4. আপনার পরবর্তী অনুরোধে, সেই মানটি delta_token কোয়েরি প্যারামিটার হিসেবে পাঠান। সার্ভার শুধুমাত্র সেই মেটাডেটা ফেরত দেয় যা টোকেনটি তৈরি হওয়ার পর থেকে পরিবর্তিত হয়েছে। সর্বদা আপনার প্রাপ্ত সর্বশেষ টোকেনটি পাঠান। টোকেনটি পার্স, পরিবর্তন বা তৈরি করার চেষ্টা করবেন না। বিস্তারিত জানতে, Method: metadata দেখুন।

    নিম্নলিখিত উদাহরণটি বিজ্ঞাপনের মেটাডেটা সংগ্রহ করে:

    // Initial request (returns full metadata and next_delta_token)
    let response = await fetch(metadata_url);
    let metadata = await response.json();
    let deltaToken = metadata.next_delta_token;
    
    // Subsequent request (returns only changes since deltaToken)
    if (deltaToken) {
      const url = new URL(metadata_url);
      url.searchParams.append('delta_token', deltaToken);
      response = await fetch(url.toString());
      const deltaMetadata = await response.json();
      // Merge deltaMetadata into your local cache
      mergeMetadata(metadata, deltaMetadata);
      deltaToken = deltaMetadata.next_delta_token;
    }
    

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

    {
      "next_delta_token": "eyJyYW5nZXMiOlt7InMiOjEsImUiOjN9XX0",
      "obsolete_ad_break_ids": ["0003069407"],
      "tags":{
        "google_1022389921":{
          "ad":"0003069408_ad1",
          "ad_break_id":"0003069408",
          "type":"start"
        },
        ...
      },
      "ads":{
        "0003069408_ad1":{
          "ad_break_id":"0003069408",
          "position":1,
          "duration":10.01,
          "title":"External - Pod Midroll 1",
          "clickthrough_url":"https://.../",
          ...
        },
        ...
      },
      "ad_breaks":{
        "0003069408":{
          "type":"mid",
          "duration":30,
          "ads":3
        },
        ...
      }
    }
    
  5. tags অবজেক্টটি সংরক্ষণ করুন এবং আপডেটগুলি আপনার স্থানীয় ক্যাশে মার্জ করুন। যদি obsolete_ad_break_ids প্যারামিটারটি উপস্থিত থাকে, তাহলে আপনার ক্যাশে থেকে সেই অ্যাড ব্রেক এবং সংশ্লিষ্ট বিজ্ঞাপন ও ট্যাগগুলি সরিয়ে ফেলুন।

  6. নিয়মিত মেটাডেটা অনুরোধ করার জন্য polling_frequency ভ্যালুটি ব্যবহার করে একটি টাইমার সেট করুন। প্রতিটি পোলে, সর্বশেষ মেটাডেটা রেসপন্সে প্রাপ্ত next_delta_token ভ্যালুটি delta_token কোয়েরি প্যারামিটার হিসেবে পাঠান।

আপনার ভিডিও প্লেয়ারে স্ট্রিমটি লোড করুন

রেজিস্ট্রেশন রেসপন্স থেকে সেশন আইডি পাওয়ার পর, সেই আইডিটি আপনার ম্যানিফেস্ট ম্যানিপুলেটরে পাঠান, অথবা ভিডিও প্লেয়ারে স্ট্রিমটি লোড করার জন্য একটি ম্যানিফেস্ট ইউআরএল তৈরি করুন।

সেশন আইডি পাস করার জন্য, আপনার ম্যানিফেস্ট ম্যানিপুলেটরের ডকুমেন্টেশন দেখুন। আপনি যদি একটি ম্যানিফেস্ট ম্যানিপুলেটর তৈরি করেন, তবে ‘লাইভস্ট্রিমের জন্য ম্যানিফেস্ট ম্যানিপুলেটর’ দেখুন।

নিম্নলিখিত উদাহরণটি একটি ম্যানিফেস্ট ইউআরএল তৈরি করে:

https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"

আপনার প্লেয়ার প্রস্তুত হলে, প্লেব্যাক শুরু করুন।

বিজ্ঞাপনের ইভেন্টগুলির জন্য শুনুন

টাইমড মেটাডেটার জন্য আপনার স্ট্রিমের কন্টেইনার ফরম্যাট চেক করুন:

  • ট্রান্সপোর্ট স্ট্রিম (TS) কন্টেইনার সহ HLS স্ট্রিমগুলি সময়ভিত্তিক মেটাডেটা বহন করার জন্য সময়ভিত্তিক ID3 ট্যাগ ব্যবহার করে। বিস্তারিত জানতে, HTTP লাইভ স্ট্রিমিং (HLS) সহ কমন মিডিয়া অ্যাপ্লিকেশন ফরম্যাট সম্পর্কে দেখুন।

  • DASH স্ট্রিমগুলো ম্যানিফেস্টে ইভেন্ট নির্দিষ্ট করার জন্য EventStream এলিমেন্ট ব্যবহার করে।

  • যখন সেগমেন্টগুলিতে পেলোড ডেটার জন্য ইভেন্ট মেসেজ ( emsg ) বক্স থাকে, যার মধ্যে ID3 ট্যাগও অন্তর্ভুক্ত, তখন DASH স্ট্রিমগুলি InbandEventStream এলিমেন্ট ব্যবহার করে। বিস্তারিত জানতে, InbandEventStream দেখুন।

  • DASH এবং HLS সহ CMAF স্ট্রিমগুলি ID3 ট্যাগযুক্ত emsg বক্স ব্যবহার করে।

আপনার স্ট্রিম থেকে ID3 ট্যাগ পুনরুদ্ধার করতে, আপনার ভিডিও প্লেয়ারের নির্দেশিকা দেখুন। বিস্তারিত জানতে, 'হ্যান্ডেল টাইমড মেটাডেটা গাইড' দেখুন।

ID3 ট্যাগ থেকে বিজ্ঞাপন ইভেন্ট আইডি পুনরুদ্ধার করতে, নিম্নলিখিতগুলি করুন:

  1. urn:google:dai:2018 অথবা https://aomedia.org/emsg/ID3 ব্যবহার করে scheme_id_uri অনুযায়ী ইভেন্টগুলো ফিল্টার করুন।
  2. message_data ফিল্ড থেকে বাইট অ্যারেটি বের করুন।

    নিম্নলিখিত উদাহরণটি emsg ডেটাকে JSON-এ ডিকোড করে:

    {
      "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
      "presentation_time": 27554,
      "timescale": 1000,
      "message_data": "ID3TXXXgoogle_1022389921",
      ...
    }
    
  3. TXXXgoogle_{ad_event_ID} ফরম্যাট ব্যবহার করে ID3 ট্যাগগুলো ফিল্টার করুন:

    TXXXgoogle_1022389921
    

বিজ্ঞাপন ইভেন্টের ডেটা দেখান

TagSegment অবজেক্টটি খুঁজে পেতে, নিম্নলিখিতগুলি করুন:

  1. 'Poll ad metadata' থেকে বিজ্ঞাপনের মেটাডেটা tags অবজেক্টটি পুনরুদ্ধার করুন। tags অবজেক্টটি হলো TagSegment অবজেক্টের একটি অ্যারে।

  2. ' progress টাইপের একটি TagSegment অবজেক্ট খুঁজে পেতে সম্পূর্ণ বিজ্ঞাপন ইভেন্ট আইডিটি ব্যবহার করুন।

  3. অন্যান্য ধরনের TagSegment অবজেক্ট খুঁজে পেতে অ্যাড ইভেন্ট আইডির প্রথম ১৭টি অক্ষর ব্যবহার করুন।

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

  4. TagSegment পাওয়ার পর, বিজ্ঞাপনের মেটাডেটার ad_breaks অবজেক্টের মধ্যে AdBreak অবজেক্টটি খুঁজে বের করার জন্য ad_break_id প্রপার্টিটিকে কী (key) হিসেবে ব্যবহার করুন।

    নিম্নলিখিত উদাহরণটি একটি AdBreak অবজেক্ট খুঁজে বের করে:

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. অ্যাড ব্রেকে বিজ্ঞাপনের অবস্থান সম্পর্কে তথ্য দেখানোর জন্য TagSegment এবং AdBreak ডেটা ব্যবহার করুন। উদাহরণস্বরূপ, Ad 1 of 3 ।

মিডিয়া যাচাইকরণ পিং পাঠান

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

একটি বিজ্ঞাপন ইভেন্টের সম্পূর্ণ মিডিয়া যাচাইকরণ URL তৈরি করতে, নিম্নলিখিতগুলি করুন:

  1. স্ট্রিম রেসপন্স থেকে, সম্পূর্ণ অ্যাড ইভেন্ট আইডিটি media_verification_url ভ্যালুর সাথে যুক্ত করুন।

  2. সম্পূর্ণ URL সহ একটি GET অনুরোধ পাঠান:

    // media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/"
    const completeUrl = `${media_verification_url}google_1022389921`;
    
    const response = await fetch(completeUrl);
    

    সফল হলে, আপনি একটি কোড স্ট্যাটাস 202 রেসপন্স পাবেন। অন্যথায়, আপনি একটি 404 এরর কোড পাবেন।

আপনি সমস্ত বিজ্ঞাপন ইভেন্টের ঐতিহাসিক লগ পরিদর্শন করতে স্ট্রিম অ্যাক্টিভিটি মনিটর (SAM) ব্যবহার করতে পারেন। বিস্তারিত জানার জন্য, একটি লাইভস্ট্রিম মনিটর এবং ট্রাবলশুট করুন দেখুন।

,

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

পূর্বশর্ত

এগিয়ে যাওয়ার আগে, আপনার নিম্নলিখিত জিনিসগুলো অবশ্যই থাকতে হবে:

একটি স্ট্রিম অনুরোধ করুন

যখন আপনার ব্যবহারকারী একটি স্ট্রিম নির্বাচন করবেন, তখন নিম্নলিখিত কাজগুলো করুন:

  1. লাইভস্ট্রিম সার্ভিস মেথডে একটি POST রিকোয়েস্ট পাঠান। বিস্তারিত জানতে, Method: stream দেখুন।

  2. বিজ্ঞাপন টার্গেটিং প্যারামিটারগুলো application/x-www-form-urlencoded অথবা application/json ফরম্যাটে দিন। এই অনুরোধটি Google DAI-এর সাথে একটি স্ট্রিম সেশন নিবন্ধন করে।

    নিম্নলিখিত উদাহরণটি একটি স্ট্রিম অনুরোধ তৈরি করে:

    ফর্ম এনকোডিং

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const params = new URLSearchParams({
            cust_params: 'section=sports&page=golf,tennis'
    }).toString();
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/x-www-form-urlencoded'
            },
            body: params
    });
    
    console.log(await response.json());
    

    JSON এনকোড

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json'
            },
            body: JSON.stringify({
              cust_params: {
                section: 'sports',
                page: 'golf,tennis'
              }
            })
    });
    
    console.log(await response.json());
    

    সফল হলে, আপনি নিম্নলিখিতের অনুরূপ আউটপুট দেখতে পাবেন:

    {
    "stream_id": "c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb:DLS",
    "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata",
    "session_update_url": "https://dai.google.com/linear/.../session",
    "polling_frequency": 10
    }
    
  3. JSON রেসপন্স থেকে স্ট্রিম সেশন আইডিটি খুঁজে বের করুন এবং পরবর্তী ধাপগুলোর জন্য অন্যান্য ডেটা সংরক্ষণ করুন।

পোল বিজ্ঞাপনের মেটাডেটা

বিজ্ঞাপনের মেটাডেটা পোল করতে, নিম্নলিখিতগুলি করুন:

  1. স্ট্রিম রেজিস্ট্রেশন রেসপন্স থেকে metadata_url ভ্যালুটি পড়ুন।

  2. metadata_url এন্ডপয়েন্টে একটি প্রাথমিক GET অনুরোধ পাঠান।

    • delta_token কোয়েরি প্যারামিটারটি বাদ দিন। এই প্রক্রিয়ার মাধ্যমে সার্ভার স্ট্রিমের ডিজিটাল ভিডিও রেকর্ডার (DVR) উইন্ডোর সম্পূর্ণ মেটাডেটা ফেরত দিতে পারে। DVR উইন্ডোতে সম্প্রচারের সেই সময়কাল থাকে যা একজন দর্শক রিওয়াইন্ড করে প্লে করতে পারেন। রেসপন্সে একটি next_delta_token ফিল্ড অন্তর্ভুক্ত থাকে।
  3. ব্যান্ডউইথ অপ্টিমাইজ করতে, সর্বশেষ রেসপন্স থেকে next_delta_token ভ্যালুটি স্টোর করুন।

  4. আপনার পরবর্তী অনুরোধে, সেই মানটি delta_token কোয়েরি প্যারামিটার হিসেবে পাঠান। সার্ভার শুধুমাত্র সেই মেটাডেটা ফেরত দেয় যা টোকেনটি তৈরি হওয়ার পর থেকে পরিবর্তিত হয়েছে। সর্বদা আপনার প্রাপ্ত সর্বশেষ টোকেনটি পাঠান। টোকেনটি পার্স, পরিবর্তন বা তৈরি করার চেষ্টা করবেন না। বিস্তারিত জানতে, Method: metadata দেখুন।

    নিম্নলিখিত উদাহরণটি বিজ্ঞাপনের মেটাডেটা সংগ্রহ করে:

    // Initial request (returns full metadata and next_delta_token)
    let response = await fetch(metadata_url);
    let metadata = await response.json();
    let deltaToken = metadata.next_delta_token;
    
    // Subsequent request (returns only changes since deltaToken)
    if (deltaToken) {
      const url = new URL(metadata_url);
      url.searchParams.append('delta_token', deltaToken);
      response = await fetch(url.toString());
      const deltaMetadata = await response.json();
      // Merge deltaMetadata into your local cache
      mergeMetadata(metadata, deltaMetadata);
      deltaToken = deltaMetadata.next_delta_token;
    }
    

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

    {
      "next_delta_token": "eyJyYW5nZXMiOlt7InMiOjEsImUiOjN9XX0",
      "obsolete_ad_break_ids": ["0003069407"],
      "tags":{
        "google_1022389921":{
          "ad":"0003069408_ad1",
          "ad_break_id":"0003069408",
          "type":"start"
        },
        ...
      },
      "ads":{
        "0003069408_ad1":{
          "ad_break_id":"0003069408",
          "position":1,
          "duration":10.01,
          "title":"External - Pod Midroll 1",
          "clickthrough_url":"https://.../",
          ...
        },
        ...
      },
      "ad_breaks":{
        "0003069408":{
          "type":"mid",
          "duration":30,
          "ads":3
        },
        ...
      }
    }
    
  5. tags অবজেক্টটি সংরক্ষণ করুন এবং আপডেটগুলি আপনার স্থানীয় ক্যাশে মার্জ করুন। যদি obsolete_ad_break_ids প্যারামিটারটি উপস্থিত থাকে, তাহলে আপনার ক্যাশে থেকে সেই অ্যাড ব্রেক এবং সংশ্লিষ্ট বিজ্ঞাপন ও ট্যাগগুলি সরিয়ে ফেলুন।

  6. নিয়মিত মেটাডেটা অনুরোধ করার জন্য polling_frequency ভ্যালুটি ব্যবহার করে একটি টাইমার সেট করুন। প্রতিটি পোলে, সর্বশেষ মেটাডেটা রেসপন্সে প্রাপ্ত next_delta_token ভ্যালুটি delta_token কোয়েরি প্যারামিটার হিসেবে পাঠান।

আপনার ভিডিও প্লেয়ারে স্ট্রিমটি লোড করুন

রেজিস্ট্রেশন রেসপন্স থেকে সেশন আইডি পাওয়ার পর, সেই আইডিটি আপনার ম্যানিফেস্ট ম্যানিপুলেটরে পাঠান, অথবা ভিডিও প্লেয়ারে স্ট্রিমটি লোড করার জন্য একটি ম্যানিফেস্ট ইউআরএল তৈরি করুন।

সেশন আইডি পাস করার জন্য, আপনার ম্যানিফেস্ট ম্যানিপুলেটরের ডকুমেন্টেশন দেখুন। আপনি যদি একটি ম্যানিফেস্ট ম্যানিপুলেটর তৈরি করেন, তবে ‘লাইভস্ট্রিমের জন্য ম্যানিফেস্ট ম্যানিপুলেটর’ দেখুন।

নিম্নলিখিত উদাহরণটি একটি ম্যানিফেস্ট ইউআরএল তৈরি করে:

https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"

আপনার প্লেয়ার প্রস্তুত হলে, প্লেব্যাক শুরু করুন।

বিজ্ঞাপনের ইভেন্টগুলির জন্য শুনুন

টাইমড মেটাডেটার জন্য আপনার স্ট্রিমের কন্টেইনার ফরম্যাট চেক করুন:

  • ট্রান্সপোর্ট স্ট্রিম (TS) কন্টেইনার সহ HLS স্ট্রিমগুলি সময়ভিত্তিক মেটাডেটা বহন করার জন্য সময়ভিত্তিক ID3 ট্যাগ ব্যবহার করে। বিস্তারিত জানতে, HTTP লাইভ স্ট্রিমিং (HLS) সহ কমন মিডিয়া অ্যাপ্লিকেশন ফরম্যাট সম্পর্কে দেখুন।

  • DASH স্ট্রিমগুলো ম্যানিফেস্টে ইভেন্ট নির্দিষ্ট করার জন্য EventStream এলিমেন্ট ব্যবহার করে।

  • যখন সেগমেন্টগুলিতে পেলোড ডেটার জন্য ইভেন্ট মেসেজ ( emsg ) বক্স থাকে, যার মধ্যে ID3 ট্যাগও অন্তর্ভুক্ত, তখন DASH স্ট্রিমগুলি InbandEventStream এলিমেন্ট ব্যবহার করে। বিস্তারিত জানতে, InbandEventStream দেখুন।

  • DASH এবং HLS সহ CMAF স্ট্রিমগুলি ID3 ট্যাগযুক্ত emsg বক্স ব্যবহার করে।

আপনার স্ট্রিম থেকে ID3 ট্যাগ পুনরুদ্ধার করতে, আপনার ভিডিও প্লেয়ারের নির্দেশিকা দেখুন। বিস্তারিত জানতে, 'হ্যান্ডেল টাইমড মেটাডেটা গাইড' দেখুন।

ID3 ট্যাগ থেকে বিজ্ঞাপন ইভেন্ট আইডি পুনরুদ্ধার করতে, নিম্নলিখিতগুলি করুন:

  1. urn:google:dai:2018 অথবা https://aomedia.org/emsg/ID3 ব্যবহার করে scheme_id_uri অনুযায়ী ইভেন্টগুলো ফিল্টার করুন।
  2. message_data ফিল্ড থেকে বাইট অ্যারেটি বের করুন।

    নিম্নলিখিত উদাহরণটি emsg ডেটাকে JSON-এ ডিকোড করে:

    {
      "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
      "presentation_time": 27554,
      "timescale": 1000,
      "message_data": "ID3TXXXgoogle_1022389921",
      ...
    }
    
  3. TXXXgoogle_{ad_event_ID} ফরম্যাট ব্যবহার করে ID3 ট্যাগগুলো ফিল্টার করুন:

    TXXXgoogle_1022389921
    

বিজ্ঞাপন ইভেন্টের ডেটা দেখান

TagSegment অবজেক্টটি খুঁজে পেতে, নিম্নলিখিতগুলি করুন:

  1. 'Poll ad metadata' থেকে বিজ্ঞাপনের মেটাডেটা tags অবজেক্টটি পুনরুদ্ধার করুন। tags অবজেক্টটি হলো TagSegment অবজেক্টের একটি অ্যারে।

  2. ' progress টাইপের একটি TagSegment অবজেক্ট খুঁজে পেতে সম্পূর্ণ বিজ্ঞাপন ইভেন্ট আইডিটি ব্যবহার করুন।

  3. অন্যান্য ধরনের TagSegment অবজেক্ট খুঁজে পেতে অ্যাড ইভেন্ট আইডির প্রথম ১৭টি অক্ষর ব্যবহার করুন।

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

  4. TagSegment পাওয়ার পর, বিজ্ঞাপনের মেটাডেটার ad_breaks অবজেক্টের মধ্যে AdBreak অবজেক্টটি খুঁজে বের করার জন্য ad_break_id প্রপার্টিটিকে কী (key) হিসেবে ব্যবহার করুন।

    নিম্নলিখিত উদাহরণটি একটি AdBreak অবজেক্ট খুঁজে বের করে:

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. অ্যাড ব্রেকে বিজ্ঞাপনের অবস্থান সম্পর্কে তথ্য দেখানোর জন্য TagSegment এবং AdBreak ডেটা ব্যবহার করুন। উদাহরণস্বরূপ, Ad 1 of 3 ।

মিডিয়া যাচাইকরণ পিং পাঠান

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

একটি বিজ্ঞাপন ইভেন্টের সম্পূর্ণ মিডিয়া যাচাইকরণ URL তৈরি করতে, নিম্নলিখিতগুলি করুন:

  1. স্ট্রিম রেসপন্স থেকে, সম্পূর্ণ অ্যাড ইভেন্ট আইডিটি media_verification_url ভ্যালুর সাথে যুক্ত করুন।

  2. সম্পূর্ণ URL সহ একটি GET অনুরোধ পাঠান:

    // media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/"
    const completeUrl = `${media_verification_url}google_1022389921`;
    
    const response = await fetch(completeUrl);
    

    সফল হলে, আপনি একটি কোড স্ট্যাটাস 202 রেসপন্স পাবেন। অন্যথায়, আপনি একটি 404 এরর কোড পাবেন।

আপনি সমস্ত বিজ্ঞাপন ইভেন্টের ঐতিহাসিক লগ পরিদর্শন করতে স্ট্রিম অ্যাক্টিভিটি মনিটর (SAM) ব্যবহার করতে পারেন। বিস্তারিত জানার জন্য, একটি লাইভস্ট্রিম মনিটর এবং ট্রাবলশুট করুন দেখুন।