কীভাবে করবেন

মিডিয়া৩ ১.১১ - নতুন কী আছে?

পড়তে ৩ মিনিট
Toni Heidenreich এর প্রোফাইল দেখুন
Toni Heidenreich সফটওয়্যার ইঞ্জিনিয়ার, অ্যান্ড্রয়েড

Media3 1.11 প্রকাশিত হয়েছে। বেশিরভাগ শীর্ষস্থানীয় অ্যান্ড্রয়েড মিডিয়া অ্যাপকে চালিত করা এই রিলিজটি প্লেব্যাক, এডিটিং এবং UI কম্পোনেন্ট জুড়ে নতুন ফিচার, বাগ ফিক্স এবং উন্নতি নিয়ে এসেছে। আমরা কাস্টমাইজযোগ্য Player স্লট এবং সহজে ব্যবহারযোগ্য ডিফল্ট, ইন্টারেক্টিভ জেসচার, স্টেট অবজারভার এবং PlayerPool ব্যবহার করে শর্ট-ফর্ম ভিডিও প্রি-লোডিং সহ আমাদের জেটপ্যাক কম্পোজ UI মডিউলগুলিকে প্রসারিত করছি। এছাড়াও আমরা সিস্টেমইউআই আউটপুট সুইচার সাপোর্টের মাধ্যমে Media3 কাস্ট ইন্টিগ্রেশনকে আধুনিকীকরণ করেছি, একটি নতুন Ktor HTTP ক্লায়েন্ট নেটওয়ার্ক এক্সটেনশন চালু করেছি এবং Ogg ও WAV ফাইলের জন্য নতুন মাক্সিং ইউটিলিটি যুক্ত করেছি।

মূল বিষয়গুলো জানতে পড়তে থাকুন, এবং পরিবর্তনগুলোর বিস্তারিত তালিকার জন্য সম্পূর্ণ রিলিজ নোটটি দেখুন।

প্লেব্যাক UI এবং কম্পোজ

অ্যান্ড্রয়েড এখন কম্পোজ-ফার্স্ট হওয়ায়, আমরা media3-ui-compose এবং media3-ui-compose-material3 মডিউলগুলোর সম্প্রসারণ অব্যাহত রেখেছি। এই আপডেটটি আপনার প্লেয়ার লেআউটের উপর আরও সূক্ষ্ম নিয়ন্ত্রণ, আরও সমৃদ্ধ ইন্টারঅ্যাকশন প্যাটার্ন এবং Material3-এর সাথে আরও নিবিড় ইন্টিগ্রেশন নিয়ে এসেছে।

কাস্টমাইজযোগ্য প্লেয়ার লেআউট

Material 3 Player Composable এখন topControls , centerControls , bottomControls , এবং errorOverlay এর জন্য নির্দিষ্ট কন্টেন্ট স্লট সমর্থন করে। আপনি আপনার নিজের Composable যোগ করতে পারেন অথবা PlayerDefaults এ প্রকাশিত তৈরি ডিফল্টগুলো ব্যবহার করতে পারেন।

Player(
  player = player,
  topControls = { PlayerDefaults.TopControls(player) },
  centerControls = { PlayerDefaults.CenterControls(player) },
  bottomControls = { PlayerDefaults.BottomControls(player) },
)

Player কম্পোজেবল-এ FocusRequester সাপোর্টও সমন্বিত করা হয়েছে, যা অ্যান্ড্রয়েড টিভি, ফোল্ডেবল ডিভাইস এবং ডেস্কটপ পরিবেশে নির্বিঘ্ন ডি-প্যাড ও কিবোর্ড নেভিগেশন সক্ষম করে।

প্লেয়ার_ভিডিও.png
কাস্টমাইজড কন্ট্রোল সহ একটি কম্পোজেবল প্লেয়ারের উদাহরণ

অঙ্গভঙ্গি এবং প্লেব্যাক গতি নিয়ন্ত্রণ

