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

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

Kotlin

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

ग्रूवी

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

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

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

प्लेयरव्यू

वीडियो, इमेज, और ऑडियो, दोनों को चलाने के लिए 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 तरीका:

Kotlin

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

Java

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

प्लेयर के शुरू होने के बाद, उसे कॉल करके व्यू से अटैच किया जा सकता है setPlayer:

Kotlin

// 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()

Java

// 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 से ज़्यादा के कई फ़ायदे हैं: वीडियो प्लेबैक:

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

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

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

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

Kotlin

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

Java

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

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

Kotlin

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

Java

@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 के यूआई मॉड्यूल से कॉपी किया जा सकता है.