मीडिया चलाने वाले ऐप्लिकेशन को मीडिया दिखाने और प्लेबैक को कंट्रोल करने के लिए, यूज़र इंटरफ़ेस कॉम्पोनेंट की ज़रूरत होती है. Media3 लाइब्रेरी में एक यूज़र इंटरफ़ेस (यूआई) मॉड्यूल होता है, जिसमें कई यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट होते हैं. यूज़र इंटरफ़ेस (यूआई) मॉड्यूल पर निर्भर करने के लिए, यह डिपेंडेंसी जोड़ें:
Kotlin
implementation("androidx.media3:media3-ui:1.4.1")
Groovy
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
Javadoc में इन एट्रिब्यूट और सेटर के तरीकों के बारे में ज़्यादा जानकारी दी गई है.
लेआउट फ़ाइल में व्यू का एलान करने के बाद, उसे ऐक्टिविटी के 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
के कई फ़ायदे हैं:
- कई डिवाइसों पर ऊर्जा की कम खपत होती है.
- फ़्रेम की टाइमिंग ज़्यादा सटीक होती है, जिससे वीडियो प्लेबैक बेहतर होता है.
- जिन डिवाइसों पर यह सुविधा काम करती है उन पर अच्छी क्वालिटी में एचडीआर वीडियो आउटपुट की सुविधा.
- डीआरएम (डिजिटल राइट्स मैनेजमेंट) से सुरक्षित कॉन्टेंट चलाते समय, सुरक्षित आउटपुट के लिए सहायता.
- Android TV डिवाइसों पर, डिसप्ले के पूरे रिज़ॉल्यूशन में वीडियो कॉन्टेंट को रेंडर करने की सुविधा. ये डिवाइस, यूज़र इंटरफ़ेस (यूआई) लेयर को अपस्केल करते हैं.
इसलिए, जहां भी हो सके वहां TextureView
से ज़्यादा SurfaceView
को प्राथमिकता दी जानी चाहिए.
TextureView
का इस्तेमाल सिर्फ़ तब करें, जब SurfaceView
आपकी ज़रूरतों को पूरा न करता हो. इसका एक उदाहरण यह है कि Android 7.0 (एपीआई लेवल 24) से पहले, वीडियो पर आसानी से ऐनिमेशन बनाने या स्क्रोल करने की ज़रूरत होती है. इस बारे में इस नोट में बताया गया है. इस मामले में, TextureView
का इस्तेमाल सिर्फ़ तब करना बेहतर होता है, जब SDK_INT
, 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); }
प्लेबैक कंट्रोल पर नेविगेट करने और विज्ञापनों को स्किप करने के लिए, प्लेयर व्यू पर फ़ोकस करना ज़रूरी है. Activity
के onCreate
में फ़ोकस का अनुरोध करें:
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 के यूज़र इंटरफ़ेस (यूआई) मॉड्यूल से मिलने वाले यूआई कॉम्पोनेंट के बजाय, अपने यूआई कॉम्पोनेंट लागू करें.