Jetpack Media3 एक Player
इंटरफ़ेस के बारे में बताता है, जो बुनियादी फ़ंक्शन के बारे में बताता है
वीडियो और ऑडियो फ़ाइलें चलाने के लिए. डिफ़ॉल्ट रूप से ExoPlayer
लागू होता है
मीडिया3 में इस इंटरफ़ेस का. हम ExoPlayer का इस्तेमाल करने का सुझाव देते हैं, क्योंकि यह
ऐसी सुविधाओं का एक सेट है जो वीडियो चलाने के ज़्यादातर मामलों में काम करती हैं.
ज़रूरत के हिसाब से कस्टमाइज़ किया जा सकता है. ExoPlayer पर भी
डिवाइस और ओएस फ़्रैगमेंटेशन को ऐब्स्ट्रैक्ट कर देगा, ताकि आपका कोड लगातार काम करता रहे
जानकारी को ऐक्सेस करने की सुविधा मिलती है. ExoPlayer में ये शामिल हैं:
- प्लेलिस्ट के लिए सहायता
- अलग-अलग तरह के प्रोग्रेसिव और अडैप्टिव स्ट्रीमिंग का इस्तेमाल करना फ़ॉर्मैट
- क्लाइंट-साइड और सर्वर-साइड विज्ञापन इंसर्शन, दोनों के लिए सहायता
- डीआरएम से सुरक्षित वीडियो चलाने की सुविधा
इस पेज पर, आपको वीडियो चलाने के लिए ज़रूरी चरणों के बारे में बताया गया है ऐप्लिकेशन डाउनलोड करें. ज़्यादा जानकारी के लिए, Media3 ExoPlayer.
शुरू करना
शुरू करने के लिए, ExoPlayer, यूज़र इंटरफ़ेस (यूआई) और इसके सामान्य मॉड्यूल पर डिपेंडेंसी जोड़ें Jetpack Media3:
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-ui:1.4.1" implementation "androidx.media3:media3-common:1.4.1"
आपको अपने इस्तेमाल के उदाहरण के आधार पर, Media3,
जैसे कि DASH फ़ॉर्मैट में स्ट्रीम चलाने के लिए exoplayer-dash
.
1.4.1
को,
लाइब्रेरी. आपके पास प्रॉडक्ट की जानकारी देखने का विकल्प है
ताकि आप सबसे नया वर्शन देख सकें.
मीडिया प्लेयर बनाना
Media3 के साथ, Player
को शामिल करने की प्रोसेस का इस्तेमाल किया जा सकता है
इंटरफ़ेस, ExoPlayer
में बदलाव किया जा सकता है. इसके अलावा, अपने हिसाब से बदलाव भी किया जा सकता है.
कोई ExoPlayer बनाना
ExoPlayer
इंस्टेंस बनाने का सबसे आसान तरीका यह है:
Kotlin
val player = ExoPlayer.Builder(context).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build();
मीडिया प्लेयर बनाने के लिए, इसकी onCreate()
लाइफ़साइकल तरीके का इस्तेमाल करें
Activity
, Fragment
या Service
जहां यह रहता है.
Builder
में ये शामिल हैं
विज्ञापनों को पसंद के मुताबिक बनाने के कई विकल्प देते हैं, जिनमें आपकी दिलचस्पी हो सकती है. जैसे:
setAudioAttributes()
ऑडियो फ़ोकस हैंडलिंग को कॉन्फ़िगर करने के लिएsetHandleAudioBecomingNoisy()
ऑडियो आउटपुट डिवाइस के डिसकनेक्ट होने पर वीडियो चलाने के तरीके को कॉन्फ़िगर करने के लिएsetTrackSelector()
ट्रैक चुनने को कॉन्फ़िगर करने के लिए
Media3 एक PlayerView
यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट उपलब्ध कराता है, जिसे अपने ऐप्लिकेशन में शामिल किया जा सकता है
लेआउट फ़ाइल शामिल है. यह कॉम्पोनेंट, वीडियो चलाने के लिए PlayerControlView
को इनकैप्सुलेट करता है
कंट्रोल, सबटाइटल दिखाने के लिए SubtitleView
, और रेंडर करने के लिए Surface
वीडियो.
खिलाड़ी की तैयारी की जा रही है
इनके लिए प्लेलिस्ट में मीडिया आइटम जोड़ें
इन तरीकों से वीडियो चलाएं
setMediaItem()
और addMediaItem()
.
इसके बाद, prepare()
को कॉल करें
मीडिया को लोड करना और ज़रूरी संसाधनों को हासिल करना शुरू करेगा.
ऐप्लिकेशन के फ़ोरग्राउंड में आने से पहले, आपको इस तरीके का इस्तेमाल नहीं करना चाहिए. अगर आपके
खिलाड़ी Activity
या Fragment
में है, इसका मतलब है कि खिलाड़ी को
एपीआई लेवल 24 और उसके बाद के लेवल या onResume()
पर, onStart()
लाइफ़साइकल मेथड
लाइफ़साइकल तरीके को एपीआई लेवल 23 और उससे पहले के लेवल पर सेट करें. ऐसे खिलाड़ी के लिए जो Service
में है,
तो onCreate()
में इसे तैयार करें.
प्लेयर को कंट्रोल करें
प्लेयर तैयार हो जाने के बाद, कॉल करने के तरीकों का इस्तेमाल करके, प्लेबैक को कंट्रोल किया जा सकता है प्लेयर पर ये सेटिंग लागू होती हैं, जैसे:
play()
औरpause()
प्लेबैक को शुरू करने और रोकने के लिएseekTo()
का इस्तेमाल करके वर्तमान मीडिया आइटम में कोई स्थितिseekToNextMediaItem()
औरseekToPreviousMediaItem()
प्लेलिस्ट में नेविगेट करने के लिए
PlayerView
या PlayerControlView
जैसे यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट अपडेट हो जाएंगे
जब वे खिलाड़ी के लिए बने हों.
प्लेयर को छोड़ें
वीडियो चलाने के लिए, ऐसे संसाधनों की ज़रूरत पड़ सकती है जो सीमित तौर पर उपलब्ध हों, जैसे कि वीडियो
डीकोडर का इस्तेमाल करें, इसलिए release()
को कॉल करना ज़रूरी है
इस्तेमाल करके, संसाधनों को खाली किया जा सकता है.
अगर आपका प्लेयर Activity
या Fragment
में है, तो उसे इसमें छोड़ दें
एपीआई लेवल 24 और उसके बाद के लेवल या onPause()
पर, onStop()
लाइफ़साइकल मेथड
वाला तरीका अपनाएं. Service
में शामिल खिलाड़ी के लिए, ये काम किए जा सकते हैं
इसे onDestroy()
में रिलीज़ करें.
मीडिया सेशन की मदद से प्लेबैक मैनेज करना
Android पर, मीडिया सेशन की मदद से मीडिया के साथ इंटरैक्ट करने का स्टैंडर्ड तरीका मिलता है हर खिलाड़ी को अलग-अलग प्रोसेस से गुज़रना होता है. मीडिया सेशन को अपने प्लेयर से कनेक्ट करना आपको अपने मीडिया प्लेबैक का बाहरी रूप से विज्ञापन करने और प्लेबैक प्राप्त करने की अनुमति देता है बाहरी सोर्स से कमांड दें, जैसे कि मोबाइल और बड़े साइज़, दोनों पर सिस्टम मीडिया कंट्रोल स्क्रीन डिवाइस.
मीडिया सेशन का इस्तेमाल करने के लिए, Media3 Session मॉड्यूल पर कोई डिपेंडेंसी जोड़ें:
implementation "androidx.media3:media3-session:1.4.1"
मीडिया सेशन बनाना
प्लेयर शुरू करने के बाद, MediaSession
बनाया जा सकता है. इसके लिए, यह तरीका अपनाएं:
Kotlin
val player = ExoPlayer.Builder(context).build() val mediaSession = MediaSession.Builder(context, player).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build(); MediaSession mediaSession = new MediaSession.Builder(context, player).build();
Media3, Player
की स्थिति को अपने-आप
MediaSession
. यह किसी भी Player
लागू करने के साथ काम करता है. इसमें ये भी शामिल हैं
ExoPlayer
, CastPlayer
या
कस्टम लागू करने का विकल्प.
अन्य क्लाइंट को कंट्रोल दें
क्लाइंट ऐप्लिकेशन, मीडिया कंट्रोलर लागू कर सकते हैं
का इस्तेमाल करके, अपने मीडिया सेशन के प्लेबैक को कंट्रोल किया जा सकता है. ये अनुरोध पाने के लिए,
callback ऑब्जेक्ट, जब
MediaSession
बनाया जा रहा है.
जब कोई कंट्रोलर आपके मीडिया सेशन से कनेक्ट होने वाला होता है, तो
onConnect()
तरीका को कॉल किया जाता है. दिए गए ControllerInfo
का इस्तेमाल करें
स्वीकार करने का फ़ैसला लेने के लिए
या अस्वीकार करें
अनुरोध किया है. Media3 सेशन के डेमो ऐप्लिकेशन में इसका एक उदाहरण देखें.
कनेक्ट होने के बाद, कंट्रोलर, वीडियो चलाने के निर्देश उस सेशन में भेज सकता है. कॉन्टेंट बनाने
सत्र फिर उन कमांड को प्लेयर को सौंप देता है. प्लेबैक और प्लेलिस्ट
Player
इंटरफ़ेस में बताए गए निर्देशों को,
सत्र.
कॉलबैक के अन्य तरीकों से, आपको इनके लिए अनुरोधों को मैनेज करने की सुविधा मिलती है
पसंद के मुताबिक प्लेबैक निर्देश
साथ ही, प्लेलिस्ट में बदलाव करने के बारे में भी सोचें. इन कॉलबैक में भी एक ControllerInfo
ऑब्जेक्ट शामिल होता है, ताकि आप
के तहत ऐक्सेस कंट्रोल का पता लगाया जा सकता है.
बैकग्राउंड में मीडिया चलाना
ऐप्लिकेशन फ़ोरग्राउंड में न होने पर भी मीडिया चलाना जारी रखने के लिए, जैसे कि
संगीत, ऑडियो बुक या पॉडकास्ट चलाने के लिए, भले ही उपयोगकर्ता के पास आपका ऐप्लिकेशन न हो
खुला है, तो आपका Player
और MediaSession
फ़ोरग्राउंड सेवा. Media3 यह मुहैया कराता है
इस मकसद के लिए MediaSessionService
इंटरफ़ेस.
MediaSessionService
को लागू करना
ऐसी क्लास बनाएं जो MediaSessionService
को एक्सटेंडेट करे और इंस्टैंशिएट करे
onCreate()
लाइफ़साइकल तरीके में MediaSession
.
Kotlin
class PlaybackService : MediaSessionService() { private var mediaSession: MediaSession? = null // Create your Player and MediaSession in the onCreate lifecycle event override fun onCreate() { super.onCreate() val player = ExoPlayer.Builder(this).build() mediaSession = MediaSession.Builder(this, player).build() } // Remember to release the player and media session in onDestroy override fun onDestroy() { mediaSession?.run { player.release() release() mediaSession = null } super.onDestroy() } }
Java
public class PlaybackService extends MediaSessionService { private MediaSession mediaSession = null; @Override public void onCreate() { super.onCreate(); ExoPlayer player = new ExoPlayer.Builder(this).build(); mediaSession = new MediaSession.Builder(this, player).build(); } @Override public void onDestroy() { mediaSession.getPlayer().release(); mediaSession.release(); mediaSession = null; super.onDestroy(); } }
आपके मेनिफ़ेस्ट में, MediaSessionService
इंटेंट वाली आपकी Service
क्लास
फ़ोरग्राउंड चलाने के लिए, FOREGROUND_SERVICE
की अनुमति को फ़िल्टर करें और उसका अनुरोध करें
सेवा:
<service
android:name=".PlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="true">
<intent-filter>
<action android:name="androidx.media3.session.MediaSessionService"/>
</intent-filter>
</service>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
आखिर में, अपनी बनाई हुई क्लास में, कंट्रोल करने के लिए onGetSession()
तरीके को बदलें
आपके मीडिया सेशन का क्लाइंट ऐक्सेस. न्योता स्वीकार करने के लिए, MediaSession
लौटाएं
कनेक्शन का अनुरोध करें या अनुरोध को अस्वीकार करने के लिए null
वापस करें.
Kotlin
// This example always accepts the connection request override fun onGetSession( controllerInfo: MediaSession.ControllerInfo ): MediaSession? = mediaSession
Java
@Override public MediaSession onGetSession(MediaSession.ControllerInfo controllerInfo) { // This example always accepts the connection request return mediaSession; }
आपके यूज़र इंटरफ़ेस (यूआई) से कनेक्ट किया जा रहा है
अब आपका मीडिया सेशन, Activity
से अलग Service
में है या
Fragment
आपका प्लेयर यूआई यहां मौजूद है. लिंक करने के लिए, MediaController
का इस्तेमाल किया जा सकता है
उन्हें एक साथ रखें. onStart()
विधि में Activity
या Fragment
की विधि में आपके
यूज़र इंटरफ़ेस (यूआई), अपने MediaSession
के लिए SessionToken
बनाएं. इसके बाद, SessionToken
का इस्तेमाल करें
MediaController
बनाने के लिए. MediaController
बनाने का काम पूरा हुआ
एसिंक्रोनस रूप से.
Kotlin
override fun onStart() { val sessionToken = SessionToken(this, ComponentName(this, PlaybackService::class.java)) val controllerFuture = MediaController.Builder(this, sessionToken).buildAsync() controllerFuture.addListener( { // Call controllerFuture.get() to retrieve the MediaController. // MediaController implements the Player interface, so it can be // attached to the PlayerView UI component. playerView.setPlayer(controllerFuture.get()) }, MoreExecutors.directExecutor() ) }
Java
@Override public void onStart() { SessionToken sessionToken = new SessionToken(this, new ComponentName(this, PlaybackService.class)); ListenableFuture<MediaController> controllerFuture = new MediaController.Builder(this, sessionToken).buildAsync(); controllerFuture.addListener(() -> { // Call controllerFuture.get() to retrieve the MediaController. // MediaController implements the Player interface, so it can be // attached to the PlayerView UI component. playerView.setPlayer(controllerFuture.get()); }, MoreExecutors.directExecutor()) }
MediaController
, Player
इंटरफ़ेस को लागू करता है, ताकि आप इसका इस्तेमाल कर सकें
प्लेबैक को कंट्रोल करने के लिए, play()
और pause()
जैसे तरीके इस्तेमाल किए जा सकते हैं. अन्य से मिलता-जुलता
कॉम्पोनेंट, जब MediaController
मौजूद न हो, तब उसे रिलीज़ करना न भूलें
जैसे, किसी Activity
के onStop()
लाइफ़साइकल तरीके को कॉल करके
MediaController.releaseFuture()
.
सूचना पब्लिश करना
फ़ोरग्राउंड सेवाओं को चालू रहने के दौरान, सूचना पब्लिश करनी होगी. ऐप्लिकेशन
MediaSessionService
अपने-आप
इसके लिए MediaStyle
सूचना
आपको MediaNotification
के तौर पर सबमिट करना होगा.
पसंद के मुताबिक सूचना पाने के लिए,
MediaNotification.Provider
DefaultMediaNotificationProvider.Builder
के साथ
या प्रोवाइडर इंटरफ़ेस को अपनी पसंद के हिसाब से लागू करके. अपने
को, आपके MediaSession
को
setMediaNotificationProvider
.
अपनी कॉन्टेंट लाइब्रेरी का विज्ञापन करना
क्लाइंट को अनुमति देकर, MediaLibraryService
, MediaSessionService
पर बनता है
आपके ऐप्लिकेशन के उपलब्ध कराए गए मीडिया कॉन्टेंट को ब्राउज़ करने वाले ऐप्लिकेशन. क्लाइंट ऐप्लिकेशन,
इंटरैक्ट करने के लिए MediaBrowser
MediaLibraryService
के साथ.
MediaLibraryService
को लागू करना,
MediaSessionService
, लेकिन onGetSession()
में आपको
MediaSession
के बजाय MediaLibrarySession
. इसकी तुलना में
MediaSession.Callback
, MediaLibrarySession.Callback
में ज़्यादा जानकारी शामिल है
ऐसे तरीके जिनकी मदद से ब्राउज़र क्लाइंट,
लाइब्रेरी सेवा.
MediaSessionService
की तरह ही, अपनेMediaLibraryService
मेनिफ़ेस्ट करें और फ़ोरग्राउंड चलाने के लिए FOREGROUND_SERVICE
की अनुमति का अनुरोध करें
सेवा:
<service
android:name=".PlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="true">
<intent-filter>
<action android:name="androidx.media3.session.MediaLibraryService"/>
<action android:name="android.media.browse.MediaBrowserService"/>
</intent-filter>
</service>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
ऊपर दिए गए उदाहरण में, दोनों MediaLibraryService
के लिए इंटेंट फ़िल्टर शामिल है
साथ ही, पुराने सिस्टम के साथ काम करने की सुविधा के लिए, लेगसी MediaBrowserService
. कॉन्टेंट बनाने
अतिरिक्त इंटेंट फ़िल्टर का इस्तेमाल करने पर, MediaBrowserCompat
एपीआई का इस्तेमाल करने वाले क्लाइंट ऐप्लिकेशन की सुविधा मिलती है
अपने Service
को पहचानने के लिए.
MediaLibrarySession
की मदद से, अपनी कॉन्टेंट लाइब्रेरी को ट्री में दिखाया जा सकता है
एक रूट MediaItem
वाला स्ट्रक्चर. पेड़ के हर MediaItem
में
चाइल्ड एंट्री MediaItem
नोड की कोई भी संख्या. आप चाहें तो किसी दूसरे रूट को या
क्लाइंट के ऐप्लिकेशन के अनुरोध के आधार पर एक अलग ट्री. उदाहरण के लिए, आपने जिस पेड़ को
तो सुझाए गए मीडिया आइटम की सूची खोज रहे क्लाइंट पर वापस लौटें.
इसमें रूट MediaItem
और चाइल्ड MediaItem
नोड का सिंगल लेवल शामिल है,
वहीं, किसी दूसरे क्लाइंट ऐप्लिकेशन पर वापस आने वाला ट्री
पूरी लाइब्रेरी में मौजूद विकल्प चुनें.
MediaLibrarySession
बनाया जा रहा है
MediaLibrarySession
कॉन्टेंट ब्राउज़िंग एपीआई जोड़ने के लिए, MediaSession
एपीआई को बढ़ाएं. इसकी तुलना में
MediaSession
कॉलबैक,
MediaLibrarySession
कॉलबैक
इस तरह की विधियां जोड़ता है:
onGetLibraryRoot()
जब कोई क्लाइंट किसी कॉन्टेंट ट्री के रूटMediaItem
का अनुरोध करता हैonGetChildren()
जब कोई क्लाइंट, कॉन्टेंट ट्री में मौजूदMediaItem
के बच्चों से अनुरोध करता हैonGetSearchResult()
जब कोई क्लाइंट किसी दिए गए विषय के लिए कॉन्टेंट ट्री से खोज नतीजों का अनुरोध करता है क् वेरी
काम के कॉलबैक के तरीकों में एक LibraryParams
शामिल होगा
ऐसा ऑब्जेक्ट जो क्लाइंट ऐप्लिकेशन के कॉन्टेंट ट्री के टाइप के बारे में अतिरिक्त सिग्नल के साथ करता है
रुचि है.