मीडिया चलाने वाले ऐप्लिकेशन को मीडिया दिखाने के लिए यूज़र इंटरफ़ेस कॉम्पोनेंट की ज़रूरत होती है और प्लेबैक को कंट्रोल कर रही हूँ. Media3 लाइब्रेरी में यूज़र इंटरफ़ेस (यूआई) मॉड्यूल होता है, जिसमें यह शामिल होता है कई यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट शामिल हैं. यूज़र इंटरफ़ेस (यूआई) मॉड्यूल पर निर्भर रहने के लिए, इन्हें जोड़ें निर्भरता:
Kotlin
implementation("androidx.media3:media3-ui:1.4.1")
ग्रूवी
implementation "androidx.media3:media3-ui:1.4.1"
सबसे ज़रूरी कॉम्पोनेंट 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 डिवाइस जो यूज़र इंटरफ़ेस (यूआई) लेयर को बड़ा करते हैं.
इसलिए, जहां भी हो सके वहां SurfaceView
को TextureView
से ज़्यादा प्राथमिकता दें.
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 के यूआई मॉड्यूल से कॉपी किया जा सकता है.