কাস্ট SDK v2 থেকে কাস্ট অ্যাপ্লিকেশন ফ্রেমওয়ার্ক (CAF) এ Android প্রেরক অ্যাপ স্থানান্তর করুন

নিম্নলিখিত পদ্ধতি আপনাকে আপনার Android প্রেরক অ্যাপটিকে Cast SDK v2 থেকে CAF সেন্ডারে রূপান্তর করতে সক্ষম করে, যা CastContext সিঙ্গেলটনের উপর ভিত্তি করে।

Cast CAF প্রেরক SDK আপনার হয়ে GoogleAPIClient পরিচালনা করতে CastContext ব্যবহার করে। CastContext আপনার জন্য লাইফসাইকেল, ত্রুটি এবং কলব্যাকগুলি পরিচালনা করে, যা একটি কাস্ট অ্যাপ বিকাশকে ব্যাপকভাবে সহজ করে।

ভূমিকা

  • CAF প্রেরক এখনও Android SDK ম্যানেজার ব্যবহার করে Google Play পরিষেবার অংশ হিসাবে বিতরণ করা হয়৷
  • নতুন প্যাকেজ যোগ করা হয়েছে যা Google Cast ডিজাইন চেকলিস্ট ( com.google.android.gms.cast.framework.* ) মেনে চলার দায়িত্ব নেয়
  • CAF প্রেরক উইজেট প্রদান করে যা Cast UX প্রয়োজনীয়তা মেনে চলে; v2 কোনো UI উপাদান প্রদান করেনি এবং আপনাকে এই উইজেটগুলি বাস্তবায়ন করতে হবে।
  • Cast API ব্যবহার করার জন্য GoogleApiClient-এর ব্যবহার আর প্রয়োজন নেই৷
  • CAF প্রেরকের ক্লোজড ক্যাপশনিং v2 এর মতো।

নির্ভরতা

V2 এবং CAF-এর সমর্থন লাইব্রেরি এবং Google Play পরিষেবাগুলিতে (9.2.0 বা তার পরে) একই নির্ভরতা রয়েছে যা সমর্থন লাইব্রেরি বৈশিষ্ট্য নির্দেশিকাতে বর্ণিত হয়েছে

ন্যূনতম Android SDK সংস্করণ যা CAF সমর্থন করে তা হল 9 (জিঞ্জারব্রেড)।

সূচনা

CAF-তে, কাস্ট ফ্রেমওয়ার্কের জন্য একটি সুস্পষ্ট সূচনা পদক্ষেপ প্রয়োজন। ওয়েব রিসিভার অ্যাপ্লিকেশন আইডি এবং অন্য কোনো বৈশ্বিক বিকল্প নির্দিষ্ট করার জন্য একটি উপযুক্ত OptionsProvider ব্যবহার করে CastContext সিঙ্গেলটন শুরু করা জড়িত।

public class CastOptionsProvider implements OptionsProvider {

    @Override
    public CastOptions getCastOptions(Context context) {
        return new CastOptions.Builder()
                .setReceiverApplicationId(context.getString(R.string.app_id))
                .build();
    }

    @Override
    public List<SessionProvider> getAdditionalSessionProviders(Context context) {
        return null;
    }
}

অ্যাপ AndroidManifest.xml ফাইলের "অ্যাপ্লিকেশন" ট্যাগের মধ্যে OptionsProvider ঘোষণা করুন:

<application>
...
    <meta-data
        android:name=
            "com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
        android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>

প্রতিটি কার্যকলাপের onCreate পদ্ধতিতে অলসভাবে CastContext শুরু করুন:

private CastContext mCastContext;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.video_browser);
    setupActionBar();

    mCastContext = CastContext.getSharedInstance(this);
}

এই পদক্ষেপগুলি v2 তে প্রয়োজনীয় ছিল না।

ডিভাইস আবিষ্কার

CAF-তে, আবিষ্কার প্রক্রিয়াটি ফ্রেমওয়ার্ক দ্বারা স্বয়ংক্রিয়ভাবে শুরু হয় এবং বন্ধ হয়ে যায় যখন অ্যাপটি ফোরগ্রাউন্ডে আসে এবং যথাক্রমে ব্যাকগ্রাউন্ডে যায়। MediaRouteSelector এবং MediaRouter.Callback ব্যবহার করা উচিত নয়।

কাস্ট বোতাম এবং কাস্ট ডায়ালগ

v2 এর মতো, এই উপাদানগুলি MediaRouter সমর্থন লাইব্রেরি দ্বারা সরবরাহ করা হয়।

কাস্ট বোতামটি এখনও MediaRouteButton দ্বারা প্রয়োগ করা হয়েছে এবং আপনার মেনুতে একটি মেনু আইটেম হিসাবে আপনার কার্যকলাপে (একটি ActionBar বা একটি Toolbar ব্যবহার করে) যোগ করা যেতে পারে৷