PlaybackSpeedState এখন একটি ফাস্ট-ফরোয়ার্ড/স্লো-মোশন এপিআই প্রদান করে। demo-compose app লং-প্রেস জেসচারের মাধ্যমে প্লেব্যাক ফাস্ট-ফরোয়ার্ড এবং ডাবল ট্যাপের মাধ্যমে সিক করার সুবিধা দিয়ে এটি প্রদর্শন করে। ১.১০ সংস্করণে প্রবর্তিত ProgressSlider এর সাথে মিলিত হয়ে, কম্পোজ প্লেয়ার UI এখন কোনো অতিরিক্ত কনফিগারেশন ছাড়াই উন্নত টাচ এবং জেসচার ইন্টারঅ্যাকশনের সুবিধা প্রদান করে।

প্লেয়ারপুল দিয়ে শর্ট-ফর্ম ভিডিও প্রি-লোডিং

যেসব অ্যাপে স্লাইডিং-উইন্ডো মিডিয়া ফিড থাকে (যেমন, ছোট আকারের ভার্টিকাল ভিডিও), সেগুলোর ক্ষেত্রে একাধিক ExoPlayer ইনস্ট্যান্স দক্ষতার সাথে পরিচালনা করা একটি সাধারণ চ্যালেঞ্জ। Media3 1.11 সংস্করণে প্লেয়ার রিসাইক্লিং এবং প্রি-লোডিং স্বয়ংক্রিয়ভাবে সামলানোর জন্য PlayerPool ( common-ktx এ) এবং rememberPooledPlayer ( ui-compose ) চালু করা হয়েছে।

demo-compose এর নতুন ShortFormPlayerScreen এ এর বাস্তব প্রয়োগ দেখা যায়; এটি একটি ভার্টিক্যালি পেজিং ফিড, যেখানে ব্যবহারকারী স্ক্রল করার সাথে সাথে প্লেয়ারগুলোকে একত্রিত, প্রি-লোড এবং নির্বিঘ্নে পুনরায় ব্যবহার করা হয়।

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

media3-ui-compose-material3 এর একটি নতুন MiniController Composable একটি কম্প্যাক্ট প্লেব্যাক বার প্রদান করে, যা প্লে/পজ কন্ট্রোলের পাশাপাশি বর্তমান আইটেমের শিরোনাম, শিল্পী, আর্টওয়ার্ক এবং অগ্রগতি প্রদর্শন করে। media3-ui-compose-material3 এ আমাদের সমস্ত ডিফল্ট Composable-এর মতো, এই MiniController Material3 Dynamic Color ইন্টিগ্রেশন সমর্থন করে, যা এটিকে ব্যবহারকারীর ওয়ালপেপার থিমের সাথে স্বয়ংক্রিয়ভাবে মানিয়ে নিতে সাহায্য করে। এটি পারসিস্টেন্ট বটম-শিট বা মিনি-প্লেয়ার অ্যাফোর্ডেন্সের জন্য আদর্শ, উদাহরণস্বরূপ, যখন ব্যবহারকারী কন্টেন্ট ব্রাউজ করেন বা সক্রিয় কাস্ট সেশন চলাকালীন।

মিনি_প্লেয়ার.png
মিডিয়া৩ মিনি কন্ট্রোলারটি অ্যালবাম আর্ট, মিডিয়া মেটাডেটা এবং মৌলিক নিয়ন্ত্রণসমূহ প্রদর্শন করছে

মেটাডেটা এবং ত্রুটির জন্য সম্প্রসারিত স্টেট হোল্ডার

আমরা media3-ui-compose এ বেশ কিছু নতুন রিঅ্যাক্টিভ স্টেট হোল্ডার যুক্ত করেছি:

  • rememberCurrentMediaItemState – বর্তমানে প্লে হওয়া আইটেমটির মেটাডেটা পর্যবেক্ষণ করুন
  • rememberPlaylistState – সম্পূর্ণ প্লেলিস্ট এবং সক্রিয় সূচকগুলি পর্যবেক্ষণ করুন
  • rememberErrorState – প্লেব্যাকের ত্রুটিগুলো ট্র্যাক করে, যার জন্য Material3-এ একটি সামঞ্জস্যপূর্ণ ErrorText Composable এবং ডিফল্ট ErrorOverlay থাকে।

আমরা আসন্ন রিলিজগুলোতে নতুন সংযোজন এবং আরও কাস্টমাইজেশন অপশন নিয়ে কাজ চালিয়ে যাব। অনুগ্রহ করে প্রজেক্ট ইস্যু ট্র্যাকারে আপনার মতামত জানান।

