ট্র্যাক, ট্র্যাক

অডিও ট্র্যাক

অডিও ট্র্যাক নির্বাচনের জন্য, ওয়েব রিসিভার SDK একটি AudioTracksManager ক্লাস সরবরাহ করে যা ট্র্যাক নির্বাচনকে সহজ করে এবং স্ট্রীমলাইন করে, আপনাকে আরও নিয়ন্ত্রণ এবং বৈশিষ্ট্যগুলিতে আরও ভাল অ্যাক্সেস দেয়, যেমন নাম, URL এবং ভাষা। cast.framework.events.EventType.PLAYER_LOAD_COMPLETE ইভেন্টের জন্য ইভেন্ট হ্যান্ডলারে এই ক্লাসটি সবচেয়ে ভালো ব্যবহার করা হয়।

API সক্রিয় অডিও ট্র্যাকগুলি অনুসন্ধান এবং নির্বাচন করার বিভিন্ন উপায় সরবরাহ করে। একটি ট্র্যাক আইডি উল্লেখ করে সক্রিয় হওয়ার জন্য কীভাবে নির্বাচন করবেন তার একটি উদাহরণ এখানে দেওয়া হল:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
    const audioTracksManager = playerManager.getAudioTracksManager();

    // Get all audio tracks
    const tracks = audioTracksManager.getTracks();

    // Choose the first audio track to be active by specifying its ID
    audioTracksManager.setActiveById(tracks[0].trackId);
  });
context.start();

AudioTracksManager ক্লাস একটি পদ্ধতি প্রদান করে getActiveTrack()

এখানে একটি নির্দিষ্ট ভাষার জন্য প্রথম অডিও ট্র্যাক নির্বাচন করার একটি উদাহরণ রয়েছে, এই ক্ষেত্রে ইংরেজি:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
    const audioTracksManager = playerManager.getAudioTracksManager();

    // Set the first matching language audio track to be active
    audioTracksManager.setActiveByLanguage('en');
  });
context.start();

AudioTracksManager ক্লাস একটি পদ্ধতি getTracksByLanguage(language) প্রদান করে যা নির্দিষ্ট ভাষার জন্য সমস্ত ট্র্যাক ফেরত দেয়।

অডিও ভাষা কোড মিডিয়া ম্যানিফেস্ট থেকে পুনরুদ্ধার করা হয়েছে এবং RFC 5646 অনুসরণ করা উচিত। ভাষার কোডগুলি 2-অক্ষরের নামকরণে (যেমন "es", "en" বা "de"), বা 4 অক্ষরের নামকরণ (যেমন " en-us", "es-es" বা "fr-ca")।

যদি মিডিয়া ম্যানিফেস্ট একটি ভিন্ন ভাষার কোড স্ট্যান্ডার্ড অনুসরণ করে, ওয়েব রিসিভার অ্যাপটিকে এটিকে একটি RFC 5646 কনফর্মিং ল্যাঙ্গুয়েজ কোডে রূপান্তর করতে হবে। ওয়েব রিসিভার SDK পরিবর্তনগুলি সম্পাদন করতে একটি ইন্টারসেপ্টর EDIT_AUDIO_TRACKS প্রদান করে:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// Intercept the EDIT_AUDIO_TRACKS request
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.EDIT_AUDIO_TRACKS, request => {
  // write logic to convert language codes here
});
context.start();

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

ক্লোজড ক্যাপশন (সাবটাইটেল)

ক্লোজড ক্যাপশন ট্র্যাক নির্বাচনের জন্য, ওয়েব রিসিভার SDK TextTracksManager ক্লাস প্রদান করে যা ট্র্যাক নির্বাচনকে সহজ করে এবং স্ট্রীমলাইন করে, আপনাকে আরও নিয়ন্ত্রণ এবং বৈশিষ্ট্যগুলিতে আরও ভাল অ্যাক্সেস দেয়, যেমন নাম, URL এবং ভাষা।

TextTracksManager ক্লাসটি cast.framework.events.EventType.PLAYER_LOAD_COMPLETE ইভেন্টের জন্য ইভেন্ট হ্যান্ডলারে সবচেয়ে ভালো ব্যবহার করা হয়।

ওয়েব রিসিভার SDK-এ ক্লোজড ক্যাপশন নির্বাচনকে SDK-এর অন্যান্য অংশের সাথে সরলীকৃত এবং স্ট্রিমলাইন করা হয়েছে।

API WebVTT, TTML এবং CEA-608 নিয়ন্ত্রণ করতে সমর্থন করে।

TextTracksManager ক্লাস সক্রিয় হওয়ার জন্য একটি বন্ধ ক্যাপশন ট্র্যাক অনুসন্ধান এবং নির্বাচন করার বিভিন্ন উপায় প্রদান করে। এটির আইডি উল্লেখ করে সক্রিয় হওয়ার জন্য প্রথম ট্র্যাকটি কীভাবে নির্বাচন করবেন তার একটি উদাহরণ এখানে রয়েছে:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
    const textTracksManager = playerManager.getTextTracksManager();

    // Get all text tracks
    const tracks = textTracksManager.getTracks();

    // Choose the first text track to be active by its ID
    textTracksManager.setActiveByIds([tracks[0].trackId]);
  });
context.start();