<item
    android:id="@+id/media_route_menu_item"
    android:title="@string/media_route_menu_title"
    app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
    app:showAsAction="always"/>

কাস্ট ফ্রেমওয়ার্কে MediaRouteButton ওয়্যার আপ করতে CastButtonFactory ব্যবহার করে প্রতিটি কার্যকলাপের onCreateOptionMenu() পদ্ধতি ওভাররাইড করুন:

private MenuItem mediaRouteMenuItem;

public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.browse, menu);
    mediaRouteMenuItem =
        CastButtonFactory.setUpMediaRouteButton(getApplicationContext(),
                                                menu,
                                                R.id.media_route_menu_item);
    return true;
}

যখন কেউ বোতামে ট্যাপ করে, কাস্ট ডায়ালগ স্বয়ংক্রিয়ভাবে উপস্থাপিত হয়।

ডিভাইস নিয়ন্ত্রণ

CAF-তে, ডিভাইস নিয়ন্ত্রণ মূলত ফ্রেমওয়ার্ক দ্বারা পরিচালিত হয়। প্রেরক অ্যাপ্লিকেশনটিকে ডিভাইসের সাথে সংযোগ করা এবং GoogleApiClient ব্যবহার করে ওয়েব রিসিভার অ্যাপ্লিকেশন চালু করার (এবং পরিচালনা করার চেষ্টা করা উচিত নয়) পরিচালনা করার প্রয়োজন নেই। প্রেরক এবং ওয়েব রিসিভারের মধ্যে মিথস্ক্রিয়া এখন একটি "সেশন" হিসাবে উপস্থাপন করা হয়। SessionManager ক্লাস সেশন লাইফসাইকেল পরিচালনা করে এবং ব্যবহারকারীর অঙ্গভঙ্গির প্রতিক্রিয়ায় সেশনগুলি স্বয়ংক্রিয়ভাবে শুরু হয় এবং বন্ধ করে দেয়: ব্যবহারকারী যখন কাস্ট ডায়ালগে একটি কাস্ট ডিভাইস নির্বাচন করে তখন একটি সেশন শুরু হয় এবং যখন ব্যবহারকারী কাস্টে "স্টপ কাস্টিং" বোতামে ট্যাপ করে তখন শেষ হয় ডায়ালগ বা যখন প্রেরক অ্যাপ নিজেই বন্ধ হয়ে যায়। SessionManager -এর সাথে একটি SessionManagerListener রেজিস্টার করে সেশন লাইফসাইকেল ইভেন্ট সম্পর্কে প্রেরক আবেদনকে অবহিত করা যেতে পারে। SessionManagerListener কলব্যাক সমস্ত সেশন জীবনচক্র ইভেন্টের জন্য কলব্যাক পদ্ধতি সংজ্ঞায়িত করে।

CastSession ক্লাস একটি কাস্ট ডিভাইস সহ একটি সেশন উপস্থাপন করে। ক্লাসে ডিভাইসের ভলিউম এবং নিঃশব্দ অবস্থা নিয়ন্ত্রণ করার পদ্ধতি রয়েছে, যা পূর্বে Cast.CastApi এ পদ্ধতি ব্যবহার করে v2 তে করা হয়েছিল।

v2-এ, Cast.Listener কলব্যাকগুলি ভলিউম, নিঃশব্দ অবস্থা, স্ট্যান্ডবাই স্ট্যাটাস এবং আরও অনেক কিছু সহ ডিভাইসের অবস্থার পরিবর্তনের বিজ্ঞপ্তি প্রদান করে।

CAF-তে, ভলিউম/মিউট স্টেট পরিবর্তনের বিজ্ঞপ্তিগুলি এখনও Cast.Listener এ কলব্যাক পদ্ধতির মাধ্যমে বিতরণ করা হয়; এই শ্রোতারা CastSession এর সাথে নিবন্ধিত। সমস্ত অবশিষ্ট ডিভাইস রাজ্য বিজ্ঞপ্তি CastStateListener কলব্যাকের মাধ্যমে বিতরণ করা হয়; এই শ্রোতারা CastSession এর সাথে নিবন্ধিত। নিশ্চিত করুন যে আপনি এখনও শ্রোতাদের নিবন্ধনমুক্ত করেছেন যখন সংশ্লিষ্ট টুকরা, কার্যকলাপ বা অ্যাপগুলি ব্যাকগ্রাউন্ডে যায়।

পুনঃসংযোগ যুক্তি

