Media3 1.9.0 लॉन्च हो गया है! इस नए वर्शन में, गड़बड़ियां ठीक की गई हैं और परफ़ॉर्मेंस को बेहतर बनाया गया है. इसके अलावा, इसमें चार नए या पूरी तरह से फिर से लिखे गए मॉड्यूल भी शामिल हैं:
media3-inspector- प्लेबैक के बिना, मेटाडेटा और फ़्रेम एक्सट्रैक्ट करनाmedia3-ui-compose-material3- कुछ ही चरणों में, Material3 Compose Media यूज़र इंटरफ़ेस (यूआई) बनानाmedia3-cast- Cast और लोकल प्लेबैक के बीच ट्रांज़िशन को अपने-आप मैनेज करनाmedia3-decoder-av1- dav1d लाइब्रेरी पर आधारित, फिर से लिखे गए एक्सटेंशन डिकोडर की मदद से, AV1 वीडियो को एक जैसा प्लेबैक करना
हमने PreloadManager में, कैश मेमोरी और मेमोरी मैनेजमेंट से जुड़े सुधार भी किए हैं. साथ ही, ExoPlayer, Transformer, और MediaSession को आसान बनाने के लिए, कई नई सुविधाएं जोड़ी हैं.
इस रिलीज़ में, आपको मीडिया में किए गए बदलावों की झलक देखने के लिए, CompositionPlayer को ऐक्सेस करने की सुविधा भी मिलेगी. हालांकि, यह सुविधा फ़िलहाल एक्सपेरिमेंटल है.
ज़्यादा जानने के लिए, आगे पढ़ें. साथ ही, इस रिलीज़ में किए गए बदलावों की पूरी जानकारी पाने के लिए, कृपया पूरी रिलीज़ नोट देखें.
प्लेबैक के बिना, मेटाडेटा और फ़्रेम एक्सट्रैक्ट करना
कई बार ऐसा होता है, जब आपको प्लेबैक शुरू किए बिना मीडिया की जांच करनी होती है. उदाहरण के लिए, आपको यह पता लगाना हो सकता है कि इसमें कौनसे फ़ॉर्मैट शामिल हैं या इसकी अवधि कितनी है. इसके अलावा, थंबनेल भी वापस पाने पड़ सकते हैं.
media3-inspector के नए मॉड्यूल में, प्लेबैक के बिना मीडिया की जांच करने के लिए सभी यूटिलिटी को एक ही जगह पर शामिल किया गया है:
MediaItemसे अवधि, फ़ॉर्मैट, और स्टैटिक मेटाडेटा पढ़ने के लिएMetadataRetriever.- किसी आइटम से फ़्रेम या थंबनेल पाने के लिए
FrameExtractor. - फ़ाइल में मौजूद सैंपल के बारे में ज़्यादा जानकारी पाने के लिए, Android प्लैटफ़ॉर्म के MediaExtractor क्लास के सीधे तौर पर विकल्प के तौर पर
MediaExtractorCompat.
MetadataRetriever और FrameExtractor, AutoCloseable के आसान पैटर्न को फ़ॉलो करते हैं. ज़्यादा जानकारी के लिए, हमारे नए गाइड पेज देखें.
suspend fun extractThumbnail(mediaItem: MediaItem) {
FrameExtractor.Builder(context, mediaItem).build().use {
val thumbnail = frameExtractor.getThumbnail().await()
}
}
कुछ ही चरणों में, Material3 Compose Media यूज़र इंटरफ़ेस (यूआई) बनाना
पिछली रिलीज़ में, हमने Compose यूज़र इंटरफ़ेस (यूआई) के एलिमेंट और आपके प्लेयर इंस्टेंस के बीच कनेक्टर कोड उपलब्ध कराना शुरू किया था. Media3 1.9.0 में, हमने एक नया मॉड्यूल media3-ui-compose-material3 जोड़ा है. इसमें, पूरी तरह से स्टाइल वाले Material3 बटन और कॉन्टेंट एलिमेंट शामिल हैं. इनकी मदद से, कुछ ही चरणों में मीडिया यूज़र इंटरफ़ेस (यूआई) बनाया जा सकता है. साथ ही, स्टाइल को पसंद के मुताबिक बनाने की पूरी सुविधा मिलती है. अगर आपको अपनी पसंद के मुताबिक यूज़र इंटरफ़ेस (यूआई) बनाना है, तो बिल्डिंग ब्लॉक का इस्तेमाल किया जा सकता है. ये ब्लॉक, अपडेट और कनेक्शन लॉजिक का ध्यान रखते हैं. इसलिए, आपको सिर्फ़ यूज़र इंटरफ़ेस (यूआई) के एलिमेंट को डिज़ाइन करने पर ध्यान देना होगा. Compose यूज़र इंटरफ़ेस (यूआई) के मॉड्यूल के लिए, कृपया हमारे विस्तारित गाइड पेज देखें.
हम Compose के और भी कॉम्पोनेंट पर काम कर रहे हैं. जैसे, पहले से बना सीक बार, PlayerView के लिए पूरी तरह से तैयार विकल्प, और सबटाइटल और विज्ञापन इंटिग्रेशन.
@Composable
fun SimplePlayerUI(player: Player, modifier: Modifier = Modifier) {
Column(modifier) {
ContentFrame(player) // Video surface and shutter logic
Row (Modifier.align(Alignment.CenterHorizontally)) {
SeekBackButton(player) // Simple controls
PlayPauseButton(player)
SeekForwardButton(player)
}
}
}
तैयार एलिमेंट के साथ, Compose प्लेयर का आसान यूज़र इंटरफ़ेस (यूआई)
Cast और लोकल प्लेबैक के बीच ट्रांज़िशन को अपने-आप मैनेज करना
CastPlayer को media3-cast मॉड्यूल में फिर से लिखा गया है, ताकि यह लोकल प्लेबैक (उदाहरण के लिए, ExoPlayer के साथ) और रिमोट Cast प्लेबैक के बीच ट्रांज़िशन को अपने-आप मैनेज कर सके.
MediaSession सेट अप करते समय, बस अपने ExoPlayer के लिए CastPlayer बनाएं और अपने यूज़र इंटरफ़ेस (यूआई) में MediaRouteButton जोड़ें. बस हो गया!
// MediaSession setup with CastPlayer
val exoPlayer = ExoPlayer.Builder(context).build()
val castPlayer = CastPlayer.Builder(context).setLocalPlayer(exoPlayer).build()
val session = MediaSession.Builder(context, castPlayer).build()
// MediaRouteButton in UI
@Composable fun UIWithMediaRouteButton() {
MediaRouteButton()
}
Media3 सेशन के डेमो ऐप्लिकेशन में, CastPlayer का नया इंटिग्रेशन
dav1d पर आधारित, फिर से लिखे गए एक्सटेंशन की मदद से, AV1 वीडियो को एक जैसा प्लेबैक करना
1.9.0 रिलीज़ में, AV1 एक्सटेंशन मॉड्यूल को पूरी तरह से फिर से लिखा गया है. यह मॉड्यूल, लोकप्रिय dav1d लाइब्रेरी पर आधारित है.
सभी एक्सटेंशन डिकोडर मॉड्यूल की तरह, कृपया ध्यान दें कि इसके लिए, काम के नेटिव कोड को सही तरीके से बंडल करने के लिए, सोर्स से बनाना ज़रूरी है. डिकोडर को बंडल करने से, सभी डिवाइसों पर एक जैसा फ़ॉर्मैट सपोर्ट मिलता है. हालांकि, यह डिकोडिंग को आपकी प्रोसेस में चलाता है. इसलिए, यह उस कॉन्टेंट के लिए सबसे सही है जिस पर भरोसा किया जा सकता है.
कैश मेमोरी और मेमोरी मैनेजमेंट को PreloadManager में इंटिग्रेट करना
हमने अपने PreloadManager को और भी बेहतर बनाया है. इसकी मदद से, प्लेबैक के बिना मीडिया को मेमोरी में पहले से लोड किया जा सकता है. इसके बाद, ज़रूरत पड़ने पर इसे प्लेयर को आसानी से सौंपा जा सकता है. हालांकि, यह काफ़ी अच्छी परफ़ॉर्मेंस देता है, लेकिन आपको यह ध्यान रखना होगा कि गलती से ज़्यादा मीडिया को पहले से लोड करके, मेमोरी की सीमाओं को पार न किया जाए. इसलिए, Media3 1.9.0 में, हमने दो नई सुविधाएं जोड़ी हैं. इनसे यह प्रोसेस ज़्यादा आसान और स्थिर हो जाती है:
- कैश मेमोरी की सुविधा – पहले से लोड करने की सीमा तय करते समय, अब पहले से लोड किए गए आइटम के लिए,
PreloadStatus.specifiedRangeCached(0, 5000)को टारगेट स्टेट के तौर पर चुना जा सकता है. इससे, डेटा को मेमोरी में लोड करने के बजाय, तय की गई सीमा को डिस्क पर मौजूद कैश मेमोरी में जोड़ा जाएगा. इसकी मदद से, पहले से लोड करने के लिए आइटम की ज़्यादा बड़ी सीमा तय की जा सकती है, क्योंकि मौजूदा आइटम से दूर मौजूद आइटम को अब मेमोरी में जगह घेरने की ज़रूरत नहीं होगी. ध्यान दें कि इसके लिए,DefaultPreloadManager.BuilderमेंCacheसेट करना ज़रूरी है. - मेमोरी मैनेजमेंट की सुविधा – हमने अपने
LoadControlइंटरफ़ेस को भी अपडेट किया है, ताकि पहले से लोड करने की प्रोसेस को बेहतर तरीके से मैनेज किया जा सके. इसलिए, अब मेमोरी में पहले से लोड किए गए सभी आइटम के लिए, मेमोरी की ऊपरी सीमा तय की जा सकती है. यह डिफ़ॉल्ट रूप से 144 एमबी है. साथ ही,DefaultLoadControl.Builderमें, सीमा को कॉन्फ़िगर किया जा सकता है.DefaultPreloadManager, सीमा तक पहुंचने के बाद, पहले से लोड करने की प्रोसेस को अपने-आप रोक देगा. साथ ही, ज़रूरत पड़ने पर, कम प्राथमिकता वाले आइटम की मेमोरी को अपने-आप रिलीज़ कर देगा.
ExoPlayer में, डिफ़ॉल्ट तौर पर काम करने के नए और आसान तरीके इस्तेमाल करना
हमेशा की तरह, हमने ExoPlayer में भी कई छोटे-छोटे सुधार किए हैं. यहां कुछ सुधारों के बारे में बताया गया है:
- आवाज़ बंद और चालू करना – हमारे पास पहले से ही
setVolumeतरीका मौजूद था. हालांकि, अब हमनेmuteऔरunmuteके तरीके भी जोड़े हैं. इनकी मदद से, पिछली आवाज़ को खुद ट्रैक किए बिना आसानी से वापस लाया जा सकता है. - प्लेयर के अटकने की समस्या का पता लगाना – कुछ मामलों में, प्लेयर बफ़रिंग या चलाने की स्थिति में अटक सकता है. उदाहरण के लिए, कोडेक की समस्याओं या गलत कॉन्फ़िगरेशन की वजह से. इससे आपके उपयोगकर्ताओं को परेशानी होगी, लेकिन आपको अपने आंकड़ों में ये समस्याएं कभी नहीं दिखेंगी! इस समस्या को ज़्यादा साफ़ तौर पर दिखाने के लिए, प्लेयर अब अटकने की स्थिति का पता लगने पर,
StuckPlayerExceptionकी रिपोर्ट करता है. - डिफ़ॉल्ट रूप से वेकलॉक – वेक लॉक मैनेजमेंट की सुविधा पहले ऑप्ट-इन थी. इसलिए, ऐसे मामले ढूंढना मुश्किल था जहां बैकग्राउंड में चलने पर, प्लेबैक की प्रोसेस में ज़्यादा देरी हो सकती है. अब यह सुविधा ऑप्ट-आउट है. इसलिए, आपको इसके बारे में चिंता करने की ज़रूरत नहीं है. साथ ही, प्लेबैक के दौरान, वेक लॉक को मैन्युअल तरीके से मैनेज करने की सुविधा को भी हटाया जा सकता है.
- सीसी बटन लॉजिक के लिए आसान सेटिंग – "सबटाइटल चालू/बंद करें" के लिए
TrackSelectionParametersको बदलना मुश्किल था. इसलिए, हमने इस इस्तेमाल के मामले के लिए,selectTextByDefaultका आसान बूलियन विकल्प जोड़ा है.
MediaSession में, मीडिया बटन की प्राथमिकताओं को आसान बनाना
अब तक, Android Auto या WearOS पर मीडिया सूचना ड्रॉअर में दिखने वाले बटन के लिए, अपनी प्राथमिकताएं तय करने के लिए, कस्टम कमांड और बटन तय करने पड़ते थे. भले ही, आपको सिर्फ़ प्लेयर के स्टैंडर्ड तरीके को ट्रिगर करना हो.
Media3 1.9.0 में, एक नई सुविधा जोड़ी गई है. इसकी मदद से, यह प्रोसेस ज़्यादा आसान हो जाती है. अब प्लेयर के स्टैंडर्ड कमांड की मदद से, मीडिया बटन की प्राथमिकताएं तय की जा सकती हैं. इसके लिए, कस्टम कमांड को मैनेज करने की ज़रूरत नहीं होती.
session.setMediaButtonPreferences(listOf(
CommandButton.Builder(CommandButton.ICON_FAST_FORWARD) // choose an icon
.setDisplayName(R.string.skip_forward)
.setPlayerCommand(Player.COMMAND_SEEK_FORWARD) // choose an action
.build()
))
फ़ास्ट फ़ॉरवर्ड बटन के साथ, मीडिया बटन की प्राथमिकताएं
रीयल-टाइम झलक के लिए CompositionPlayer
1.9.0 रिलीज़ में, CompositionPlayer को @ExperimentalApi एनोटेशन के तहत पेश किया गया है. एनोटेशन से पता चलता है कि यह सुविधा एक्सपेरिमेंटल है. हालांकि, इस पर अब भी काम चल रहा है.
CompositionPlayer, Media3 एडिटिंग एपीआई में एक नया कॉम्पोनेंट है. इसे मीडिया में किए गए बदलावों की रीयल-टाइम झलक देखने के लिए डिज़ाइन किया गया है. Media3 के जाने-पहचाने Player इंटरफ़ेस पर बने CompositionPlayer की मदद से, उपयोगकर्ता एक्सपोर्ट की प्रोसेस शुरू करने से पहले, अपने बदलावों को देख सकते हैं. यह उसी Composition ऑब्जेक्ट का इस्तेमाल करता है जिसे एक्सपोर्ट करने के लिए, Transformer को पास किया जाता है. इससे, झलक और एक्सपोर्ट के लिए डेटा मॉडल को एक करके, एडिटिंग वर्कफ़्लो को बेहतर बनाया जाता है.
हमारा सुझाव है कि आप CompositionPlayer का इस्तेमाल शुरू करें और अपनी राय शेयर करें. साथ ही, ज़्यादा जानकारी के लिए, आने वाली पोस्ट और दस्तावेज़ के अपडेट पर नज़र रखें.
Transformer में, InAppMuxer को डिफ़ॉल्ट मक्सर के तौर पर इस्तेमाल करना
Transformer अब मीडिया कंटेनर फ़ाइलें लिखने के लिए, InAppMp4Muxer को डिफ़ॉल्ट मक्सर के तौर पर इस्तेमाल करता है. इंटरनली, InAppMp4Muxer Media3 के Muxer मॉड्यूल पर निर्भर करता है. इससे, एपीआई के सभी वर्शन में एक जैसा व्यवहार मिलता है.
ध्यान दें कि Transformer अब डिफ़ॉल्ट रूप से, Android प्लैटफ़ॉर्म के MediaMuxer का इस्तेमाल नहीं करता. हालांकि, अगर आपके इस्तेमाल के मामले में इसकी ज़रूरत है, तो FrameworkMuxer.Factory को setMuxerFactory के ज़रिए उपलब्ध कराया जा सकता है.
स्पीड अडजस्टमेंट के नए एपीआई
1.9.0 रिलीज़ में, मीडिया एडिटिंग के लिए स्पीड अडजस्टमेंट के एपीआई को आसान बनाया गया है. हमने स्पीड को कंट्रोल करने के लिए, सीधे EditedMediaItem.Builder पर नए तरीके पेश किए हैं. इससे एपीआई ज़्यादा आसान हो गया है. अब EditedMediaItem.Builder पर setSpeed(SpeedProvider provider) को कॉल करके, क्लिप की स्पीड बदली जा सकती है:
val speedProvider = object : SpeedProvider {
override fun getSpeed(presentationTimeUs: Long): Float {
return speed
}
override fun getNextSpeedChangeTimeUs(timeUs: Long): Long {
return C.TIME_UNSET
}
}
EditedMediaItem speedEffectItem = EditedMediaItem.Builder(mediaItem)
.setSpeed(speedProvider)
.build()
इस नए तरीके से, Effects#createExperimentalSpeedChangingEffects() का इस्तेमाल करने का पिछला तरीका बदल जाता है. हमने इस तरीके को बंद कर दिया है और इसे आने वाली रिलीज़ में हटा दिया जाएगा.
EditedMediaItemSequence के लिए, ट्रैक टाइप पेश करना
1.9.0 रिलीज़ में, सीक्वेंस बनाते समय, EditedMediaItemSequence के लिए, आउटपुट के ट्रैक टाइप तय करना ज़रूरी है. इस बदलाव से, यह पक्का होता है कि पूरे कंपोज़िशन में, ट्रैक को मैनेज करने की प्रोसेस ज़्यादा साफ़ तौर पर और बेहतर तरीके से हो.
यह, EditedMediaItemSequence.Builder के नए कंस्ट्रक्टर की मदद से किया जाता है.यह कंस्ट्रक्टर, ट्रैक टाइप का सेट स्वीकार करता है. जैसे, C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO.
इसे आसान बनाने के लिए, हमने नए स्टैटिक तरीके जोड़े हैं:
- EditedMediaItemSequence.withAudioFrom(List<EditedMediaItem>)
- EditedMediaItemSequence.withVideoFrom(List<EditedMediaItem>)
- EditedMediaItemSequence.withAudioAndVideoFrom(List<EditedMediaItem>)
हमारा सुझाव है कि सीक्वेंस की परिभाषाओं को ज़्यादा साफ़ तौर पर और भरोसेमंद बनाने के लिए, नए कंस्ट्रक्टर या तरीकों पर माइग्रेट करें.
सिर्फ़ वीडियो वाला सीक्वेंस बनाने का उदाहरण:
EditedMediaItemSequence videoOnlySequence =
EditedMediaItemSequence.Builder(setOf(C.TRACK_TYPE_VIDEO))
.addItem(editedMediaItem)
.build()
अगर आपको कोई गड़बड़ी दिखती है या आपके कोई सवाल हैं या आपको किसी सुविधा का अनुरोध करना है, तो कृपया Media3 के समस्या ट्रैकर के ज़रिए हमसे संपर्क करें. हमें आपके जवाब का इंतज़ार रहेगा!
पढ़ना जारी रखें
-
प्रॉडक्ट से जुड़ी खबरें
मोबाइल का नेटवर्क हमेशा बदलता रहता है. इससे नई संभावनाएं और नए खतरे दोनों पैदा होते हैं. इन बदलावों के बावजूद, Android और Google Play यह पक्का करने के लिए प्रतिबद्ध हैं कि अरबों लोग, भरोसे के साथ अपने ऐप्लिकेशन का आनंद लेते रहें और डेवलपर के इनोवेशन बढ़ते रहें.
Vijaya Kaza • तीन मिनट में पढ़ें
-
प्रॉडक्ट से जुड़ी खबरें
Jetpack Compose की अप्रैल ‘26 रिलीज़ स्थिर है. इस रिलीज़ में, Compose के मुख्य मॉड्यूल का वर्शन 1.11 (BOM मैपिंग देखें), शेयर किए गए एलिमेंट के डीबग टूल, ट्रैकपैड इवेंट वगैरह शामिल हैं.
Meghan Mehta • पांच मिनट में पढ़ें
-
प्रॉडक्ट से जुड़ी खबरें
Android Studio Panda 4 अब स्थिर है और इसे प्रोडक्शन में इस्तेमाल किया जा सकता है. इस रिलीज़ में, प्लानिंग मोड, 'अगले बदलाव का अनुमान' सुविधा वगैरह शामिल हैं. इससे, बेहतर क्वालिटी वाले Android ऐप्लिकेशन बनाना पहले से कहीं ज़्यादा आसान हो गया है.
Matt Dyor • पांच मिनट में पढ़ें
अप-टू-डेट रहें
Android डेवलपमेंट से जुड़ी नई जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.