ওয়েব রিসিভারে মাইগ্রেট করুন

এই নির্দেশিকাটি ব্যাখ্যা করে যে কীভাবে একটি কাস্ট রিসিভার v2 অ্যাপকে সর্বশেষ ওয়েব রিসিভার অ্যাপে স্থানান্তর করা যায়।

নতুন কাস্ট অ্যাপ্লিকেশন ফ্রেমওয়ার্ক (CAF) SDK, ওয়েব রিসিভার v3 নামেও পরিচিত, রিসিভার v2 SDK থেকে একটি বড় আপগ্রেড। ওয়েব রিসিভার SDK মিডিয়া ওয়েব রিসিভার অ্যাপ্লিকেশন বিকাশের জন্য একটি সহজ, সুগমিত SDK প্রদান করে৷

ওয়েব রিসিভার একটি API প্রদান করে যা নতুন CAF প্রেরক APIগুলির সাথে আরও সামঞ্জস্যপূর্ণ। এটি একটি প্লেয়ারের (এমপিএল এবং শাকা) সম্পূর্ণ একীকরণ এবং কাস্ট মিডিয়া এবং Google সহকারী ভয়েস কমান্ডের জন্য সম্পূর্ণ বাস্তবায়ন এবং সমর্থন প্রদান করে। CAF SDK একটি ডিফল্ট UI প্রদান করে যা সহজে CSS ব্যবহার করে স্টাইল করা যায়, এবং UI বাস্তবায়নকে সহজ করার জন্য একটি ডেটা বাইন্ডিং পরিষেবা।

কেন দেশান্তর?

ওয়েব রিসিভারে একটি রিসিভার v2 অ্যাপ্লিকেশন স্থানান্তর করার মাধ্যমে, প্লেয়ারের সাথে সম্পর্কিত অনেক কোড বাদ দেওয়া যেতে পারে, যাতে আপনি অ্যাপ্লিকেশন-নির্দিষ্ট ব্যবসায়িক যুক্তি লেখার দিকে মনোনিবেশ করতে পারেন।

CAF নিরবিচ্ছিন্নভাবে MPL এবং Shaka প্লেয়ারকে একীভূত করে বিস্তৃত ধরনের বিষয়বস্তুকে সমর্থন করার জন্য যার মধ্যে রয়েছে—HTTP লাইভ স্ট্রিমিং (TS এবং CMAF), MPEG-DASH, স্মুথ স্ট্রিমিং এবং মিডিয়া এলিমেন্ট সোর্স প্রপার্টি (MP3, MP4, Icecast, ইত্যাদি) দ্বারা সমর্থিত প্রকার। ..) একটি সম্পূর্ণ তালিকার জন্য Google Cast এর জন্য সমর্থিত মিডিয়া দেখুন। বর্তমানে CAF ব্যবহারকারী-প্রদত্ত প্লেয়ারকে সমর্থন করে না।

CAF-তে স্থানান্তরিত হলে Google Assistant-এর সাথে ভয়েস নিয়ন্ত্রণের জন্য সমর্থন যোগ হবে। CAF ব্যবহার করার সময় যেকোনো নতুন Google Assistant ভয়েস কমান্ড স্বয়ংক্রিয়ভাবে সমর্থিত হবে।

নতুন মিডিয়া কমান্ডগুলিকে সমর্থন করার পাশাপাশি — যেমন "ভাষা অনুসারে ট্র্যাকগুলি পরিবর্তন করুন" এবং "প্লেব্যাকের হার পরিবর্তন করুন"—CAF আরও ভাল সারিবদ্ধ, অন্তর্নির্মিত বিজ্ঞাপন সমর্থন এবং আরও ভাল লাইভ সমর্থন প্রদান করে৷

কি পরিবর্তন হয়েছে?

ওয়েব রিসিভার এপিআই সেই কনভেনশনগুলি অনুসরণ করার চেষ্টা করে যা CAF প্রেরকদের দ্বারা Android এবং iOS- এর জন্য প্রবর্তিত হয়েছিল এবং এটি v2 থেকে সম্পূর্ণ আলাদা।

ওয়েব রিসিভার সমস্ত উন্মুক্ত API-এর জন্য cast.receiver নামস্থানের পরিবর্তে একটি নতুন নামস্থান cast.framework ব্যবহার করছে৷ v2 দ্বারা ব্যবহৃত অনেক ডেটা অবজেক্ট CAF-তে একই এবং cast.framework.messages নামস্থানের অধীনে উন্মুক্ত করা হয়েছে (এগুলি বেশিরভাগই cast.receiver.media এর অধীনে ছিল)।

