আপনার অ্যাপে প্লেব্যাক নিয়ন্ত্রণ যোগ করুন

মিডিয়া প্রদর্শন এবং প্লেব্যাক নিয়ন্ত্রণ করার জন্য একটি অ্যাপ প্লেয়িং মিডিয়ার ব্যবহারকারী ইন্টারফেস উপাদান প্রয়োজন। Media3 লাইব্রেরিতে একটি UI মডিউল রয়েছে যাতে অনেকগুলি UI উপাদান থাকে। UI মডিউলের উপর নির্ভর করতে নিম্নলিখিত নির্ভরতা যোগ করুন:

কোটলিন

implementation("androidx.media3:media3-ui:1.4.0")

গ্রোভি

implementation "androidx.media3:media3-ui:1.4.0"

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

PlayerView প্লেয়ারের দৃষ্টান্ত সংযুক্ত এবং বিচ্ছিন্ন করার জন্য একটি setPlayer পদ্ধতি রয়েছে ( null পাস করে)।

প্লেয়ারভিউ

PlayerView ভিডিও, ইমেজ এবং অডিও প্লেব্যাক উভয়ের জন্য ব্যবহার করা যেতে পারে। এটি ভিডিও প্লেব্যাকের ক্ষেত্রে ভিডিও এবং সাবটাইটেল রেন্ডার করে, ইমেজ প্লেব্যাকের জন্য বিটম্যাপ এবং অডিও ফাইলে মেটাডেটা হিসেবে অন্তর্ভুক্ত আর্টওয়ার্ক প্রদর্শন করতে পারে। আপনি অন্য যেকোনো UI উপাদানের মতো আপনার লেআউট ফাইলে এটি অন্তর্ভুক্ত করতে পারেন। উদাহরণস্বরূপ, একটি PlayerView নিম্নলিখিত XML এর সাথে অন্তর্ভুক্ত করা যেতে পারে:

<androidx.media3.ui.PlayerView
    android:id="@+id/player_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:show_buffering="when_playing"
    app:show_shuffle_button="true"/>

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

একবার লেআউট ফাইলে ভিউ ঘোষণা করা হলে, এটি কার্যকলাপের onCreate পদ্ধতিতে দেখা যেতে পারে:

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView = findViewById(R.id.player_view)
}

জাভা

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // ...
  playerView = findViewById(R.id.player_view);
}

যখন একটি প্লেয়ার শুরু করা হয়, setPlayer কল করে এটি ভিউতে সংযুক্ত করা যেতে পারে:

কোটলিন

// Instantiate the player.
val player = ExoPlayer.Builder(context).build()
// Attach player to the view.
playerView.player = player
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()

জাভা

// Instantiate the player.
player = new ExoPlayer.Builder(context).build();
// Attach player to the view.
playerView.setPlayer(player);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();

একটি পৃষ্ঠের ধরন চয়ন করুন

PlayerView এর surface_type অ্যাট্রিবিউট আপনাকে ভিডিও প্লেব্যাকের জন্য ব্যবহৃত সারফেসের ধরন সেট করতে দেয়। spherical_gl_surface_view (যা গোলাকার ভিডিও প্লেব্যাকের জন্য একটি বিশেষ মান) এবং video_decoder_gl_surface_view (যা এক্সটেনশন রেন্ডারার ব্যবহার করে ভিডিও রেন্ডারিংয়ের জন্য) মান ছাড়াও অনুমোদিত মানগুলি হল surface_view , texture_view এবং none । যদি ভিউটি শুধুমাত্র অডিও প্লেব্যাকের জন্য হয়, তবে পৃষ্ঠ তৈরি করা এড়াতে none ব্যবহার করা উচিত নয় কারণ এটি করা ব্যয়বহুল হতে পারে।

