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के सुविधाजनक तरीके जोड़े हैं, ताकि पिछली आवाज़ को खुद ट्रैक किए बिना आसानी से वापस लाया जा सके. -
प्लेयर के अटकने का पता लगाना – कुछ मामलों में, प्लेयर बफ़रिंग या चलाने की स्थिति में अटक सकता है. उदाहरण के लिए, कोडेक की समस्याओं या गलत कॉन्फ़िगरेशन की वजह से. इससे आपके उपयोगकर्ताओं को परेशानी होगी, लेकिन आपको अपनी Analytics में ये समस्याएं कभी नहीं दिखेंगी! इसे ज़्यादा साफ़ तौर पर दिखाने के लिए, प्लेयर अब अटकने की स्थिति का पता लगने पर,
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 Studio Panda 4 में, प्लानिंग मोड और Next Edit Prediction की मदद से, डेवलपमेंट को बेहतर बनाना
Android Studio Panda 4 अब स्टेबल है और इसे प्रोडक्शन में इस्तेमाल किया जा सकता है. इस रिलीज़ में, प्लानिंग मोड, Next Edit Prediction, और अन्य सुविधाएं शामिल हैं. इससे, Android के बेहतर ऐप्लिकेशन बनाना पहले से कहीं ज़्यादा आसान हो गया है.
Matt Dyor • पांच मिनट में पढ़ें
-
प्रॉडक्ट से जुड़ी खबरें
अगर आप Android डेवलपर हैं और अपने ऐप्लिकेशन में एआई की नई सुविधाएं जोड़ना चाहते हैं, तो हमने हाल ही में नए और बेहतर अपडेट लॉन्च किए हैं.
Thomas Ezan • तीन मिनट में पढ़ें
-
प्रॉडक्ट से जुड़ी खबरें
Android 17 का बीटा 4 वर्शन रिलीज़ हो गया है. यह इस रिलीज़ साइकल का आखिरी बीटा वर्शन है. यह ऐप्लिकेशन की कंपैटिबिलिटी और प्लैटफ़ॉर्म की स्थिरता के लिए एक अहम पड़ाव है.
Daniel Galpin • चार मिनट में पढ़ें
अप-टू-डेट रहें
Android डेवलपमेंट से जुड़ी नई जानकारी हर हफ़्ते अपने ईमेल में पाएं