फ़िलहाल, स्टैंडअलोन com.google.android.exoplayer2
इस्तेमाल करने वाले ऐप्लिकेशन
लाइब्रेरी और androidx.media
androidx.media3
पर माइग्रेट होने चाहिए. इस्तेमाल की जाने वाली चीज़ें
Gradle बिल्ड फ़ाइलों, Java और
Kotlin सोर्स फ़ाइलें और ExoPlayer की एक्सएमएल लेआउट फ़ाइलें
2.19.1
से AndroidX Media3 1.1.1
पर.
खास जानकारी
माइग्रेट करने से पहले, नीचे दिए गए सेक्शन देखें और इनके बारे में ज़्यादा जानें नए एपीआई के फ़ायदे, माइग्रेट करने के लिए एपीआई, और ज़रूरी शर्तें तय करें कि आपके ऐप्लिकेशन के प्रोजेक्ट इन शर्तों को पूरा करते हों.
Jetpack Media3 पर माइग्रेट करने के क्या फ़ायदे हैं
- यह ExoPlayer का नया घर है, जबकि
com.google.android.exoplayer2
बंद कर दिया गया. - सभी कॉम्पोनेंट/प्रोसेस में प्लेयर एपीआई को ऐक्सेस करें
MediaBrowser
/MediaController
. MediaSession
की बढ़ी हुई सुविधाओं का इस्तेमाल करना औरMediaController
एपीआई.- बेहतर ऐक्सेस कंट्रोल की मदद से, वीडियो चलाने की सुविधाओं के बारे में बताएं.
MediaSessionConnector
को हटाकर अपने ऐप्लिकेशन को आसान बनाएं औरPlayerNotificationManager
.- Media-कंपैट क्लाइंट एपीआई के साथ पुराने सिस्टम के साथ काम करने की सुविधा
(
MediaBrowserCompat
/MediaControllerCompat
/MediaMetadataCompat
)
AndroidX Media3 पर माइग्रेट करने के लिए मीडिया API
- ExoPlayer और उसके एक्सटेंशन
इसमें लेगसी ExoPlayer प्रोजेक्ट के सभी मॉड्यूल शामिल हैं. इसमें मीडिया सेशन मॉड्यूल को बंद कर दिया गया है. इसके आधार पर, ऐप्लिकेशन या मॉड्यूलcom.google.android.exoplayer2
के पैकेज माइग्रेशन स्क्रिप्ट. - MediasessionConnector (यह
androidx.media:media:1.4.3+
केandroidx.media.*
पैकेज)
MediaSessionConnector
को हटाएं और इसके बजाय,androidx.media3.session.MediaSession
का इस्तेमाल करें. - MediaBrowserServiceCompat (आपके ब्राउज़र पर लागू होने वाली
androidx.media:media:1.4.3+
केandroidx.media.*
पैकेज)
androidx.media.MediaBrowserServiceCompat
की सब-क्लास को इस पर माइग्रेट करेंandroidx.media3.session.MediaLibraryService
और कोड का इस्तेमालMediaBrowserCompat.MediaItem
सेandroidx.media3.common.MediaItem
तक. - MediaBrowserCompat (आपके ब्राउज़र पर लागू होने वाली
androidx.media:media:1.4.3+
केandroid.support.v4.media.*
पैकेज)
MediaBrowserCompat
का इस्तेमाल करके क्लाइंट कोड को माइग्रेट करें याandroidx.media3.session.MediaBrowser
का इस्तेमाल करने के लिएMediaControllerCompat
androidx.media3.common.MediaItem
के साथ.
ज़रूरी शर्तें
पक्का करें कि आपका प्रोजेक्ट, सोर्स कंट्रोल में है
पक्का करें कि स्क्रिप्ट किए गए माइग्रेशन टूल से लागू किए गए बदलावों को आसानी से पहले जैसा किया जा सके. अगर अब तक आपका प्रोजेक्ट, सोर्स कंट्रोल में नहीं है, तो यह सही समय है इसके साथ शुरुआत करें. अगर किसी वजह से आप ऐसा नहीं करना चाहते हैं, तो माइग्रेशन शुरू करने से पहले, अपने प्रोजेक्ट की बैकअप कॉपी बना लें.
ऐप्लिकेशन अपडेट करना
हमारा सुझाव है कि आप प्रोजेक्ट को अपडेट करें, ताकि ExoPlayer लाइब्रेरी का सबसे नया वर्शन और सभी अमान्य तरीकों का इस्तेमाल करें. अगर आपको माइग्रेशन के लिए स्क्रिप्ट का उपयोग करें, तो आपको जिसे आप स्क्रिप्ट द्वारा प्रबंधित वर्शन के साथ अपडेट कर रहे हैं.
अपने ऐप्लिकेशन केcompileSdkVersion को कम से कम 32 तक बढ़ाएं.
Gredle और 'Android Studio Gradle प्लग इन को हाल ही के जो ऊपर बताई गई अपडेट की गई डिपेंडेंसी के साथ काम करता है. इसके लिए उदाहरण:
- 'Android Gradle प्लग इन' वर्शन: 7.1.0
- Gradle वर्शन: 7.4
ऐस्टरिक्स का इस्तेमाल करने वाले सभी वाइल्डकार्ड इंपोर्ट स्टेटमेंट बदलें (*) और पूरी तरह क्वालिफ़ाइड इंपोर्ट स्टेटमेंट का इस्तेमाल करें: वाइल्डकार्ड मिटाएं स्टेटमेंट इंपोर्ट करें और Android Studio का इस्तेमाल करके, स्टेटमेंट (F2 - Alt/Enter, F2 - Alt/Enter, ...).
com.google.android.exoplayer2.PlayerView
से यहां माइग्रेट करेंcom.google.android.exoplayer2.StyledPlayerView
. यह ज़रूरी है क्योंकि इसके जैसे अन्य AndroidX Media3 मेंcom.google.android.exoplayer2.PlayerView
.
स्क्रिप्ट की सुविधा के साथ ExoPlayer माइग्रेट करें
स्क्रिप्ट, com.google.android.exoplayer2
से नई स्क्रिप्ट पर जाने में मदद करती है
पैकेज और मॉड्यूल के स्ट्रक्चर को androidx.media3
में बताया गया है. स्क्रिप्ट लागू होती है
आपके प्रोजेक्ट की पुष्टि के लिए कुछ जांच की जाती है. साथ ही, पुष्टि न हो पाने पर, चेतावनियों को प्रिंट किया जाता है.
अन्यथा, यह नामित श्रेणी और पैकेज की मैपिंग को
Java या Kotlin में लिखे गए Android Gradle प्रोजेक्ट के संसाधन.
usage: ./media3-migration.sh [-p|-c|-d|-v]|[-m|-l [-x <path>] [-f] PROJECT_ROOT]
PROJECT_ROOT: path to your project root (location of 'gradlew')
-p: list package mappings and then exit
-c: list class mappings (precedence over package mappings) and then exit
-d: list dependency mappings and then exit
-l: list files that will be considered for rewrite and then exit
-x: exclude the path from the list of file to be changed: 'app/src/test'
-m: migrate packages, classes and dependencies to AndroidX Media3
-f: force the action even when validation fails
-v: print the exoplayer2/media3 version strings of this script
-h, --help: show this help text
माइग्रेशन स्क्रिप्ट का उपयोग करना
इस पर ExoPlayer प्रोजेक्ट के टैग से माइग्रेशन स्क्रिप्ट को डाउनलोड करें GitHub उस वर्शन से जुड़ा है जिसके लिए आपने अपने ऐप्लिकेशन को अपडेट किया है:
curl -o media3-migration.sh \ "https://raw.githubusercontent.com/google/ExoPlayer/r2.19.1/media3-migration.sh"
स्क्रिप्ट को एक्ज़ीक्यूटेबल बनाएं:
chmod 744 media3-migration.sh
विकल्पों के बारे में जानने के लिए, स्क्रिप्ट को
--help
की मदद से चलाएं.चुनी गई फ़ाइलों के सेट की सूची बनाने के लिए, स्क्रिप्ट को
-l
की मदद से चलाएं माइग्रेशन (चेतावनी के बिना लिस्टिंग को ज़बरदस्ती दिखाने के लिए-f
का इस्तेमाल करें):./media3-migration.sh -l -f /path/to/gradle/project/root
Media3 पर पैकेज, क्लास, और मॉड्यूल मैप करने के लिए,
-m
की मदद से स्क्रिप्ट चलाएं. स्क्रिप्ट को-m
विकल्प के साथ चलाने पर, चुने गए विकल्प में बदलाव लागू हो जाएंगे फ़ाइलें शामिल हैं.- बिना बदलाव किए, पुष्टि करने में होने वाली गड़बड़ी को रोकें
./media3-migration.sh -m /path/to/gradle/project/root
- हर हाल में लागू करना
अगर स्क्रिप्ट को किसी ज़रूरी शर्त के उल्लंघन का पता चलता है, तो माइग्रेशन
-f
फ़्लैग के साथ फ़ोर्स किया गया:./media3-migration.sh -m -f /path/to/gradle/project/root
# list files selected for migration when excluding paths
./media3-migration.sh -l -x "app/src/test/" -x "service/" /path/to/project/root
# migrate the selected files
./media3-migration.sh -m -x "app/src/test/" -x "service/" /path/to/project/root
-m
विकल्प की मदद से स्क्रिप्ट चलाने के बाद, इन मैन्युअल चरणों को पूरा करें:
- देखें कि स्क्रिप्ट ने आपका कोड कैसे बदला है: डिफ़रेंस टूल का इस्तेमाल करें और समस्या को ठीक करें
कुछ समस्याओं का सामना कर सकते हैं (अगर आपको लगता है कि स्क्रिप्ट में
सामान्य समस्या जो
-f
विकल्प पास किए बिना आई थी). - प्रोजेक्ट बनाएं:
./gradlew clean build
या Android में से किसी एक का इस्तेमाल करें स्टूडियो चुनें फ़ाइल > प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करें. इसके बाद, बिल्ड > प्रोजेक्ट मिटाएं और फिर बनाएं > प्रोजेक्ट फिर से बनाएं (अपने बिल्ड को 'बिल्ड - बिल्ड आउटपुट' टैब पर क्लिक करें.
फ़ॉलो-अप करने के लिए सुझाए गए तरीके:
- अनियमित एपीआई के इस्तेमाल से जुड़ी गड़बड़ियों के लिए ऑप्ट-इन की समस्या ठीक करें.
- काम न करने वाले एपीआई कॉल बदलें: सुझाए गए बदले जाने वाले एपीआई का इस्तेमाल करें. Android Studio में पॉइंटर को चेतावनी पर रखें और JavaDoc से सलाह लें का इस्तेमाल करें.
- इंपोर्ट स्टेटमेंट को क्रम से लगाएं: प्रोजेक्ट को Android Studio में खोलें, फिर प्रोजेक्ट व्यूअर में पैकेज फ़ोल्डर नोड पर राइट क्लिक करें और उन पैकेज पर इंपोर्ट को ऑप्टिमाइज़ करें जिनमें बदली गई सोर्स फ़ाइलें हैं.
MediaSessionConnector
को androidx.media3.session.MediaSession
से बदलें
MediaSessionCompat
वाली लेगसी दुनिया में, MediaSessionConnector
यह प्लेयर की स्थिति को सत्र की स्थिति के साथ सिंक करने के लिए ज़िम्मेदार है
साथ ही, उन नियंत्रकों से ऐसे निर्देश पाने की कोशिश की जा रही थी जिन्हें
प्लेयर के तरीके का इस्तेमाल करें. AndroidX Media3 की मदद से, MediaSession
सीधे तौर पर ऐसा करता है
इसके लिए, कनेक्टर की ज़रूरत नहीं होती.
MediasessionConnector के सभी रेफ़रंस और इस्तेमाल को हटाना: अगर आपने ऑटोमेटेड स्क्रिप्ट से ExoPlayer की क्लास और पैकेज को माइग्रेट करें, फिर स्क्रिप्ट ने आपके कोड को एक ऐसी स्थिति में छोड़ दिया है जिसे कंपाइल न किया जा सके
MediaSessionConnector
को ठीक नहीं किया जा सकता. Android Studio से ऐप्लिकेशन बनाने या शुरू करने की कोशिश करते समय आपको टूटा हुआ कोड दिखाना होगा.जिस
build.gradle
फ़ाइल में डिपेंडेंसी बनाए रखी जाती है उसमें AndroidX Media3 सेशन मॉड्यूल पर लागू करने की निर्भरता और इसे हटाएं लेगसी डिपेंडेंसी:implementation "androidx.media3:media3-session:1.4.0"
MediaSessionCompat
को इससे बदलेंandroidx.media3.session.MediaSession
.उस कोड साइट पर जहां आपने लेगसी
MediaSessionCompat
बनाया है, वहां इसका इस्तेमाल करें बनाने के लिएandroidx.media3.session.MediaSession.Builder
MediaSession
. सेशन बिल्डर बनाने के लिए, प्लेयर पास करें.val player = ExoPlayer.Builder(context).build() mediaSession = MediaSession.Builder(context, player) .setSessionCallback(MySessionCallback()) .build()
अपने ऐप्लिकेशन की ज़रूरत के मुताबिक
MySessionCallback
लागू करें. ऐसा करना ज़रूरी नहीं है. अगर आपने जब आपको कंट्रोलर को प्लेयर में मीडिया आइटम जोड़ने की अनुमति देनी हो, तोMediaSession.Callback.onAddMediaItems()
. यह कई तरह की करंट और एपीआई के पुराने तरीकों का इस्तेमाल करके, प्लेयर में मीडिया आइटम जोड़े जा सकते हैं. पुराने सिस्टम के साथ काम करता है. इसमें ये चीज़ें शामिल हैं Media3 कंट्रोलर केMediaController.set/addMediaItems()
तरीके, जैसे किTransportControls.prepareFrom*/playFrom*
भी लेगसी एपीआई का इस्तेमाल करते हैं.onAddMediaItems
को लागू करने पर, सैंपल के तौर पर सेशन डेमो ऐप्लिकेशन केPlaybackService
में उपलब्ध होगी.मीडिया सेशन को उस कोड साइट पर रिलीज़ करें जहां आपने अपना सेशन खत्म किया था माइग्रेशन से पहले:
mediaSession?.run { player.release() release() mediaSession = null }
Media3 में MediaSessionConnector
की सुविधा
नीचे दी गई टेबल में, फ़ंक्शन हैंडल करने वाले Media3 एपीआई दिखाए गए हैं
MediaSessionConnector
में पहले लागू किया गया था.
मीडियासेशनकनेक्टर | AndroidX मीडिया3 |
---|---|
CustomActionProvider |
MediaSession.Callback.onCustomCommand()/
MediaSession.setCustomLayout() |
PlaybackPreparer |
MediaSession.Callback.onAddMediaItems() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
(prepare() को आंतरिक रूप से कॉल किया जाता है)
|
QueueNavigator |
ForwardingPlayer |
QueueEditor |
MediaSession.Callback.onAddMediaItems() |
RatingCallback |
MediaSession.Callback.onSetRating() |
PlayerNotificationManager |
DefaultMediaNotificationProvider/
MediaNotification.Provider |
MediaBrowserService
को MediaLibraryService
पर माइग्रेट करें
AndroidX Media3 पेश करता है MediaLibraryService
जो
MediaBrowserServiceCompat
. MediaLibraryService
का JavaDoc और इसकी खासियत
क्लास MediaSessionService
, एपीआई और
सेवा के एसिंक्रोनस प्रोग्रामिंग मॉडल की जानकारी दें.
MediaLibraryService
, पुराने सिस्टम के साथ काम करता है.
MediaBrowserService
. ऐसा क्लाइंट ऐप्लिकेशन जो MediaBrowserCompat
का इस्तेमाल कर रहा है या
MediaControllerCompat
, कनेक्ट करते समय कोड में बदलाव किए बिना काम करता रहेगा
MediaLibraryService
के लिए. क्लाइंट को यह साफ़ तौर पर पता चलता है कि आपका ऐप्लिकेशन
MediaLibraryService
या लेगसी MediaBrowserServiceCompat
का इस्तेमाल करके.
![सेवा, गतिविधि, और बाहरी ऐप्लिकेशन के साथ ऐप्लिकेशन कॉम्पोनेंट का डायग्राम.](https://developer.android.google.cn/static/media/images/overview.png?authuser=7&hl=hi)
पुराने सिस्टम के साथ काम करने की सुविधा काम करे, इसके लिए आपको दोनों सेवाएं रजिस्टर करनी होंगी इंटरफ़ेस को आपकी सेवा से
AndroidManifest.xml
में बाँटता है. इस तरह से क्लाइंट, ज़रूरी सेवा इंटरफ़ेस की मदद से आपकी सेवा ढूंढता है:<service android:name=".MusicService" android:exported="true"> <intent-filter> <action android:name="androidx.media3.session.MediaLibraryService"/> <action android:name="android.media.browse.MediaBrowserService" /> </intent-filter> </service>
जिस
build.gradle
फ़ाइल में डिपेंडेंसी बनाए रखी जाती है उसमें AndroidX Media3 सेशन मॉड्यूल पर लागू करने की निर्भरता और लेगसी डिपेंडेंसी हटाएं:implementation "androidx.media3:media3-session:1.4.0"
अपनी सेवा को इस तरह बदलें कि वह
MediaLibraryService
से इनहेरिट करेMediaBrowserService
जैसा कि पहले बताया गया है,MediaLibraryService
, लेगसी वर्शन के साथ काम करता हैMediaBrowserService
. इसी वजह से, यह सेवा जिस बड़े एपीआई की मदद से ग्राहकों को दिया जा रहा ऑफ़र पहले जैसा ही है. तो यह बहुत संभावना है कि कोई ऐप्लिकेशन ज़्यादातर लॉजिक, जोMediaBrowserService
को लागू करने के लिए ज़रूरी होता है और इसे नएMediaLibraryService
के हिसाब से अपनाएं.लेगसी की तुलना में मुख्य अंतर
MediaBrowserServiceCompat
के बारे में यहां बताया गया है:सेवा की लाइफ़-साइकल के तरीके लागू करें: वे तरीके जिन्हें:
onCreate/onDestroy
वाली सेवा में ही बदल जाती है, जहां किसी ऐप्लिकेशन, लाइब्रेरी सेशन, प्लेयर, और दूसरी चीज़ों को बांटता/रिलीज़ करता है संसाधन. मानक सेवा जीवन-चक्र विधियों के अलावा, एक ऐप्लिकेशन वापस जाने के लिएonGetSession(MediaSession.ControllerInfo)
को ओवरराइड करना होगाMediaLibrarySession
जिसेonCreate
में बनाया गया था.MediaLibraryService.MediaLibraryOptionCallback लागू करें: बिल्डिंग सेशन के लिए ज़रूरी है
MediaLibraryService.MediaLibrarySessionCallback
लागू करने वाला डोमेन एपीआई के असली तरीकों से ली जा सकती है. इसलिए, एपीआई के तरीकों को बदलने के बजाय पुरानी सेवा है, तो आप अगर आपके पास इन फ़ॉर्मैट की फ़ाइल नहीं है, तोMediaLibrarySession.Callback
बटन का इस्तेमाल करें.इसके बाद कॉलबैक का इस्तेमाल,
MediaLibrarySession
को बनाने के लिए किया जाता है:mediaLibrarySession = MediaLibrarySession.Builder(this, player, MySessionCallback()) .build()
एपीआई में, MediaLibraryLanguageCallback का पूरा एपीआई ढूंढें दस्तावेज़.
MediaSession.Callback.onAddMediaItems()
लागू करें: कॉलबैकonAddMediaItems(MediaSession, ControllerInfo, List<MediaItem>)
ने सेवा दी है एपीआई के ऐसे अलग-अलग मौजूदा और लेगसी तरीके जिनका इस्तेमाल करके, प्लेयर में मीडिया आइटम जोड़े जाते हैं पुराने सिस्टम के साथ काम करने की सुविधा वाले तरीके से वीडियो चलाने के लिए. इसमें ये चीज़ें शामिल हैं Media3 कंट्रोलर केMediaController.set/addMediaItems()
तरीके, साथ ही,TransportControls.prepareFrom*/playFrom*
लेगसी एपीआई का इस्तेमाल करते हैं. कॉलबैक को लागू करने का सैंपल सेशन डेमो ऐप्लिकेशन केPlaybackService
में उपलब्ध होगी.AndroidX Media3 इसके बजाय
androidx.media3.common.MediaItem
का इस्तेमाल कर रहा है MediaBrowserCompat.MediaItem और MediaMetadataCompat का इस्तेमाल करें. वाहन के पुर्ज़े लेगसी क्लास से जुड़े कोड को अपनी ज़रूरत के हिसाब से बदला जाना चाहिए या इसके बजाय Media3MediaItem
से मैप करें.सामान्य एसिंक्रोनस प्रोग्रामिंग मॉडल को
Futures
में बदल दिया गया इसके उलट, डिटैचबलResult
है, जोMediaBrowserServiceCompat
. आपकी सेवा लागू करने से नतीजा हटाने के बजाय एसिंक्रोनसListenableFuture
या सीधे तौर पर वैल्यू देने के लिए, 'तुरंत आने वाले समय' की वैल्यू दिखाना.
PlayerNotificationManager हटाएं
MediaLibraryService
में, मीडिया से जुड़ी सूचनाएं अपने-आप पाने की सुविधा चालू होती है और
MediaLibraryService
का इस्तेमाल करते समय, PlayerNotificationManager
को हटाया जा सकता है या
MediaSessionService
.
ऐप्लिकेशन
onCreate()
में MediaNotification.Provider
, जो
DefaultMediaNotificationProvider
. तब MediaLibraryService
,
ज़रूरत के हिसाब से फ़ोरग्राउंड में सेवा शुरू करना.
MediaLibraryService.updateNotification()
को ओवरराइड करने पर, ऐप्लिकेशन ज़्यादा समय ले सकता है
सूचना पोस्ट करने और सेवा को शुरू/बंद करने का पूरा मालिकाना हक
ज़रूरत के हिसाब से इस्तेमाल करें.
MediaBrowser का इस्तेमाल करके क्लाइंट कोड को माइग्रेट करें
AndroidX Media3 के साथ, MediaBrowser
MediaController/Player
को लागू करता है
इंटरफ़ेस होता है और इसका इस्तेमाल मीडिया ब्राउज़ करने के अलावा मीडिया प्लेबैक को कंट्रोल करने के लिए किया जा सकता है
लाइब्रेरी. अगर आपको एक MediaBrowserCompat
और
MediaControllerCompat
, लेगसी वर्शन में हैं, तो ऐसा करने के लिए सिर्फ़ इसका इस्तेमाल करें
Media3 में MediaBrowser
.
एक MediaBrowser
बनाया जा सकता है और
स्थापित की जा रही सेवा:
scope.launch {
val sessionToken =
SessionToken(context, ComponentName(context, MusicService::class.java)
browser =
MediaBrowser.Builder(context, sessionToken))
.setListener(BrowserListener())
.buildAsync()
.await()
// Get the library root to start browsing the library.
root = browser.getLibraryRoot(/* params= */ null).await();
// Add a MediaController.Listener to listen to player state events.
browser.addListener(playerListener)
playerView.setPlayer(browser)
}
इन बातों पर ध्यान दें
मीडिया सेशन में वीडियो को कंट्रोल करना
में प्लेबैक को कंट्रोल करने के लिए MediaController
बनाने का तरीका जानें
बैकग्राउंड शामिल करें.
आगे के चरण और स्टोरेज खाली करें
एपीआई से जुड़ी गड़बड़ियां ठीक नहीं हो पा रही हैं
Media3 पर माइग्रेट करने के बाद, आपको अनियमित एपीआई इस्तेमाल के बारे में लिंट से जुड़ी गड़बड़ियां दिख सकती हैं.
ये एपीआई इस्तेमाल करने में सुरक्षित हैं. साथ ही, लिंट से जुड़ी गड़बड़ियां हमारे नए
बाइनरी कंपैटबिलिटी की गारंटी. अगर आपको सख्त बाइनरी की ज़रूरत नहीं है
साथ काम करता है, तो इन गड़बड़ियों को @OptIn
से सुरक्षित रूप से छिपाया जा सकता है
एनोटेशन.
बैकग्राउंड
ExoPlayer v1 या v2 में से किसी ने भी बाइनरी कंपैटबिलिटी के बारे में सख्त गारंटी नहीं दी है लाइब्रेरी के दो वर्शन के बीच सही होना चाहिए. ExoPlayer API का सरफ़ेस डिज़ाइन को ध्यान में रखकर डिज़ाइन किया गया है, ताकि ऐप्लिकेशन दुनिया भर के प्लेबैक. ExoPlayer के आने वाले वर्शन में कभी-कभी सिंबल शामिल किया जाएगा नाम बदलना या अन्य नुकसान पहुंचा सकने वाले बदलाव (उदाहरण के लिए, इंटरफ़ेस पर नए ज़रूरी तरीके). तय सीमा में ज़्यादातर मामलों में, नए सिंबल का इस्तेमाल करके इस समस्या को कम किया गया साथ ही, कुछ वर्शन में पुराने सिंबल का इस्तेमाल बंद करने के साथ-साथ, समय बदल दिया जाता है, लेकिन यह हमेशा संभव नहीं था.
इन नुकसान पहुंचा सकने वाले बदलावों की वजह से, ExoPlayer v1 के उपयोगकर्ताओं को दो समस्याएं आईं और v2 लाइब्रेरी:
- ExoPlayer वर्शन से अपग्रेड करने पर, हो सकता है कि कोड कंपाइल करना बंद कर दे.
- ऐसा ऐप्लिकेशन जो सीधे तौर पर और इंटरमीडिएट, दोनों तरीकों से ExoPlayer पर निर्भर था लाइब्रेरी को यह पक्का करना होता था कि दोनों डिपेंडेंसी एक ही वर्शन में हों, ऐसा न करने पर, बाइनरी सिस्टम के साथ काम न करने की वजह से रनटाइम क्रैश हो सकता है.
Media3 में सुधार
Media3, एपीआई सरफ़ेस के किसी सबसेट के लिए बाइनरी कंपैटबिलिटी की गारंटी देता है. कॉन्टेंट बनाने
ऐसे हिस्से जो बाइनरी कंपैटबिलिटी की गारंटी नहीं देते हैं वे
@UnstableApi
. इस अंतर को साफ़ करने के लिए, स्टेबल वर्शन का इस्तेमाल
जब तक एपीआई सिंबल @OptIn
के साथ एनोटेट नहीं किया जाता, तब तक वे लिंट गड़बड़ी जनरेट करते हैं.
ExoPlayer v2 से Media3 में माइग्रेट करने के बाद, आपको एपीआई के लगातार काम करने वाले एपीआई में रुकावट देखने को मिल सकती है लिंट से जुड़ी गड़बड़ियां हैं. इससे ऐसा लग सकता है कि Media3 'कम स्टेबल' है ExoPlayer से वर्शन 2. हालांकि, ऐसा नहीं है. 'अस्थाई' Media3 API के कुछ हिस्से एक जैसे हैं. ExoPlayer v2 API प्लैटफ़ॉर्म के पूरे हिस्से में स्थिरता का स्तर और स्थिर Media3 API प्लैटफ़ॉर्म की गारंटी, ExoPlayer v2 में उपलब्ध नहीं है सभी. अंतर बस यह है कि लिंट गड़बड़ी अब आपको स्थिरता के स्तर की पुष्टि करते हैं.
एपीआई लिंट की स्थिर गड़बड़ियों को ठीक करना
लिंट की इन गड़बड़ियों का समस्या हल करने वाला सेक्शन देखें और जानें कि कैसे
@OptIn
के साथ, स्थिर एपीआई के Java और Kotlin इस्तेमाल पर व्याख्या करें.
ऐसे एपीआई जो अब काम नहीं करते
आपने देखा होगा कि Android में, काम न करने वाले एपीआई पर कॉल बिना पास लगाए जा रहे हैं स्टूडियो. हमारा सुझाव है कि आप ऐसे कॉल के बजाय कोई सही विकल्प इस्तेमाल करें. निशान पर कर्सर घुमाकर JavaDoc देखें. इससे यह पता चलता है कि इसके बजाय किस एपीआई का इस्तेमाल करना है.
![स्क्रीनशॉट: काम न करने वाले तरीके के विकल्प के साथ JavaDoc दिखाने का तरीका](https://developer.android.google.cn/static/media/media3/exoplayer/images/deprecation.png?authuser=7&hl=hi)
कोड सैंपल और डेमो ऐप्लिकेशन
- AndroidX Media3 सेशन डेमो ऐप्लिकेशन (मोबाइल और WearOS)
- पसंद के मुताबिक की जाने वाली कार्रवाइयां
- सिस्टम यूआई सूचना, MediaButton/BT
- Google Assistant प्लेबैक कंट्रोल
- UAMP: Android मीडिया प्लेयर (ब्रांच मीडिया3) (मोबाइल, AutomotiveOS)
- सिस्टम के यूज़र इंटरफ़ेस (यूआई) की सूचना, MediaButton/BT, वीडियो को फिर से चलाने की सुविधा
- Google Assistant/WearOS प्लेबैक कंट्रोल
- AutomotiveOS: पसंद के मुताबिक निर्देश और साइन इन