আধুনিক কাস্ট ইন্টিগ্রেশন

Media3 1.11 সংস্করণে Cast এক্সটেনশনটিতে প্রোগ্রাম্যাটিক কনফিগারেশন অপশন এবং OS-স্তরের রাউটিংয়ের জন্য সাপোর্ট যুক্ত করা হয়েছে।

CastParams এবং SystemUI আউটপুট সুইচার

আপনি এখন CastParams ব্যবহার করে Cast এক্সটেনশনটি কনফিগার করতে পারেন:

val castParams = CastParams.Builder()
  .setShowSystemOutputSwitcherOnCastButtonClick(true)
  .build()


Cast.getSingletonInstance(context).initialize(castParams)

setShowSystemOutputSwitcherOnCastIconClick(true) সেটিংটি সমর্থিত প্ল্যাটফর্ম সংস্করণগুলিতে MediaRouteButton অ্যান্ড্রয়েডের নিজস্ব SystemUI আউটপুট সুইচার খোলার জন্য কনফিগার করে, যা একটি সমন্বিত আউটপুট পিকার অভিজ্ঞতা প্রদান করে।

কম্পোজে রিঅ্যাক্টিভ মিডিয়ারাউটবাটন স্টেট

Jetpack Compose ব্যবহারকারী অ্যাপগুলো এখন সহজেই মিডিয়া রাউটিং বাটন (যা কাস্ট বাটন নামেও পরিচিত) যোগ করতে পারে, যা স্বয়ংক্রিয়ভাবে ডায়ালগের অবস্থা পর্যবেক্ষণ করে এবং সেই অনুযায়ী আপডেট হয়। Media3-এর CastPlayer সাথে একত্রে ব্যবহার করলে আর কোনো অতিরিক্ত লজিকের প্রয়োজন নেই!

@Composable
fun TopAppBarWithCast() {
  Row {
    Text(text = "App Title")
    MediaRouteButton()
  }
}
cast_button_2.png
একটি অ্যাপে Media3 মিডিয়া রুট বাটন ডিফল্ট আউটপুট সুইচার ডায়ালগ চালু করে।

কোর প্লেব্যাক এবং সেশন বর্ধন

এক্লিপসা ভিডিও - HAGC ডাইনামিক HDR মেটাডেটা (API 37+)

এক্লিপসা ভিডিও বিভিন্ন ডিভাইসে আরও সামঞ্জস্যপূর্ণ HDR অভিজ্ঞতার প্রতিশ্রুতি দেয়, যেখানে একটি সামঞ্জস্যপূর্ণ বেসলাইন HDR সাদা রঙ এবং স্ক্রিন ও পারিপার্শ্বিক অবস্থার ওপর নির্ভর করে অভিযোজিত হেডরুম থাকে, যা সমস্ত ডিভাইসে সৃজনশীল উদ্দেশ্যকে অক্ষুণ্ণ রাখা নিশ্চিত করে।

ExoPlayer এখন প্রগ্রেসিভ মিডিয়ার (MP4, Matroska) জন্য প্রয়োজনীয় HAGC (ST 2094-50) টাইমড মেটাডেটা প্লেব্যাক সমর্থন করে। API 37+ ডিভাইসগুলিতে প্লেয়ারটি স্বয়ংক্রিয়ভাবে HAGC মেটাডেটা ট্র্যাকগুলিকে সংশ্লিষ্ট ভিডিও ট্র্যাকের সাথে একত্রিত করে এবং ডিকোডারে মেটাডেটা আউট-অফ-ব্যান্ড সরবরাহ করে। পুরোনো ডিভাইসগুলিতে, ExoPlayer কোনো রকম সমন্বয় ছাড়াই নির্বিঘ্নে একটি সাধারণ HDR প্লেব্যাক অভিজ্ঞতা প্রদান করে।

eclipsa.png
এক্লিপসা ভিডিও এইচডিআর-এর সুবিধাগুলো, যেমন আরও সামঞ্জস্যপূর্ণ রঙের বৈসাদৃশ্য, দেখানোর জন্য একটি চিত্র।