যদি ভিউটি নিয়মিত ভিডিও প্লেব্যাকের জন্য হয় তবে surface_view বা texture_view ব্যবহার করা উচিত। ভিডিও প্লেব্যাকের জন্য TextureView এর তুলনায় SurfaceView অনেকগুলি সুবিধা রয়েছে:

  • অনেক ডিভাইসে উল্লেখযোগ্যভাবে কম পাওয়ার খরচ
  • আরও সঠিক ফ্রেম টাইমিং, যার ফলে ভিডিও প্লেব্যাক মসৃণ হয়।
  • সক্ষম ডিভাইসগুলিতে উচ্চ মানের HDR ভিডিও আউটপুটের জন্য সমর্থন।
  • DRM-সুরক্ষিত বিষয়বস্তু চালানোর সময় সুরক্ষিত আউটপুটের জন্য সমর্থন।
  • অ্যান্ড্রয়েড টিভি ডিভাইসগুলিতে ডিসপ্লের সম্পূর্ণ রেজোলিউশনে ভিডিও সামগ্রী রেন্ডার করার ক্ষমতা যা UI স্তরকে উন্নত করে।

SurfaceView তাই যেখানে সম্ভব TextureView চেয়ে অগ্রাধিকার দেওয়া উচিত। TextureView শুধুমাত্র ব্যবহার করা উচিত যদি SurfaceView আপনার চাহিদা পূরণ না করে। একটি উদাহরণ হল যেখানে Android 7.0 (API স্তর 24) এর আগে ভিডিও পৃষ্ঠের মসৃণ অ্যানিমেশন বা স্ক্রোলিং প্রয়োজন, যেমনটি নিম্নলিখিত নোটগুলিতে বর্ণনা করা হয়েছে। এই ক্ষেত্রে, SDK_INT 24 (Android 7.0) এর কম হলে TextureView ব্যবহার করা বাঞ্ছনীয় এবং অন্যথায় SurfaceView

অ্যান্ড্রয়েড টিভিতে ডি-প্যাড নেভিগেশন

অ্যান্ড্রয়েড টিভির রিমোট কন্ট্রোলে একটি ডি-প্যাড কন্ট্রোল রয়েছে যা আপনার Activity dispatchKeyEvent(KeyEvent) এ কী ইভেন্ট হিসেবে আসা কমান্ড পাঠায়। এগুলি প্লেয়ার ভিউতে অর্পণ করা দরকার:

কোটলিন

override fun dispatchKeyEvent(event: KeyEvent?): Boolean{
  return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event)
}

জাভা

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
  return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
}

প্লেব্যাক কন্ট্রোল নেভিগেট করার জন্য এবং বিজ্ঞাপনগুলি এড়িয়ে যাওয়ার জন্য প্লেয়ার ভিউয়ের জন্য ফোকাসের অনুরোধ করা গুরুত্বপূর্ণ। Activity onCreate ফোকাস করার অনুরোধ বিবেচনা করুন:

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView.requestFocus()
  // ...
}

জাভা

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...
    playerView.requestFocus();
    // ...
}

আপনি যদি Android TV-তে কম্পোজ ব্যবহার করেন, তাহলে আপনাকে AndroidView ফোকাসযোগ্য করে তুলতে হবে এবং সেই অনুযায়ী AndroidView এ মডিফায়ার প্যারামিটার পাস করে ইভেন্টটি অর্পণ করতে হবে:

AndroidView(
  modifier = modifier
    .focusable()
    .onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
  factory = { playerView }
)

অঙ্কনযোগ্য ওভাররাইড করুন

PlayerView প্লেব্যাক নিয়ন্ত্রণ এবং অগ্রগতি বার প্রদর্শন করতে PlayerControlView ব্যবহার করে। PlayerControlView দ্বারা ব্যবহৃত অঙ্কনযোগ্যগুলি আপনার অ্যাপ্লিকেশনে সংজ্ঞায়িত একই নামের সাথে অঙ্কনযোগ্য দ্বারা ওভাররাইড করা যেতে পারে। ওভাররাইড করা যেতে পারে এমন নিয়ন্ত্রণ অঙ্কনযোগ্য তালিকার জন্য PlayerControlView Javadoc দেখুন।

আরও কাস্টমাইজেশন

যেখানে উপরে বর্ণিত এর বাইরে কাস্টমাইজেশন প্রয়োজন, আমরা আশা করি যে অ্যাপ ডেভেলপাররা Media3 এর UI মডিউল দ্বারা প্রদত্ত সেগুলি ব্যবহার করার পরিবর্তে তাদের নিজস্ব UI উপাদানগুলি প্রয়োগ করবে৷