अपने ऐप्लिकेशन में प्लेबैक कंट्रोल जोड़ना

मीडिया चलाने वाले ऐप्लिकेशन को मीडिया दिखाने और प्लेबैक को कंट्रोल करने के लिए, यूज़र इंटरफ़ेस कॉम्पोनेंट की ज़रूरत होती है. Media3 लाइब्रेरी में एक यूज़र इंटरफ़ेस (यूआई) मॉड्यूल होता है, जिसमें कई यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट होते हैं. यूज़र इंटरफ़ेस (यूआई) मॉड्यूल पर निर्भर रहने के लिए, इन्हें जोड़ें निर्भरता:

Kotlinग्रूवी
implementation("androidx.media3:media3-ui:1.5.1")
implementation "androidx.media3:media3-ui:1.5.1"

सबसे ज़रूरी कॉम्पोनेंट PlayerView है, जो मीडिया चलाने के लिए एक व्यू है. PlayerView, वीडियो चलने के दौरान वीडियो, इमेज, सबटाइटल, और एल्बम आर्ट के साथ-साथ, प्लेबैक कंट्रोल भी दिखाता है.

PlayerView के पास अटैच करने और अलग करने के लिए एक setPlayer तरीका है (इसके हिसाब से) पासिंग null) प्लेयर इंस्टेंस.

PlayerView

PlayerView का इस्तेमाल वीडियो, इमेज, और ऑडियो चलाने के लिए किया जा सकता है. यह वीडियो चलाने पर वीडियो और सबटाइटल को रेंडर करता है. साथ ही, इमेज चलाने के लिए बिटमैप को रेंडर करता है. इसके अलावा, यह ऑडियो फ़ाइलों में मेटाडेटा के तौर पर शामिल आर्टवर्क को भी दिखा सकता है. इसे किसी भी अन्य यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट की तरह ही, अपनी लेआउट फ़ाइलों में शामिल किया जा सकता है. उदाहरण के लिए, PlayerView को नीचे दिए गए एक्सएमएल के साथ शामिल किया जा सकता है:

<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 Java फ़ाइलें, इन एट्रिब्यूट और सेटर तरीकों को देखें.

लेआउट फ़ाइल में व्यू का एलान करने के बाद, उसे ऐक्टिविटी के onCreate तरीके में देखा जा सकता है:

KotlinJava
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 को कॉल करें:

KotlinJava
// 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 का इस्तेमाल किया जाना चाहिए. SurfaceView में TextureView से ज़्यादा के कई फ़ायदे हैं: वीडियो प्लेबैक:

  • बहुत कम पावर खपत डिवाइस.
  • इससे वीडियो के फ़्रेम टाइम की ज़्यादा सटीक जानकारी मिलती है. इससे वीडियो बेहतर तरीके से चलता है.
  • जिन डिवाइसों पर यह सुविधा काम करती है उन पर अच्छी क्वालिटी में एचडीआर वीडियो आउटपुट की सुविधा.
  • डीआरएम (डिजिटल राइट्स मैनेजमेंट) से सुरक्षित कॉन्टेंट चलाते समय, सुरक्षित आउटपुट के लिए सहायता.
  • Android TV डिवाइसों पर, डिसप्ले के पूरे रिज़ॉल्यूशन में वीडियो कॉन्टेंट को रेंडर करने की सुविधा. ये डिवाइस, यूज़र इंटरफ़ेस (यूआई) लेयर को अपस्केल करते हैं.

इसलिए, जहां भी हो सके वहां SurfaceView को TextureView के बजाय प्राथमिकता दी जानी चाहिए. TextureView का इस्तेमाल सिर्फ़ तब करना चाहिए, जब SurfaceView आपकी ज़रूरतों को पूरा न करता हो. एक उदाहरण के लिए, वीडियो का ऐनिमेशन या स्क्रोल करना ज़रूरी है Android 7.0 (एपीआई लेवल 24) से पहले का वर्शन होना चाहिए, जैसा कि इस नोट में बताया गया है. इसके लिए इस मामले में, जब SDK_INT कम हो, तब ही TextureView का इस्तेमाल करना बेहतर होगा वर्शन 24 (Android 7.0) और SurfaceView से ज़्यादा होने चाहिए.

Android TV पर डी-पैड नेविगेशन

Android TV के रिमोट कंट्रोल में एक डी-पैड कंट्रोल होता है, जो आपके Activity में से dispatchKeyEvent(KeyEvent) बजे मुख्य इवेंट के तौर पर पहुंचेंगे. इन्हें प्लेयर व्यू को सौंपना होगा:

KotlinJava
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);
}

वीडियो चलाने के लिए, प्लेयर व्यू पर फ़ोकस करना ज़रूरी है विज्ञापन कंट्रोल करने और उन्हें स्किप करने की सुविधा मिलती है. इसमें से onCreate में फ़ोकस करने का अनुरोध करें Activity:

KotlinJava
override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView.requestFocus()
  // ...
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...
    playerView.requestFocus();
    // ...
}

अगर Android TV पर Compose का इस्तेमाल किया जा रहा है, तो आपको AndroidView बनाना होगा फ़ोकस करने लायक बनाएं और इवेंट को ऐक्सेस करने के लिए, मॉडिफ़ायर पैरामीटर को इसके हिसाब से AndroidView:

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

ड्रॉबल बदलना

PlayerView, वीडियो चलाने के लिए PlayerControlView का इस्तेमाल करता है कंट्रोल और प्रोग्रेस बार देखें. PlayerControlView के ज़रिए इस्तेमाल किए गए ड्रॉबल को, आपके ऐप्लिकेशन में दिए गए नामों वाले ड्रॉबल से बदला जा सकता है. यहां जाएं: कंट्रोल ड्रॉबल की सूची के लिए, PlayerControlView Javadoc बदला जा सकता है.

कस्टमाइज़ेशन के अन्य विकल्प

अगर ऊपर बताए गए तरीके से ज़्यादा कस्टमाइज़ेशन की ज़रूरत है, तो हमारा सुझाव है कि ऐप्लिकेशन डेवलपर, Media3 के यूज़र इंटरफ़ेस (यूआई) मॉड्यूल से मिलने वाले यूआई कॉम्पोनेंट के बजाय, अपने यूआई कॉम्पोनेंट लागू करें.