নতুন Ktor HTTP ক্লায়েন্ট এক্সটেনশন

নতুন media3-datasource-ktor এক্সটেনশন মডিউলটি Ktor HTTP স্ট্যাক দ্বারা সমর্থিত KtorDataSource প্রদান করে। এটি বিদ্যমান Cronet এবং OkHttp ডেটা সোর্স মডিউলগুলোর একটি কোটলিন-ফার্স্ট ও কো-রুটিন-বান্ধব বিকল্প প্রদান করে।

অ্যাসিঙ্ক্রোনাস মিডিয়া সেশন সংযোগ

MediaSession.Callback এখন onConnectAsync() অন্তর্ভুক্ত করা হয়েছে, যা আপনাকে কন্ট্রোলার সংযোগের প্রচেষ্টাগুলো অ্যাসিঙ্ক্রোনাসভাবে প্রসেস করতে দেয় — উদাহরণস্বরূপ, একটি সংযোগ গ্রহণ করার আগে অনুমোদন যাচাই করার জন্য। বিদ্যমান onConnect মতো একই আচরণের জন্য আপনি Futures.immediateFuture(ConnectionResult) ব্যবহার করে একটি ইমিডিয়েট Future রিটার্ন করতে পারেন।

override fun onConnectAsync(
  session: MediaSession,
  controller: MediaSession.ControllerInfo
): ListenableFuture<MediaSession.ConnectionResult> {
  return authenticateControllerAsync(controller)
}

নিরাপদ মিডিয়া সেশন ডিফল্ট

যেসব অ্যাপ MediaSession.CallbackonConnect বা onConnectAsync ওভাররাইড করে না, তাদের জন্য লাইব্রেরিটি এখন ডিফল্টরূপে আরও সুরক্ষিত একটি কনফিগারেশন ব্যবহার করে। বিশেষত, সেশন ডেটা এখন আর ডিফল্টরূপে অবিশ্বস্ত কন্ট্রোলারদের সাথে শেয়ার করা হয় না। এর অর্থ হলো, নোটিফিকেশন অ্যাক্সেস নেই এমন থার্ড-পার্টি বা নন-সিস্টেম অ্যাপগুলো সেশন ডেটা অ্যাক্সেস করতে পারবে না, যদি না আপনি সংযোগটি অনুমোদন করার জন্য স্পষ্টভাবে এই কলব্যাক মেথডগুলো ইমপ্লিমেন্ট করেন।

নতুন মাক্সার বাস্তবায়ন এবং কন্টেইনার পার্সিং

OggMuxer এবং WavMuxer

আমরা দুটি নতুন ডেডিকেটেড মাক্সার যুক্ত করেছি: OPUS এবং VORBIS স্ট্রিমগুলোকে স্ট্যান্ডার্ড .ogg ফাইলে মাক্স করার জন্য OggMuxer , এবং আনকম্প্রেসড ও ফ্লোটিং-পয়েন্ট PCM .wav অডিও ফাইল তৈরি করার জন্য WavMuxer

কন্টেইনার পার্সিং এবং ট্র্যাক রেফারেন্স

  • MP4 ট্র্যাক রেফারেন্স ( tref ): Mp4Muxer.addTrackReference মাধ্যমে মূল ভিডিও স্ট্রিমের সাথে নির্ভরশীল মেটাডেটা বা অক্স ট্র্যাক লিঙ্ক করা যায়।
  • চ্যাপ্টার এক্সট্র্যাকশন: MP4 ফাইল ( .m4a , .m4b ) থেকে QuickTime ও Nero-এর চ্যাপ্টার এবং Matroska-এর চ্যাপ্টারগুলো এখন অডিওবুক ও পডকাস্ট নেভিগেশনের জন্য Chapter মেটাডেটা এন্ট্রি হিসেবে এক্সট্র্যাক্ট করা হয়।

যেকোনো বাগ রিপোর্ট করতে, অথবা আপনার কোনো প্রশ্ন বা ফিচার অনুরোধ থাকলে, অনুগ্রহ করে ইস্যু ট্র্যাকারটি ব্যবহার করুন। আমরা আপনার উত্তরের অপেক্ষায় রইলাম!

লিখেছেন:
পড়তে থাকুন