নিম্নলিখিত পদ্ধতিটি আপনাকে আপনার অ্যান্ড্রয়েড সেন্ডার অ্যাপটিকে Cast SDK v2 থেকে CAF সেন্ডারে রূপান্তর করতে সক্ষম করে, যা CastContext সিঙ্গেলটনের উপর ভিত্তি করে তৈরি।
Cast CAF Sender SDK আপনার পক্ষ থেকে GoogleAPIClient পরিচালনা করার জন্য CastContext ব্যবহার করে। CastContext আপনার জন্য জীবনচক্র, ত্রুটি এবং কলব্যাক পরিচালনা করে, যা একটি Cast অ্যাপ তৈরি করাকে ব্যাপকভাবে সহজ করে তোলে।
ভূমিকা
- CAF সেন্ডার এখনও Android SDK ম্যানেজার ব্যবহার করে Google Play পরিষেবার অংশ হিসেবে বিতরণ করা হয়।
- নতুন প্যাকেজ যোগ করা হয়েছে যা Google Cast ডিজাইন চেকলিস্ট (
com.google.android.gms.cast.framework.*) মেনে চলার দায়িত্ব নেয়। - CAF সেন্ডার এমন উইজেট সরবরাহ করে যা Cast UX প্রয়োজনীয়তা পূরণ করে; v2 কোনও UI উপাদান সরবরাহ করেনি এবং আপনাকে এই উইজেটগুলি বাস্তবায়ন করতে বাধ্য করেছে।
- কাস্ট এপিআই ব্যবহারের জন্য আর গুগলএপিক্লায়েন্ট ব্যবহারের প্রয়োজন নেই।
- CAF সেন্ডারে ক্লোজড ক্যাপশনিং v2 এর অনুরূপ।
নির্ভরতা
সাপোর্ট লাইব্রেরি ফিচার গাইডে বর্ণিত সাপোর্ট লাইব্রেরি এবং গুগল প্লে পরিষেবার (9.2.0 বা তার পরবর্তী) উপর V2 এবং CAF-এর একই নির্ভরতা রয়েছে।
CAF যে ন্যূনতম Android SDK সংস্করণটি সমর্থন করে তা হল 9 (জিঞ্জারব্রেড)।
আরম্ভকরণ
CAF-তে, Cast ফ্রেমওয়ার্কের জন্য একটি স্পষ্ট ইনিশিয়ালাইজেশন ধাপ প্রয়োজন। এর মধ্যে রয়েছে CastContext সিঙ্গেলটন ইনিশিয়ালাইজ করা, ওয়েব রিসিভার অ্যাপ্লিকেশন আইডি এবং অন্য যেকোনো গ্লোবাল অপশন নির্দিষ্ট করার জন্য একটি উপযুক্ত OptionsProvider ব্যবহার করা।
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>
প্রতিটি Activity এর 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"/>
প্রতিটি Activity-এর onCreateOptionMenu() পদ্ধতি ওভাররাইড করে CastButtonFactory ব্যবহার করে MediaRouteButton কে Cast ফ্রেমওয়ার্কের সাথে সংযুক্ত করুন:
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 ক্লাস সেশন জীবনচক্র পরিচালনা করে এবং ব্যবহারকারীর অঙ্গভঙ্গির প্রতিক্রিয়ায় স্বয়ংক্রিয়ভাবে সেশন শুরু এবং বন্ধ করে: ব্যবহারকারী যখন Cast ডায়ালগে একটি Cast ডিভাইস নির্বাচন করে তখন একটি সেশন শুরু হয় এবং ব্যবহারকারী যখন Cast ডায়ালগে "কাস্টিং বন্ধ করুন" বোতামটি ট্যাপ করে বা প্রেরক অ্যাপটি নিজেই বন্ধ হয়ে যায় তখন এটি শেষ হয়। SessionManager এর সাথে SessionManagerListener নিবন্ধন করে প্রেরক অ্যাপ্লিকেশনটিকে সেশন জীবনচক্র ইভেন্ট সম্পর্কে অবহিত করা যেতে পারে। SessionManagerListener কলব্যাকগুলি সমস্ত সেশন জীবনচক্র ইভেন্টের জন্য কলব্যাক পদ্ধতি সংজ্ঞায়িত করে।
CastSession ক্লাসটি একটি Cast ডিভাইস সহ একটি সেশন প্রতিনিধিত্ব করে। ক্লাসটিতে ডিভাইসের ভলিউম এবং মিউট অবস্থা নিয়ন্ত্রণ করার পদ্ধতি রয়েছে, যা পূর্বে v2 তে Cast.CastApi এর পদ্ধতি ব্যবহার করে করা হয়েছিল।
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-তে সমতুল্য কার্যকারিতা প্রদান করে। এই অবজেক্টটি স্পষ্টভাবে শুরু বা নিবন্ধন করার প্রয়োজন নেই; যদি সংযুক্ত ওয়েব রিসিভার অ্যাপ্লিকেশনটি মিডিয়া নেমস্পেস সমর্থন করে তবে ফ্রেমওয়ার্কটি স্বয়ংক্রিয়ভাবে অবজেক্টটি ইনস্ট্যান্টিয়েট করবে এবং সেশন শুরুর সময়ে অন্তর্নিহিত মিডিয়া চ্যানেলটি নিবন্ধন করবে।
CastSession অবজেক্টের getRemoteMediaClient পদ্ধতি হিসেবে RemoteMediaClient অ্যাক্সেস করা যেতে পারে।
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 প্রদান করে যাতে Cast বোতামটি হাইলাইট করা যায়।
মিনি কন্ট্রোলার
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 ব্যবহার করে।