নিম্নলিখিত v2 পরিষেবাগুলি সংশ্লিষ্ট CAF পরিষেবাগুলির দ্বারা প্রতিস্থাপিত হয়:

  • CastReceiverManager ক্লাস CastReceiverContext দ্বারা প্রতিস্থাপিত হয় যা একটি সিঙ্গলটন যা কাস্ট সেশন, প্রেরক, কাস্টম বার্তা পাঠানো এবং বিশ্বব্যাপী সিস্টেম ইভেন্ট পরিচালনা করে। CastReceiverOptions বিশ্বব্যাপী অ্যাপ্লিকেশন বিকল্পগুলি প্রদান করতে ব্যবহার করা যেতে পারে (যেমন সারি, রিসিভার সংস্করণ, প্লেব্যাক কনফিগারেশন, ইত্যাদি) প্রসঙ্গে।
  • MediaManager ক্লাসটি PlayerManager দ্বারা প্রতিস্থাপিত হয় যা CastReceiverContext সিঙ্গেলটনের একটি সম্পত্তি, এবং এটি মিডিয়া সেশন, মিডিয়া অনুরোধ, Google সহকারী ভয়েস অনুরোধ (v2 তে CommandAndControlManager ) পরিচালনা করে এবং মিডিয়া ইভেন্টগুলিকে ফায়ার করে। খেলোয়াড়দের জন্য কনফিগারেশন ( MPL-এ cast.player.api.Host ) PlaybackConfig দ্বারা সরবরাহ করা হয়, যা বিশ্বব্যাপী বা প্রতি লোড অনুরোধে সরবরাহ করা যেতে পারে।

PlayerManager নতুন সাব-ম্যানেজার ক্লাসগুলিও প্রকাশ করে:

  • TextTracksManager - মিডিয়া টেক্সট ট্র্যাক পরিচালনা করুন।
  • AudioTracksManager - অডিও ট্র্যাক পরিচালনা করুন।
  • QueueManager - সারি পরিচালনা করুন।
  • BreakManager - বিজ্ঞাপন পরিচালনা করুন।
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

// Set global options.
const options = new cast.framework.CastReceiverOptions();
options.versionCode = DEVELOPERS_APP_VERSION;

context.start(options);

রিসিভার ব্যবসা যুক্তি

ব্যবসায়িক যুক্তি যোগ করতে রিসিভার v2 উন্মুক্ত ইভেন্ট হ্যান্ডলার (যেমন CastReceiverManager.onReady বা MediaManager.onLoad )। CAF-তে ইভেন্ট হ্যান্ডলারদের ইভেন্ট লিসেনার ( CastReceiverContext.addEventListener ) এবং মেসেজ ইন্টারসেপ্টর ( PlayerManager.setMessageInterceptor ) দ্বারা প্রতিস্থাপিত হয়। ওয়েব রিসিভারে একটি ইভেন্টের জন্য একাধিক ইভেন্ট শ্রোতা থাকতে পারে (শ্রোতা ইভেন্টকে প্রভাবিত করে না), এবং প্রতি বার্তা প্রতি একটি ইন্টারসেপ্টর। ইন্টারসেপ্টর অনুরোধটি আপডেট করতে পারে বা এটি পরিচালনা করতে পারে (একটি সংশোধিত অনুরোধ, একটি সাফল্যের বার্তা, বা ত্রুটির বার্তা ফেরত দিতে) এবং একটি প্রতিশ্রুতি প্রদানকারী একটি অ্যাসিঙ্ক হ্যান্ডলার হতে পারে।

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

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
      // Resolve entity to content id
      if (request.media.entity && !request.media.contentId) {
        return getMediaByEntity(request.media.entity).then(
            media => {
              request.media.contentId = media.url;
              return request;
            });
      }
      return request;
    });