TextTracksManager ক্লাস একটি পদ্ধতি প্রদান করে getActiveTracks()

একটি নির্দিষ্ট ভাষার জন্য প্রথম পাঠ্য ট্র্যাক কীভাবে নির্বাচন করবেন তার একটি উদাহরণ এখানে রয়েছে:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
    const textTracksManager = playerManager.getTextTracksManager();

    // Set the first matching language text track to be active
    textTracksManager.setActiveByLanguage('en');
  });
context.start();

TextTracksManager ক্লাস একটি পদ্ধতি getTracksByLanguage(language) প্রদান করে যা নির্দিষ্ট ভাষার জন্য সমস্ত ট্র্যাক প্রদান করে।

টেক্সট ভাষার কোড মিডিয়া ম্যানিফেস্ট থেকে পুনরুদ্ধার করা হয়েছে এবং RFC 5646 অনুসরণ করা উচিত। ভাষার কোডগুলি 2-অক্ষরের নামকরণে (যেমন "es", "en" বা "de"), বা 4-অক্ষরের নামকরণ (যেমন "en-us", "es-es" বা "fr-ca")।

যদি মিডিয়া ম্যানিফেস্ট একটি ভিন্ন ভাষার কোড স্ট্যান্ডার্ড অনুসরণ করে, তাহলে ওয়েব রিসিভার অ্যাপটিকে যেকোনো ইনকামিং অনুরোধকে সেই স্ট্যান্ডার্ডে রূপান্তর করতে হবে। এই অনুরোধ, যেমন ভয়েস কমান্ড, RFC 5646 ভাষা কোড ব্যবহার করে। আপনার ম্যানিফেস্টের স্ট্যান্ডার্ডে অনুরোধগুলিকে অনুবাদ করতে ওয়েব রিসিভার SDK একটি ইন্টারসেপ্টর EDIT_TRACKS_INFO প্রদান করে:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// intercept the EDIT_TRACKS_INFO request
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.EDIT_TRACKS_INFO, request => {
  // write logic to convert language codes here
});
context.start();

API একটি বিকাশকারীকে গতিশীলভাবে নতুন ক্লোজড ক্যাপশন ট্র্যাক যোগ করার অনুমতি দেয়, এই ক্ষেত্রে বিভিন্ন ভাষা এবং ব্যান্ডের বাইরের ট্র্যাকগুলির জন্য, এবং তারপরে নতুন সক্রিয় ট্র্যাক হতে একটি ট্র্যাক নির্বাচন করুন:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.addEventListener(
  cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {

    // Create text tracks object
    const textTracksManager = playerManager.getTextTracksManager();

    // Create track 1 for English text
    const track1 = textTracksManager.createTrack();
    track1.trackContentType = 'text/vtt';
    track1.trackContentId = 'http://example.com/en.vtt';
    track1.language = 'en';

    // Create track 2 for Spanish text
    const track2 = textTracksManager.createTrack();
    const track2Id = track2.trackId;
    track2.trackContentType = 'text/vtt';
    track2.trackContentId = 'http://example.com/spa.vtt';
    track2.language = 'spa';

    // Add tracks
    textTracksManager.addTracks([track1, track2]);

    // Set the first matching language text track to be active
    textTracksManager.setActiveByLanguage('en');
  });
context.start();

বিজ্ঞাপন বিরতির মাধ্যমে প্লে করার সময়, যেকোন পাঠ্য ট্র্যাক নির্বাচন, যেমন ভাষা, বিরতির আগে করা একই বিষয়বস্তুর জন্য বিরতির পরেও অব্যাহত থাকবে, এমনকি বিজ্ঞাপনগুলি ভিন্ন ভাষায় হলেও।

জোরপূর্বক ক্যাপশন

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

আপনার কাস্ট অ্যাপ্লিকেশনে জোরপূর্বক পরিচয়লিপি যোগ করতে, আপনাকে এটিকে আপনার ম্যানিফেস্টের অংশ হিসাবে অন্তর্ভুক্ত করতে হবে৷ আপনার ম্যানিফেস্টে, forced-subtitle হতে ট্র্যাকের ভূমিকা সেট করুন। যখন Cask SDK এই ট্র্যাকগুলিকে তুলে নেয়, তখন এটি সেগুলিকে জোরপূর্বক ক্যাপশন হিসাবে চিহ্নিত করবে৷ কাস্ট SDK জোরপূর্বক ক্যাপশন এবং ক্লোজড ক্যাপশনগুলিকে আলাদা করবে বলে কোনও প্রেরকের কাজের প্রয়োজন নেই৷ এর মানে হল একজন দর্শক জোর করে ক্যাপশন নির্বাচন করতে পারবে না।

যখন ক্লোজড ক্যাপশনগুলি সক্ষম করা হয়, তখন ক্যাপশনগুলির ওভারল্যাপ রোধ করতে বাধ্য করা ক্যাপশনগুলি অক্ষম করা হয়৷ যখন ক্লোজড ক্যাপশনগুলি বন্ধ করা হয় এবং যদি ম্যানিফেস্টে জোরপূর্বক ক্যাপশনগুলি প্রদান করা হয়, তখন দর্শকের অডিও ভাষার পছন্দের উপর ভিত্তি করে জোরপূর্বক ক্যাপশনগুলি প্রদর্শিত হয়৷