v2 এর মতো, CAF অস্থায়ী ওয়াইফাই সিগন্যাল হারানো বা অন্যান্য নেটওয়ার্ক ত্রুটির কারণে হারিয়ে যাওয়া নেটওয়ার্ক সংযোগগুলি পুনঃস্থাপন করার চেষ্টা করে। এটি এখন সেশন স্তরে করা হয়; সংযোগ হারিয়ে গেলে একটি সেশন একটি "সাসপেন্ডেড" অবস্থায় প্রবেশ করতে পারে এবং সংযোগ পুনরুদ্ধার করা হলে এটি একটি "সংযুক্ত" অবস্থায় ফিরে যাবে। ফ্রেমওয়ার্ক ওয়েব রিসিভার অ্যাপ্লিকেশনের সাথে পুনঃসংযোগের যত্ন নেয় এবং এই প্রক্রিয়ার অংশ হিসাবে যেকোনও কাস্ট চ্যানেল পুনঃসংযোগ করে।

এছাড়াও, CAF এছাড়াও স্বয়ংক্রিয় সেশন পুনঃসূচনা যোগ করে যা ডিফল্টরূপে সক্রিয় থাকে (এবং CastOptions মাধ্যমে নিষ্ক্রিয় করা যেতে পারে। যদি প্রেরক অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে পাঠানো হয় বা বন্ধ করা হয় (সোয়াইপ-অ্যাওয়ে বা ক্র্যাশের কারণে) একটি কাস্ট সেশন চলাকালীন প্রগতিতে, ফ্রেমওয়ার্ক সেই সেশনটি পুনরায় শুরু করার চেষ্টা করবে যখন প্রেরক অ্যাপ্লিকেশনটি ফোরগ্রাউন্ডে ফিরে আসবে বা পুনরায় চালু করা হবে এটি SessionManager দ্বারা স্বয়ংক্রিয়ভাবে পরিচালনা করা হবে, যা যেকোনো নিবন্ধিত SessionManagerListener দৃষ্টান্তে উপযুক্ত কলব্যাক জারি করবে;

কাস্টম চ্যানেল নিবন্ধন

v2-এ, কাস্টম চ্যানেলগুলি ( Cast.MessageReceivedCallback ব্যবহার করে বাস্তবায়িত) Cast.CastApi এর সাথে নিবন্ধিত। CAF-তে, কাস্টম চ্যানেলগুলি পরিবর্তে CastSession উদাহরণের সাথে নিবন্ধিত হয়। নিবন্ধন SessionManagerListener.onSessionStarted কলব্যাক পদ্ধতিতে করা যেতে পারে। মিডিয়া অ্যাপ্লিকেশনের জন্য, Cast.CastApi.setMessageReceivedCallbacks এর মাধ্যমে স্পষ্টভাবে মিডিয়া নিয়ন্ত্রণ চ্যানেল নিবন্ধন করার আর প্রয়োজন নেই; আরো বিস্তারিত জানার জন্য নিম্নলিখিত বিভাগ দেখুন.

মিডিয়া নিয়ন্ত্রণ

v2 ক্লাস RemoteMediaPlayer বন্ধ করা হয়েছে এবং ব্যবহার করা উচিত নয়। CAF-তে, এটি নতুন RemoteMediaClient ক্লাস দ্বারা স্থগিত করা হয়েছে, যা আরও সুবিধাজনক API-এ সমতুল্য কার্যকারিতা প্রদান করে। এই বস্তুটিকে স্পষ্টভাবে আরম্ভ বা নিবন্ধন করার প্রয়োজন নেই; ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে অবজেক্টটিকে ইনস্ট্যান্টিয়েট করবে এবং অধিবেশন শুরুর সময়ে অন্তর্নিহিত মিডিয়া চ্যানেল নিবন্ধন করবে যদি ওয়েব রিসিভার অ্যাপ্লিকেশন মিডিয়া নেমস্পেস সমর্থন করে।

RemoteMediaClient CastSession অবজেক্টের getRemoteMediaClient পদ্ধতি হিসাবে অ্যাক্সেস করা যেতে পারে।

v2-এ, RemoteMediaPlayer এ জারি করা সমস্ত মিডিয়া অনুরোধ একটি PendingResult কলব্যাকের মাধ্যমে একটি RemoteMediaPlayer.MediaChannelResult ফেরত দেবে।

CAF-এ, RemoteMediaClient এ জারি করা সমস্ত মিডিয়া অনুরোধ একটি PendingResult কলব্যাকের মাধ্যমে একটি RemoteMediaClient.MediaChannelResult ফেরত দেয় যা অনুরোধের অগ্রগতি এবং চূড়ান্ত ফলাফল ট্র্যাক করতে ব্যবহার করা যেতে পারে।

v2 RemoteMediaPlayer RemoteMediaPlayer.OnStatusUpdatedListener এর মাধ্যমে ওয়েব রিসিভারে মিডিয়া প্লেয়ারের অবস্থার পরিবর্তন সম্পর্কে বিজ্ঞপ্তি পাঠাবে।

CAF-তে, RemoteMediaClient তার RemoteMediaClient.Listener ইন্টারফেসের মাধ্যমে সমতুল্য কলব্যাক প্রদান করে। যেকোন সংখ্যক শ্রোতা RemoteMediaClient এর সাথে নিবন্ধিত হতে পারে, যা একাধিক প্রেরক উপাদানকে সেশনের সাথে যুক্ত RemoteMediaClient এর একক উদাহরণ শেয়ার করতে দেয়।

v2-এ, প্রেরক অ্যাপ্লিকেশনটিকে ওয়েব রিসিভারে মিডিয়া প্লেয়ার স্টেটের সাথে ইউজার ইন্টারফেস সিঙ্কে রাখার ভার নিতে হয়েছিল।

CAF-তে, ক্লাস UIMediaController এই দায়িত্বের বেশিরভাগই নেয়।

পরিচায়ক ওভারলে

V2 একটি পরিচায়ক ওভারলে UI প্রদান করে না।

CAF কাস্ট বোতাম হাইলাইট করার জন্য একটি কাস্টম ভিউ IntroductoryOverlay প্রদান করে যখন এটি ব্যবহারকারীদের কাছে প্রথম দেখানো হয়।

মিনি কন্ট্রোলার

v2-এ, আপনাকে প্রেরক অ্যাপে স্ক্র্যাচ থেকে একটি মিনি কন্ট্রোলার প্রয়োগ করতে হবে।

CAF-এ, SDK একটি কাস্টম ভিউ প্রদান করে, MiniControllerFragment , যা আপনি মিনি কন্ট্রোলার দেখাতে চান এমন কার্যকলাপের অ্যাপ লেআউট ফাইলে যোগ করতে পারেন।

বিজ্ঞপ্তি এবং লক স্ক্রীন

v2-এ, বিজ্ঞপ্তি এবং লক স্ক্রিনের জন্য কন্ট্রোলার SDK দ্বারা সরবরাহ করা হয় না। সেই SDK-এর জন্য, আপনাকে Android ফ্রেমওয়ার্ক API ব্যবহার করে আপনার প্রেরক অ্যাপে এই বৈশিষ্ট্যগুলি তৈরি করতে হবে।

CAF-এ, SDK একটি NotificationsOptions.Builder প্রদান করে যাতে আপনি বিজ্ঞপ্তির জন্য মিডিয়া নিয়ন্ত্রণ তৈরি করতে এবং প্রেরক অ্যাপে স্ক্রিন লক করতে সাহায্য করেন। CastContext আরম্ভ করার সময় বিজ্ঞপ্তি এবং লক স্ক্রীন নিয়ন্ত্রণগুলি CastOptions দিয়ে সক্ষম করা যেতে পারে৷

public CastOptions getCastOptions(Context context) {
    NotificationOptions notificationOptions = new NotificationOptions.Builder()
            .setTargetActivityClassName(VideoBrowserActivity.class.getName())
            .build();
    CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
            .setNotificationOptions(notificationOptions)
            .build();

    return new CastOptions.Builder()
            .setReceiverApplicationId(context.getString(R.string.app_id))
            .setCastMediaOptions(mediaOptions)
            .build();
}

প্রসারিত নিয়ামক

v2-এ, আপনাকে প্রেরক অ্যাপে স্ক্র্যাচ থেকে একটি প্রসারিত নিয়ামক প্রয়োগ করতে হবে।

CAF একটি UIMediaController সহায়ক শ্রেণী প্রদান করে যা আপনার নিজের সম্প্রসারিত নিয়ামক তৈরি করা সহজ করে তোলে।

CAF একটি পূর্ব-নির্মিত প্রসারিত কন্ট্রোলার উইজেট ExpandedControllerActivity যোগ করে যা আপনি সহজভাবে আপনার অ্যাপে যোগ করতে পারেন। UIMediaController ব্যবহার করে আপনাকে আর একটি কাস্টম প্রসারিত কন্ট্রোলার প্রয়োগ করতে হবে না।

অডিও ফোকাস

v2 তে, অডিও ফোকাস পরিচালনা করতে আপনাকে MediaSessionCompat ব্যবহার করতে হবে।

CAF-তে, অডিও ফোকাস স্বয়ংক্রিয়ভাবে পরিচালিত হয়।

ডিবাগ লগিং

CAF-তে লগিং করার কোনো বিকল্প নেই।

নমুনা অ্যাপ্লিকেশন

আমাদের কাছে কোডল্যাব টিউটোরিয়াল এবং নমুনা অ্যাপ রয়েছে যা CAF ব্যবহার করে।