v2 কাস্টমাইজড মিডিয়া স্ট্যাটাস হ্যান্ডলারকে মিডিয়া স্ট্যাটাস মেসেজের জন্য মেসেজ ইন্টারসেপ্টর দিয়ে প্রতিস্থাপিত করা হয়েছে। ওয়েব রিসিভার অ্যাপগুলি যেগুলি মিডিয়া স্ট্যাটাসে মিডিয়া URL প্রকাশ করতে চায় না তারা একটি URL সমাধানকারী ( PlayerManager.setMediaUrlResolver ) প্রদান করতে পারে, যা একটি লোড অনুরোধের জন্য মিডিয়া URL প্রদান করে৷ সেই URLটি CAF অভ্যন্তরীণভাবে ব্যবহার করে এবং মিডিয়া স্ট্যাটাসে দেওয়া হয় না।

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.MEDIA_STATUS,
    status => {
      // Disable seek.
      status.supportedMediaCommands &=
          ~cast.framework.messages.Command.SEEK
      return status;
    });

ঘটনা

ওয়েব রিসিভার CastReceiverContext এবং PlayerManager উভয় থেকে ইভেন্টের একটি বিস্তৃত সেট প্রদান করে। ওয়েব রিসিভার অ্যাপের যেকোনো ইভেন্টে একাধিক শ্রোতা থাকতে পারে এবং একাধিক ইভেন্টে একজন শ্রোতাকে প্রদান করতে পারে। (কিছু গ্রুপের ইভেন্টের জন্য cast.framework.events.category দেখুন।)

ইভেন্টগুলি যেকোন ব্যবহারকারীর অনুরোধ, প্লেব্যাক অগ্রগতি, প্লেয়ার প্রসেসিং এবং যেকোন নিম্ন-স্তরের মিডিয়া উপাদান ইভেন্টকে কভার করে (CAF মিডিয়া উপাদান নিজেই প্রকাশ করে না)।

ওয়েব রিসিভার অ্যাপটি কাজ করার জন্য ইভেন্ট শ্রোতাদের যোগ করতে পারে (উদাহরণস্বরূপ, লোড সম্পূর্ণ হলে পাঠ্য ট্র্যাকের সংজ্ঞা যোগ করুন), বা বিশ্লেষণের জন্য।

// Log all media commands
playerManager.addEventListener(
    cast.framework.events.category.REQUEST,
    event => logEvent(event.type));

কাস্টম বার্তা বাস

CAF API-এ বার্তা বাসকে প্রকাশ করে না, পরিবর্তে এটি CastReceiverContext.addCustomMessageListener প্রদান করে একটি নির্দিষ্ট নামস্থানের জন্য একটি বার্তা শ্রোতা যোগ করার জন্য (প্রতি নেমস্পেসে শুধুমাত্র একটি) এবং CastReceiverContext.sendCustomMessage একটি নামস্থানে একটি বার্তা পাঠাতে। ওয়েব রিসিভার শুরু করার আগে সমস্ত নামস্থান ঘোষণা করতে হবে (অর্থাৎ, CastReceiverContext.start কে কল করার আগে)। নামস্থান তাদের সাথে একটি বার্তা শ্রোতা যোগ করে ঘোষণা করা যেতে পারে বা CastReceiverOptions.customNamespaces এ একটি স্টার্ট বিকল্প হিসাবে প্রদান করা যেতে পারে।

const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = {
    CUSTOM_NS: cast.framework.system.MessageType.JSON
};
context.start(options);

context.sendCustomMessage(CUSTOM_NS, {
  type: 'status'
  message: 'Playing'
});

ডিফল্ট UI

CAF একটি ডিফল্ট ওয়েব রিসিভার UI প্রদান করে যা প্রয়োজন অনুযায়ী একটি প্লেব্যাক প্রগ্রেস বার এবং মিডিয়া মেটাডেটা প্রদর্শন করে। ডিফল্ট UI একটি কাস্টম উপাদান ( <cast-media-player> ) হিসাবে সরবরাহ করা হয় যা CSS-এর মতো স্টাইলিং দিয়ে স্টাইল করা যেতে পারে।

<style>
   cast-media-player { --splash-image: url("splash.png"); }
</style>
<cast-media-player></cast-media-player>

আরও কাস্টমাইজেশনের জন্য, একটি ওয়েব রিসিভার অ্যাপ তার নিজস্ব UI বাস্তবায়ন করতে পারে। ওয়েব রিসিভার একটি UI অবজেক্টকে ওয়েব রিসিভার প্লেব্যাক স্টেটে আবদ্ধ করতে সাহায্য করার জন্য cast.framework.ui.PlayerDataBinder ক্লাস প্রদান করে।