Media3
| नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
|---|---|---|---|---|
| 7 जुलाई, 2026 | 1.10.1 | - | 1.11.0-beta01 | 1.11.0-alpha01 |
डिपेंडेंसी का एलान करना
Media3 पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
ग्रूवी
dependencies { def media3_version = "1.10.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.10.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
डिपेंडेंसी के बारे में ज़्यादा जानकारी के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.
सुझाव/राय दें या शिकायत करें
आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. Media3 के समस्या ट्रैकर का इस्तेमाल करके, सवालों के जवाब, पहले से मालूम समस्याओं, और सुविधाओं के अनुरोधों के बारे में जानकारी पाई जा सकती है. साथ ही, नई समस्याएं सबमिट की जा सकती हैं.
वर्शन 1.11.0
1.11.0-beta01
7 जुलाई, 2026
- ExoPlayer:
- ट्रैक चुनने के लिए,
Formatकी प्राथमिकता को दिखाने वालाFormat.selectionPriorityजोड़ें (#3236).
- ट्रैक चुनने के लिए,
- ट्रैक के विकल्प:
- समय पर निर्भर रहने वाली एक साथ कई कार्रवाइयां करने से जुड़ी समस्या को ठीक किया गया है. इस समस्या में, चुने गए पैरामीटर को ट्रैक करने के लिए तेज़ी से किए गए क्रमवार अपडेट की वजह से, कुछ अपडेट मिट सकते हैं या उन्हें बदला जा सकता है.
- डेटा निकालने वाले टूल:
- AVI: उस समस्या को ठीक किया गया है जिसमें ऑडियो ट्रैक पर कीफ़्रेम फ़्लैग के बिना फ़ाइलें चलाने पर, ऑडियो गायब हो जाता था और
OutOfMemoryErrorदिखता था. - MP3: Xing/Info हेडर से, बिना किसी रुकावट के चलने वाले गानों की अवधि का इस्तेमाल करें (#3183).
- MP3: डिकोड किए गए पीसीएम ट्रिमिंग (#3200) से मेल खाने के लिए, LAME/Xing एन्कोडर डिले और पैडिंग मेटाडेटा को अडजस्ट करें.
- AVI: उस समस्या को ठीक किया गया है जिसमें ऑडियो ट्रैक पर कीफ़्रेम फ़्लैग के बिना फ़ाइलें चलाने पर, ऑडियो गायब हो जाता था और
- ऑडियो:
- Google Pixel डिवाइसों पर चलाने के लिए, EAC3-JOC से EAC3 पर फ़ॉलबैक करने का पाथ हटाएं. ऐसा इसलिए, क्योंकि उनके स्टैंडर्ड EAC3 डिकोडर, EAC3-JOC स्ट्रीम को डिकोड नहीं कर सकते (#3257).
- वीडियो:
VideoFrameReleaseHelperमें मौजूद बग को ठीक किया गया है. इस बग की वजह से, डिसप्ले में बदलाव होने परChoreographerके गैर-ज़रूरी कॉलबैक ट्रिगर हो सकते थे. साथ ही, मुख्य थ्रेड पर सीपीयू के बहुत ज़्यादा वेकअप हो सकते थे.
- सेशन:
MediaSessionमें इमेज का साइज़ प्लैटफ़ॉर्म की सीमा के आस-पास होने पर, आर्टवर्क के दो बार छोटे होने की समस्या को ठीक किया गया है. साथ ही, सूचनाओं में धुंधलेपन की समस्या को ठीक किया गया है (#3134).- ऐप्लिकेशन के बैकग्राउंड में होने पर, एसिंक्रोनस आर्टवर्क बिटमैप लोड करने वाला कॉलबैक, फ़ोरग्राउंड सेवा शुरू करने की कोशिश करता है. इस वजह से,
ForegroundServiceStartNotAllowedExceptionमेंMediaNotificationManagerक्रैश होने की समस्या को ठीक किया गया है (#3270). - उस समस्या को ठीक किया गया है जिसमें
PositionInfoको मिलेPositionInfoऑब्जेक्ट में उनके मूलTimelineयूआईडी मौजूद नहीं थे.MediaControllerअब सेशन, स्टेट अपडेट के दौरान इन यूआईडी का भरोसेमंद तरीके से अनुवाद करता है और उन्हें आगे बढ़ाता है.
- यूआई:
PlayerViewऔर Compose में शटर सप्रेस करने से जुड़ी गड़बड़ी को ठीक किया गया हैPresentationState. इस गड़बड़ी की वजह से, उन टाइमलाइन पर क्रैश हो रहा था जिन पर अवधि के यूआईडी लुकअप की सुविधा काम नहीं करती (#3264).
- एचएलएस एक्सटेंशन:
- DASH एक्सटेंशन:
- मेनिफ़ेस्ट (MPD) से कई
Locationएलिमेंट पार्स करने की सुविधा जोड़ी गई है. साथ ही, मेनिफ़ेस्ट लोड न होने पर,DashMediaSourceमें जगह की जानकारी वापस लाने की सुविधा जोड़ी गई है.
- मेनिफ़ेस्ट (MPD) से कई
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- बंडल किए गए dav1d JNI में मोनोक्रोम वीडियो के लिए सहायता जोड़ी गई.
- कास्ट एक्सटेंशन:
- मीडिया रूट पिकर की दिखने की स्थिति को मॉनिटर करने के लिए,
MediaRouteButtonStateऔरrememberMediaRouteButtonStateजोड़े गए. साथ ही,MediaRouteButton(3172) मेंstateपैरामीटर जोड़ा गया. - उस गड़बड़ी को ठीक किया गया है जिसमें ट्रैक चुनने के बाद,
RemoteCastPlayerहमेशा के लिए ट्रैक-मास्किंग की स्थिति में फंस जाता था. इस वजह से, यह Cast receiver से मिलने वाले ट्रैक के बाद के अपडेट को अनदेखा कर देता था (#3237). - उस बग को ठीक किया गया है जिसमें Media3 के अलावा किसी अन्य डिवाइस से शुरू किए गए कास्ट सेशन में शामिल होने की कोशिश करने पर,
DefaultMediaItemConverterNullPointerExceptionदिखाता है. CastPlayerको ऐसेMediaItemsट्रांसफ़र करने से रोकें जिन्हें ऐक्टिव प्लेयर बदलते समय चलाया नहीं जा सकता (#3199).
- मीडिया रूट पिकर की दिखने की स्थिति को मॉनिटर करने के लिए,
- टेस्ट यूटिलिटी:
setPlaybackLooperकोTestExoPlayerBuilderमें जोड़ें.
- हटाए गए सिंबल हटाएं:
androidx.media3.common.C.generateAudioSessionIdV21हटाएं. इसके बजाय,androidx.media3.common.util.Util.generateAudioSessionIdका इस्तेमाल करें.
1.11.0-alpha01
- कॉमन लाइब्रेरी:
- ऑडियो चैनल मास्क को साफ़ तौर पर दिखाने के लिए,
Format.channelMaskजोड़ें. साथ ही, इसे सुरक्षित तरीके से हल करने के लिए, नयाUtil.getAudioTrackChannelConfig(Format)ओवरलोड जोड़ें. - Kotlin को 2.0.20 से 2.2.0 पर अपग्रेड करें.
- ऑडियो चैनल मास्क को साफ़ तौर पर दिखाने के लिए,
- ExoPlayer:
- समय पर निर्भर रहने वाली ऐसी गड़बड़ी को ठीक किया गया है जिसकी वजह से ExoPlayer में
IllegalStateExceptionयाIndexOutOfBoundsExceptionहो सकता है. AdsMediaSourceमें विज्ञापन ग्रुप की संख्या की जांच को आसान बनाएं, ताकि जब किसी विज्ञापन ग्रुप को पूरी तरह से प्रोसेस किया जाए, तो विज्ञापन ग्रुप की संख्या कम हो सके (hasUnplayedAds()falseहै). इससे रीसेट वर्कफ़्लो के दौरान, डाइनैमिक विज्ञापन ग्रुप के साइज़ को बदला जा सकेगा.- एक से ज़्यादा अवधि वाले कॉन्टेंट (जैसे, DASH) में विज्ञापन दिखाने की सुविधा जोड़ें. इसके लिए, हर अवधि के लिए
AdPlaybackStateको अलग-अलग करें और ऑफ़सेट करें. SampleStreamमेंgetFlags()औरFLAG_STRICT_DURATIONजोड़ें, ताकि स्ट्रीम रिपोर्टिंग फ़्लैग कर सकें. साथ ही, रेंडरर को अपडेट करें, ताकि वे इन फ़्लैग की डाइनैमिक तरीके से जांच कर सकें.- जब स्ट्रीम फ़ॉर्मैट से मान्य वैल्यू नहीं मिलती है, तब
MediaCodecVideoRendererमें फ़्रेम रेट एस्टिमेटर औरMediaCodecAudioRendererमें कोडेक आउटपुट फ़ॉर्मैट का इस्तेमाल करके, कोडेक के ऑपरेटिंग रेट का हिसाब लगाया जाता है. इससे कोडेक को बार-बार रीसेट करने की ज़रूरत नहीं पड़ती. - कोर प्लेयर में क्लाइंट-साइड से डाले गए विज्ञापनों के लिए, कॉन्टेंट की क्लिपिंग हटाने की सुविधा. इसके बजाय,
AdsMediaSourceक्लिप करने की लॉजिक का ध्यान रखता है. क्लाइंट-साइड पर डाले गए विज्ञापन स्रोतों को अपडेट करना होगा, ताकि कॉन्टेंट क्लिप करने की सुविधा को इंटरनल तौर पर लागू किया जा सके. - ऐसे ट्रैक को
supported=NO_EXCEEDS_CAPABILITIESके तौर पर मार्क करें जिनमें कोडेक प्रोफ़ाइल या लेवल की जानकारी सही फ़ॉर्मैट में दी गई है, लेकिन उसे पहचाना नहीं जा सका. इसके बजाय,supported=YESके तौर पर मार्क करें.supported=YESका इस्तेमाल उन ट्रैक के लिए किया जाता है जिनमें प्रोफ़ाइल या लेवल की जानकारी मौजूद नहीं होती या गलत फ़ॉर्मैट में दी गई होती है. इससे यह पक्का होता है कि डिवाइस पर काम न करने वाले ट्रैक न चुने जाएं. ऐसा तब होता है, जब डिवाइस पर काम करने वाले बेहतर ट्रैक उपलब्ध हों. DefaultPreloadManager.SimpleRankingDataComparatorजोड़ें. यह एकRankingDataComparatorहै. यह मीडिया आइटम की रैंक की तुलना करता है. यह तुलना, मौजूदा समय में चल रहे मीडिया आइटम के इंडेक्स से उनकी दूरी के आधार पर की जाती है. अगर ज़्यादा बारीकी से तुलना करने वाले लॉजिक की ज़रूरत है, तो ऐप्लिकेशन इसकेcompare(Integer, Integer)तरीके को बदल सकते हैं. कस्टमSimpleRankingDataComparatorकोDefaultPreloadManager.Builderके नए कंस्ट्रक्टर के ज़रिए इंजेक्ट किया जा सकता है.- अगर उपलब्ध हीप मेमोरी कम है, तो बफ़र बाइट के साइज़ की सीमाओं पर वापस जाकर,
DefaultLoadControl.prioritizeTimeOverSizeThresholdsके ओओएम जोखिम को कम करें. MediaItem.imageDurationUsसेट न होने पर, अब भी इमेज को हैंडल किया जा सकता है: JPEG और HEIC फ़ॉर्मैट वाली इमेज अब बहुत कम समय के लिए 'प्ले' होती हैं. यह समय डिफ़ॉल्ट रूप से सेट होता है. ऐसा ही PNG और अन्य इमेज के साथ पहले होता था.MediaSourceमेंBandwidthMeterकोMediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)से जोड़ें. हालांकि, कस्टम तरीके से लागू की गई बंद की गई विधि को अब भी डिफ़ॉल्ट रूप से कॉल किया जाएगा. हमारा सुझाव है कि आप नई विधि लागू करें औरBandwidthMeter.getTransferListener()का इस्तेमाल करके, पुरानी विधि के बराबर नतीजे पाएं.DefaultBandwidthMeterमें, कस्टमInitialBitrateSupplierके लिए सहायता जोड़ें. इससे ऐप्लिकेशन, शुरुआती बिटरेट का अनुमान लगाने के लिए अपना लॉजिक दे सकते हैं. इसका इस्तेमालDefaultBandwidthMeterबनाते समय और नेटवर्क टाइप में बदलाव होने पर किया जाएगा.DefaultBandwidthMeter.Builder.setInitialBitrateSupplier()की मदद से, सप्लायर सेट किया जा सकता है.- डाइनैमिक शेड्यूलिंग की सुविधा डिफ़ॉल्ट रूप से चालू करें.
ExoPlayerplayback work loop स्टैटिक इंटरवल के बजाय, डाइनैमिक तरीके से चलेगा. - प्री-रोल सैंपल के साथ ट्रैक को चालू प्लेबैक में शामिल करते समय, गैर-ज़रूरी रीसेट को हटाता है.
DefaultBandwidthMeterमें,getInitialBitrateCountryGroupAssignmentको ऑप्टिमाइज़ किया गया है. इससे, देश के ग्रुप असाइनमेंट को ऐरे के बजाय 32-बिट पूर्णांक में पैक किया जा सकता है. इससे कोड का साइज़ कम हो जाता है और असाइनमेंट से बचा जा सकता है.- कुछ डिवाइसों पर
AudioTrackको शुरू करने में आने वाली समस्याओं को ठीक किया गया है. इसके लिए, यह पक्का किया गया है कि फिर से कोशिश करने की सुविधा, हमेशा कम से कम एक सेकंड के बफ़र साइज़ का इस्तेमाल करे. ऐसा तब होगा, जब बफ़र साइज़ को आधा करके फिर से कोशिश करने पर भी समस्या ठीक न हो (#3207). - कुछ डिवाइसों पर कोडेक से जुड़ी समस्या ठीक की गई है. इन डिवाइसों पर, इनपुट बफ़र मिलने से पहले फ़्लश किए जाने पर, कोडेक सभी सैंपल को प्रोसेस नहीं कर पा रहा था.
- एक्सपेरिमेंट के तौर पर
ExoPlayer.Builder.enablePerStreamMediaProgression()जोड़ें, ताकि हर स्ट्रीम के हिसाब से मीडिया प्रोसेसिंग को बेहतर बनाया जा सके. इससे प्लेलिस्ट के आइटम के बीच स्टार्टअप लेटेंसी कम हो जाती है. साथ ही, बहुत कम अवधि वाले कॉन्टेंट के साथ "अटकने" से बचने में मदद मिलती है (#3122). - ऑडियो सेशन आईडी के इस्तेमाल से जुड़ी रेस कंडीशन को ठीक किया गया है. इसमें
setAudioSessionIdकी ओर से अपने-आप जनरेट होने वाले शुरुआती ऑडियो सेशन आईडी का इस्तेमाल किया जाता था. इसके बजाय,setAudioSessionIdकी ओर से सेट की गई वैल्यू का इस्तेमाल किया जाएगा (#3241).ExoPlayer - प्रोग्रेसिव मीडिया (जैसे, MP4, Matroska) के लिए, एक्सपेरिमेंट के तौर पर HAGC (ST 2094-50) टाइम किए गए मेटाडेटा को चलाने की सुविधा जोड़ी गई है. प्लेयर, HAGC मेटाडेटा ट्रैक को उससे जुड़े वीडियो ट्रैक के साथ अपने-आप मर्ज कर देता है. साथ ही, API 37 या इसके बाद के वर्शन वाले डिवाइसों पर डिकोडर को मेटाडेटा आउट-ऑफ़-बैंड डिलीवर करता है. इस सुविधा को
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false)के ज़रिए बंद किया जा सकता है.
- समय पर निर्भर रहने वाली ऐसी गड़बड़ी को ठीक किया गया है जिसकी वजह से ExoPlayer में
- CompositionPlayer:
TrackSelectorइंस्टेंस रिलीज़ न होने की समस्या को ठीक किया गया है.
- ट्रांसफ़ॉर्मर:
- उस समस्या को ठीक किया गया है जिसमें
ExportResult.fileSizeBytesको ज़्यादा रिपोर्ट किया जा सकता है.
- उस समस्या को ठीक किया गया है जिसमें
- ट्रैक चुनने की सुविधा:
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORको दिखाएं औरAdaptiveTrackSelection.Factory.setTrackFormatComparatorको जोड़ें, ताकि बिटरेट के हिसाब से ऑर्डर करने के अलावा, कस्टम फ़ॉर्मैट को ऑर्डर करने और एबीआर चुनने की प्राथमिकता तय की जा सके.
- डेटा निकालने वाले टूल:
- MP4, MP3, और FLAC: कंटेनर पार्सिंग के दौरान अटैच की गई तस्वीरों और कवर आर्ट के मेटाडेटा को हटाने की अनुमति देने के लिए,
FLAG_DISABLE_ARTWORK_METADATAजोड़ें. इससे रनटाइम मेमोरी की खपत कम हो जाएगी (#2077). इसेDefaultExtractorsFactory.setDisableArtworkMetadataकी मदद से, एक ही जगह से भी चालू किया जा सकता है. - MP4: ITU-T T.35 (
it35) टाइम किए गए मेटाडेटा ट्रैक को निकालने की सुविधा जोड़ी गई है. - MP4: Nero और QuickTime, दोनों फ़ॉर्मैट में चैप्टर के मेटाडेटा को निकालने की सुविधा जोड़ी गई है. अगर दोनों मौजूद हैं, तो QuickTime चैप्टर को प्राथमिकता दी जाती है. निकाली गई चैप्टर की जानकारी, ट्रैक के
MetadataमेंChapterएंट्री के तौर पर दिखती है. इससे MP4, M4A, और M4B फ़ाइलों (जैसे, ऑडियो बुक और पॉडकास्ट) में चैप्टर के हिसाब से नेविगेट किया जा सकता है (#2803). - WAV, Matroska, और MP4: 64-बिट फ़्लोटिंग पॉइंट पीसीएम ऑडियो के लिए सहायता जोड़ी गई (#3090).
- Matroska: सटीक
ColorInfoकी जानकारी भरने के लिए, कोडेक बिटस्ट्रीम मेटाडेटा का इस्तेमाल करें. - MP4:
mfraबॉक्स मौजूद न होने पर,sidxबॉक्स का इस्तेमाल करके, फ़्रैगमेंट की गई MP4 फ़ाइलों में ढूंढने की सुविधा जोड़ी गई है. इसे चालू करने के लिए,FragmentedMp4ExtractorकोFLAG_READ_MFRA_FOR_SEEK_MAPदें. यह अबDefaultExtractorsFactoryमें डिफ़ॉल्ट रूप से किया जाता है (#3088). - ऐसे
av1Cडेटा को अनदेखा करें जिसका वर्शन काम नहीं करता. - MP4:
fpcmबॉक्स में, बिग-एंडियन फ़्लोटिंग पॉइंट पीसीएम के लिए सहायता जोड़ी गई है. - Matroska: किसी ट्रैक के
Chapterमें चैप्टर की जानकारी कोMetadataमें पार्स करता है. - MPEG-TS: कोर और एक्सटेंशन सबस्ट्रीम को एक ही सैंपल में मिलाकर, DTS-HD और DTS Express स्ट्रीम को बेहतर तरीके से एक्सट्रैक्ट करें. साथ ही, उन प्लेबैक समस्याओं को ठीक करें जहां पहले दोनों को अलग-अलग सैंपल के तौर पर आउटपुट किया जाता था (#3147).
- MP4: खाली
ilstमेटाडेटा टैग आइटम पार्स करते समय, इनफ़िनिट लूप और आउट-ऑफ़-बाउंड रीड को रोकें (#3191). - MPEG-TS: पक्का करें कि उन स्ट्रीम के लिए आखिरी फ़्रेम रेंडर किया गया हो जहां आखिरी पीईएस पैकेट की लंबाई पता हो (#3206).
- MP3: Xing और VBRI हेडर वाली फ़ाइलों के लिए, बिटरेट की रिपोर्टिंग से जुड़ी समस्या ठीक की गई.
- Matroska: आखिरी क्लस्टर में तय किए गए ट्रैक हैंडल करें (#3250).
- Matroska: ALAC के लिए सहायता जोड़ी गई (#3268).
- MP4: फ़्रैगमेंट की गई MP4 फ़ाइलों में अलग-अलग लंबाई वाले
sgpdबॉक्स की अनुमति दें (#3243).
- MP4, MP3, और FLAC: कंटेनर पार्सिंग के दौरान अटैच की गई तस्वीरों और कवर आर्ट के मेटाडेटा को हटाने की अनुमति देने के लिए,
- ऑडियो:
- तैयार से लेकर तैयार नहीं होने की स्थिति में ट्रांज़िशन करते समय, ExoPlayer के ऑडियो रेंडरर में 100 मि॰से॰ का ग्रेस पीरियड जोड़ें. इससे, कुछ समय के लिए होने वाली रुकावटों को कम किया जा सकेगा. साथ ही, कॉन्टेंट चलने के दौरान अचानक बफ़र होने की समस्या से बचा जा सकेगा (#3210).
DefaultAudioTrackBufferSizeProviderमें डिफ़ॉल्ट पीसीएम बफ़र साइज़ के लॉजिक में बदलाव करें, ताकि 500 मि॰से॰ के फ़िक्स बफ़र का इस्तेमाल किया जा सके. इससे यह डिवाइस पर कम निर्भर होगा.MediaCodecAudioRendererको अपडेट करें, ताकि वह प्लैटफ़ॉर्म डिकोडर से spatial channelMask को निकाल सके. इससेDefaultAudioSink, चैनल की संख्या से मास्क का अनुमान लगाने के बजाय, इस मास्क का इस्तेमाल कर पाएगा.AudioSink.configureके पैरामीटर को डेटा क्लास में बदलें.ForwardingAudioSink.configureके कस्टम ओवरराइड को नए तरीके के सिग्नेचर पर माइग्रेट करना होगा.EditedMediaItem.Builder#setSpeed(SpeedParameters)की मदद से ऑडियो स्ट्रीम को टाइम-स्ट्रेच करते समय, पिच को बनाए रखने की सुविधा जोड़ी गई है.ToFloatPcmAudioProcessorको बेहतर बनाएं, ताकि यह 8-बिट पीसीएम, 16-बिट बिग-एंडियन पीसीएम, और 64-बिट फ़्लोटिंग पॉइंट पीसीएम को 32-बिट फ़्लोटिंग पॉइंट पीसीएम (#3090) में बदल सके.DecoderAudioRenderer.getChannelMappingकी रिटर्न वैल्यू कोImmutableIntArrayमें बदलें.- उस गड़बड़ी को ठीक किया गया है जिसमें कंप्रेस किए गए ऑफ़लोड मोड में बिना रुके चलने वाले ऑडियो की प्लेलिस्ट चलाने पर, ऑडियो अटक जाता था.
- ऑडियो प्रोसेसर (#418) को प्लेलिस्ट का कॉन्टेक्स्ट देने के लिए,
Timelineऔर अवधि का यूआईडी,AudioSink.configureऔरAudioProcessor.StreamMetadataको फ़ॉरवर्ड करें. - समय के हिसाब से ऑडियो प्रोसेस करने की सुविधा (#418) चालू करने के लिए, सही
AudioProcessor.StreamMetadata.positionOffsetUsसेट करें. - बिग एंडियन 32-बिट और 64-बिट फ़्लोटिंग पॉइंट पीसीएम के लिए सहायता जोड़ी गई.
- वीडियो:
- वीडियो में शामिल होने के लॉजिक को ठीक किया गया है, ताकि शामिल होने के दौरान बफ़र होने की वजह से वीडियो रुकने की समस्या को, वीडियो रुकने के बजाय स्किप किया गया वीडियो माना जा सके.
- नई सतह सेट करते समय, रेंडरिंग से जुड़ा फ़ैसला तुरंत लेने की सुविधा जोड़ी गई है. इससे उन डिवाइसों पर फ़्रेम ड्रॉप नहीं होंगे जिन पर प्लेसहोल्डर वाली सतहें काम नहीं करती हैं.
- ड्रॉप किए गए या छोड़े गए फ़्रेम को ध्यान में रखकर,
MediaCodecVideoRendererमें फ़्रेम रेट के अनुमान को ज़्यादा सटीक बनाएं. - इससे, फ़्रेम को जल्दी शेड्यूल करने के लिए इस्तेमाल किए गए थ्रेशोल्ड को कॉन्फ़िगर करने की अनुमति मिलती है. डिफ़ॉल्ट रूप से यह 50 मि॰से॰ होता है. हालांकि,
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()का इस्तेमाल करके इस वैल्यू को अपनी ज़रूरत के मुताबिक बनाया जा सकता है.
- टेक्स्ट:
- मेटाडेटा:
MediaMetadata.discSubtitleफ़ील्ड जोड़ें और इसे ID3v2.4TSSTऔर VorbisDISCSUBTITLEडेटा से पार्स करें.- ID3
TPOSफ़्रेम से डिस्क नंबर और गिनती पार्स करता है.
- असर:
- रीड्रॉ की स्थिति को
FinalShaderProgramWrapperमें मिटाएं, ताकि वीडियो को फ़्लश करते समय प्लेयर फ़्रीज़ न हो.
- रीड्रॉ की स्थिति को
- Muxers:
- नए
addTrackReferenceएपीआई के ज़रिए,Mp4Muxerमें ट्रैक रेफ़रंस (trefबॉक्स) के लिए सहायता जोड़ी गई है. इससे ट्रैक के बीच संबंध बनाए जा सकते हैं. जैसे, मेटाडेटा ट्रैक को उस वीडियो ट्रैक से लिंक करना जिसके बारे में वह बताता है. OggMuxerको जोड़कर,OPUSयाVORBISमीडिया स्ट्रीम कोoggफ़ाइल फ़ॉर्मैट में मक्स किया जा सकता है.- WAV फ़ाइल जनरेट करने के लिए
WavMuxerजोड़ें. यह पूर्णांक और फ़्लोटिंग-पॉइंट पीसीएम के साथ काम करता है. setAttemptStreamableOutputEnabledकोInAppMp4Muxer.Factoryमें जोड़ें, ताकि रिज़र्व की गई जगह के बिना छोटी फ़ाइलें लिखी जा सकें. हालांकि, इन्हें स्ट्रीम नहीं किया जा सकता.Mp4MuxerऔरFragmentedMp4Muxerमें, IAMF ऑडियो के लिए सहायता जोड़ी गई.
- नए
- IMA एक्सटेंशन:
- विज्ञापनों को रोकने की सुविधा के लिए विज्ञापन स्लॉट उपलब्ध कराने की अनुमति देने के लिए,
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotजोड़ें. - उस बग को ठीक किया गया है जिसमें स्किप किए जा सकने वाले वीएएसटी विज्ञापन, दूसरे विज्ञापन पर तुरंत स्किप बटन दिखाते हैं (#3165).
- विज्ञापनों को रोकने की सुविधा के लिए विज्ञापन स्लॉट उपलब्ध कराने की अनुमति देने के लिए,
- सेशन:
- बैकग्राउंड थ्रेड प्लेयर लूपर के साथ सेशन का इस्तेमाल करते समय,
IllegalStateExceptionमें संभावित डेडलॉक औरMediaNotificationManagerक्रैश की समस्या ठीक की गई. MediaSessionतरीकों के लिए, थ्रेडिंग से जुड़ी ज़्यादा सख्त ज़रूरी शर्तें लागू करें. शून्य नतीजे देने वाले तरीके अब एक्ज़ीक्यूशन के बाद, ऐप्लिकेशन लूपर थ्रेड पर अपने-आप पोस्ट हो जाते हैं. साथ ही, स्टेट ऐक्सेस करने वाले (गेटर्स) तरीके, ऐप्लिकेशन लूपर के अलावा किसी अन्य थ्रेड से कॉल किए जाने पर, साफ़ तौर परIllegalStateExceptionथ्रो करते हैं.- सेशन के दौरान, हर कंट्रोलर के लिए स्थिति को ट्रैक करके, टाइमलाइन मर्ज करने के दौरान होने वाली गड़बड़ी (
IllegalStateExceptioninMediaUtils.mergePlayerInfo) को ठीक किया गया. - ऐक्टिव मीडिया सेशन के बारे में क्वेरी करने और Media3
SessionTokenइंस्टेंस वापस पाने की सुविधा देने के लिए,androidx.media3.session.MediaSessionManagerजोड़ें. - अगर
MediaSession.Callback.onConnectके डिफ़ॉल्ट तरीके को सिर्फ़ उन कंट्रोलर को रीड ऐक्सेस देने के लिए ओवरराइड नहीं किया जाता जिन पर भरोसा नहीं किया जाता, तोMediaSession.Callback.onConnectके डिफ़ॉल्ट तरीके को बदलें. - नए एपीआई
MediaSession.Builder#setPackageNameOverrideकी मदद सेMediaSessionबनाते समय, पैकेज के नाम को बदलने की सुविधा जोड़ी गई. कॉल करने वाले के पास, सेशन के पैकेज का नाम बदलने कीandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERअनुमति होनी चाहिए. MediaSession.Callback.onConnectAsync()जोड़ें. इस नए तरीके से, कंट्रोलर के कनेक्शन के अनुरोध को एसिंक्रोनस तरीके से प्रोसेस किया जा सकता है. ऐप्लिकेशन, पिछले जैसा व्यवहार करने के लिए,Futures.immediateFuture(ConnectionResult)के साथ तुरंतFutureदिखा सकते हैं. हमारा सुझाव है कि आप नए तरीके पर माइग्रेट करें, क्योंकिCallback.onConnectको बंद किया जा सकता है.- उस समस्या को ठीक किया गया है जिसमें ब्लूटूथ AVRCP ब्राउज़िंग, API 36 और 37 पर
MediaLibraryServiceको पहचान नहीं पा रही थी.
- बैकग्राउंड थ्रेड प्लेयर लूपर के साथ सेशन का इस्तेमाल करते समय,
- यूआई:
ContentFrameको वीडियो चलाने के दौरान फिर से कंपोज़ किए जाने पर, पहले फ़्रेम को गलत साइज़ में रेंडर करने की समस्या ठीक की गई है (#3238).media3-ui-composeमॉड्यूल मेंCurrentMediaItemStateक्लास और उससे जुड़ाrememberCurrentMediaItemStateकंपोज़ेबल जोड़ें. इस स्टेट होल्डर का इस्तेमालdemo-composeमें किया जाता है, ताकि फ़िलहाल चल रहेMediaItemके बारे में अलग-अलग मेटाडेटा की जानकारी दिखाई जा सके.media3-ui-composeमॉड्यूल मेंPlaylistStateक्लास और उससे जुड़ाrememberPlaylistStateComposable जोड़ें. इस स्टेट होल्डर का इस्तेमालdemo-composeमें किया जाता है, ताकि प्लेयर पर सेट किए गएMediaItemsके बारे में अलग-अलग मेटाडेटा की जानकारी दिखाई जा सके.PlaybackSpeedStateमें, तेज़ी से आगे बढ़ाने/स्लो मोशन वाला एपीआई जोड़ें. तेज़ी से आगे बढ़ाने की सुविधा को दिखाने के लिए,demo-composeमें इस फ़ंक्शन का इस्तेमाल करें. इसके लिए, वीडियो को देर तक दबाकर रखें.media3-ui-compose-material3मॉड्यूल मेंMiniControllerकंपोज़ेबल जोड़ा गया. यहPlayerको कंट्रोल करने के लिए एक कॉम्पैक्ट अफ़ॉर्डेंस उपलब्ध कराता है. साथ ही, मौजूदा मीडिया आइटम का टाइटल, कलाकार, आर्टवर्क, और प्रोग्रेस दिखाता है.media3-ui-composeमॉड्यूल मेंErrorStateक्लास और उससे जुड़ाrememberErrorStateComposable जोड़ें.ErrorTextमेंErrorTextComposable जोड़ें और इसेPlayerपर डिफ़ॉल्ट ओवरले के तौर पर सेट करें.media3-ui-compose-material3TopControls,CenterControls,BottomControls, औरErrorOverlayके लिए कंपोज़ेबल के साथPlayerDefaultsऑब्जेक्ट पब्लिश करें.Playerकंपोज़ेबल और उसके कॉन्टेंट स्लॉट मेंFocusRequesterजोड़ें.- स्लाइडिंग विंडो वाले यूज़र इंटरफ़ेस (यूआई) एनवायरमेंट में
MediaItemsको पहले से लोड करने की सुविधा के लिए,PlayerPool(common-ktx) औरrememberPooledPlayer(ui-compose) को पब्लिश करें.demo-composeमें इस सुविधा को दिखाएं. इसके लिए, एक नयाShortFormPlayerScreenबनाएं.
- Ktor एक्सटेंशन:
- Ktor एचटीटीपी स्टैक की मदद से काम करने वाला नया
media3-datasource-ktorएक्सटेंशन मॉड्यूल जोड़ें.KtorDataSource
- Ktor एचटीटीपी स्टैक की मदद से काम करने वाला नया
- एचएलएस एक्सटेंशन:
- एचएलएस कॉन्टेंट स्टीयरिंग और पाथवे क्लोनिंग के लिए सहायता जोड़ी गई है (#1689).
setWithAssetListResetमेंsetWithAssetListResetजोड़ें, ताकि ऐप्लिकेशन, पूरी तरह से प्रोसेस की गई ऐसेट लिस्ट इंटरस्टीशियल को फिर से उपलब्ध न होने की स्थिति में रीसेट कर सकें. इससे, मांग पर समस्या को फिर से हल किया जा सकेगा.HlsInterstitialsAdsLoader
- DASH एक्सटेंशन:
- CEA सबटाइटल को भाषा (#3113) के आधार पर अलग-अलग
TrackGroupमें बांटें.
- CEA सबटाइटल को भाषा (#3113) के आधार पर अलग-अलग
- आरटीएसपी एक्सटेंशन:
- यूडीपी पोर्ट बाइंडिंग की गड़बड़ियों की वजह से, आरटीएसपी चलाने की तैयारी के दौरान, वीडियो रुकने या चलाने में होने वाली अस्थायी गड़बड़ियों को ठीक किया गया.
- कास्ट एक्सटेंशन:
- कॉल करके कास्ट करने की सुविधा
CastParamsको कॉन्फ़िगर करने की अनुमति देने के लिए, नईCastParamsक्लास जोड़ें.Cast.initialize(CastParams) - नया
CastParams.getShowSystemOutputSwitcherOnCastIconClick()विकल्प जोड़ा गया है. यह विकल्प, उपलब्ध होने पर ऐप्लिकेशन में मौजूद कास्ट डिवाइस पिकर के बजाय, SystemUI Output Switcher का इस्तेमाल करने की सुविधा को ट्रिगर करता है.
- कॉल करके कास्ट करने की सुविधा
- टेस्ट यूटिलिटी:
DataSourceContractTestको बड़ा करें, ताकि इसमें हेडर और बॉडी के साथPOSTअनुरोधों के लिए सहायता शामिल की जा सके. साथ ही,HttpDataSourceTestEnvमें कुछPOSTसंसाधन जोड़ें. इसके अलावा,WebServerDispatcherमें अनुमानित एचटीटीपी तरीके, हेडर, और बॉडी के लिए दावे जोड़ें.DataSource.open()से मिली लंबाई के लिए,DataSourceContractTestमें दावे की शर्तों को और सख्त करें. जिन संसाधनों सेC.LENGTH_UNSETमिल सकता है उन्हेंTestResource.Builder.setMayResolveToUnknownLength(boolean)का इस्तेमाल करके यह जानकारी देनी चाहिए.
- हटाए गए सिंबल हटाएं:
androidx.media3.exoplayer.MetadataRetrieverहटाएं. इसके बजाय,androidx.media3.inspector.MetadataRetrieverका इस्तेमाल करें.androidx.media3.exoplayer.MediaExtractorCompatहटाएं. इसके बजाय,androidx.media3.inspector.MediaExtractorCompatका इस्तेमाल करें.Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATAहटाएं. इसके बजाय, HEIC फ़ाइलों से मोशन फ़ोटो का मेटाडेटा निकालने के लिए,HeifExtractorका इस्तेमाल करें.androidx.media3.extractor.metadata.mp4.MotionPhotoMetadataहटाएं. इसके बजाय,androidx.media3.extractor.metadata.MotionPhotoMetadataका इस्तेमाल करें.androidx.media3.extractor.DummyTrackOutputहटाएं. इसके बजाय,androidx.media3.extractor.DiscardingTrackOutputका इस्तेमाल करें.androidx.media3.extractor.DummyExtractorOutputहटाएं. इसके बजाय,androidx.media3.extractor.NoOpExtractorOutputका इस्तेमाल करें.
- बनाएं
- Media3 के स्थानीय वर्शन पर निर्भर रहने के लिए,
README.mdनिर्देशों को अपडेट किया गया है, ताकि Gradle कंपोज़िट बिल्ड (includeBuild) का इस्तेमाल किया जा सके.core_settings.gradleस्क्रिप्ट को हटा दिया गया है. साथ ही,androidxMediaModulePrefixऔरandroidxMediaEnableMidiModuleप्रॉपर्टी का इस्तेमाल अब नहीं किया जाता.
- Media3 के स्थानीय वर्शन पर निर्भर रहने के लिए,
वर्शन 1.10.0
1.10.1
12 मई, 2026
- कॉमन लाइब्रेरी:
SimpleBasePlayerऔरForwardingSimpleBasePlayerमेंonAudioSessionIdChangedको हैंडल करने से जुड़ी समस्या ठीक की गई.
- ExoPlayer:
- ऑडियो सेशन आईडी जनरेट करने से जुड़ी रेस कंडीशन की समस्या ठीक की गई है. इससे टनलिंग मोड में
IllegalStateExceptionकी समस्या हो सकती थी. (#3099). - रेंडरर प्रीवार्मिंग की मदद से, डिकोडर से जुड़ी गड़बड़ियों को ठीक करते समय ऐप्लिकेशन क्रैश होने की समस्या को ठीक किया गया.
- उस समस्या को ठीक किया गया है जिसमें AV1 पर आधारित Dolby Vision कोडेक (#3153) का इस्तेमाल करते समय, वीडियो में आर्टफ़ैक्ट दिखते थे. ऐसा, शुरुआती डेटा उपलब्ध कराने की वजह से होता था.
- ऑडियो सेशन आईडी जनरेट करने से जुड़ी रेस कंडीशन की समस्या ठीक की गई है. इससे टनलिंग मोड में
- ट्रैक चुनने की सुविधा:
VideoTrackInfoमें ट्रैक चुनने के लॉजिक में बदलाव किया गया है, ताकि फ़ॉलबैक एमआईएमई टाइप की समस्या हल की जा सके. साथ ही, एचडीआर और कोडेक स्कोर की प्राथमिकताओं को क्वालिटी की प्राथमिकताओं (#3135) में ट्रांसफ़र किया जा सके.
- डेटा निकालने वाले टूल:
- MP3: अगर Xing डेटा की लंबाई, स्ट्रीम की लंबाई (#3117) से ज़्यादा है, तो उसे अनदेखा करें.
FLAG_OMIT_TRACK_SAMPLE_TABLEसेट होने पर,Mp4Extractorमें मौजूदArrayIndexOutOfBoundsExceptionको ठीक करें. ऐसा तब करें, जब ट्रैक में सिंक सैंपल (stss) बॉक्स मौजूद न हो.
- ऑडियो:
- उस गड़बड़ी को ठीक किया गया है जिसमें प्लेयर में एक से ज़्यादा ऑडियो रेंडरर जोड़ने पर, ऑडियो इवेंट गलत तरीके से रूट हो सकते हैं.
- वीडियो:
- एपीआई के 30 से कम फ़्रेम रेट पर कोडेक के फिर से इस्तेमाल होने की सुविधा के लिए लॉजिक में बदलाव किया गया है, ताकि उन मामलों में कोडेक रीसेट न हों जहां वे फ़ायदेमंद नहीं हैं (#3120).
- API 31 और इसके बाद के वर्शन के लिए,
queueSecureInputBufferमें फ़ोर्स सिंक्रनाइज़ेशन के वर्कअराउंड को बंद करें. वर्कअराउंड एक आर्टिफ़िशियल बॉटलनेक था, जिसकी वजह से डिक्रिप्शन को क्रम से चलाना पड़ता था. इससे एपीआई 31 से पहले मौजूद फ़्रेमवर्क की समस्या की वजह से, वीडियो में गड़बड़ी नहीं होती थी.
- इमेज:
- स्क्रबिंग मोड में समस्या ठीक की गई है. इस मोड में, इमेज में बदलाव सिर्फ़ तब लागू होते थे, जब उपयोगकर्ता "स्क्रब करना बंद कर देता था" (#2815).
- सेशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें ऐप्लिकेशन थ्रेड के मुख्य थ्रेड न होने पर, थ्रेड बाउंड्री में
ForegroundServiceStartNotAllowedExceptionको ट्रांसफ़र नहीं किया जा रहा था (#2499). - उस गड़बड़ी को ठीक किया गया है जिसमें सिर्फ़ प्लैटफ़ॉर्म वाले ऐसे सेशन से कनेक्ट करने पर
MediaControllerमेंCOMMAND_SEEK_TO_MEDIA_ITEMउपलब्ध नहीं होता है जो अन्य आइटम पर जाने की सुविधा देता है, लेकिन प्लेलिस्ट में बदलाव करने की सुविधा नहीं देता है. - उस समस्या को ठीक किया गया है जिसमें
MediaController, ऐसे प्लैटफ़ॉर्म मीडिया सेशन पर मीडिया आइटम सेट नहीं कर पाता था जिनमेंPREPARE_FROMकार्रवाइयों की अनुमति नहीं होती. - उस बग को ठीक किया गया है जिसमें प्लैटफ़ॉर्म कंट्रोलर के ज़रिए कनेक्ट करने पर, API 27 या इससे पहले के वर्शन में अपनी प्रोसेस को
Controller.isTrusted()के तौर पर मार्क नहीं किया गया था.
- उस गड़बड़ी को ठीक किया गया है जिसमें ऐप्लिकेशन थ्रेड के मुख्य थ्रेड न होने पर, थ्रेड बाउंड्री में
- एचएलएस एक्सटेंशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें ट्रैक चुनने का विकल्प उपलब्ध ट्रैक का सबसेट होने पर, स्ट्रीम फ़ॉलबैक के दौरान
ArrayIndexOutOfBoundsExceptionदिखता था (#3161). - उस समस्या को ठीक किया गया है जिसमें मीडिया प्लेलिस्ट अपडेट करने पर, शुरुआती सेगमेंट को ट्रांसफ़र नहीं किया जाता था. ऐसा तब होता था, जब बाद के अपडेट में
#EXT-X-MAPटैग को दोहराया नहीं जाता था (#3105).
- उस गड़बड़ी को ठीक किया गया है जिसमें ट्रैक चुनने का विकल्प उपलब्ध ट्रैक का सबसेट होने पर, स्ट्रीम फ़ॉलबैक के दौरान
- DASH एक्सटेंशन:
SampleQueueमें क्रैश होने की समस्या को ठीक किया गया है. यह समस्या, ऐसे चंक में सीक करने पर होती थी जिसे फ़िलहाल रद्द किया जा रहा है.
1.10.0
26 मार्च, 2026
- कॉमन लाइब्रेरी:
UnstableApiसेPlayer.mute()औरPlayer.unmute()को स्टेबल वर्शन पर प्रमोट करें.UnstableApiसेFormat.pcmEncodingऔरC.PcmEncodingको स्टेबल वर्शन पर प्रमोट करें.- एम्बेड किए गए
Formatइंस्टेंस के प्राइमरी ग्रुप की पहचान करने के लिए,Format.primaryTrackGroupIdजोड़ें (#294).
- ExoPlayer:
AdsMediaSourceमें क्लिप बनाने की सुविधाएं जोड़ें.MediaCodecVideoRendererमें डाइनैमिक शेड्यूलिंग की सुविधा जोड़ी गई है. इससे, वीडियो फ़्रेम प्रोसेस होने के समय के हिसाब से, शेड्यूलिंग के काम और सीपीयू के वेक-अप साइकल को बेहतर तरीके से अलाइन किया जा सकता है. इसे चालू करने के लिए,DefaultRenderersFactoryमें जाकरexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()का इस्तेमाल करें.- यह कुकी,
DefaultPreloadManager.Builderमें कस्टमDataSource.Factoryसेट करने की अनुमति देती है. - कुछ डिफ़ॉल्ट कॉन्स्टेंट को
ExoPlayerमें ले जाकर, Robolectric के बिनाExoPlayerको मॉक करने की अनुमति दें.ExoPlayer.Builderआम तौर पर, इस जटिल इंटरफ़ेस को मॉक करने का सुझाव नहीं दिया जाता. ऐसा सिर्फ़ तब किया जाता है, जब इसका इस्तेमाल कम/आसान/कभी-कभी किया जाता हो (#2985).- इसके लिए,
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSकोExoPlayerसेExoPlayer.Builderपर ले जाना पड़ा. हालांकि, ऐसा बिना किसी बदलाव के किया गया.
- इसके लिए,
- उस गड़बड़ी को ठीक किया गया है जिसमें
ProgressiveMediaSourceप्लेयर को टाइमलाइन की पुरानी जानकारी भेजता है. साथ ही, कतार में जोड़े गए वीडियो के समय अपने-आप हट जाते हैं (#3016). - उस समस्या को ठीक किया गया है जिसमें फ़ोन कॉल के दौरान वीडियो चलाने का अनुरोध करने पर, ExoPlayer ऑडियो फ़ोकस में देरी का अनुरोध नहीं करता था.
- उस बग को ठीक किया गया है जिसकी वजह से, मांग पर उपलब्ध कॉन्टेंट से लाइव कॉन्टेंट पर स्विच करने के दौरान, मांग पर उपलब्ध कॉन्टेंट के आखिर में फिर से बफ़रिंग हो सकती है (#3052).
- Dolby Vision Profile 10 के लिए सहायता जोड़ी गई है (#2830).
- उस बग को ठीक किया गया है जिसमें प्री-रोल विज्ञापन शुरू न होने पर
ArrayIndexOutOfBoundsException(#3125) दिखता था.
- CompositionPlayer:
EditedMediaItem.removeVideoके साथ काम करने की सुविधा जोड़ी गई.
- ट्रांसफ़ॉर्मर:
EditedMediaItem.Builder.setFrameRate()अब वीडियो के लिए, आउटपुट फ़्रेम रेट की ज़्यादा से ज़्यादा सीमा सेट कर सकता है. यह सुविधा,setSpeed()की मदद से मीडिया की स्पीड बढ़ाने के दौरान खास तौर पर काम आती है.
- ट्रैक चुनने की सुविधा:
DefaultTrackSelector.selectAllTracksके सिग्नेचर में बदलाव करके, आउटपुट ऐरे को पैरामीटर के तौर पर शामिल करें. इसमें ट्रैक ओवरराइड की जानकारी पहले से भरी हुई होती है.- उस समस्या को ठीक किया गया है जिसमें एम्बेड किए गए मेटाडेटा ट्रैक चुने जाते हैं. भले ही, उनसे जुड़ा प्राइमरी ट्रैक चुना गया हो या नहीं (#294).
preferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabels, औरselectTextByDefaultके लिएTrackSelectionParametersविकल्पों को स्थिर करें.
- डेटा निकालने वाले टूल:
- MP4: इसमें
uuidजैसे बड़े बॉक्स वाली फ़ाइलों को प्राथमिकता दी जाती है. इसके बाद,moov(#3046) जैसे अन्य बॉक्स वाली फ़ाइलों को प्राथमिकता दी जाती है. - MP4: MP4 कंटेनर में वर्सटाइल वीडियो कोडिंग (वीवीसी) ट्रैक के लिए सहायता जोड़ी गई.
- MP4: इसमें
- Inspector:
- नुकसान पहुंचा सकने वाला बदलाव:
FrameExtractorको हटा दिया गया है. अब उपयोगकर्ताओं को नए:media3-inspector-frameमॉड्यूल का इस्तेमाल करना चाहिए और इंपोर्ट कोandroidx.media3.inspector.frame.FrameExtractorपर अपडेट करना चाहिए. - डिकोड किए गए वीडियो फ़्रेम को निकालने और प्रोसेस करने के लिए, एक नया मॉड्यूल जोड़ा गया है.
- नुकसान पहुंचा सकने वाला बदलाव:
- ऑडियो:
- IAMF डिकोडर एक्सटेंशन के लिए, डिकोडिंग लाइब्रेरी को
libiamfसे बदलकरiamf_toolsकर दिया गया है. - IAMF डिकोडिंग, डिकोडर (IAMF डिकोडर एक्सटेंशन का इस्तेमाल करते समय) या Android Spatializer के ज़रिए, बाइनॉरल आउटपुट के साथ काम करती है.
- ऑटोमोटिव के इस्तेमाल के उदाहरणों में AC-4 डिकोडर के साथ काम करने की सुविधा का आकलन करते समय,
AC4Profile22और अन्य लेगसी प्रोफ़ाइलों के लिए सहायता को सही तरीके से हटाएं (#2609). AudioOutputके शुरू होने की प्रोसेस में, फिर से कोशिश करने के लॉजिक को बेहतर बनाया गया है.DefaultAudioSink(#2905).- IAMF को डिकोड करते समय, स्पीकर (या अगर लागू हो, तो स्पेशल ऑडियो की सुविधा देने वाले सॉफ़्टवेयर) के आउटपुट लेआउट से मैच करने की कोशिश करें. ऐसा IAMF एक्सटेंशन और मीडिया कोडेक डिकोडर, दोनों के साथ करें. AudioCapabilities और AudioCapabilitiesReceiver में नए फ़ील्ड और लॉजिक की मदद से ऐसा किया जा सकता है.
- उस गड़बड़ी को ठीक किया गया है जिसमें कंप्रेस किए गए ऑफ़लोड मोड में बिना रुके चलने वाले ऑडियो की प्लेलिस्ट चलाने पर, ऑडियो अटक जाता था.
- IAMF डिकोडर एक्सटेंशन के लिए, डिकोडिंग लाइब्रेरी को
- टेक्स्ट:
- VobSub:
STARTऔरSTOPSPU कंट्रोल कमांड का इस्तेमाल करके, हमेशा पांच सेकंड (#2935) पर डिफ़ॉल्ट होने के बजाय, क्यू की अवधि का पता लगाएं.
- VobSub:
- मेटाडेटा:
- मेटाडेटा रेंडरर की डिफ़ॉल्ट संख्या को चार तक बढ़ा दिया गया है, ताकि एचएलएस के अलग-अलग वर्शन और रेंडिशन से पब्लिश किए गए सभी संभावित मेटाडेटा ट्रैक को कवर किया जा सके (#3043).
- असर:
LottieOverlayको नए:media3-effect-lottieमॉड्यूल में ले जाएं. इसमें,LottieOverlayका नामandroidx.media3.effect.LottieOverlayसे बदलकरandroidx.media3.effect.lottie.LottieOverlayकरना भी शामिल है.
- Lottie इफ़ेक्ट:
- एक नया
:media3-effect-lottieमॉड्यूल पेश किया गया है. इससे वीडियो फ़्रेम पर लोट्टी इफ़ेक्ट लागू किए जा सकते हैं.
- एक नया
- IMA एक्सटेंशन:
- विज्ञापन मीडिया की जानकारी देने वाले नए एपीआई का ऐक्सेस पाने के लिए, IMA SDK के वर्शन को 3.39.0 पर अपडेट करें.
- उस बग को ठीक किया गया है जिसमें विज्ञापन का MIME टाइप, IMA LOADED इवेंट में दिए गए MIME टाइप से मेल नहीं खाता था. इस फ़िक्स की मदद से, IMA से मिली विज्ञापन मीडिया की जानकारी का इस्तेमाल करके, विज्ञापन के MIME टाइप को मैप किया जाता है.
ImaAdsLoaderऔरImaServerSideAdInsertionMediaSourceमेंsetEnableCustomTabsजोड़ें. इससे उपयोगकर्ताओं को यह कंट्रोल करने की सुविधा मिलती है कि कस्टम टैब का इस्तेमाल करके, विज्ञापन के क्लिक-थ्रू यूआरएल लॉन्च किए जाएं या नहीं.ImaAdTagUriBuilderको जोड़ें. यह एक ऐसी क्लास है जोadTagUriको बनाने का एक वैकल्पिक तरीका उपलब्ध कराती है. इसमेंsetPreferredLinearOrientationएपीआई शामिल है. यह एक ऐसा एपीआई है जो फ़िलहाल अल्फ़ा टेस्टिंग में है. इसकी मदद से, लीनियर विज्ञापनों के लिए अपनी पसंद का ओरिएंटेशन सेट किया जा सकेगा. अगर आपको ऐल्फ़ा टेस्टिंग ग्रुप में शामिल होना है, तो कृपया अपने खाता पार्टनर से संपर्क करें.
- सेशन:
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से
MediaMetadata.artworkDataमें मौजूद बड़े ऐरे की वजह से ऐप्लिकेशन क्रैश हो सकता था. ActionFactoryइंटरफ़ेस में@Player.Commandआर्ग्युमेंट के लिए int टाइप का इस्तेमाल करें (#2933).MediaSessionServiceऔरMediaLibraryServiceकोLifecycleServiceबनाएं, ताकि लाइफ़साइकल की जानकारी वाले ऑपरेशन को सेवा के लाइफ़साइकल से जोड़ा जा सके (#187).- लोकल प्लेबैक के लिए,
MediaControllerऔरMediaBrowserसे डिवाइस की आवाज़ कम या ज़्यादा करने के निर्देशों को बंद कर दिया गया है. ऐप्लिकेशन को डिवाइस का वॉल्यूम नहीं बदलना चाहिए. अगर ऐसा करना ज़रूरी है, तो इसके लिएAudioManagerएपीआई का इस्तेमाल किया जा सकता है. - ऐसे पुराने
Intentइंस्टेंस का पता लगाता है जिन्होंने सेवा को फ़ोरग्राउंड सेवा के तौर पर शुरू किया था. इससे सिस्टम की ओर सेForegroundServiceDidNotStartInTimeExceptionको ट्रिगर होने से रोका जाता है. यह एक अस्थिर एपीआई पर किया गया बड़ा बदलाव है. यह उन ऐप्लिकेशन के लिए है जो कस्टमMediaNotification.Providerलागू करते हैं, क्योंकि अब एक नया ज़रूरी तरीका उपलब्ध है. - होम स्क्रीन पर इस्तेमाल किए जाने वाले विजेट के लिए,
PendingIntentइंस्टेंस के लिए बिल्डर जोड़ें (#2933). - Compose पर आधारित होम स्क्रीन विजेट के लिए,
Intentइंस्टेंस बनाने के लिए स्टैटिक तरीके जोड़े गए (#2933). - उस बग को ठीक किया गया है जिसमें मीडिया आइटम के ट्रांज़िशन की जानकारी कंट्रोलर को नहीं दी जाती थी. ऐसा तब होता था, जब किसी मीडिया आइटम के इंडेक्स से दूसरे इंडेक्स पर मीडिया आइटम को चलाया जाता था. साथ ही, 'AUTO' और 'SEEK' की वजह से मीडिया आइटम को बीच में रोका जाता था (#2997).
- उस समस्या को ठीक किया गया है जिसमें सिस्टम यूज़र इंटरफ़ेस (यूआई) बटन की प्लेसमेंट से जुड़ी समस्या को हल करने के लिए इस्तेमाल किए गए तरीके का असर, Android Auto या उन मैन्युफ़ैक्चरर जैसे अन्य यूज़र इंटरफ़ेस (यूआई) पर पड़ता है जिन्हें इस तरीके की ज़रूरत नहीं है (#3041).
- उस समस्या को ठीक किया गया है जिसमें सदस्यताओं का ऐक्सेस सिंक नहीं किया गया था (#3056).
- API 29 पर SysUI की गड़बड़ी को ठीक किया गया है. इसमें किसी खास साइज़ में मीडिया सेशन के आर्टवर्क की वजह से SysUI क्रैश हो सकता है और डिवाइस को रीबूट करना पड़ सकता है (#3118).
- Android Q पर सूचना के आर्टवर्क आइकॉन के साइज़ में बदलाव होने की समस्या ठीक की गई है (#3084).
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से
- यूआई:
- वीडियो चलाने की स्पीड दिखाने और उसमें बदलाव करने के लिए,
media3-ui-composeमेंPlaybackSpeedControlकंपोज़ेबल जोड़ें. - वीडियो चलाने की स्पीड को कंट्रोल करने के लिए,
PlaybackSpeedToggleButtonComposable कोmedia3-ui-compose-material3में जोड़ें. - खिलाड़ी की प्रोग्रेस दिखाने और खींचने और टैप करने की सुविधा का इस्तेमाल करके वीडियो में आगे-पीछे जाने के लिए,
ProgressSliderमेंProgressSliderजोड़ें (#2288).media3-ui-compose-material3 - PlayerControlView को ऐनिमेट करते समय, स्क्रीन से बाहर मौजूद बफ़र के बड़े हिस्से से बचें.
Playerमेंmedia3-ui-compose-material3जोड़ें. इसमेंContentFrameके साथ-साथ, टॉप, सेंटर, और बॉटम में अलाइन किए गए कंट्रोल शामिल होते हैं. इन कंट्रोल को अपनी पसंद के मुताबिक बनाया जा सकता है.- सुलभता सेवा से, वीडियो चलाने की जगह की जानकारी छिपाएं. इससे
PlayerControlViewदिखने पर, लगातार सूचना अपडेट होने से रोका जा सकेगा.
- वीडियो चलाने की स्पीड दिखाने और उसमें बदलाव करने के लिए,
- एचएलएस एक्सटेंशन:
- एचएलएस इंटरस्टीशियल के साथ X-PLAYOUT-LIMIT का इस्तेमाल करने की सुविधा (#2484).
#EXT-X-DEFINE(#1854) के साथQUERYPARAMएट्रिब्यूट का इस्तेमाल किया जा सकता है.- रेगुलर एक्सप्रेशन मैच करने वालों को कैश मेमोरी में सेव करके, एचएलएस प्लेलिस्ट पार्सिंग को ऑप्टिमाइज़ किया गया (#3008).
- ऑडियो रेंडिशन में ID3 (EMSG) मेटाडेटा ट्रैक को दिखाना (#3043).
- अगर अलग-अलग जगहों से एक जैसी स्ट्रीम उपलब्ध हैं, तो लोड होने से जुड़ी गड़बड़ियां आने पर, जगह की जानकारी को फ़ॉलबैक करने की अनुमति दें (#1988).
- एचएलएस इंटरस्टीशियल के लिए, X-SNAP के व्यवहार को ठीक किया गया है, ताकि शुरू होने और फिर से शुरू होने की पोज़िशन का सही तरीके से हिसाब लगाया जा सके (#3013).
- DASH एक्सटेंशन:
- आरटीएसपी एक्सटेंशन:
- H.264 और H.265 फ़ॉर्मैट में स्ट्रीम करने से जुड़ी समस्या ठीक की गई है. इस समस्या की वजह से, एक ही ऐक्सेस यूनिट के ऐसे सैंपल गलत तरीके से पार्स हो जाते थे जो कई आरटीपी पैकेट में फैले होते थे. इस वजह से, वीडियो में विज़ुअल आर्टफ़ैक्ट और खराबी आ गई (#3121).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- MPEG-H डिकोडर एक्सटेंशन में MPEG-H यूज़र इंटरफ़ेस (यूआई) मैनेजर के साथ काम करने की सुविधा जोड़ी गई है (#3066).
- कास्ट एक्सटेंशन:
- कास्ट किए गए कॉन्टेंट को चलाने के लिए, ट्रैक चुनने की सुविधा लागू करने वाला
RemoteCastPlayer.Builder#setTrackSelectorतरीका जोड़ा गया.
- कास्ट किए गए कॉन्टेंट को चलाने के लिए, ट्रैक चुनने की सुविधा लागू करने वाला
- हटाए गए सिंबल हटाएं:
ExperimentalFrameExtractorहटाएं. इसके बजाय,androidx.media3.inspector.frame.FrameExtractorका इस्तेमाल करें.ChannelMixingMatrix.create()हटाएं. इसके बजाय,ChannelMixingMatrix.createForConstantGain()का इस्तेमाल करें.androidx.media3.extractor.metadata.flac.VorbisCommentहटाएं. इसके बजाय,androidx.media3.extractor.metadata.vorbis.VorbisCommentका इस्तेमाल करें.MediaSource.prepareSource(MediaSourceCaller, TransferListener)हटाएं. इसके बजाय,MediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId)का इस्तेमाल करें.
1.10.0-rc03
25 मार्च, 2026
1.10.0 स्टेबल वर्शन का इस्तेमाल करें.
1.10.0-rc02
16 मार्च, 2026
1.10.0 स्टेबल वर्शन का इस्तेमाल करें.
1.10.0-rc01
10 मार्च, 2026
1.10.0 स्टेबल वर्शन का इस्तेमाल करें.
1.10.0-beta01
25 फ़रवरी, 2026
1.10.0 स्टेबल वर्शन का इस्तेमाल करें.
1.10.0-alpha01
6 फ़रवरी, 2026
1.10.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.9.0
1.9.4
16 मई, 2026
वर्शन 1.9.4 में ये बदलाव शामिल हैं.
- असर:
- बिना किसी कॉन्टेक्स्ट के ट्रांज़िशन करते समय,
GL_DRAW_BUFFERऔरGL_READ_BUFFERको साफ़ तौर पर सेट करें.
- बिना किसी कॉन्टेक्स्ट के ट्रांज़िशन करते समय,
1.9.3
16 मार्च, 2026
वर्शन 1.9.3 में ये बदलाव शामिल हैं.
- ऑडियो:
- उस गड़बड़ी को ठीक किया गया है जिसमें कंप्रेस किए गए ऑफ़लोड मोड में बिना रुके चलने वाले ऑडियो की प्लेलिस्ट चलाने पर, ऑडियो अटक जाता था.
1.9.2
6 फ़रवरी, 2026
वर्शन 1.9.2 में ये बदलाव शामिल हैं.
- ExoPlayer:
- उस गड़बड़ी को ठीक किया गया है जिसमें
ProgressiveMediaSource, प्लेयर को टाइमलाइन की पुरानी जानकारी भेजता था. साथ ही, कतार में लगे वीडियो के समय अपने-आप हट जाते थे (#3016).
- उस गड़बड़ी को ठीक किया गया है जिसमें
- सेशन:
- उस समस्या को ठीक किया गया है जिसमें सिस्टम यूज़र इंटरफ़ेस (यूआई) बटन की प्लेसमेंट से जुड़ी समस्या को हल करने के लिए इस्तेमाल किए गए तरीके का असर, Android Auto या उन मैन्युफ़ैक्चरर जैसे अन्य यूज़र इंटरफ़ेस (यूआई) पर पड़ता है जिन्हें इस तरीके की ज़रूरत नहीं है (#3041).
- कास्ट एक्सटेंशन:
- कास्ट करने की सुविधा से लोकल प्लेबैक पर ट्रांसफ़र करने से जुड़ी गड़बड़ी को ठीक किया गया है.
1.9.1
26 जनवरी, 2026
वर्शन 1.9.1 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
- समय क्षेत्र के ऑफ़सेट में सिर्फ़ घंटों की जानकारी देने वाली तारीख और समय की स्ट्रिंग के लिए सहायता जोड़ी गई (#2929).
- ExoPlayer:
- ऑडियो शुरू होने के बाद ही, डाइनैमिक शेड्यूलिंग को
doSomeWorkइंटरवल को धीमा करने की अनुमति दें, ताकि वीडियो चलाने की शुरुआत में A/V सिंक बेहतर हो सके. DefaultLoadErrorHandlingPolicyमें मौजूद बग को ठीक किया गया है. इस बग की वजह से,FileNotFoundExceptionऔर इसी तरह के अन्य अपवादों को कई बार फिर से आज़माया जाता था.- डाइनैमिक शेड्यूलिंग से जुड़ी गड़बड़ी को ठीक किया गया है. इसमें,
doSomeWorkके अगले शेड्यूल के लिए कैलकुलेट किए गए समय को,doSomeWorkके मौजूदा इटरेशन के बीते हुए समय से गलती से कम कर दिया गया था. इस समस्या को ठीक करने से, सीपीयू के आइडल रहने का समय बढ़ जाता है और बिजली की बचत होती है. - हमने उस समस्या को ठीक किया है जिसमें फ़ॉलबैक एवीसी या एचईवीसी कोडेक का इस्तेमाल करने की कोशिश करते समय, Dolby Vision फ़ाइलों के कुछ प्लेबैक काम नहीं करते थे.
- उस बग को ठीक किया गया है जिसमें प्लेलिस्ट से मौजूदा समय में चल रहे आइटम को हटाने पर, वीडियो चलना बंद होने के बाद भी लोडिंग जारी रहती थी (#2873).
- एक ही आइटम पर बार-बार
MediaItemका इस्तेमाल करने पर,MediaItemके कई इंस्टेंस लीक होने से बचें (#2993).ExoPlayer.replaceMediaItem - आपातकालीन वेक लॉक रिलीज़ की वजह से होने वाले संभावित एएनआर को रोकें (#2979).
- ऑडियो शुरू होने के बाद ही, डाइनैमिक शेड्यूलिंग को
- डेटा निकालने वाले टूल:
- MP3: Parse LAME ReplayGain data (#2840).
- ऑडियो:
- ऑटोमोटिव के इस्तेमाल के उदाहरणों में AC-4 डिकोडर के साथ काम करने की सुविधा का आकलन करते समय,
AC4Profile22और अन्य लेगसी प्रोफ़ाइलों के लिए सहायता को सही तरीके से हटाएं (#2609).
- ऑटोमोटिव के इस्तेमाल के उदाहरणों में AC-4 डिकोडर के साथ काम करने की सुविधा का आकलन करते समय,
- वीडियो:
- जब कॉन्टेंट का फ़्रेम रेट बदलता है, तो एपीआई 30 से पहले के वर्शन वाले डिवाइसों पर वीडियो कोडेक हटा दिए जाते हैं, ताकि वीडियो रुक-रुककर न चले (#2941).
- टेक्स्ट:
- VobSub: कुछ ऐसे एसपीयू को सही तरीके से हैंडल करके, कुछ छूटे हुए सबटाइटल ठीक किए गए हैं जिनमें सिर्फ़ एक कंट्रोल सीक्वेंस होता है या जिनमें ज़रूरी जानकारी को कई कंट्रोल सीक्वेंस में बांटा जाता है (#2935).
- IMA एक्सटेंशन:
- बग ठीक किया गया: उस समस्या को ठीक किया गया है जिसमें विज्ञापन का MIME टाइप, IMA LOADED इवेंट में दिए गए MIME टाइप से मेल नहीं खाता था. अब इस फ़िक्स में, विज्ञापन पॉड इंडेक्स और विज्ञापन की जगह का इस्तेमाल करके, विज्ञापन के MIME टाइप को मैप किया जाता है.
getAdsManager()औरAdEvent.getAd()के नतीजे को ऐक्सेस करने से पहले, शून्य की जांच करने की सुविधा जोड़ें.
- सेशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें किसी प्लैटफ़ॉर्म से कनेक्ट किए गए
MediaControllerको रोकने पर, विज्ञापन चलाने के दौरान ऐप्लिकेशन क्रैश हो जाता था (#2948). - अलग-अलग क्लास में मौजूद
extrasBundleइंस्टेंस में पुष्टि करने की अतिरिक्त सुविधाएं जोड़ें. इससे, अन्य प्रोसेस से भेजे गए गलत तरीके से बनाए गएBundleइंस्टेंस से सुरक्षा की जा सकती है. COMMAND_SEEK_NEXTयाCOMMAND_SEEK_BACKके लिए कमांड मौजूद न होने की वजह से, सिस्टम मीडिया सूचना (#2976) में रुकावट आ सकती है. इस समस्या को ठीक किया गया है.- सूचना आइकॉन के लिए बिटमैप स्केलिंग को मुख्य थ्रेड से हटा दिया गया है (#2829).
- हमने उस गड़बड़ी को ठीक कर दिया है जिसमें लेगसी
MediaMetadataCompatऔरMediaDescriptionCompatसे कन्वर्ज़न करते समय, लेखक, राइटर, और संगीतकार की जानकारी को फ़ॉलबैक के तौर पर इस्तेमाल नहीं किया जा रहा था (#3018).
- उस गड़बड़ी को ठीक किया गया है जिसमें किसी प्लैटफ़ॉर्म से कनेक्ट किए गए
- डाउनलोड:
SegmentDownloaderकी मदद सेPriorityTooLowExceptionको हैंडल करते समय, खत्म न होने वाले लूप की संभावित समस्याओं को ठीक किया गया. यह समस्या DASH, HLS, और SmoothStreaming के लिए होती है. सुरक्षितexecuteतरीके का इस्तेमाल करके,SegmentDownloaderके कस्टम ओवरराइड को अपने टास्क कोSupplierमें रैप करना होगा, ताकि इसे फिर से बनाया जा सके (#2931).
- एचएलएस एक्सटेंशन:
- कच्ची ऐसेट की सूची वाले JSON दस्तावेज़ को
Listener.onAssetListLoadCompletedकॉलबैक पर भेजें. यह एक अस्थिर एपीआई में होने वाला बड़ा बदलाव है. इस कॉलबैक को लागू करने वाले ऐप्लिकेशन कोJSONObjectटाइप का एक और आर्ग्युमेंट जोड़ना होगा (#2950).
- कच्ची ऐसेट की सूची वाले JSON दस्तावेज़ को
- आरटीएसपी एक्सटेंशन:
- टाइमस्टैंप वाले आरटीपी पैकेट को सही तरीके से हैंडल किया गया है, जो रैप अराउंड करते हैं (#2930).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- #2965 पहले वीडियो फ़्रेम को प्रोसेस करने से पहले, वीडियो में आगे-पीछे जाने पर होने वाली संभावित
NullPointerExceptionको ठीक किया गया.
- #2965 पहले वीडियो फ़्रेम को प्रोसेस करने से पहले, वीडियो में आगे-पीछे जाने पर होने वाली संभावित
- कास्ट एक्सटेंशन:
- उस बग को ठीक किया गया है जिसकी वजह से, प्लेलिस्ट बदलने पर
RemoteCastPlayerटाइमलाइन सही तरीके से अपडेट नहीं हो रही थी.
- उस बग को ठीक किया गया है जिसकी वजह से, प्लेलिस्ट बदलने पर
1.9.0
17 दिसंबर, 2025
- कॉमन लाइब्रेरी:
- AndroidX की अन्य लाइब्रेरी के मुताबिक,
minSdkको23पर अपडेट करें. PlayerTransferStateको जोड़ा गया है. इससेPlayerके अलग-अलग इंस्टेंस के बीच, प्लेबैक की स्थिति को ट्रांसफ़र करने में मदद मिलती है.- Player में
void mute()औरvoid unmute()तरीके जोड़ें. ये तरीके, Player के वॉल्यूम को शून्य पर सेट करने से पहले और बाद में, उसे सुरक्षित रखते हैं और फिर से चालू करते हैं. WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManager, औरStuckPlayerDetectorजैसी यूटिलिटी क्लास पब्लिश की गई हैं. इनका इस्तेमाल पहलेExoPlayerइंटरनल तौर पर करता था, ताकि अन्य कंपनियां इनका दोबारा इस्तेमाल कर सकें (#1893).ForwardingPlayerलिसनर को मैनेज करने से जुड़ी समस्या ठीक की गई. यह समस्या तब होती थी, जब डेलिगेट प्लेयर, लिसनर इंस्टेंस की तुलना करने के लिए रेफ़रंस इक्वलिटी का इस्तेमाल करता था (#2675).media3-common-ktxलाइब्रेरी मेंPlayer.listenToसस्पेंड करने वाला एक्सटेंशन फ़ंक्शन जोड़ें. यह फ़ंक्शन, उसPlayer.Eventsके बारे में बताता है जिस पर कार्रवाई की जानी चाहिए.BasePlayer.getBufferedPercentageमें क्रैश होने की समस्या ठीक की गई है. यह समस्या, पूर्णांक ओवरफ़्लो की वजह से होती है. ऐसा तब होता है, जब बफ़र की गई रिपोर्ट की गई पोज़िशन, रिपोर्ट की गई अवधि से बहुत ज़्यादा होती है (#2750).- कस्टम सैंपल MIME टाइप को अनदेखा न करके और कंटेनर MIME टाइप से ट्रैक टाइप का इस्तेमाल करने के लिए फ़ॉलबैक करके,
TrackGroupट्रैक टाइप की अपने-आप पहचान होने की समस्या ठीक की गई है (#2860).
- AndroidX की अन्य लाइब्रेरी के मुताबिक,
- ExoPlayer:
- ऐसे प्लेयर का पता लगाने की सुविधा जोड़ें जो अटक गया है. अगर प्लेयर अटक जाता है, तो यह सुविधा
StuckPlayerExceptionप्लेयर से जुड़ी गड़बड़ी को ट्रिगर करती है. ऐसा इन मामलों में होता है. अगर ज़रूरी हो, तो हर डिफ़ॉल्ट टाइमआउट कोExoPlayer.Builderमें कॉन्फ़िगर किया जा सकता है:- वीडियो चलाने की कोशिश करते समय, 10 मिनट तक
STATE_BUFFERINGहोने के बाद भी बफ़रिंग की प्रोसेस पूरी नहीं हुई. - वीडियो चलाने की कोशिश करते समय, 10 सेकंड तक
STATE_READYदिखने के बाद भी वीडियो नहीं चलता है. - आइटम के खत्म होने से पहले, तय की गई अवधि के बाद
STATE_READYएक मिनट तक चलता रहे. - वीडियो चलाने की कोशिश करते समय, 10 मिनट तक वीडियो नहीं चलने की वजह दिखने पर.
- वीडियो चलाने की कोशिश करते समय, 10 मिनट तक
- बैकग्राउंड में वीडियो चलाने के दौरान बफ़रिंग की समस्याओं को ठीक करने के लिए, वेक लॉक हैंडलिंग की सुविधा को डिफ़ॉल्ट रूप से चालू करें. यह
ExoPlayer.Builder.setWakeModeकोC.WAKE_MODE_LOCALपर सेट करने के बराबर है. - सुनने की सुविधा से जुड़ा लॉजिक जोड़ें, ताकि
Contextको पास किए गएExoPlayer.Builderमें बदलाव होने पर, वर्चुअल डिवाइस आईडी अपने-आप अपडेट हो जाए. ExoPlayer.setVirtualDeviceIdको जोड़ें, ताकिExoPlayer.Builderको पास किए गएContextसे मिले वर्चुअल डिवाइस आईडी को मैन्युअल तरीके से अपडेट किया जा सके.- पक्का करें कि रेंडरर, मौजूदा आइटम के खत्म होने से 10 सेकंड पहले, अगली प्लेलिस्ट आइटम से डेटा का इस्तेमाल न करें.
- इन सेटिंग को अपडेट करने के लिए,
ExoPlayerमेंsetSeekBackIncrementMs,setSeekForwardIncrementMs, औरsetMaxSeekToPreviousPositionMsजोड़ें. ऐसा निर्माण के बाद किया जा सकता है (#2736). DefaultPreloadManagerमें प्री-कैशिंग की सुविधा जोड़ी गई है. अब ऐप्लिकेशन,TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)के ज़रिएDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)याDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)दिखा सकते हैं. इससे यह पता चलता है कि किसी मीडिया आइटम को पहले से कैश मेमोरी में सेव करना है.- शॉर्टफ़ॉर्म वीडियो दिखाने वाले डेमो ऐप्लिकेशन में,
DefaultPreloadManagerकी प्री-कैशिंग सुविधा का इस्तेमाल करें. - लोकल प्लेबैक के लिए
DefaultLoadControl.Builderसेटर जोड़ें. साथ ही,DefaultLoadControlकी डिफ़ॉल्ट वैल्यू में बदलाव करें, ताकि यह कई तरह की लोकल फ़ाइलों के साथ अच्छी तरह से काम कर सके. - उस बग को ठीक किया गया है जिसकी वजह से, खाली प्लेलिस्ट सेट करने पर प्लेयर
STATE_READYयाSTATE_BUFFERINGमें रह सकता है. - प्रीलोड मैनेजर एपीआई को बेहतर बनाया गया है:
addMediaItems(List<MediaItem>, List<T>)औरaddMediaSources(List<MediaSource>, List<T>)जोड़ें. ये एक साथ कई मीडिया आइटम या मीडिया सोर्स जोड़ते हैं. इसके बाद,invalidate()को अपने-आप कॉल करते हैं.removeMediaItems((List<MediaItem>)औरremoveMediaSources(List<MediaSource>)जोड़ें. इनसे मीडिया आइटम या मीडिया सोर्स को बैच में हटाया जा सकता है. साथ ही, यह पक्का करें कि हटाने के बाद, प्रीलोड मैनेजर इनमें से किसी भी आइटम को प्रीलोड करना शुरू न करे या प्रीलोड करना जारी न रखे.DefaultPreloadManager.setCurrentPlayingIndex(int)को अपने-आप अमान्य होने की अनुमति दें. मौजूदा प्लेइंग इंडेक्स को अपडेट करने के बाद, ऐप्लिकेशन को अबinvalidate()को साफ़ तौर पर कॉल करने की ज़रूरत नहीं है.
- स्क्रबिंग मोड में, फ़ॉरवर्ड सीक के लिए कीफ़्रेम रीसेट करने की सुविधा जोड़ी गई है. ऐसा एक ही ग्रुप की तस्वीरों के लिए किया जा सकता है.
- ऐप्लिकेशन के लिए
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)जोड़ें, ताकि किसी खिलाड़ी के लिए टारगेट बफ़र बाइट की वैल्यू सेट की जा सके. इसके लिए,playerNameको तय किया गया हो.DefaultLoadControlअब हर प्लेयर के लिए अलग-अलग फ़ैसले ले सकता है. ये फ़ैसले, उसे असाइन किए गए बाइट और टारगेट बफ़र बाइट के आधार पर लिए जाते हैं. - विज्ञापन ग्रुप में मौजूद हर विज्ञापन के लिए, स्किप करने की जानकारी देने के लिए
AdPlaybackState.AdGroupमेंSkipInfoजोड़ें. - उस गड़बड़ी को ठीक किया गया है जिसमें पोस्ट-रोल विज्ञापन चलाते समय
removeMediaItems(List)को कॉल करने पर क्रैश हो जाता था (#2746). - प्लेलिस्ट चलाने के दौरान कुछ वीडियो रुक-रुक कर चल रहे थे. ऐसा इसलिए हो रहा था, क्योंकि फ़्रेम को गलती से हमेशा आखिरी सैंपल के तौर पर सेट किया गया था और रेंडर किया गया था. इस समस्या को ठीक किया गया है.
- अगर प्लेयर, ऑडियो सेशन आईडी जनरेट नहीं कर पाता है, तो फिर से कोशिश करने का पाथ चालू करें (#2382, #2678).
DefaultPreloadManagerमें मौजूद सोर्स के लिए, कुल बफ़र बाइट को कंट्रोल करने की सुविधा जोड़ी गई है. इससे प्रीलोडिंग के लिए कुल बफ़र बाइट को अनचाहे तरीके से बढ़ने से रोका जा सकता है. डिफ़ॉल्ट कंट्रोल लॉजिक का इस्तेमाल करने के लिए, ऐप्लिकेशनPlayerId.Preload.name("preload") केplayerNameके लिएDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)के ज़रिए प्रीलोडिंग के लिए टारगेट बफ़र बाइट सेट कर सकते हैं. साथ ही,DefaultPreloadManager.Builder.setLoadControl(LoadControl)के ज़रिए बनाए गएDefaultLoadControlको इंजेक्ट कर सकते हैं.- डिफ़ॉल्ट सेटिंग के साथ
ShuffleOrderमेंcloneAndSet(int, int)जोड़ें (#2834). - सीक करने की सुविधा में बदलाव करने या अपने-आप ट्रांज़िशन होने के बाद, विज्ञापन के प्लेबैक को स्किप करने पर, कॉन्टेंट को फिर से शुरू करने के ऑफ़सेट को जोड़ें (#2484).
- ऑडियो और वीडियो ट्रैक के लिए, कोडेक पैरामीटर सेट करने और उन्हें मॉनिटर करने के लिए एपीआई जोड़ा गया है.
यह सुविधा,
MediaCodecपर आधारित रेंडरर के लिए लागू की गई है. इसके लिए, एपीआई 29 या इसके बाद का वर्शन ज़रूरी है.- पैरामीटर लागू करने के लिए,
ExoPlayer.setAudioCodecParameters()औरExoPlayer.setVideoCodecParameters()का इस्तेमाल करें. - बदलावों को सुनने के लिए,
ExoPlayer.addAudioCodecParametersChangeListener()औरExoPlayer.addVideoCodecParametersChangeListener()का इस्तेमाल करें. वेंडर के हिसाब से कुंजियों को मॉनिटर करने के लिए, एपीआई 31 या उसके बाद के वर्शन की ज़रूरत होती है.
- पैरामीटर लागू करने के लिए,
- मीडिया सोर्स को खाली पर सेट करने के बाद, नॉन-ज़ीरो पोज़िशन पर ले जाने और फिर प्लेयर को नॉन-खाली मीडिया सोर्स के साथ तैयार करने की वजह से होने वाली
IllegalStateExceptionसमस्या को ठीक किया गया है. - स्क्रबिंग मोड में रहते हुए, दूसरे मीडिया आइटम पर जाने पर
IllegalStateExceptionकी समस्या ठीक की गई. NullPointerExceptionमें मौजूद संभावितDefaultPlaybackSessionManagerको ठीक किया गया (#2885).- ज़रूरी शर्तें पूरी करने वाले वीडियो के लिए, वीडियो में आगे-पीछे जाने की सुविधा को बेहतर बनाने की सेटिंग चालू करें.
- API 36 और इसके बाद के वर्शन पर, MediaCodec में एसिंक्रोनस डिक्रिप्शन की सुविधा को फिर से चालू किया गया है. इस प्लैटफ़ॉर्म एपीआई से जुड़ी टाइमआउट की समस्याओं को ठीक कर दिया गया है (#1641).
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsकी डिफ़ॉल्ट वैल्यू को 15 मि॰से॰ पर सेट करें. साथ ही, ज़रूरी शर्तें पूरी करने वाले वीडियो के लिए, डिकोड करने से पहले वीडियो फ़्रेम को ज़्यादा असरदार तरीके से ड्रॉप करने की सुविधा चालू करें.DefaultLoadControlमें, मेमोरी के अपने-आप हिसाब लगाने की सुविधा के लिए, मेमोरी की ज़्यादा से ज़्यादा सीमा जोड़ें. यह सिर्फ़ तब लागू होना चाहिए, जब बहुत ज़्यादा ट्रैक चुने गए हों (#2860).- उस गड़बड़ी को ठीक किया गया है जिसमें प्लेलिस्ट या दोहराने वाले मोड में वीडियो चलाते समय, वीडियो के आखिर में स्क्रबर का इस्तेमाल करने पर, वीडियो अगले मीडिया आइटम पर चला जाता था.
- ऐसे प्लेयर का पता लगाने की सुविधा जोड़ें जो अटक गया है. अगर प्लेयर अटक जाता है, तो यह सुविधा
- CompositionPlayer:
@ExperimentalApiको नए@ExperimentalApiएनोटेशन के तहत पब्लिश करें, ताकि यह पता चल सके कि यह एक्सपेरिमेंट के लिए उपलब्ध है. हालांकि, इस पर अब भी काम चल रहा है.CompositionPlayerऐसा हो सकता है कि आने वाले समय में, कुछ एपीआई में बड़े बदलाव किए जाएं. साथ ही, इस्तेमाल के कुछ मामलों में, समस्याएं और सीमाएं भी हो सकती हैं. इनमें से कुछ के बारे में दस्तावेज़ में जानकारी नहीं दी गई है.CompositionPlayerमें,COMMAND_SET_AUDIO_ATTRIBUTESऔर ऑडियो फ़ोकस हैंडलिंग की सुविधा जोड़ी गई.CompositionPlayerमें, सेकंडरी सीक्वेंस की स्पीड बदलने की सुविधा जोड़ी गई है.EditedMediaItem.removeVideoके साथ काम करने की सुविधा जोड़ी गई.
- ट्रांसफ़ॉर्मर:
InAppMp4Muxerको डिफ़ॉल्ट मल्टीप्लेक्सर के तौर पर इस्तेमाल करें.EditedMediaItem.Builder#setSpeed()को जोड़ा गया औरEffects#createExperimentalSpeedChangingEffects()को बंद किया गया.EditedMediaItemSequenceमें,forceAudioTrackऔरforceVideoTrackकोtrackTypesसे बदलें.
- ट्रैक के विकल्प:
- अन्य विकल्पों के बारे में ज़्यादा जानकारी दिए बिना, किसी भी टेक्स्ट ट्रैक को चुनने के लिए
TrackSelectionParameters.selectTextByDefaultजोड़ें. TrackSelectionParametersमेंpreferredVideoLabels,preferredAudioLabels, औरpreferredTextLabelsजोड़ें, ताकि किसी खास लेबल वाले ट्रैक के लिए प्राथमिकता तय की जा सके. उदाहरण के लिए, HLS NAME टैग (#1666) से पढ़े गए ट्रैक.
- अन्य विकल्पों के बारे में ज़्यादा जानकारी दिए बिना, किसी भी टेक्स्ट ट्रैक को चुनने के लिए
- डेटा निकालने वाले टूल:
- FLAC: एन्कोड किए गए FLAC डेटा में नकली हेडर मिलने की संभावना को कम करने के लिए, हेडर का पता लगाने की सुविधा को बेहतर बनाया गया है. इससे डिकोडिंग से जुड़ी गड़बड़ियां (#558) कम हो जाती हैं.
- MP3: MP3 फ़ाइलों की शुरुआत में मौजूद ID3 टैग के बीच (और पहले) गैप की अनुमति दें (#811, #5718).
- MP3: सिंक बाइट के लिए, मौजूदा खोज सीमा से मेल खाने के लिए, स्निफ़िंग की सीमा को 128 केबी तक बढ़ाएं (#2713).
- MP3:
FLAG_ENABLE_INDEX_SEEKINGको बदलकर, मेटाडेटा हेडर (जैसे कि Xing और VBRI) से जानकारी पाने को प्राथमिकता दें. ऐसा तब करें, जब ये उपलब्ध हों. अगर कोई अन्य जानकारी मौजूद नहीं है, तो इंडेक्स पर आधारित जानकारी पाने की सुविधा पर वापस जाएं. इससे, सीकिंग मेटाडेटा वाली फ़ाइलों की परफ़ॉर्मेंस बेहतर होती है (#2839). - MP3: अगर कोई सीकिंग मेटाडेटा (जैसे, Xing, VBRI) नहीं मिलता है, तो
Mp3Extractorको डिफ़ॉल्ट रूप से स्थिर बिटरेट (सीबीआर) पर सेट करें. ऐसा तब भी करें, जबFLAG_ENABLE_INDEX_SEEKINGसेट हो. यह MP3 स्पेसिफ़िकेशन के इतिहास पर आधारित है. इसमें CBR स्टैंडर्ड था और VBR के लिए, साफ़ तौर पर हेडर की ज़रूरत होती है. इससे, बिना मेटाडेटा वाली फ़ाइलों को तुरंत खोजा जा सकता है. हालांकि, इससे हेडर के बिना वीबीआर फ़ाइलों की संभावित सटीकता कम हो जाती है. अगर CBR की मान्यता को खोजा नहीं जा सकता है, तो अब इंडेक्स सीकिंग का इस्तेमाल फ़ॉलबैक के तौर पर किया जाता है. उदाहरण के लिए, अज्ञात लंबाई वाली स्ट्रीम के लिए (#2848). - MP4: एक्सट्रैक्टर से ट्रैक फ़ॉर्मैट निकालने से पहले, पहले सैंपल की लेयर वैल्यू देखकर
audio/mpeg(MP3),audio/mpeg-L1, औरaudio/mpeg-L2एमआईएमई टाइप के बीच अंतर करें (#2683). - MP4: 1 एमबी से बड़े
stblबॉक्स का मतलब है कि फ़ाइल को फ़्रैगमेंट नहीं किया जाना चाहिए. इससे बहुत बड़ी फ़ाइलों को स्निफ़ करने की क्षमता बेहतर होती है (#2650). - MP4:
©mvn(मूवमेंट का नाम) और©mvi(मूवमेंट इंडेक्स) मेटाडेटा के लिए सहायता जोड़ी गई है. अब इन्हेंFormat.metadataमेंTextInformationFrameऑब्जेक्ट के तौर पर दिखाया जाता है. इनके आईडी क्रमशःMVNMऔरMVINहैं (#2754). - MP4: पूरी फ़ाइल को पार्स करने में गड़बड़ी होने के बजाय,
stsdबॉक्स मौजूद न होने वाले ट्रैक को अनदेखा करें. - Matroska: DTS-HD का पता लगाने की सुविधा जोड़ी गई (#6225).
MatroskaExtractorमें मौजूद उस समस्या को ठीक किया गया है जिसमें एक से ज़्यादा ट्रैक वाली फ़ाइलों के लिए, वीडियो में आगे-पीछे जाने की सुविधा ठीक से काम नहीं करती थी. अब क्यू पॉइंट, अपने-अपने ट्रैक से सही तरीके से जुड़ गए हैं. इससे वीडियो को ज़्यादा सटीक तरीके से ढूंढा जा सकता है.- MPEG-TS: टाइमस्टैंप के बिना पीईएस पैकेट की वजह से होने वाली
ReorderingBufferQueueसेIllegalArgumentExceptionको ठीक किया गया (#2764). - HEIC फ़ॉर्मैट वाली मोशन फ़ोटो को एक्सट्रैक्ट करने की सुविधा जोड़ी गई.
HeifExtractorअब एम्बेड किए गए वीडियो और ऑडियो ट्रैक वाली HEIC फ़ाइलों को पार्स कर सकता है.
- Inspector:
- मीडिया की जांच करने वाले टूल के लिए, एक नया
:media3-inspectorमॉड्यूल जोड़ा गया है. इस मॉड्यूल में अब एक नयाandroidx.media3.inspector.MetadataRetrieverशामिल है. यह मेटाडेटा और फ़्रेम निकालने, दोनों के लिए एक ही एपीआई उपलब्ध कराएगा. मौजूदाandroidx.media3.exoplayer.MetadataRetrieverको अब इस नए वर्शन के साथ काम करने के लिए अपडेट किया गया है. - फ़्रेम निकालने के लिए, नया सार्वजनिक एपीआई
androidx.media3.inspector.FrameExtractorलॉन्च किया गया. यहAutoCloseableक्लास, एचडीआर वीडियो, वीडियो इफ़ेक्ट, और कस्टम डिकोडर चुनने की सुविधा के साथ फ़्रेम निकालने का तरीका उपलब्ध कराती है. इसे किसी खासMediaItemके लिए,Builderके ज़रिए बनाया जाना चाहिए. - FrameExtractor: किसी मीडिया फ़ाइल से थंबनेल फ़्रेम निकालने के लिए,
getThumbnail()जोड़ें. इसके लिए, किसी खास टाइमस्टैंप की ज़रूरत नहीं होती. androidx.media3.inspector.MediaExtractorCompatजोड़ें. यह प्लैटफ़ॉर्म केandroid.media.MediaExtractorके लिए ड्रॉप-इन रिप्लेसमेंट है. इससे किसी मीडिया फ़ाइल से रॉ और एन्कोड किए गए मीडिया सैंपल निकाले जा सकते हैं. मौजूदाandroidx.media3.exoplayer.MediaExtractorCompatको अब इस नई क्लास के पक्ष में बंद कर दिया गया है.
- मीडिया की जांच करने वाले टूल के लिए, एक नया
- ऑडियो:
AudioProcessorइंस्टेंस को सीकिंग के बारे में बताएं.- कस्टम ऑडियो आउटपुट पाथ के लिए,
AudioOutputProviderमें नयाDefaultAudioSink.Builderइंटरफ़ेस इंजेक्ट करने की अनुमति दें. डिफ़ॉल्ट रूप से, इसकी वैल्यूAudioTrackAudioOutputProviderहोती है. - हैंडल
GainProcessorमें खोजता है. - ट्रैक फ़ॉर्मैट में AC-4 डिकोडर प्रोफ़ाइल और लेवल की क्षमताओं का इस्तेमाल करें. साथ ही, यह आकलन करें कि ये क्षमताएं काम करती हैं या नहीं (#2580).
- प्लेबैक की शुरुआत में, राउटिंग में बदलाव करने के लिए कॉलबैक हैंडल करने की वजह से होने वाली संभावित देरी से बचें (#2646).
- EAC3, EAC3-JOC, और AC-4 फ़ॉर्मैट के लिए कोडेक को फिर से इस्तेमाल करने की अनुमति दें (#1346).
Sonicमें फ़्लोट पीसीएम सैंपल के लिए सहायता जोड़ी गई.ToFloatPcmAudioProcessorमें 16 बिट पीसीएम सैंपल के लिए सपोर्ट जोड़ा गया.
- वीडियो:
- अलग-अलग प्रोफ़ाइलों वाले Dolby-Vision कॉन्टेंट के लिए, कोडेक को फिर से इस्तेमाल करने की सुविधा बंद करें.
- सुरक्षित कोडेक के लिए, परफ़ॉर्मेंस पॉइंट की गलत रिपोर्टिंग से जुड़ी समस्या को ठीक करने के लिए, फिर से वर्कअराउंड चालू किया गया (#2856).
- टेक्स्ट:
- Dolby Vision कॉन्टेंट में CEA-6/708 सबटाइटल को पार्स करने की समस्या ठीक की गई है (#2775).
- इमेज:
- हमने ScrubbingMode से जुड़ी उस समस्या को ठीक कर दिया है जिसमें DASH थंबनेल ट्रैक को स्क्रैप करते समय प्लेयर अटक जाता था (#2815).
- DRM:
MediaDrmCallbackतरीकों के रिटर्न टाइप कोbyte[]से बदलकर नएMediaDrmCallback.Responseटाइप में बदल दिया गया है, ताकि अतिरिक्त वैकल्पिक जानकारी दिखाई जा सके. यह सोर्स कोड में किया गया ऐसा बदलाव है जिससे कोड काम करना बंद कर सकता है. हालांकि, इस समस्या को आसानी से ठीक किया जा सकता है. इसके लिए,byte[]की पिछली वैल्यू कोnew Responseके साथ रैप करके वापस भेजें.AnalyticsListener.onDrmKeysLoaded(#1001) में, मुख्य अनुरोध की जानकारी जोड़ें. जैसे, यूआरएल और लेटेन्सी.- प्रावधान के अनुरोध का डेटा, यूआरएल पैरामीटर से POST बॉडी में ले जाएं.
- असर:
Presentationको एक ही साइड की लंबाई के साथ बनाए जाने पर, अनसेट आउटपुट साइड को गोल करने के लिएPresentation.copyWithUnsetSideRoundedToजोड़ें.
- Muxers:
- फ़्रेमवर्क
MediaMuxerके लिए, ड्रॉप-इन रिप्लेसमेंट के तौर परMediaMuxerCompatजोड़ा गया. - मोशन फ़ोटो बनाने की अनुमति देने के लिए,
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()जोड़ें. OPUS,VORBIS,VP8, औरVP9मीडिया स्ट्रीम कोwebmफ़ाइल फ़ॉर्मैट में मक्स करने की अनुमति देने के लिए,WebmMuxerजोड़ें.
- फ़्रेमवर्क
- IMA एक्सटेंशन:
- कस्टम प्रॉगार्ड नियमों को हटा दिया गया है, ताकि ऐप्लिकेशन IMA Android संग्रह में रिलीज़ किए गए नियमों का इस्तेमाल कर सकें.
ImaServerSideAdInsertionUriBuilder.setNetworkCodeजोड़ें. यह एक नया एपीआई है. इसकी मदद से, IMA SDK के लिए Google Ad Manager नेटवर्क कोड सेट किया जा सकता है. इससे Google Ad Manager की सेटिंग में बताए गए विज्ञापन आइडेंटिफ़ायर मैनेज किए जा सकते हैं. नेटवर्क कोड ज़रूरी नहीं हैं, लेकिन फ़ुल सर्विस स्ट्रीम के अनुरोधों के लिए इनका इस्तेमाल करने का सुझाव दिया जाता है. नेटवर्क कोड ढूंढने के लिए, यह लेख पढ़ें.- आईएमए की निर्भरता को 3.37.0 पर ले जाएं. इसके लिए, कोर लाइब्रेरी के डिसुगरिंग को चालू करना ज़रूरी है. यह सुविधा, निर्भरता वाले ऐप्लिकेशन के लिए भी चालू होनी चाहिए. IMA के config notes देखें. * एसएसएआई यूआरआई बिल्डर में, IMA डीएआई के कस्टम यूज़र इंटरफ़ेस (यूआई) के विकल्पों के लिए सहायता. सर्वर साइड विज्ञापन डालने की सुविधा के लिए, कस्टम यूज़र इंटरफ़ेस (यूआई) के विकल्पों में "स्किप किए जा सकने वाले विज्ञापन" और "इस विज्ञापन के बारे में जानकारी" रेंडर करने की सुविधा शामिल है. फ़िलहाल, यह सुविधा चुनिंदा पब्लिशर के लिए उपलब्ध है. इसके लिए, उन्हें अनुमति वाली सूची में शामिल होना होगा. इस बदलाव से, IMA SDK का वर्शन भी 3.38.0 (रिलीज़ नोट) पर अपग्रेड हो जाता है, ताकि कस्टम यूज़र इंटरफ़ेस (यूआई) के विकल्पों वाले एपीआई को ऐक्सेस किया जा सके.
- उस समस्या को ठीक किया गया है जिसमें विज्ञापन के बाद दिखाए जाने वाले कॉन्टेंट को तैयार करने में हुई गड़बड़ी को, विज्ञापन चलाने में हुई गड़बड़ी के तौर पर गलत तरीके से रिपोर्ट किया जाता था (#2656).
- सेशन:
MediaSession.Callback.onPlaybackResumptionमें नया पैरामीटर जोड़ें, ताकि यह पता चल सके कि कॉल सिर्फ़ जानकारी इकट्ठा करने के लिए किया गया है या वीडियो चलाने के लिए (#1764).MediaSession.ControllerInfo.isTrustedको अपडेट करें, ताकि अपने ऐप्लिकेशन के कंट्रोलर को भी भरोसेमंद के तौर पर एलान किया जा सके (#2542).- सूचना अपडेट को मैन्युअल तरीके से ट्रिगर करने के लिए,
MediaSessionService.triggerNotificationUpdateजोड़ें (#1833). - कस्टम कमांड के तरीकों में
ProgressListenerजोड़ें. MediaLibrarySession.Builder.setLibraryErrorReplicationModeकी डिफ़ॉल्ट वैल्यू को बदलकर, नॉन फ़ैटल करें.Contextपैरामीटर जोड़ेंMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625).- बाइंडर के ज़रिए वॉल्यूम कंट्रोल आईडी पाने के बजाय, प्लैटफ़ॉर्म
PlaybackInfoसे इसे पढ़ें. इससे यह पक्का होता है कि प्लेबैक टाइप और वॉल्यूम कंट्रोल आईडी को एक साथ पढ़ा जाता है और वे एक-दूसरे से मेल खाते हैं. - उस बग को ठीक किया गया है जिसमें
ACTION_UPमुख्य इवेंट को कस्टम हैंडलिंग के लिए कॉलबैक पर भेजने से पहले फ़िल्टर कर दिया जाता था. इससे, media1 और प्लैटफ़ॉर्म (#2637) के बीच समानता बनी रहती है. - उस गड़बड़ी को ठीक किया गया है जिसमें
getCurrentTimeline()कोPlayerWrapperसे कॉल किया जाता था. ऐसा तब भी होता था, जब कमांड उपलब्ध नहीं होती थी (#2665). - उस गड़बड़ी को ठीक किया गया है जिसमें मुख्य लूपर की मैसेज कतार में एक मैसेज छूट गया था. इसकी वजह से, सेवा बंद होने के बाद मेमोरी लीक हो गई थी (#2692).
MediaBrowserके साथ लेगसी सेशन ऐप्लिकेशन से कनेक्ट होने पर, कस्टम कमांड सिर्फ़ तब सेशन में भेजी जाती हैं, जब कस्टम ऐक्शन का विज्ञापन लेगसी सेशन केPlaybackStateCompatमें कस्टम ऐक्शन के तौर पर किया गया हो. अन्य सभी कस्टम कार्रवाइयां, सेवा को भेजी जाती हैं.- जब सेशन के ज़रिए ऑडियो सेशन आईडी सेट किया जाता है, तब मीडिया कंट्रोलर को सूचना देने के लिए
onAudioSessionIdChangedलागू किया गया (#244). - उस बग को ठीक किया गया है जिसकी वजह से,
onStartCommand()मेंIntentमीडिया कुंजी इवेंट के आने पर,KEYCODE_HEADSETHOOKप्लेयर शुरू नहीं हुआ. इस समस्या को ठीक कर दिया गया है. इसके लिए, 'KEYCODE_HEADSETHOOK' कोKEYCODE_MEDIA_PLAY_PAUSE(#2816) की तरह हैंडल किया गया है. - उस गड़बड़ी को ठीक किया गया है जिसमें सेशन और कंट्रोलर के बीच Surface के साइज़ की जानकारी नहीं दी जाती थी. इस वजह से, डेमो-सेशन में वीडियो इफ़ेक्ट लागू नहीं किए जा सके. अगर कंट्रोलर का इस्तेमाल किया जा रहा है, तो यह एक बड़ा बदलाव हो सकता है. ऐसा तब होगा, जब आपका प्लेयर
setVideoSurfaceHolderकॉल को हैंडल नहीं कर पाएगा. StringCharSequenceमेटाडेटा वैल्यू के अलावा, अन्य वैल्यू के ट्रांसफ़र की समस्या ठीक की गई. जैसे, स्पैन-स्टाइल वाली स्ट्रिंग (#2853).CommandButton.executeActionजोड़ें, ताकि कंट्रोलर आसानी से ज़रूरी कार्रवाई ट्रिगर कर सकें. साथ ही, कुछ प्लेयर और सेशन कमांड के लिए पैरामीटर तय करने की अनुमति दें, ताकि यह तय किया जा सके कि कौनसी कार्रवाई ट्रिगर करनी है.CommandButtonइंस्टेंस के लिए, पुराने सिस्टम के साथ काम करने की सुविधा जोड़ें. इसके लिए,Player.Commandया गैर-कस्टमSessionCommandका इस्तेमाल करके, उनकी कार्रवाई तय करें. अब इन्हें प्लैटफ़ॉर्म मीडिया सेशन में सही तरीके से दिखाया जाता है. उदाहरण के लिए, सिस्टम यूज़र इंटरफ़ेस (यूआई) या Android Auto के लिए.- उस समस्या को ठीक किया गया है जिसमें किसी
MediaControllerको प्लैटफ़ॉर्म मीडिया सेशन से कनेक्ट करने पर, एक हीBitmapको कई बार कंप्रेस किया जाता है.
- यूआई:
media3-ui-composeमॉड्यूल मेंProgressStateWithTickIntervalक्लास और उससे जुड़ाrememberProgressStateWithTickIntervalकंपोज़ेबल जोड़ें. इस स्टेट होल्डर का इस्तेमालdemo-composeमें किया जाता है, ताकि टेक्स्ट के तौर पर मौजूदा पोज़िशन और अवधि दिखाई जा सके.ui-composeमेंMuteButtonStateजोड़ें. इससेPlayerकी आवाज़ म्यूट की जा सकेगी. इस स्टेट होल्डर का इस्तेमालdemo-composeमें, म्यूट/अनम्यूट टॉगल बटन दिखाने के लिए किया जाता है.ProgressStateWithTickCountक्लास और उनसे जुड़ेrememberProgressStateWithTickCountकंपोज़ेबल कोmedia3-ui-composeमॉड्यूल में जोड़ें. इस स्टेट होल्डर का इस्तेमालdemo-composeमें किया जाता है, ताकि प्रोग्रेस को हॉरिज़ॉन्टल रीड-ओनली प्रोग्रेस बार के तौर पर दिखाया जा सके.media3-ui-composeमेंContentFrameकॉम्पोज़ेबल जोड़ें. यहPlayerSurfaceमैनेजमेंट को पक्षानुपात के हिसाब से इमेज का साइज़ बदलने और शटर से कवर करने की सुविधा के साथ जोड़ता है.- API 34 प्लैटफ़ॉर्म में मौजूद एक ज्ञात बग को ठीक किया गया है. इस बग की वजह से, Compose
AndroidViewमेंSurfaceViewका इस्तेमाल करते समय, वीडियो स्ट्रेच/क्रॉप हो जाते थे. इसलिए,ContentFrameऔरPlayerSurfaceकंपोज़ेबल परSURFACE_TYPE_SURFACE_VIEWका असर पड़ता था (#1237, #2811). - एक नया
media3-ui-compose-material3मॉड्यूल बनाएं और उसमें Material3 थीम वाले कंपोज़ेबल (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton) जोड़ें. media3-ui-compose-material3मेंTimeTextकंपोज़ेबल जोड़ें, ताकि प्लेयर की प्रोग्रेस को टेक्स्ट के तौर पर दिखाया जा सके. इसे मौजूदा पोज़िशन, अवधि या बचा हुआ समय दिखाने के लिए कॉन्फ़िगर किया जा सकता है.PlayerViewमें मीडिया रूट बटन जोड़ने की सुविधा जोड़ी गई.- आरटीएल टेक्स्ट में विराम चिह्न सही तरीके से दिखाने के लिए,
BidiFormatterका इस्तेमाल करें उपशीर्षक (#11214).
- एचएलएस एक्सटेंशन:
- एचएलएस इंटरस्टीशियल स्किप एट्रिब्यूट को पार्स करता है.
- HLS प्लेलिस्ट और ऐसेट की सूची वाले दस्तावेज़ से, स्किप कंट्रोल एट्रिब्यूट को
AdPlaybackStateमें मैप करें, ताकि उन्हें सार्वजनिक तौर पर ऐक्सेस किया जा सके. - उस बग को ठीक किया गया है जिसमें प्लेलिस्ट से EXT-X-PROGRAM-START-DATE टैग हटाने पर, प्लेलिस्ट के शुरू होने का समय हट जाता था. यह टैग, प्लेलिस्ट के शुरू होने का समय तय करता है (#2760).
- प्लेलिस्ट (#2826) में किसी दी गई जगह का सेगमेंट इंडेक्स ढूंढने के लिए, बाइनरी सर्च का इस्तेमाल करें.
- विज्ञापन और विज्ञापन ग्रुप को इंडेक्स के हिसाब से स्किप करने के लिए,
HlsInterstitialsAdsLoader.skipCurrentAd()औरskipCurrentAdGroup()और उनसे जुड़े तरीके जोड़ें. - विज्ञापन की अवधि की शुरुआत की जानकारी देने के लिए,
HlsInterstitialsAdsLoader.Listener.onAdStartedजोड़ें (#2859). - ISO 8601 तारीख-समय की स्ट्रिंग में, तारीख/समय सेपरेटर के तौर पर स्पेस को स्वीकार करें.
- बिना सेगमेंट वाले
HlsMediaPlaylistके लिए, अगले चंक को फ़ेच करने की प्रोसेस को ठीक से मैनेज किया गया है (#2821). - लाइव स्ट्रीम के लिए, वीडियो शुरू होने से पहले दिखने वाले विज्ञापनों की डिफ़ॉल्ट शुरुआती पोज़िशन का इस्तेमाल करें.
- DASH एक्सटेंशन:
- #2688: नॉन-हायरार्किकल
data:यूआरआई मेनिफ़ेस्ट का इस्तेमाल करके DASH स्ट्रीम चलाने पर,UnsupportedOperationExceptionसे जुड़ी समस्या ठीक की गई. LiveConfigurationकोDashMediaSourceकेMediaItemसे मिली वैल्यू पर रीसेट करें. ऐसा तब करें, जब मीडिया आइटम रिलीज़ हो और जब उपयोगकर्ता उसे अपडेट करे (#2606).- मेनिफ़ेस्ट के गलत अपडेट की वजह से होने वाली क्रैश की समस्याओं को ठीक किया गया है. इन समस्याओं की शिकायत प्लेयर की गड़बड़ियों के तौर पर नहीं की गई थी (#2805).
- #2688: नॉन-हायरार्किकल
- आरटीएसपी एक्सटेंशन:
- H264 और H265 के लिए, फ़्रैगमेंट किए गए NAL यूनिट को प्रोसेस करते समय, RTP पैकेट के मौजूद न होने की गड़बड़ी को ठीक किया गया है (#2613).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- AV1 एक्सटेंशन: AV1 सॉफ़्टवेयर डिकोडर अब ज़्यादा परफ़ॉर्मेंस वाली
dav1dलाइब्रेरी का इस्तेमाल करता है. इससे डिकोडिंग की स्पीड बेहतर होती है. इसलिए, यह पिछलीlibgav1लाइब्रेरी की जगह इस्तेमाल की जाती है. - FFmpeg एक्सटेंशन: कुछ FLAC फ़ाइलों को चलाने में आ रही समस्या को ठीक किया गया है. इसके लिए, यह पक्का किया गया है कि
STREAMINFOब्लॉक को सही तरीके से पार्स किया गया हो और डिकोडर को पास किया गया हो (#2887).
- AV1 एक्सटेंशन: AV1 सॉफ़्टवेयर डिकोडर अब ज़्यादा परफ़ॉर्मेंस वाली
- कास्ट एक्सटेंशन:
CastPlayer.Builderजोड़ें. इससेCastPlayerको लोकल और कास्ट, दोनों तरह से वीडियो चलाने की सुविधा मिलती है. अगर आपको सिर्फ़ कास्ट किए गए कॉन्टेंट को चलाने की सुविधा देने वालीCastPlayerकी पुरानी सुविधा का इस्तेमाल करना है, तोRemoteCastPlayerका इस्तेमाल करें. पहले से मौजूदCastPlayerकंस्ट्रक्टर, पहले की तरह ही काम करते हैं. हालांकि, अबCastPlayerयाRemoteCastPlayerबिल्डर का इस्तेमाल करने का सुझाव दिया जाता है.DefaultMediaItemConverterमें, नॉन-नल माइम टाइप लागू करना बंद करें.- जब
DefaultCastOptionsProvider#toMediaQueueItemउपलब्ध हो, तबMediaItem.mediaMetadata.mediaTypeका इस्तेमाल करके, Cast MEDIA_TYPE का अनुमान लगाएं, ताकि उसेDefaultCastOptionsProvider#toMediaQueueItemमें इस्तेमाल किया जा सके. DefaultCastOptionsProviderमें रिमोट से लोकल ट्रांसफ़र करने की सुविधा चालू करें.- सेशन के डेमो में Cast की सुविधा जोड़ी गई.
- Composable UI पर मीडिया रूट बटन दिखाने की सुविधा जोड़ी गई.
- ऐक्शन बार मेन्यू पर मीडिया रूट बटन दिखाने की सुविधा जोड़ी गई.
- मीडिया रूट बटन को View UI के तौर पर दिखाने की सुविधा जोड़ी गई.
- टेस्ट यूटिलिटी:
FakeClockके अपने-आप आगे बढ़ने की सुविधा के लिए, समय का ज़्यादा से ज़्यादा अंतर जोड़ें. यह डिफ़ॉल्ट रूप से एक सेकंड पर सेट होता है, लेकिन इसेFakeClock.Builderके ज़रिए कॉन्फ़िगर किया जा सकता है.RobolectricUtil.runMainLooperUntil(औरrunLooperUntil) के लिए, मैसेज के बीच का ज़्यादा से ज़्यादा समय अंतर जोड़ें. यह डिफ़ॉल्ट रूप से एक सेकंड होता है. हालांकि, इन तरीकों के नए ओवरलोड के ज़रिए इसे कॉन्फ़िगर किया जा सकता है.CapturingRenderersFactoryकोtest-utilsसेtest-utils-robolectricमें ट्रांसफ़र करें.
- हटाए गए सिंबल हटाएं:
- अब इस्तेमाल में नहीं आने वाले
DefaultPreloadManagerकंस्ट्रक्टर को हटाएं. इसके बजाय,DefaultPreloadManager.Builderका इस्तेमाल करें. - अब काम नहीं करने वाले
EditedMediaItemSequenceकंस्ट्रक्टर हटा दिए गए हैं. इसके बजाय,EditedMediaItemSequence.Builderका इस्तेमाल करें. BitmapFactoryImageDecoder.BitmapDecoderहटाएं. इसके बजाय,ExternallyLoadedImageDecoderका इस्तेमाल करें.- अब इस्तेमाल में नहीं है, इसलिए
ShadowMediaCodecConfig.forAllSupportedMimeTypes()को हटाएं. इसके बजाय,ShadowMediaCodecConfig.withAllDefaultSupportedCodecs()का इस्तेमाल करें. - बंद हो चुके
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()को हटाएं. इसके बजाय,ShadowMediaCodecConfig.withNoDefaultSupportedCodecs()का इस्तेमाल करें.
- अब इस्तेमाल में नहीं आने वाले
1.9.0-rc01
1 दिसंबर, 2025
1.9.0 स्टेबल वर्शन का इस्तेमाल करें.
1.9.0-beta01
20 नवंबर, 2025
1.9.0 स्टेबल वर्शन का इस्तेमाल करें.
1.9.0-alpha01
22 अक्टूबर, 2025
1.9.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.8.0
1.8.1
21 मई, 2026
वर्शन 1.8.1 में ये बदलाव शामिल हैं.
- असर:
- बिना किसी कॉन्टेक्स्ट के ट्रांज़िशन करते समय,
GL_DRAW_BUFFERऔरGL_READ_BUFFERको साफ़ तौर पर सेट करें.
- बिना किसी कॉन्टेक्स्ट के ट्रांज़िशन करते समय,
वर्शन 1.8.0
30 जुलाई, 2025
वर्शन 1.8.0 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
ForwardingSimpleBasePlayerमें प्लेयर को बदलने की सुविधा जोड़ी गई.
- ExoPlayer:
ExoPlayerइंटरफ़ेस में शफ़ल मोड के लिए गेटर जोड़ा गया (#2522).- अगर
DefaultAudioSinkको एक से ज़्यादा थ्रेड से ऐक्सेस किया जाता है, तो ज़्यादा साफ़ तौर पर अपवाद दिखाएं. अगर ऐसा प्लेयर के बाहरRendererCapabilities.getFormatSupportको कॉल करने की वजह से होता है, तो पक्का करें कि इस तरीके को उसी थ्रेड पर कॉल किया गया हो जिस पर ExoPlayer की प्लेबैक थ्रेड है. इसके अलावा, प्लेबैक के लिए इस्तेमाल किए गए इंस्टेंस के बजाय किसी दूसरे इंस्टेंस का इस्तेमाल करें (#1191). - उस गड़बड़ी को ठीक किया गया है जिसमें टीवी पर नॉन-स्टीरियो ऑडियो फ़ॉर्मैट को
DefaultTrackSelectorके साथ काम न करने वाला फ़ॉर्मैट के तौर पर मार्क किया जा सकता है. - पक्का करें कि MediaCodec के
DECODE_ONLYफ़्लैग का इस्तेमाल करते समय, आखिरी फ़्रेम सही तरीके से रेंडर हो रहा हो. यह फ़्लैग, स्क्रबर मोड में डिफ़ॉल्ट रूप से चालू होता है. ContextसेExoPlayer.Builderको पास किए गए वर्चुअल डिवाइस आईडी का इस्तेमाल करने की सुविधा जोड़ी गई.- स्क्रबिंग मोड में, डिफ़ॉल्ट रूप से डाइनैमिक शेड्यूलिंग की सुविधा चालू करें.
- किसी आइटम के आखिर में जाने पर, सोर्स को बार-बार रीलोड करने से बचें.
- स्क्रबिंग मोड में, डिफ़ॉल्ट रूप से
MediaCodec.BUFFER_FLAG_DECODE_ONLYका इस्तेमाल करें. - जब
PreloadMediaSourceको किसी ऐसेExoPlayerसे चलाया जाता है जिसका प्लेबैक थ्रेड, प्रीलोड थ्रेड (#2495) से अलग होता है, तबIllegalStateExceptionथ्रो करें. - डिफ़ॉल्ट तौर पर लागू करने की सुविधा के साथ,
cloneAndMoveकोShuffleModeमें जोड़ें (#2226). - अगर
renderको कॉल करने की ज़रूरत नहीं है, तोRenderer.getMinDurationToProgressUsके डिफ़ॉल्ट व्यवहार को बदलकर बड़ी वैल्यू दिखाने पर सेट करें. - उस गड़बड़ी को ठीक किया गया है जिसमें वीडियो को रोकने के बाद, वीडियो के आखिर में जाने पर आखिरी फ़्रेम दिखने में देरी होती थी. फ़िलहाल, बग ठीक करने की सुविधा सिर्फ़ तब काम करती है, जब
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledचालू हो. ExoPlayer.setScrubbingModeEnabled(boolean)तरीका जोड़ें. इससे प्लेयर को बार-बार वीडियो को आगे-पीछे करने के लिए ऑप्टिमाइज़ किया जाता है. उदाहरण के लिए, जब कोई उपयोगकर्ता स्क्रबर बार को इधर-उधर खींचता है.ExoPlayerऔरExoPlayer.Builderपर मौजूदsetScrubbingModeParameters(..)की मदद से, स्क्रबर मोड के व्यवहार को अपनी पसंद के मुताबिक बनाया जा सकता है.- स्क्रबिंग मोड में, फ़्रैक्शनल सीक टॉलरेंस को पसंद के मुताबिक बनाने की अनुमति दें.
- स्क्रबिंग मोड में कोडेक की ऑपरेटिंग रेट बढ़ाएं.
- उस गड़बड़ी को ठीक किया गया है जिसमें
AdsMediaSourceके कॉन्टेंट में मौजूद गड़बड़ियों की जानकारी कभी नहीं दी जाती थी (#2337). MergingMediaSourceमें मेमोरी लीक की समस्या ठीक की गई. उदाहरण के लिए, इसका इस्तेमाल तब किया जाता है, जब सबटाइटल साइडलोड किए जाते हैं (#2338).CmcdConfiguration.Factoryकोnullवापस लाने की अनुमति दें, ताकि कुछ मीडिया आइटम के लिए सीएमसीडी लॉगिंग बंद की जा सके (#2386).- इमेज के डिफ़ॉल्ट बफ़र साइज़ को 128 केबी (टेक्स्ट ट्रैक से कॉपी-पेस्ट करने की वजह से हुई गड़बड़ी) से बढ़ाकर 26 एमबी करें. यह 50 मेगापिक्सल की अल्ट्रा एचडीआर इमेज के लिए काफ़ी है (#2417).
PreCacheHelperजोड़ा गया है. इससे ऐप्लिकेशन, किसी मीडिया को पहले से कैश मेमोरी में सेव कर सकते हैं. इसके लिए, उन्हें मीडिया के शुरू होने की जगह और अवधि तय करनी होगी.DefaultPreloadManagerमें बताई गई पोज़िशन से प्रीलोडिंग की सुविधा जोड़ी गई.
- ट्रांसफ़ॉर्मर:
CodecDbLiteजोड़ें. इससे वीडियो एन्कोडिंग की सेटिंग को चिपसेट के हिसाब से ऑप्टिमाइज़ किया जा सकेगा.- CodecDB Lite की सेटिंग ऑप्टिमाइज़ करने की सुविधा चालू करने के लिए,
setEnableCodecDbLiteमेंsetEnableCodecDbLiteफ़्लैग जोड़ें.DefaultEncoderFactoryडिफ़ॉल्ट रूप से, इस फ़्लैग की वैल्यू false पर सेट होती है. - अब
addGap()की मदद से जोड़े गए शुरुआती गैप में साइलेंट ऑडियो भरने के लिए,EditedMediaItemSequence.BuilderमेंexperimentalSetForceAudioTrack(true)को साफ़ तौर पर सेट करना होगा. अगर गैप, क्रम के बीच में है, तो इस फ़्लैग की ज़रूरत नहीं है. Muxerइंटरफ़ेस कोmedia3-transformerसेmedia3-muxerपर ले जाएं.- मीडिया आइटम को इमेज के तौर पर इंपोर्ट करने के लिए,
MediaItem.Builder().setImageDuration(long)सेटिंग को ज़रूरी बना दिया गया है. Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)जोड़ें. इसमें ट्रिम करते समय, MP4 फ़ाइल में बदलाव करने की सूची शामिल होती है. इससे खिलाड़ियों को यह निर्देश दिया जाता है कि वे ट्रिम करने की शुरुआती जगह से पहले वाले मुख्य फ़्रेम और ट्रिम करने की शुरुआती जगह के बीच के सैंपल को अनदेखा करें.- Kotlin और Jetpack Compose का इस्तेमाल करने के लिए, कंपोज़िशन डेमो ऐप्लिकेशन को अपडेट करें. साथ ही, सीक्वेंस को 2x2 या PiP लेआउट में व्यवस्थित करने के लिए, कस्टम
VideoCompositorSettingsजोड़ें.
- डेटा निकालने वाले टूल:
- फ़्रैगमेंट की गई MP4 फ़ाइलों से मेटाडेटा पार्स किया गया (#2084).
- JPEG: ऐसी मोशन फ़ोटो के साथ काम करता है जिनमें शुरुआत में Exif सेगमेंट नहीं होता (#2552).
- एक से ज़्यादा
sidxऐटम वाले फ़्रैगमेंट किए गए MP4 में, वीडियो को आगे-पीछे करने की सुविधा जोड़ी गई. इस सुविधा को चालू करने के लिए,FragmentedMp4ExtractorपरFLAG_MERGE_FRAGMENTED_SIDXफ़्लैग का इस्तेमाल करें (#9373). - FLAC फ़ाइलों में मौजूद खाली सीक टेबल को अनदेखा करें. इनमें वे टेबल भी शामिल हैं जिनमें सिर्फ़ प्लेसहोल्डर सीक पॉइंट मौजूद हैं. साथ ही, अगर फ़ाइल की अवधि पता है, तो बाइनरी सर्च सीकिंग पर वापस जाएं (#2327).
- H.265 एसईआई यूनिट के पार्सिंग की समस्या ठीक की गई है, ताकि पहचान में न आने वाले एसईआई टाइप को पूरी तरह से स्किप किया जा सके (#2456).
WavExtractorटाइप की फ़ाइल को पार्स करते समय, ऑडियो फ़ॉर्मैट के लिए हेडर एक्सटेंशन के SubFormat डेटा का इस्तेमाल करने के लिए,WavExtractorको अपडेट करें.WAVE_FORMAT_EXTENSIBLE- MP4: रॉ पीसीएम ऑडियो ट्रैक (64-बिट फ़्लोटिंग पॉइंट पीसीएम काम नहीं करता) तय करने वाले
ipcmऔरfpcmबॉक्स के लिए सहायता जोड़ी गई. - MP4: यह
tkhdट्रांसफ़ॉर्मेशन मैट्रिक्स के रोटेशन वाले हिस्से को मैनेज करता है. यह मैट्रिक्स, वीडियो को घुमाता और दिखाता है. इससे यह पक्का होता है कि iPhone के फ़्रंट कैमरे से लिए गए वीडियो, सही तरीके से दिखें. हालांकि, ये वीडियो y-ऐक्सिस में गलत तरीके से दिखते हैं (#2012). - MP3:
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194) की वजह से, कॉन्स्टेंट बिटरेट पर वापस आने पर, न खोजे जा सकने वाले Xing, VBRI, और इसी तरह के वैरिएबल बिटरेट मेटाडेटा से अवधि और डेटा साइज़ का इस्तेमाल करें.
- ऑडियो:
- उस गड़बड़ी को ठीक किया गया है जिसमें मीडिया के खत्म होने के ठीक पहले ऑडियो चलाना शुरू करने पर,
AnalyticsListener.onAudioPositionAdvancingको कॉल नहीं किया जाता था. ChannelMappingAudioProcessorऔरTrimmingAudioProcessorमें, सभी लीनियर पीसीएम सैंपल फ़ॉर्मैट के लिए सहायता जोड़ी गई.CompositionPlayerमें ऑडियो गैप की सुविधा जोड़ी गई.BaseAudioProcessor#reset()सेBaseAudioProcessor#flush()को किए गए फ़र्ज़ी कॉल को हटाएं.- DefaultAudioMixer में, लगातार पावर अपमिक्सिंग/डाउनमिक्सिंग की अनुमति दें.
ChannelMappingAudioProcessor,TrimmingAudioProcessor, औरToFloatPcmAudioProcessorको सार्वजनिक करें (#2339).DefaultAudioSinkमें अंडररन का पता लगाने के लिए, सबसे सही अनुमान लगाने के बजायAudioTrackPositionTrackerमेंAudioTrack#getUnderrunCount()का इस्तेमाल करें.- ऑडियो आउटपुट डिवाइस की वजह से, ऑडियो की पोज़िशन में अचानक बदलाव होने पर, ऑडियो टाइमस्टैंप को बेहतर तरीके से स्मूथ करने की सुविधा जोड़ी गई है.
- उस बग को ठीक किया गया है जिसमें ब्लूटूथ डिवाइसों से कनेक्ट होने पर, वीडियो को रोकने के बाद फिर से शुरू करने पर, पहले 10 सेकंड के लिए ऑडियो/वीडियो सिंक नहीं होता था.
- उस बग को ठीक किया गया है जिसकी वजह से
AnalyticsListener.onAudioPositionAdvancing, ऑडियो के आगे बढ़ने का समय रिपोर्ट नहीं कर रहा था. हालांकि, यह पहली बार मेज़रमेंट का समय रिपोर्ट कर रहा था. - कुछ डिवाइसों पर स्टीरियो ऑडियो पर फ़ॉलबैक करने के बाद, मल्टीचैनल ऑडियो पर वापस आने की समस्या ठीक की गई (#2258).
- उस गड़बड़ी को ठीक किया गया है जिसमें मीडिया के खत्म होने के ठीक पहले ऑडियो चलाना शुरू करने पर,
- वीडियो:
- डिटैच किए गए डिसप्ले वाले डिवाइसों के लिए, "lenovo" और "motorola" डिवाइसों पर वर्कअराउंड की सुविधा उपलब्ध कराई गई है (#2059).
- जब ऑडियो सैंपल, अनुरोध की गई जगह से शुरू नहीं होते हैं, तो वीडियो फ़्रेम को बेहतर तरीके से रिलीज़ करने की सुविधा को बेहतर बनाया गया है.
- डिटैच किए गए डिसप्ले के काम न करने की समस्या को ठीक करने के लिए, "realme" डिवाइसों के लिए वर्कअराउंड उपलब्ध कराया गया (#2059).
- एक्सपेरिमेंटल
ExoPlayerएपीआई जोड़ें, ताकि सिर्फ़ डिकोड किए गए इनपुट बफ़र को लाइन में लगाते समयMediaCodec.BUFFER_FLAG_DECODE_ONLYफ़्लैग शामिल किया जा सके. यह फ़्लैग, डिकोडर को सिर्फ़ डिकोड किए गए बफ़र को छोड़ने का सिग्नल देगा. इससे वीडियो को तेज़ी से आगे-पीछे किया जा सकेगा. इसेDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlagकी मदद से चालू करें. * सॉफ़्टवेयर वीडियो कोडेक के लिए, कोडेक की परफ़ॉर्मेंस की जांच को बेहतर बनाया गया है. इस वजह से, हो सकता है कि कुछ और ट्रैक कोEXCEEDS_CAPABILITIESके तौर पर मार्क कर दिया जाए. - कुछ डिवाइसों पर VP9 Widevine वीडियो चलाने से जुड़ी गड़बड़ियों को ठीक किया गया है (#2408).
- टेक्स्ट:
- MP4 फ़ाइलों में VobSub ट्रैक के लिए सहायता जोड़ी गई (#2510).
- उपशीर्षक का कोई सेगमेंट शुरू में लोड नहीं होता है, लेकिन बाद में लोड हो जाता है. इसके बाद, उपशीर्षक के कई सेगमेंट खाली दिखते हैं. इस समस्या को ठीक किया गया है (#2517).
- सबटाइटल चालू करने पर, प्रोसेस हो रहे क्यू को दिखाने के लिए, SSA और SubRip को ठीक किया गया (#2309).
- उपशीर्षक में गड़बड़ी वाली स्ट्रीम से, उपशीर्षक ट्रैक खाली होने वाली लाइव स्ट्रीम पर स्विच करने के दौरान, वीडियो के रुकने की समस्या ठीक की गई है (#2328).
- B-फ़्रेम (#2372) वाली H.262 स्ट्रीम चलाने पर, CEA-608 सबटाइटल के गड़बड़ होने की समस्या ठीक की गई.
- Matroska फ़ाइलों में
CodecId = S_TEXT/SSAके साथ SSA सबटाइटल के लिए सहायता जोड़ी गई. पहले,MatroskaExtractorसिर्फ़CodecId = S_TEXT/ASSफ़ॉर्मैट के साथ काम करता था. इसका इस्तेमाल SubStation Alpha के 'ऐडवांस' (v4+) वैरिएंट को दिखाने के लिए किया जाता है. हालांकि, ExoPlayer के पार्सिंग लॉजिक, दोनों वैरिएंट के लिए एक जैसा होता है (#2384). - SubStation Alpha (SSA) सबटाइटल फ़ाइलों में
layerप्रॉपर्टी के लिए सहायता जोड़ी गई है. इसका इस्तेमाल, एक साथ स्क्रीन पर एक से ज़्यादा क्यू दिखाए जाने पर, उनके z-ऑर्डर को तय करने के लिए किया जाता है (#2124).
- मेटाडेटा:
MetadataRetrieverऔरTimelineसे मीडिया की अवधि औरTimelineको वापस पाने की सुविधा जोड़ी गई है. साथ ही, इसे इंस्टेंस पर आधारितAutoCloseableएपीआई पर माइग्रेट किया गया है.Builderका इस्तेमाल करके,MediaItemके लिए एक इंस्टेंस बनाएं. इसके बाद, मेटाडेटा के लिएListenableFutureपाने के लिए,retrieveTrackGroups(),retrieveTimeline(), औरretrieveDurationUs()को कॉल करें. अब पुरानी स्टैटिक विधियों का इस्तेमाल नहीं किया जा सकता (#2462).
- इमेज:
- डिकोड किए गए बिटमैप को
BitmapFactoryImageDecoderमें डिसप्ले साइज़ तक सीमित करें, ताकि बहुत बड़ी (जैसे, 50 मेगापिक्सल) इमेज दिखाने की कोशिश करते समय,PlayerViewसेCanvas: trying to draw too large bitmap.के साथ ऐप्लिकेशन क्रैश न हो. DefaultRenderersFactory.getImageDecoderFactory()के सिग्नेचर को बदलकर,Contextपैरामीटर लें.CompositionPlayerमें इस्तेमाल किए गए ज़्यादा से ज़्यादा बिटमैप आउटपुट साइज़ कोTransformerमें पहले से इस्तेमाल किए गए साइज़ के साथ अलाइन करें. इसका मतलब है किCompositionPlayer, बिटमैप को डिकोड करते समय डिसप्ले साइज़ को ध्यान में नहीं रखता है. हालांकि,ExoPlayerऐसा करता है.
- डिकोड किए गए बिटमैप को
- DRM:
OfflineLicenseHelper.newWidevineInstanceको स्वीकार करने वालेMediaItem.DrmConfigurationका नया ओवरलोड जोड़ें, ताकि एचटीटीपी अनुरोध हेडर को सही तरीके से लागू किया जा सके (#2169).
- असर:
- ऐसा
Presentation.createForShortSide(int)जोड़ें जोPresentationबनाता हो. इससे यह पक्का होता है कि सबसे छोटी साइड हमेशा दी गई वैल्यू से मेल खाती हो. भले ही, इनपुट ओरिएंटेशन कुछ भी हो.
- ऐसा
- Muxers:
- उस गड़बड़ी को ठीक किया गया है जिसमें फ़्रैगमेंट किए गए MP4 फ़ाइल फ़ॉर्मैट में ऑडियो सैंपल के लिए सही सैंपल फ़्लैग सेट नहीं किए गए थे.
writeSampleData()एपीआई अबMediaCodec.BufferInfoके बजाय, मक्सर के लिए खास तौर पर बनाई गईBufferInfoक्लास का इस्तेमाल करता है.Muxer.Factory#supportsWritingNegativeTimestampsInEditListजोड़ें, जो डिफ़ॉल्ट रूप से गलत पर सेट होता है.
- IMA एक्सटेंशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें एक विज्ञापन में लोड होने से जुड़ी गड़बड़ी की वजह से, गलती से दूसरे विज्ञापन ग्रुप को अमान्य कर दिया जाता था.
- उस गड़बड़ी को ठीक किया गया है जिसमें वीओडी विंडो खत्म होने के बाद, विज्ञापन ग्रुप की वजह से वीडियो नहीं चल रहा था.
विज्ञापन ग्रुप के शुरू होने का समय, विंडो के बाद होने पर उन्हें अब
MediaPeriodQueueमें नहीं जोड़ा जाता (#2215).
- सेशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें तीसरे पक्ष के ऐसे Media3 कंट्रोलर से किए गए कनेक्शन को अनदेखा किया जाता था जिनके पास खास अधिकार नहीं होते थे.
- लेगसी
MediaBrowserServiceCompatको कस्टम निर्देश भेजते समय, उपलब्ध निर्देशों की जांच करने की सुविधा हटा दी गई है. यह लेगसी ऐप्लिकेशन से कनेक्ट किए गए लेगसी कंट्रोलर/ब्राउज़र के व्यवहार के जैसा ही है. - उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, प्लेयर में पहली बार कॉन्टेंट चलाने में हुई गड़बड़ी को, हमेशा बनी रहने वाली कस्टम अपवाद वाली गड़बड़ी के तौर पर गलत तरीके से माना जाता था. इससे ऐप्लिकेशन को ठीक होने से रोका जाता है.
- उस गड़बड़ी को ठीक किया गया है जिसमें सेशन के ज़रिए हैंडल नहीं किए गए कंट्रोलर में कुछ बदलावों की वजह से
IllegalStateExceptionsहो सकता है. - उस गड़बड़ी को ठीक किया गया है जिसमें सेशन से मैनेज नहीं की जा रही कंट्रोलर कार्रवाइयों की वजह से, कंट्रोलर अमान्य स्थिति में चला जाता था.
- StrictMode के असुरक्षित लॉन्च से जुड़े उल्लंघन की चेतावनी को ठीक किया गया है (#2330).
- उस बग को ठीक किया गया है जिसमें किसी अन्य ऐप्लिकेशन थ्रेड से प्लेयर चलाने पर, मुख्य थ्रेड से
setSessionExtrasको कॉल करने परIllegalStateException(#2265) होता था. - अगर किसी प्लेयर को मीडिया आइटम के साथ सेट अप किया गया है, लेकिन उन्हें तैयार या चलाया नहीं गया है, तो सूचना अपने-आप न दिखाएं
(#2423https://github.com/androidx/media/issues/2423). इस सुविधा को
MediaSessionService.setShowNotificationForIdlePlayerकी मदद से कॉन्फ़िगर किया जा सकता है. - सभी या चुने गए कंट्रोलर के लिए, कस्टम
PlaybackExceptionजोड़ें. - उस बग को ठीक किया गया है जिसकी वजह से,
MediaControllerपर लाइव स्ट्रीम में आगे-पीछे करने परIllegalArgumentExceptionहो सकता है. - लाइव स्ट्रीम के लिए, प्लैटफ़ॉर्म मीडिया कंट्रोलर के लिए, वापस चलाने की पोज़िशन और मौजूदा आइटम में खोजने की सुविधा को बंद करें. इससे Android Auto के यूज़र इंटरफ़ेस (और प्लैटफ़ॉर्म मीडिया सेशन से इस जानकारी का इस्तेमाल करने वाले अन्य कंट्रोलर) में पोज़िशन से जुड़ी गड़बड़ियों से बचा जा सकेगा (#1758).
- उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी
MediaBrowserServiceCompatसे कनेक्ट किए गएMediaBrowserकेgetLibraryRootमें null पास करने परNullPointerExceptionजनरेट होता था. - उस बग को ठीक किया गया है जिसकी वजह से, कस्टम ऐक्शन, खोज के नतीजे या getItem
अनुरोध भेजने पर, लेगसी सेशन ऐप्लिकेशन क्रैश हो जाता था.
ClassNotFoundException - उस गड़बड़ी को ठीक किया गया है जिसमें
MediaItem.LocalConfiguration.uriको प्लैटफ़ॉर्म सेशन केMediaMetadataपर शेयर किया गया था. अगर आपको जान-बूझकर कोई यूआरआई शेयर करना है, ताकि कंट्रोलर मीडिया का फिर से अनुरोध कर सकें, तोMediaItem.RequestMetadata.mediaUriसेट करें.
- यूआई:
PlayerSurfaceसे जुड़ी गड़बड़ी को ठीक किया गया है. यह गड़बड़ी, बार-बार इस्तेमाल किए जा सकने वाले कॉम्पोनेंट, जैसे किLazyColumnमें ठीक से काम नहीं कर रही थी (#2493).- Compose में मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, बटन की शुरुआती स्थितियां सेट करने और स्थिति में बदलाव (जैसे कि आइकॉन के आकार या चालू होने की स्थिति) को देखने के बीच काफ़ी समय लगता था. अब निगरानी की अवधि के बाहर, प्लेयर में किए गए किसी भी बदलाव को चुना जाता है (#2313).
SeekBackButtonStateऔरSeekForwardButtonStateके लिए,media3-ui-composeमॉड्यूल में स्टेट होल्डर और कंपोज़ेबल जोड़े गए.PlayerControlViewमें, ExoPlayer के स्क्रबर मोड की सुविधा जोड़ी गई. इस सुविधा को चालू करने पर, जब उपयोगकर्ता स्क्रबर बार को खींचना शुरू करता है, तो प्लेयर स्क्रबर मोड में चला जाता है. साथ ही, हर मूवमेंट के लिएplayer.seekToकॉल जारी करता है. इसके बाद, जब स्क्रीन से टच हट जाता है, तो प्लेयर स्क्रबर मोड से बाहर निकल जाता है. इस इंटिग्रेशन को चालू करने के लिए, एक्सएमएल मेंtime_bar_scrubbing_enabled = trueया Java/Kotlin मेंsetTimeBarScrubbingEnabled(boolean)तरीके का इस्तेमाल किया जा सकता है.PlayerSurfaceको नल वैल्यू स्वीकार करने वालेPlayerआर्ग्युमेंट के तौर पर इस्तेमाल करें.
- डाउनलोड:
- प्रोग्रेसिव स्ट्रीम के लिए, कुछ हिस्सा डाउनलोड करने की सुविधा जोड़ी गई. ऐप्लिकेशन,
DownloadHelperकी मदद से प्रोग्रेसिव स्ट्रीम तैयार कर सकते हैं. साथ ही, हेल्पर सेDownloadRequestका अनुरोध कर सकते हैं. इसके लिए, उन्हें समय के हिसाब से मीडिया के शुरू और खत्म होने की ऐसी पोज़िशन बतानी होगी जिसे डाउनलोड में शामिल किया जाना चाहिए. जवाब में मिलेDownloadRequestमें, बाइट की हल की गई रेंज होती है. इसकी मदद से,ProgressiveDownloaderबनाया जा सकता है और इससे जुड़ा कॉन्टेंट डाउनलोड किया जा सकता है. DownloadHelper.Factoryजोड़ें, जिनकी मदद से स्टैटिकDownloadHelper.forMediaItem()तरीकों को बदला जाता है.SegmentDownloaderलागू करने के लिए,Factoryजोड़ें.- अडैप्टिव स्ट्रीम के लिए, कुछ हिस्सा डाउनलोड करने की सुविधा जोड़ी गई. ऐप्लिकेशन,
DownloadHelperकी मदद से अडैप्टिव स्ट्रीम तैयार कर सकते हैं. साथ ही, हेल्पर सेDownloadHelperका अनुरोध कर सकते हैं. इसके लिए, उन्हें मीडिया के शुरू और खत्म होने की समयसीमा बतानी होगी, ताकि डाउनलोड में वह हिस्सा शामिल किया जा सके.DownloadRequestजवाब में मिलेDownloadRequestमें, समयसीमा की जानकारी होती है. इससेSegmentDownloaderबनाया जा सकता है. साथ ही, इससे जुड़ा कॉन्टेंट डाउनलोड किया जा सकता है.
- प्रोग्रेसिव स्ट्रीम के लिए, कुछ हिस्सा डाउनलोड करने की सुविधा जोड़ी गई. ऐप्लिकेशन,
- Cronet एक्सटेंशन:
- कुकी को अपने-आप मैनेज करने की सुविधा जोड़ी गई है (#5975).
- एचएलएस एक्सटेंशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें बफ़र में कोई भी हिस्सा उपलब्ध न होने पर,
HlsSampleStreamWrapperबफ़र में खोजने की कोशिश करता है #2598. - उस बग को ठीक किया गया है जिसमें कम समय में लोड होने वाले हिस्सों को लोड करने के बाद, ट्रैक का चुनाव बदल जाता था. साथ ही, प्रीलोड करने के सुझावों की वजह से वीडियो रुक जाता था या फ़्रीज़ हो जाता था (#2299).
- जब सर्वर
CAN-BLOCK-RELOAD=YESका पालन नहीं करता है, तब टारगेट अवधि के आधे समय तक इंतज़ार करके, बार-बार रीलोड होने से रोकें (#2317). - उस बग को ठीक किया गया है जिसकी वजह से, इंटरस्टीशियल स्ट्रीम शुरू करते समय वीडियो रुक जाता था. ऐसा तब होता था, जब मिड रोल से पहले इंटरस्टीशियल स्ट्रीम शुरू की जाती थी और गलत विज्ञापन के लिए ऐसेट की सूची का रिज़ॉल्यूशन तय करने की कोशिश की जाती थी (#2558).
- कोट की गई स्ट्रिंग एट्रिब्यूट वैल्यू में
\f(फ़ॉर्म फ़ीड) को स्वीकार करने के लिए, प्लेलिस्ट पार्सिंग की समस्या ठीक की गई है (#2420). - एक ही आईडी वाले इंटरस्टीशियल अपडेट करने की सुविधा जोड़ी गई है (#2427).
- उस गड़बड़ी को ठीक किया गया है जिसमें कभी-कभी लाइव स्ट्रीम के लोड होने के लिए सेगमेंट खत्म हो जाने के बाद, प्लेलिस्ट लोड होने से जुड़ी गड़बड़ियों की जानकारी नहीं मिलती है (#2401https://github.com/androidx/media/issues/2401).
- ऑडियो रेंडिशन की तरह, सबटाइटल रेंडिशन को भी NAME टैग के हिसाब से ग्रुप किया गया है. ऑडियो रेंडिशन को पहले से ही ग्रुप किया जाता है (#1666).
HlsInterstitialsAdsLoaderके साथ X-ASSET-LIST और लाइव स्ट्रीम की सुविधा काम करती है.
- उस गड़बड़ी को ठीक किया गया है जिसमें बफ़र में कोई भी हिस्सा उपलब्ध न होने पर,
- DASH एक्सटेंशन:
- उस समस्या को ठीक किया गया है जिसमें ट्रिक-प्ले अडैप्टेशन सेट को उसके मुख्य अडैप्टेशन सेट के साथ मर्ज कर दिया जाता है. इससे अमान्य
TrackGroupबन जाता है (#2148). - उस बग को ठीक किया गया है जिसकी वजह से, DASH की अवधि कम करने पर अपवाद मिल सकता है. ऐसा तब होता है, जब नई अवधि से ज़्यादा सैंपल को रेंडरिंग पाइपलाइन पहले ही पढ़ चुकी हो (#2440).
- उस बग को ठीक किया गया है जिसमें सीएमसीडी क्वेरी पैरामीटर का इस्तेमाल करने पर रीडायरेक्ट नहीं किया जा रहा था (#2475).
- उस समस्या को ठीक किया गया है जिसमें ट्रिक-प्ले अडैप्टेशन सेट को उसके मुख्य अडैप्टेशन सेट के साथ मर्ज कर दिया जाता है. इससे अमान्य
- आरटीएसपी एक्सटेंशन:
- आरएफ़सी 7798#4.4.2 (#2413) के मुताबिक, H265 के लिए आरटीपी एग्रीगेशन पैकेट की सुविधा जोड़ी गई है.
- HTTP 302 रिस्पॉन्स (#2398) को प्रोसेस करते समय, जगह की जानकारी के यूआरआई का इस्तेमाल करने के लिए
RtspClientको ठीक किया गया. - SessionDescriptions के लिए पार्सिंग की सुविधा जोड़ी गई है. इनमें ऐसी लाइनें शामिल होती हैं जिनमें ट्रेलिंग व्हाइटस्पेस वर्ण होते हैं (#2357).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- उस गड़बड़ी को ठीक किया गया है जिसमें ऑडियो डिकोडर एक्सटेंशन के लिए
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeका कोई असर नहीं होता (#2258).
- उस गड़बड़ी को ठीक किया गया है जिसमें ऑडियो डिकोडर एक्सटेंशन के लिए
- कास्ट एक्सटेंशन:
- टेस्ट यूटिलिटी:
- खिलाड़ी को किसी तय पोज़िशन तक आगे बढ़ाने के लिए,
TestPlayerRunHelperमेंadvance(player).untilPositionAtLeastऔरuntilMediaItemIndexजोड़ें. ज़्यादातर मामलों में, ये तरीके मौजूदाuntilPositionऔरuntilStartOfMediaItemतरीकों से ज़्यादा भरोसेमंद होते हैं. FakeDownloaderकोtest-utils-robolectricमॉड्यूल में ले जाएं, ताकि इसका इस्तेमाल अन्य टेस्ट में किया जा सके.transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...), औरtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)को हटा दिया गया है. इसके बजाय, शैडो एनकोडर और डिकोडर को कॉन्फ़िगर करने के लिए,ShadowMediaCodecConfigका इस्तेमाल करें.ShadowMediaCodecConfigने कोडेक के जिन नामों की जानकारी दी है उनमें "exotest" प्रीफ़िक्स की जगह "media3" प्रीफ़िक्स का इस्तेमाल किया गया है.
- खिलाड़ी को किसी तय पोज़िशन तक आगे बढ़ाने के लिए,
- हटाए गए सिंबल हटाएं:
- बंद किए गए
SegmentDownloaderकंस्ट्रक्टरSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)और इसकी सबक्लास में मौजूद कंस्ट्रक्टरDashDownloader,HlsDownloader, औरSsDownloaderको हटा दिया गया है. - अब काम न करने वाले
Player.hasNext()औरPlayer.hasNextWindow()को हटा दिया गया है. इसके बजाय,Player.hasNextMediaItem()का इस्तेमाल करें. - अब काम न करने वाले
Player.next()को हटाया गया. इसके बजाय,Player.seekToNextMediaItem()का इस्तेमाल करें. - अब काम न करने वाले
Player.seekToPreviousWindow()को हटाया गया. इसके बजाय,Player.seekToPreviousMediaItem()का इस्तेमाल करें. - अब काम न करने वाले
Player.seekToNextWindow()को हटाया गया. इसके बजाय,Player.seekToNextMediaItem()का इस्तेमाल करें. exoplayerमॉड्यूल में, बंद किए गएBaseAudioProcessorको हटाया गया.commonमॉड्यूल में जाकर,BaseAudioProcessorका इस्तेमाल करें.- अब इस्तेमाल में नहीं है
MediaCodecVideoRendererकंस्ट्रक्टरMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- बंद किए गए
वर्शन 1.8.0-rc02
24 जुलाई, 2025
1.8.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.8.0-rc01
16 जुलाई, 2025
1.8.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.8.0-beta01
2 जुलाई, 2025
1.8.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.8.0-alpha01
19 मई, 2025
1.8.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.7.0
वर्शन 1.7.1
16 मई, 2025
इस रिलीज़ में वही कोड है जो 1.6.1 में है. इसे इसलिए रिलीज़ किया जा रहा है, ताकि यह 1.7.0 से 'नया' रिलीज़ दिखे. 1.7.0 को गलती से स्टेबल वर्शन के तौर पर टैग कर दिया गया था. यह एक ऐल्फ़ा रिलीज़ थी. इसके बारे में यहां बताया गया है.
वर्शन 1.7.0
16 मई, 2025
यह रिलीज़ 1.7.0-alpha01 होनी चाहिए थी, लेकिन गलती से इसे maven.google.com पर 1.7.0 (यानी कि स्टेबल) के तौर पर टैग कर दिया गया था. कृपया इसका इस्तेमाल न करें. 1.6.1 पर बने रहें या 1.7.1 पर अपग्रेड करें. 1.7.1 का कोड 1.6.1 के जैसा ही है.
वर्शन 1.6.0
1.6.1
14 अप्रैल, 2025
androidx.media3:media3-*:1.6.1 रिलीज़ हो गया है. वर्शन 1.6.1 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
- नई
pitchवैल्यू के साथPlaybackParametersको आसानी से कॉपी करने के लिए,PlaybackParameters.withPitch(float)तरीका जोड़ें (#2257).
- नई
- ExoPlayer:
- उस समस्या को ठीक किया गया है जिसमें अगले मीडिया आइटम को शुरू करते समय, रेंडरर से जुड़ी ऐसी गड़बड़ी होती है जिसे ठीक किया जा सकता है. इस वजह से, मीडिया आइटम का ट्रांज़िशन पूरा नहीं हो पाता (#2229).
- उस समस्या को ठीक किया गया है जिसमें
ProgressiveMediaPeriod,IllegalStateExceptionदिखाता है. ऐसा तब होता है, जबPreloadMediaSource,getBufferedDurationUs()को तैयार होने से पहले कॉल करने की कोशिश करता है (#2315). - DASH, HLS, और SmoothStreaming के लिए, मेनिफ़ेस्ट अनुरोधों में
CmcdDataभेजने की समस्या ठीक की गई (#2253). - पक्का करें कि विज्ञापन ग्रुप हटाए जाने के बाद भी
AdPlaybackState.withAdDurationsUs(long[][])का इस्तेमाल किया जा सके. उपयोगकर्ता को अब भी हटाए गए विज्ञापन ग्रुप के लिए, अवधि का एक कलेक्शन पास करना होगा. यह कलेक्शन खाली या शून्य हो सकता है (#2267).
- डेटा निकालने वाले टूल:
- MP4:
tkhdबॉक्स सेalternate_groupको पार्स करें और इसे हर ट्रैक केFormat.metadataमेंMp4AlternateGroupDataएंट्री के तौर पर दिखाएं (#2242).
- MP4:
- ऑडियो:
- ऑफ़लोड करने से जुड़ी समस्या को ठीक किया गया है. इस समस्या में, छोटे वीडियो की प्लेलिस्ट चलाते समय वीडियो की पोज़िशन अटक जाती थी (#1920).
- सेशन:
- प्लैटफ़ॉर्म
MediaSessionके कॉलबैक के लिए एग्रीगेशन टाइमआउट को 500 से घटाकर 100 मिलीसेकंड कर दिया गया है. साथ ही, एक्सपेरिमेंटल सेटर जोड़ा गया है, ताकि ऐप्लिकेशन इस वैल्यू को कॉन्फ़िगर कर सकें. - उस समस्या को ठीक किया गया है जिसमें सूचनाएं खारिज करने के बाद भी फिर से दिखने लगती हैं (#2302).
- उस गड़बड़ी को ठीक किया गया है जिसमें सेशन, एक आइटम वाली टाइमलाइन दिखाता था. ऐसा तब होता था, जब रैप किया गया प्लेयर खाली होता था. ऐसा तब होता है, जब रैप किए गए प्लेयर में
COMMAND_GET_TIMELINEउपलब्ध नहीं होता है, जबकिCOMMAND_GET_CURRENT_MEDIA_ITEMउपलब्ध होता है और रैप किया गया प्लेयर खाली होता है (#2320). - ऐसी गड़बड़ी को ठीक किया गया है जिसमें सेवा के साथ अन्य इंटरैक्शन के बाद,
MediaSessionService.setMediaNotificationProviderको कॉल करने पर कोई जवाब नहीं मिलता है. जैसे,setForegroundServiceTimeoutMs(#2305).
- प्लैटफ़ॉर्म
- यूआई:
ExoPlayer.setVideoEffectsऔरCompositionPlayerके साथ काम करने के लिए,PlayerSurfaceको चालू करें.- उस गड़बड़ी को ठीक किया गया है जिसमें
Playerको नएPlayerके साथ फिर से नहीं बनाया जा सकता.PlayerSurface
- एचएलएस एक्सटेंशन:
- एचएलएस मीडिया के लिए
CmcdDataमें चंक की अवधि सेट न होने की समस्या को ठीक किया गया है. इसकी वजह से, एन्क्रिप्ट (सुरक्षित) किए गए मीडिया सेगमेंट को प्रोसेस करते समय पुष्टि करने में गड़बड़ी होती थी (#2312).
- एचएलएस मीडिया के लिए
- आरटीएसपी एक्सटेंशन:
- टीसीपी का इस्तेमाल करने के लिए, RTSP सेशन को कॉन्फ़िगर करने के तरीके के तौर पर, RTSPT स्कीम के साथ यूआरआई के लिए सहायता जोड़ी गई है (#1484).
- कास्ट एक्सटेंशन:
- प्लेलिस्ट के मेटाडेटा के लिए सहायता जोड़ी गई है (#2235).
1.6.0
26 मार्च, 2025
androidx.media3:media3-*:1.6.0 रिलीज़ हो गया है. वर्शन 1.6.0 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
androidx.mediaमें मौजूद मिलती-जुलती क्लास को बदलने के लिए,AudioManagerCompatऔरAudioFocusRequestCompatजोड़ें.- Kotlin को 1.9.20 से 2.0.20 पर अपग्रेड करें और Compose Compiler Gradle प्लगिन का इस्तेमाल करें. KotlinX Coroutines लाइब्रेरी को 1.8.1 से 1.9.0 पर अपग्रेड करें.
Format.toBundle(boolean excludeMetadata)तरीके को हटाएं. इसके बजाय,Format.toBundle()का इस्तेमाल करें.SimpleBasePlayerमें मौजूद गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से,setPlaylistके बादStateमेंnullMediaMetadataके साथ नयाSimpleBasePlayerसेट करने पर, मेटाडेटा का फिर से आकलन नहीं होता है (#1940).currentMediaItemIndexSimpleBasePlayer.Stateके ऐक्सेस को सुरक्षित से सार्वजनिक पर सेट करें, ताकि अन्य क्लास में अपडेट को आसानी से मैनेज किया जा सके (#2128).
- ExoPlayer:
MediaExtractorCompatजोड़ें. यह एक नई क्लास है, जो प्लैटफ़ॉर्मMediaExtractorके जैसी सुविधाएं देती है.MediaCodecVideoRendererका इस्तेमाल करके वीडियो चलाने के लिए, एक्सपेरिमेंट के तौर पर 'ExoPlayer' को पहले से चालू करने की सुविधा जोड़ी गई.ExoPlayerको सेकंडरीMediaCodecVideoRendererदेने के लिए,experimentalSetEnableMediaCodecVideoRendererPrewarmingके ज़रिएDefaultRenderersFactoryको कॉन्फ़िगर किया जा सकता है. अगर यह सुविधा चालू है, तोExoPlayerलगातार मीडिया आइटम के वीडियो को पहले से प्रोसेस करता है, ताकि मीडिया आइटम के ट्रांज़िशन में लगने वाले समय को कम किया जा सके.DefaultLoadControlमेंbufferForPlaybackMsऔरbufferForPlaybackAfterRebufferMsकी डिफ़ॉल्ट वैल्यू को घटाकर, क्रमशः 1000 और 2000 मि॰से॰ करें.DeviceInfoऔर डिवाइस के वॉल्यूम को एसिंक्रोनस तरीके से शुरू करें. ऐसा तब करें, जबsetDeviceVolumeControlEnabledका इस्तेमाल करके इसे चालू किया गया हो.ExoPlayer.Builder.build()के बाद, ये वैल्यू तुरंत उपलब्ध नहीं होती हैं. साथ ही,Player.Listener,onDeviceInfoChangedऔरonDeviceVolumeChangedके ज़रिए बदलावों के बारे में सूचना देता है.- प्लेयर बनाने के बाद, शुरुआती ऑडियो सेशन आईडी तुरंत उपलब्ध नहीं होता. अगर ज़रूरी हो, तो शुरुआती अपडेट सुनने के लिए
AnalyticsListener.onAudioSessionIdChangedका इस्तेमाल किया जा सकता है. - वीडियो ट्रैक चुनते समय, भाषा का ध्यान रखें. डिफ़ॉल्ट रूप से, 'मुख्य' वीडियो ट्रैक चुनें. यह ट्रैक, चुने गए ऑडियो ट्रैक की भाषा से मेल खाता हो. हालांकि, ऐसा तब ही होगा, जब यह ट्रैक उपलब्ध हो. वीडियो के लिए, अश्लील भाषा से जुड़ी प्राथमिकताएं
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)के साथ दिखाई जा सकती हैं. selectedAudioLanguageपैरामीटर कोDefaultTrackSelector.selectVideoTrack()तरीके में जोड़ा गया.MediaSourceEventListener.onLoadStartedऔर उससे जुड़ेMediaSourceEventListener.EventDispatcherतरीकों मेंretryCountपैरामीटर जोड़ा गया.- उस बग को ठीक किया गया है जिसकी वजह से, एक से ज़्यादा अवधि वाली DASH स्ट्रीम में प्लेलिस्ट आइटम या अवधि के ऐसे आइटम शामिल हो सकते थे जिनकी अवधि, असल कॉन्टेंट से मेल नहीं खाती थी. इससे आइटम के आखिर में फ़्रेम फ़्रीज़ हो सकते थे (#1698).
BasePreloadManager.Listenerको टॉप-लेवलPreloadManagerListenerपर ले जाएं.RenderersFactory.createSecondaryRendererको लागू करके, प्री-वार्मिंग के लिए सेकंडरी रेंडरर उपलब्ध कराए जा सकते हैं. प्री-वार्मिंग की सुविधा से, मीडिया आइटम को तेज़ी से ट्रांज़िशन किया जा सकता है.- DASH, HLS, और SmoothStreaming जैसे अडैप्टिव स्ट्रीमिंग फ़ॉर्मैट में मेनिफ़ेस्ट के अनुरोधों के लिए
CmcdDataभेजने की सुविधा चालू की गई (#1951). - उस कोडेक का
MediaCodecInfoदें जिसेMediaCodecRenderer.onReadyToInitializeCodecमें शुरू किया जाएगा (#1963). - विज्ञापन ग्रुप जोड़कर,
AdPlaybackStatesको बढ़ाने की अनुमति देने के लिए,AdsMediaSourceमें बदलाव करें. अमान्य बदलावों का पता चलता है और एक अपवाद दिखता है. - उस समस्या को ठीक किया गया है जिसमें वीडियो के बीच में दिखाए जाने वाले विज्ञापन के बाद, कॉन्टेंट मीडिया पर स्विच करते समय, डिकोड किए गए अतिरिक्त फ़्रेम तेज़ी से दिख सकते हैं.
DefaultRenderersFactoryमें दोMetadataRendererइंस्टेंस जोड़ें, ताकि ऐप्लिकेशन डिफ़ॉल्ट रूप से मेटाडेटा की दो अलग-अलग स्कीमें पा सकें.- फिर से आकलन करें कि जब वीडियो चलाने की सुविधा रोकी जाती है, तब क्या किसी चंक को लोड करने की प्रोसेस को रद्द कर देना चाहिए (#1785).
ClippingMediaSourceमें एक विकल्प जोड़ा गया है, ताकि अनसीकेबल मीडिया में क्लिप बनाने की अनुमति दी जा सके.- प्री-वार्मिंग की सुविधा के साथ सीक करने पर, अगले मीडिया आइटम पर ट्रांज़िशन रुक सकता है. इस बग को ठीक किया गया.
- उस गड़बड़ी को ठीक किया गया है जिसमें
STATE_IDLEयाSTATE_ENDEDमें बदलने के बाद भीExoPlayer.isLoading()trueबना रहता है (#2133). LoadControl.ParameterमेंlastRebufferRealtimeMsजोड़ा गया (#2113).
- ट्रांसफ़ॉर्मर:
- पुराने सिस्टम के साथ काम करने वाले फ़ॉर्मैट में ट्रांसमक्सिंग की सुविधा जोड़ी गई.
- Dolby Vision (प्रोफ़ाइल 8) फ़ॉर्मैट के लिए, ट्रांसकोडिंग और ट्रांसमक्सिंग की सुविधा जोड़ी गई.
Formatका इस्तेमाल करने के लिए,VideoFrameProcessor.registerInputStreamऔरVideoFrameProcessor.Listener.onInputStreamRegisteredके पैरामीटर अपडेट करें.DefaultEncoderFactoryका इस्तेमाल करते समय, एचडीआर स्टैटिक मेटाडेटा जनरेट करें.MediaMetricsManagerका इस्तेमाल करके, Android प्लैटफ़ॉर्म के डाइग्नोस्टिक्स की सुविधा चालू करें. ट्रांसफ़ॉर्मर, बदलाव करने से जुड़े इवेंट और परफ़ॉर्मेंस डेटा को प्लैटफ़ॉर्म पर भेजता है. इससे डिवाइस पर सिस्टम की परफ़ॉर्मेंस और डीबग करने से जुड़ी जानकारी मिलती है. इस डेटा को Google भी इकट्ठा कर सकता है. ऐसा तब होता है, जब डिवाइस का इस्तेमाल करने वाला व्यक्ति, इस्तेमाल और गड़बड़ी की जानकारी शेयर करने की सुविधा चालू करता है. ऐप्लिकेशन,Transformer.Builder.setUsePlatformDiagnostics(false)के साथ Transformer के लिए, प्लैटफ़ॉर्म के डाइग्नोस्टिक्स में योगदान देने से ऑप्ट-आउट कर सकते हैं.InAppMuxerकोInAppMp4MuxerऔरInAppFragmentedMp4Muxerमें बांटो.InAppMp4Muxerका इस्तेमाल, पूरी MP4 फ़ाइल बनाने के लिए किया जाता है. वहीं,InAppFragmentedMp4Muxerका इस्तेमाल, फ़्रैगमेंट की गई MP4 फ़ाइल बनाने के लिए किया जाता है.Muxerइंटरफ़ेस कोmedia3-muxerसेmedia3-transformerपर ले जाएं.MediaProjectionAssetLoaderजोड़ें. यह स्क्रीन रिकॉर्डिंग के लिएMediaProjectionसे मीडिया उपलब्ध कराता है. साथ ही, Transformer डेमो ऐप्लिकेशन में स्क्रीन रिकॉर्डिंग की सुविधा जोड़ें.Codecइंटरफ़ेस में#getInputFormat()जोड़ें.- जब भी हो सके,
DefaultVideoFrameProcessorऔरDefaultVideoCompositorमें कॉल करने वाले व्यक्ति कोGlObjectsProviderरिलीज़ करने की ज़िम्मेदारी दें.
- डेटा निकालने वाले टूल:
- AVI: कॉन्स्टेंट बिटरेट वाले कंप्रेस किए गए ऑडियो की फ़ाइलों को हैंडल करने की समस्या ठीक की गई. इन फ़ाइलों में स्ट्रीम हेडर, चंक की संख्या के बजाय बाइट की संख्या सेव करता है.
- एक या दो बाइट (चार के बजाय) में दिखाई गई लंबाई वाली NAL यूनिट को हैंडल करने की समस्या ठीक की गई.
- जब बदलाव की सूची, ऐसे फ़्रेम से शुरू होती है जो सिंक नहीं होता और उससे पहले कोई सिंक फ़्रेम नहीं होता, तब MP4 फ़ाइल में बदलाव की सूचियों में मौजूद
ArrayIndexOutOfBoundsExceptionको ठीक किया गया (#2062). - उस समस्या को ठीक किया गया है जिसमें कुछ डिवाइसों पर टीएस स्ट्रीम अटक जाती हैं (#2069).
- FLAC: 32-बिट FLAC फ़ाइलों के लिए सहायता जोड़ी गई. इससे पहले, ये
IllegalStateException: Playback stuck buffering and not loadingके साथ नहीं चल पाते थे (#2197).
- ऑडियो:
- प्लेबैक फिर से शुरू होने पर,
onAudioPositionAdvancingको कॉल किया जाएगा. इससे पहले, प्लेबैक रुकने पर इसे कॉल किया जाता था. - जब
SpeedChangingAudioProcessorको डिफ़ॉल्ट पैरामीटर के साथ कॉन्फ़िगर किया जाता है, तबSonicAudioProcessorको बायपास न करें. Sonic#getOutputSize()में अंडरफ़्लो की समस्या को ठीक किया गया है. इसकी वजह सेDefaultAudioSinkरुक सकता था.MediaCodecAudioRenderer.getDurationToProgressUs()औरDecoderAudioRenderer.getDurationToProgressUs()को ठीक करें, ताकि दिए गए समय को सही तरीके से रीसेट किया जा सके.androidx.media3.common.audio.SonicAudioProcessorको फ़ाइनल बनाएं.ChannelMappingAudioProcessorऔरTrimmingAudioProcessorमें फ़्लोट पीसीएम के लिए सहायता जोड़ी गई.
- प्लेबैक फिर से शुरू होने पर,
- वीडियो:
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceको बदलकर सुरक्षित करें, ताकि ऐप्लिकेशन, प्लेसहोल्डर सर्फ़ेस (#1905) के इस्तेमाल को ब्लॉक करने के लिए, इसे बदल सकें.- सीकिंग की प्रोसेस को तेज़ करने के लिए, एक्सपेरिमेंट के तौर पर
ExoPlayerAV1 सैंपल डिपेंडेंसी पार्सिंग की सुविधा जोड़ी गई है. इसे नएDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI की मदद से चालू करें. - हमने एक्सपेरिमेंट के तौर पर
ExoPlayerएपीआई जोड़ा है. इससे, उन डिकोडर इनपुट बफ़र को हटाया जा सकेगा जिन पर कोई निर्भर नहीं है.MediaCodecVideoRendererइसेDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUsकी मदद से चालू करें. * उस समस्या को ठीक किया गया है जिसमें बिना किसी सरफेस वाला प्लेयर तुरंत तैयार हो जाता था और किसी भी लंबित फ़्रेम को बहुत धीरे-धीरे डिकोड करता था (#1973). - Xiaomi और OPPO डिवाइसों को डिटैच किए गए डिसप्ले मोड से बाहर रखें, ताकि स्क्रीन फ़्लिकर न हो (#2059).
- टेक्स्ट:
- VobSub सबटाइटल के लिए सहायता जोड़ी गई है (#8260).
MediaItem.Builder.setSubtitleConfigurationsके साथ कॉन्फ़िगर की गई सभी सबटाइटल फ़ाइलों को तुरंत लोड करना बंद करें. इसके बजाय, अगर ट्रैक चुनने की सुविधा (#1721) से कोई फ़ाइल चुनी जाती है, तो सिर्फ़ उसे लोड करें.- TTML:
styleका इस्तेमाल करके,tts:originऔरtts:extentको रेफ़र करने की सुविधा जोड़ी गई (#2953). - WebVTT और SubRip फ़ाइलों में टाइमस्टैंप को सिर्फ़ तीन दशमलव स्थानों तक सीमित करें. पहले, हम दशमलव के बाद के किसी भी अंक को गलत तरीके से पार्स करते थे. हालांकि, हम हमेशा यह मानते थे कि वैल्यू मिलीसेकंड में है. इस वजह से, टाइमस्टैंप गलत होते थे (#1997).
- जब किसी प्लेलिस्ट में CEA-608 या CEA-708 कैप्शन वाले क्लिप किए गए आइटम मौजूद हों, तो वीडियो के रुकने की समस्या को ठीक किया गया है.
- एसएसए फ़ाइल में ऐसे क्यू के लिए
IllegalStateExceptionठीक किया गया है जिसकी अवधि शून्य है. इसका मतलब है कि शुरू और खत्म होने का समय एक जैसा है (#2052). - जब सबटाइटल को ऑडियो और वीडियो वाले कंटेनर में ही मक्स किया जाता है, तब सबटाइटल पार्स करने से जुड़ी गड़बड़ियों को छिपाता है और उन्हें लॉग करता है (#2052).
- CR लाइन एंडिंग (#2167) का इस्तेमाल करके, WebVTT फ़ाइलों में मल्टी-बाइट UTF-8 वर्णों को मैनेज करने की समस्या ठीक की गई.
- DRM:
- एपीआई < 27 वाले डिवाइसों पर ClearKey कॉन्टेंट चलाने के दौरान,
MediaCodec$CryptoException: Operation not supported in this configurationगड़बड़ी ठीक की गई है (#1732).
- एपीआई < 27 वाले डिवाइसों पर ClearKey कॉन्टेंट चलाने के दौरान,
- असर:
OverlaySettingsकी सुविधा कोStaticOverlaySettingsमें ले जाया गया.OverlaySettingsको सबक्लास किया जा सकता है, ताकि डाइनैमिक ओवरले सेटिंग की अनुमति दी जा सके.
- Muxers:
MuxerExceptionकोMuxerइंटरफ़ेस से हटा दिया गया है, ताकि पूरी तरह से क्वालिफ़ाइड नाम बहुत लंबा न हो.Mp4Muxer.BuilderऔरFragmentedMp4Muxer.Builder, दोनों मेंsetSampleCopyEnabled()तरीके का नाम बदलकरsetSampleCopyingEnabled()कर दिया गया है.Mp4Muxer.addTrack()औरFragmentedMp4Muxer.addTrack()अबTrackTokenके बजायintट्रैक आईडी दिखाते हैं.Mp4MuxerऔरFragmentedMp4MuxerअबMuxerइंटरफ़ेस लागू नहीं करते.Mp4Muxerसैंपल बैचिंग और कॉपी करने की सुविधा को डिफ़ॉल्ट रूप से बंद करें.FragmentedMp4Muxerमें मौजूद उस बग को ठीक किया गया है जिसकी वजह से, सिर्फ़ ऑडियो ट्रैक लिखने पर कई फ़्रैगमेंट बन जाते हैं.
- सेशन:
- जब वीडियो चलाने की सुविधा रुक जाती है, बंद हो जाती है या काम नहीं करती है, तो फ़ोरग्राउंड सेवा की स्थिति को 10 मिनट तक बनाए रखें. इससे उपयोगकर्ता, इस टाइमआउट के दौरान वीडियो चलाना फिर से शुरू कर सकते हैं. साथ ही, उन्हें अलग-अलग डिवाइसों पर फ़ोरग्राउंड सेवा से जुड़ी पाबंदियों का सामना नहीं करना पड़ता. ध्यान दें कि
onTaskRemovedको बदलने से पहले, फ़ोरग्राउंड सेवा को रोकने के लिए अब सिर्फ़player.pause()का इस्तेमाल नहीं किया जा सकता. इसके बजाय,MediaSessionService.pauseAllPlayersAndStopSelf()का इस्तेमाल करें.stopSelf() - वीडियो चलाने के दौरान कोई गड़बड़ी होने या वीडियो रुक जाने पर, सूचना को दिखता रहने दें. सूचना सिर्फ़ तब हटाई जाती है, जब प्लेलिस्ट से सभी गाने हटा दिए जाते हैं या प्लेयर को बंद कर दिया जाता है.
- Android प्लैटफ़ॉर्म पर MediaSession की कार्रवाइयों ACTION_PLAY और ACTION_PAUSE को बेहतर तरीके से हैंडल किया गया है. इससे उपलब्ध कमांड के हिसाब से, सिर्फ़ एक कार्रवाई सेट की जा सकती है. साथ ही, अगर सिर्फ़ एक कार्रवाई सेट की गई है, तो उसे स्वीकार किया जा सकता है.
MediaButtonReceiver.shouldStartForegroundServiceमेंContextको पैरामीटर के तौर पर जोड़ा गयाMediaButtonReceiver.shouldStartForegroundService(#1887).- उस बग को ठीक किया गया है जिसमें लेगसी सेशन से कनेक्ट किए गए
MediaControllerपरPlayerतरीके को कॉल करने पर, अपडेट होने वाले बदलाव हट जाते थे. MediaSession.setSessionActivity(PendingIntent)में null वैल्यू स्वीकार करने की सुविधा जोड़ें (#2109).- उस गड़बड़ी को ठीक किया गया है जिसमें प्लेलिस्ट खाली होने पर भी पुरानी सूचना दिखती रहती थी (#2211).
- जब वीडियो चलाने की सुविधा रुक जाती है, बंद हो जाती है या काम नहीं करती है, तो फ़ोरग्राउंड सेवा की स्थिति को 10 मिनट तक बनाए रखें. इससे उपयोगकर्ता, इस टाइमआउट के दौरान वीडियो चलाना फिर से शुरू कर सकते हैं. साथ ही, उन्हें अलग-अलग डिवाइसों पर फ़ोरग्राउंड सेवा से जुड़ी पाबंदियों का सामना नहीं करना पड़ता. ध्यान दें कि
- यूआई:
media3-ui-composeमॉड्यूल में स्टेट होल्डर और कंपोज़ेबल जोड़ें. ऐसाPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonState, औरPlaybackSpeedStateके लिए करें.
- डाउनलोड:
CacheWriterमें मौजूद उस बग को ठीक किया गया है जिसकी वजह से, डेटा सोर्स खुले रहते हैं और कैश मेमोरी वाले एरिया लॉक हो जाते हैं. ऐसा तब होता है, जब डेटा सोर्स,IOException(#9760) के अलावा कोई दूसराExceptionदिखाता है.
- एचएलएस एक्सटेंशन:
HlsInterstitialsAdsLoaderका पहला वर्शन जोड़ें. विज्ञापन लोडर, एचएलएस मीडिया प्लेलिस्ट के एचएलएस इंटरस्टीशियल विज्ञापन पढ़ता है और उन्हेंAdPlaybackStateपर मैप करता है. यहAdsMediaSourceको पास किया जाता है. इस शुरुआती वर्शन में, सिर्फ़X-ASSET-URIएट्रिब्यूट वाली HLS VOD स्ट्रीम काम करती हैं.HlsInterstitialsAdsLoader.AdsMediaSourceFactoryजोड़ें. ऐप्लिकेशन इसका इस्तेमाल करके,AdsMediaSourceइंस्टेंस बना सकते हैं. ये इंस्टेंस,HlsInterstitialsAdsLoaderका इस्तेमाल आसान और सुरक्षित तरीके से करते हैं.- Dolby Vision फ़ॉर्मैट (#1785) का पता लगाने के लिए, HLS प्लेलिस्ट से
SUPPLEMENTAL-CODECSटैग को पार्स करें. - एचएलएस स्ट्रीम में, सिंक की गई पोज़िशन ढूंढने की शर्त को आसान बनाया गया है (#2209).
- DASH एक्सटेंशन:
- DASH के लिए AC-4 Level-4 फ़ॉर्मैट का सपोर्ट जोड़ा गया (#1898).
- एक से ज़्यादा अवधि वाली लाइव स्ट्रीम में विज्ञापन दिखाने के लिए, अपडेट इंटरवल का हिसाब लगाते समय आने वाली समस्या को ठीक किया गया है (#1698).
- Dolby Vision फ़ॉर्मैट का पता लगाने के लिए, DASH मेनिफ़ेस्ट से
scte214:supplementalCodecsएट्रिब्यूट को पार्स किया गया (#1785). - लाइव स्ट्रीम में, तय की गई अवधि से ज़्यादा समय तक मीडिया सैंपल दिखाने की समस्या को ठीक किया गया है (#1698).
- उस समस्या को ठीक किया गया है जिसमें
adaptation-set-switchingके तौर पर मार्क किए गए अडैप्टेशन सेट, अलग-अलग भाषाओं या भूमिका के फ़्लैग के साथ मर्ज हो जाते हैं (#2222).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- MPEG-H डिकोडर मॉड्यूल जोड़ें. यह मॉड्यूल, MPEG-H ऑडियो को डिकोड करने के लिए, MPEG-H डिकोडर का इस्तेमाल करता है (#1826).
- एमआईडीआई एक्सटेंशन:
- कस्टम
AudioSinkऔरAudioRendererEventListenerइंस्टेंस कोMidiRendererमें प्लंब करें.
- कस्टम
- कास्ट एक्सटेंशन:
- Google Play services इंस्टॉल होने के बावजूद, उसे बंद करने वाले डिवाइसों पर एपीआई 34 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन में
play-services-cast-frameworkक्रैश होने की समस्या को ठीक करने के लिए,play-services-cast-frameworkडिपेंडेंसी को 21.5.0 पर अपडेट किया गया है (#2178).FLAG_MUTABLE
- Google Play services इंस्टॉल होने के बावजूद, उसे बंद करने वाले डिवाइसों पर एपीआई 34 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन में
- डेमो ऐप्लिकेशन:
- अतिरिक्त बटन जोड़कर,
demo-composeकी सुविधाओं को बढ़ाएं. साथ ही, स्केलिंग और शटर की सुविधा के साथPlayerSurfaceके इंटिग्रेशन को बेहतर बनाएं.
- अतिरिक्त बटन जोड़कर,
- हटाए गए सिंबल हटाएं:
- बंद किए गए
AudioMixer.create()तरीके को हटा दिया गया है. इसके बजाय,DefaultAudioMixer.Factory().create()का इस्तेमाल करें. - बंद किए गए इन
Transformer.Builderतरीकों को हटाएं:setTransformationRequest()के बजाय,setAudioMimeType(),setVideoMimeType(), औरsetHdrMode()का इस्तेमाल करें.setAudioProcessors(), ऑडियो प्रोसेसर कोEditedMediaItem.Builder.setEffects()में सेट करें और इसेTransformer.start()को पास करें.setVideoEffects(),EditedMediaItem.Builder.setEffects()में वीडियो इफ़ेक्ट सेट करें, और इसेTransformer.start()को पास करें.setRemoveAudio(),EditedMediaItem.Builder.setRemoveAudio()का इस्तेमाल करके,EditedMediaItemको पास किए गएTransformer.start()से ऑडियो हटाएं.setRemoveVideo(),EditedMediaItem.Builder.setRemoveVideo()का इस्तेमाल करके वीडियो कोTransformer.start()को पास किए गएEditedMediaItemसे हटाएं.setFlattenForSlowMotion(),Transformer.start()को पास किए गएEditedMediaItemको फ़्लैट करने के लिए,EditedMediaItem.Builder.setFlattenForSlowMotion()का इस्तेमाल करें.setListener()के बजाय,addListener(),removeListener()याremoveAllListeners()का इस्तेमाल करें.
- बंद किए गए इन
Transformer.Listenerतरीकों को हटाएं:onTransformationCompleted(MediaItem)के बजाय,onCompleted(Composition, ExportResult)का इस्तेमाल करें.onTransformationCompleted(MediaItem, TransformationResult)के बजाय,onCompleted(Composition, ExportResult)का इस्तेमाल करें.onTransformationError(MediaItem, Exception)के बजाय,onError(Composition, ExportResult, ExportException)का इस्तेमाल करें.onTransformationError(MediaItem, TransformationException)के बजाय,onError(Composition, ExportResult, ExportException)का इस्तेमाल करें.onTransformationError(MediaItem, TransformationResult, TransformationException)के बजाय,onError(Composition, ExportResult, ExportException)का इस्तेमाल करें.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)के बजाय,onFallbackApplied(Composition, TransformationRequest, TransformationRequest)का इस्तेमाल करें.
- बंद की जा चुकी
TransformationResultक्लास को हटाएं. इसके बजाय,ExportResultका इस्तेमाल करें. - बंद की जा चुकी
TransformationExceptionक्लास को हटाएं. इसके बजाय,ExportExceptionका इस्तेमाल करें. - अब इस्तेमाल में नहीं है, इसलिए
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONको हटाएं. इसके बजाय,Transformer.PROGRESS_STATE_NOT_STARTEDका इस्तेमाल करें. - बंद हो चुके
Transformer.setListener()को हटाएं. इसके बजाय,Transformer.addListener(),Transformer.removeListener()याTransformer.removeAllListeners()का इस्तेमाल करें. - अब इस्तेमाल में नहीं है, इसलिए
Transformer.startTransformation()को हटाएं. इसके बजाय,Transformer.start(MediaItem, String)का इस्तेमाल करें. - अब इस्तेमाल में नहीं है, इसलिए
SingleFrameGlShaderProgramको हटाएं. इसके बजाय,BaseGlShaderProgramका इस्तेमाल करें. Transformer.flattenForSlowMotionहटाएं. इसके बजाय,EditedMediaItem.flattenForSlowMotionका इस्तेमाल करें.ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponent, औरExoPlayer.DeviceComponentको हटा दिया गया है.androidx.media3.exoplayer.audio.SonicAudioProcessorको हटाया गया.- बंद किए गए इन
DownloadHelperतरीकों को हटाया गया:- कंस्ट्रक्टर
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), इसके बजायDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)का इस्तेमाल करें. getRendererCapabilities(RenderersFactory)के बराबर फ़ंक्शनैलिटी पाने के लिए,RenderersFactoryके साथDefaultRendererCapabilitiesListबनाकर,DefaultRendererCapabilitiesList.getRendererCapabilities()को कॉल किया जा सकता है.- हटाया गया
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)तरीका. इसके बजाय,PlayerNotificationManager.setMediaSessionToken(MediaSession.Token)का इस्तेमाल करें और(MediaSession.Token) compatToken.getToken()पास करें.
- कंस्ट्रक्टर
- बंद किए गए
1.6.0-rc02
19 मार्च, 2025
1.6.0 स्टेबल वर्शन का इस्तेमाल करें.
1.6.0-rc01
12 मार्च, 2025
1.6.0 स्टेबल वर्शन का इस्तेमाल करें.
1.6.0-beta01
26 फ़रवरी, 2025
1.6.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.6.0-alpha03
6 फ़रवरी, 2025
1.6.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.6.0-alpha02
30 जनवरी, 2025
1.6.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.6.0-alpha01
20 दिसंबर, 2024
1.6.0 स्टेबल वर्शन का इस्तेमाल करें.
संस्करण 1.5
संस्करण 1.5.1
19 दिसंबर, 2024
androidx.media3:media3-*:1.5.1 रिलीज़ हो गया है. वर्शन 1.5.1 में ये बदलाव शामिल हैं.
- ExoPlayer:
- MediaCodec में एसिंक्रोनस डिक्रिप्शन के इस्तेमाल को बंद करें, ताकि इस प्लैटफ़ॉर्म एपीआई (#1641) के साथ कोडेक के टाइम आउट होने की समस्याओं से बचा जा सके.
- डेटा निकालने वाले टूल:
- MP3: अगर
VBRIफ़्रेम की विषय सूची में, फ़ाइल में मौजूद MP3 डेटा का पूरा हिस्सा शामिल नहीं है, तो ऑडियो को बीच में न रोकें (#1904).
- MP3: अगर
- वीडियो:
onOutputFormatChangedको प्रोसेस करते समय,MediaCodecAdapterके लिए दिए गए पिक्सल के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की वैल्यू का इस्तेमाल करने की सुविधा को वापस लाया गया है (#1371).
- टेक्स्ट:
ReplacingCuesResolver.discardCuesBeforeTimeUsमें मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से,timeUsपर चालू हुआ क्यू (पहले शुरू हुआ, लेकिन अभी खत्म नहीं हुआ) गलत तरीके से खारिज कर दिया गया था (#1939).
- मेटाडेटा:
- Vorbis टिप्पणियों से डिस्क/ट्रैक नंबर और शैली की जानकारी को
MediaMetadataमें एक्सट्रैक्ट करें (#1958).
- Vorbis टिप्पणियों से डिस्क/ट्रैक नंबर और शैली की जानकारी को
वर्शन 1.5.0
27 नवंबर, 2024
androidx.media3:media3-*:1.5.0 रिलीज़ हो गया है. वर्शन 1.5.0 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
ForwardingSimpleBasePlayerजोड़ें. इससे, छोटे-मोटे बदलावों के साथ किसी दूसरे प्लेयर पर फ़ॉरवर्ड किया जा सकेगा. साथ ही, यह पक्का किया जा सकेगा कि पूरी तरह से एक जैसा कॉन्टेंट हो और सुनने वालों की संख्या को मैनेज किया जा सके (#1183).SimpleBasePlayer.State.playlistकोgetPlaylist()तरीके से बदलें.- प्लेलिस्ट का स्ट्रक्चर बनाने के बजाय,
SimpleBasePlayer.State.Builder.setPlaylist()के लिए ओवरराइड जोड़ें, ताकि सीधे तौर परTimelineऔर मौजूदाTracksऔरMetadataकी जानकारी दी जा सके. minSdkको 21 (Android Lollipop) पर सेट करें. यह अन्य सभी AndroidX लाइब्रेरी के साथ काम करती है.androidx.media3:media3-common-ktxआर्टफ़ैक्ट जोड़ें. यह Common library के ऊपर बनाया गया है और Kotlin के लिए खास फ़ंक्शन उपलब्ध कराता हैmedia3-common-ktxलाइब्रेरी मेंPlayer.Eventsको सुनने के लिए, कोरूटीन को स्पिन करने के लिएPlayer.listenसस्पेंडिंग एक्सटेंशन फ़ंक्शन जोड़ें.- रनटाइम क्लास की पुष्टि करने में होने वाली गड़बड़ियों से बचने के लिए, मैन्युअल तरीके से बनाई गई इनर क्लास से
@DoNotInlineएनोटेशन हटाएं. R8 के नए वर्शन में, इस तरह के आउट-ऑफ़-लाइन कॉल अपने-आप हो जाते हैं, ताकि रनटाइम में होने वाली गड़बड़ियों से बचा जा सके. इसलिए, अब मैन्युअल तरीके से आउट-ऑफ़-लाइनिंग करने की ज़रूरत नहीं होती. लाइब्रेरी का इस्तेमाल करने वाले सभी Gradle उपयोगकर्ताओं को, Android Gradle प्लगिन के ऐसे वर्शन का इस्तेमाल करना होगा जो R8 के ऐसे वर्शन का इस्तेमाल करता हो जो ऐसा करता है. इसकी वजहcompileSdk = 35है. नॉन-Gradle बिल्ड सिस्टम का इस्तेमाल करने वाले लाइब्रेरी के उपयोगकर्ताओं को यह पक्का करना होगा कि R8 के बराबर की उनकी श्रिंकिंग/ऑब्फ़स्केटिंग प्रोसेस, रनटाइम क्लास की पुष्टि करने में होने वाली गड़बड़ियों से बचने के लिए, इसी तरह की ऑटोमैटिक आउट-ऑफ़-लाइनिंग प्रोसेस करती हो. यह बदलाव AndroidX की अन्य लाइब्रेरी में पहले ही किया जा चुका है.
- ExoPlayer:
- अब हर मीडिया आइटम के लिए
MediaCodecRenderer.onProcessedStreamChange()को कॉल किया जा सकता है. पहले, पहले वाले के लिए ऐसा नहीं कहा जाता था. इसे चालू करने के लिए,MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()का इस्तेमाल करें. PreloadMediaSource.PreloadControl.onPreloadErrorजोड़ें, ताकिPreloadMediaSource.PreloadControlलागू करने वाले लोग गड़बड़ी होने पर कार्रवाई कर सकें.- ऐप्लिकेशन में प्रीलोड इवेंट भेजने के लिए,
BasePreloadManager.Listenerजोड़ें. - एसएनटीपी क्लाइंट के टाइमआउट को बदलने और टाइमआउट होने पर, अन्य पतों को फिर से आज़माने की अनुमति दें (#1540).
MediaCodecAdapter.Configuration.flagsको हटा दिया गया है, क्योंकि यह फ़ील्ड हमेशा शून्य था.- इस कुकी से उपयोगकर्ता को Wear OS के एपीआई 35 या इसके बाद के वर्शन पर, पहले से मौजूद स्पीकर से प्लेबैक करने की सुविधा मिलती है. हालांकि, यह सुविधा सिर्फ़ उन डिवाइसों पर उपलब्ध होती है जिन पर यह काम करती है.
- ऑडियो फ़ोकस मैनेज करने की सुविधा चालू होने तक,
Context.getSystemService(Context.AUDIO_SERVICE)को कॉल ब्लॉक करने का अनुरोध न भेजें. इससे यह पक्का होता है कि अगर ऑडियो फ़ोकस हैंडलिंग की सुविधा चालू नहीं है, तो कॉल ब्लॉक नहीं किया जाएगा (#1616). - लोडिंग में गड़बड़ी होने पर, बफ़र किए गए कॉन्टेंट की अवधि के बावजूद, वीडियो चलाने की अनुमति दें (#1571).
AnalyticsListener.onRendererReadyChanged()जोड़ें, ताकि यह पता चल सके कि कब अलग-अलग रेंडरर, वीडियो चलाने की अनुमति देते हैं.MediaCodecको असिंक्रोनस मोड में चलाने पर, कभी-कभीMediaCodec.CryptoExceptionको "रनटाइम में अचानक हुई गड़बड़ी" के तौर पर रिपोर्ट किया जाता है. इस समस्या को ठीक किया गया है. असिंक्रोनस मोड, API 31 और इसके बाद के वर्शन पर डिफ़ॉल्ट रूप से काम करता है.PreloadMediaSource.PreloadControl.onContinueLoadingRequested()के साथ,bufferedPositionUsके बजायbufferedDurationUsपास करें. इसके अलावा,DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSकोDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MSमें बदलता है. इसके बाद, ऐप्लिकेशन को डिफ़ॉल्ट शुरुआती पोज़िशन से एक खास अवधि दिखाने वाली वैल्यू पास करनी होती है. इस अवधि के लिए, मीडिया सोर्स को इस IntDef के साथ प्रीलोड करना होता है. इसके बजाय, पोज़िशन के साथ प्रीलोड करना होता है.ForwardingRendererको लागू किया गया है. इससे सभी तरीके के कॉल, दूसरे रेंडरर (1703) पर फ़ॉरवर्ड किए जाते हैं.- प्लेलिस्ट में मौजूद अगले आइटम के लिए, प्लेलिस्ट प्रीलोड करने की सुविधा जोड़ें. ऐप्लिकेशन,
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)को कॉल करके, पेजों को पहले से लोड करने की सुविधा चालू कर सकते हैं. पहले से लोड करने की सुविधा डिफ़ॉल्ट रूप से बंद होती है. जब इस सुविधा के लिए ऑप्ट-इन किया जाता है, तबDefaultLoadControlप्रीलोडिंग को इस तरह से सीमित करता है कि वीडियो चलाने में कोई रुकावट न आए. यह सुविधा, वीडियो चलाने के लिए प्लेयर लोड न होने पर ही शुरू होती है और जारी रहती है. ऐप्लिकेशन,LoadControl.shouldContinuePreloading()को लागू करके इस व्यवहार को बदल सकते हैं. जैसे,DefaultLoadControlमें इस तरीके को बदलते समय. अगर कोई ऐप्लिकेशन,LoadControlके कस्टम वर्शन का इस्तेमाल कर रहा है, तोLoadControlका डिफ़ॉल्ट वर्शन, प्रीलोडिंग की सुविधा बंद कर देता है. - सबक्लास लिसनर के इवेंट को चालू करने की अनुमति देने के लिए,
MediaSourceEventListener.EventDispatcher.dispatchEvent()तरीके को जोड़ें (1736). DefaultPreloadManager.Builderजोड़ें. यहDefaultPreloadManagerऔरExoPlayerइंस्टेंस बनाता है. इन इंस्टेंस में, कॉन्फ़िगरेशन एक जैसा होता है.LoadControl.onTracksSelected()सेRenderer[]पैरामीटर हटाएं, क्योंकिDefaultLoadControlलागू करने सेExoTrackSelection[]से स्ट्रीम टाइप वापस पाए जा सकते हैं.DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])को बंद कर दिया गया है और इस तरीके को फ़ाइनल के तौर पर मार्क किया गया है, ताकि इसे बदला न जा सके. इसके बजाय, नएDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])का इस्तेमाल किया जाना चाहिए.MergingMediaSourceमें, सेकंडरी सोर्स से मिलेMediaSourceEventListenerइवेंट की रिपोर्ट करें. इससे साइडलोड किए गए सबटाइटल (MediaItem.LocalConfiguration.subtitleConfigurationsकी मदद से जोड़े गए सबटाइटल) के लिए, लोड शुरू होने/गड़बड़ी/रद्द किए गए/पूरे हुए इवेंट की रिपोर्ट की जाएगी. ये इवेंट,AnalyticsListenerसे भेजे गए डुप्लीकेट लोड इवेंट के तौर पर दिख सकते हैं.- उपशीर्षक और मेटाडेटा से जुड़ी गड़बड़ियों की वजह से, वीडियो चलने में पूरी तरह से रुकावट आने से रोकें.
इसके बजाय, समस्या वाले ट्रैक को बंद कर दिया जाता है और बाकी ट्रैक का प्लेबैक जारी रहता है
(#1722).
- नए सबटाइटल हैंडलिंग (एक्सट्रैक्शन के दौरान) में, पार्स करने से जुड़ी गड़बड़ियां (जैसे, अमान्य सबटाइटल डेटा) और लोड करने से जुड़ी गड़बड़ियां (जैसे, एचटीटीपी 404)
onLoadErrorकॉलबैक के ज़रिए भेजी जाती हैं. - लेगसी सबटाइटल हैंडलिंग (रेंडरिंग के दौरान) में, सिर्फ़ लोड करने से जुड़ी गड़बड़ियों को
onLoadErrorकॉलबैक के ज़रिए दिखाया जाता है. वहीं, पार्स करने से जुड़ी गड़बड़ियों को अनदेखा कर दिया जाता है. यह पहले से मौजूद व्यवहार है.
- नए सबटाइटल हैंडलिंग (एक्सट्रैक्शन के दौरान) में, पार्स करने से जुड़ी गड़बड़ियां (जैसे, अमान्य सबटाइटल डेटा) और लोड करने से जुड़ी गड़बड़ियां (जैसे, एचटीटीपी 404)
- उस बग को ठीक किया गया है जिसकी वजह से, एक से ज़्यादा अवधि वाली DASH स्ट्रीम में प्लेलिस्ट आइटम या अवधि के ऐसे आइटम शामिल हो सकते थे जिनकी अवधि, असल कॉन्टेंट से मेल नहीं खाती थी. इससे आइटम के आखिर में फ़्रेम फ़्रीज़ हो सकते थे (#1698).
SntpClientमें एक सेटर जोड़ें, ताकि आखिरी अपडेट के बाद से गुज़रे हुए ज़्यादा से ज़्यादा समय को सेट किया जा सके. इसके बाद, क्लाइंट को फिर से शुरू किया जाता है (#1794).
- अब हर मीडिया आइटम के लिए
- ट्रांसफ़ॉर्मर:
SurfaceAssetLoaderजोड़ें. यहSurfaceके ज़रिए, वीडियो डेटा को Transformer में भेजने की सुविधा देता है.ImageAssetLoader,IllegalStateExceptionदिखाने के बजाय,AssetLoader.onErrorके ज़रिए ऐसे इनपुट की शिकायत करता है जो काम नहीं करता.- इमेज एक्सपोर्ट करने के लिए,
MediaItem.Builder.setImageDurationMsका इस्तेमाल करके इमेज की अवधि सेट करना ज़रूरी है. - ऑडियो के EditedMediaItems के क्रम में मौजूद अंतर के लिए, एक्सपोर्ट करने की सुविधा जोड़ी गई.
- ट्रैक के विकल्प:
DefaultTrackSelector: जब अन्य फ़ैक्टर एक जैसे हों, तो चैनल आधारित ऑडियो के बजाय ऑब्जेक्ट आधारित ऑडियो को प्राथमिकता दें.
- डेटा निकालने वाले टूल:
Mp4ExtractorऔरFragmentedMp4Extractorको ऐसे H264 सैंपल की पहचान करने की अनुमति दें जिन्हें बाद के सैंपल में रेफ़रंस के तौर पर इस्तेमाल नहीं किया जाता.AmrExtractorमें, इंडेक्स के आधार पर वीडियो में आगे-पीछे जाने की सुविधा चालू करने का विकल्प जोड़ा गया.- मान्य फ़्रेम के बीच 128 केबी से ज़्यादा की MP3 फ़ाइलों को अमान्य के बजाय छोटा किया गया माना जाएगा. इसका मतलब है कि जिन फ़ाइलों के आखिर में MP3 फ़ॉर्मैट के अलावा किसी और फ़ॉर्मैट का डेटा होता है और जिनमें MP3 फ़ॉर्मैट के बाइट की लंबाई बताने वाला कोई अन्य मेटाडेटा नहीं होता है वे अब
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563) गड़बड़ी दिखाने के बजाय, MP3 फ़ॉर्मैट के डेटा के आखिर में रुक जाती हैं. - MP4 फ़ाइलों में बदलाव की सूचियां प्रोसेस करते समय, नॉन-कीफ़्रेम मीडिया की शुरुआती पोज़िशन के लिए, प्रीरोल सैंपल हैंडलिंग से जुड़ी समस्या ठीक की गई है (#1659).
mdhdमें मौजूदMp4ExtractorऔरFragmentedMp4Extractor(#1531) में मीडिया की अवधि का इस्तेमाल करके, फ़्रेम रेट की बेहतर कैलकुलेशन की गई.- MP4 फ़ाइल की एडिट लिस्ट में,
media_timeकी गलत स्केलिंग की समस्या ठीक की गई. मूवी के टाइमस्केल का इस्तेमाल करके,segment_durationको पहले ही सही तरीके से स्केल किया जा चुका था. अब ट्रैक के टाइमस्केल का इस्तेमाल करके,media_timeको सही तरीके से स्केल किया गया है. ऐसा MP4 फ़ॉर्मैट के स्टैंडर्ड (#1792) के मुताबिक किया गया है. - MP4 फ़ाइल के लिए,
endIndicesकी गिनती में, क्रम से बाहर के फ़्रेम को हैंडल किया गया. इसके लिए, editlist का इस्तेमाल किया गया (#1797). - MP4 फ़ाइलों के
mdhdबॉक्स में मीडिया की अवधि पार्स करने की समस्या ठीक की गई है, ताकि-1वैल्यू को हैंडल किया जा सके (#1819). - H.263 वीडियो के लिए, MP4 फ़ाइलों में
h263बॉक्स की पहचान करने की सुविधा जोड़ी गई है (#1821). - AC-4 Level-4 ISO बेस मीडिया फ़ाइल फ़ॉर्मैट के लिए सहायता जोड़ी गई (#1265).
- DataSource:
HttpEngineDataSourceको अपडेट किया गया है, ताकि इसका इस्तेमाल एपीआई लेवल 34 के बजाय S extension 7 से किया जा सके (#1262).DataSourceContractTest: पुष्टि करें किDataSource.getUri(), हल किया गया यूआरआई दिखाता है, जैसा कि दस्तावेज़ में बताया गया है. अगर यह अनुरोध किए गए यूआरआई से अलग है, तो टेस्ट इस बात की जानकारीDataSourceContractTest.TestResource.Builder.setResolvedUri()नए तरीके का इस्तेमाल करके दे सकते हैं.DataSourceContractTest: पुष्टि करें किDataSource.getUri()औरgetResponseHeaders(),open()को कॉल करने पर 'नहीं मिला' रिसॉर्स की वजह से कॉल पूरा नहीं होने के बाद औरclose()को कॉल करने से पहले, 'खुला है' वैल्यू दिखाते हैं.DataSourceContractTest.getNotFoundResources()को बदलने की सुविधा की मदद से, टेस्ट सब-क्लास कई 'नहीं मिला' संसाधन उपलब्ध करा सकते हैं. साथ ही, वे उम्मीद के मुताबिक हेडर भी उपलब्ध करा सकते हैं. इससे, हेडर के साथ HTTP 404 और "सर्वर नहीं मिला" (कोई हेडर नहीं) के बीच अंतर किया जा सकता है.
- ऑडियो:
- अगर मीडिया में मौजूद है, तो कोडेक पर CTA-2075 के लाउडनेस मेटाडेटा को अपने-आप कॉन्फ़िगर करता है.
- सीख करते समय, वॉल्यूम धीरे-धीरे कम होना चाहिए.
- सीखने के दौरान होने वाली पॉप की आवाज़ की समस्या ठीक की गई.
- Sonic के टाइम-स्ट्रेचिंग/पिच-शिफ़्टिंग एल्गोरिदम के लिए, ट्रंकेशन की गड़बड़ी को ठीक किया गया.
SpeedChangingAudioProcessorमें मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से आउटपुट फ़्रेम ड्रॉप हो जाते थे.
- वीडियो:
MediaCodecVideoRendererऐसे सैंपल को डिकोड करने से बचता है जिन्हें न तो रेंडर किया जाता है और न ही अन्य सैंपल के रेफ़रंस के तौर पर इस्तेमाल किया जाता है.- एपीआई 35 और इसके बाद के वर्शन पर,
MediaCodecAdapterको अबconfigureमेंnullSurfaceमिल सकता है. साथ ही, अगर कोडेक इसका समर्थन करता है, तो पहले से सेट किए गएSurfaceको हटाने के लिए, नए तरीकेdetachOutputSurfaceको कॉल किया जा सकता है (MediaCodecInfo.detachedSurfaceSupported). - अगर
MediaCodecAdapterको प्रोसेस करते समय पिक्सल के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की वैल्यू दी गई हैं, तो उनका इस्तेमाल करें (#1371).onOutputFormatChanged - Galaxy Tab S7 FE पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया है. इस समस्या की वजह से, 60fps वाली सुरक्षित H264 स्ट्रीम को काम न करने वाली स्ट्रीम के तौर पर मार्क किया जाता है (#1619).
- उन कोडेक के लिए समाधान जोड़ा गया है जो स्ट्रीम के खत्म होने का सिग्नल नहीं देते हैं और आखिरी सैंपल के बाद रुक जाते हैं.
- टेक्स्ट:
- कस्टम
VoiceSpanजोड़ें और उसे WebVTT वॉइस स्पैन के लिए भरें (#1632). - पक्का करें कि एचएलएस में WebVTT, बहुत बड़े सबटाइटल टाइमस्टैंप के साथ काम करता हो. ये टाइमस्टैंप, माइक्रोसेकंड के तौर पर दिखाए जाने पर 64-बिट
longसे ज़्यादा हो जाते हैं और90,000MPEG टाइमबेस से गुणा किए जाते हैं. साथ ही, यह भी पक्का करें कि ये टाइमस्टैंप दिख रहे हों (#1763). - Dolby Vision कॉन्टेंट में CEA-608 सबटाइटल की सुविधा जोड़ी गई है (#1820).
- CEA-608 सबटाइटल चालू होने पर, DASH मल्टी-पीरियड स्ट्रीम में वीडियो रुकने की समस्या ठीक की गई (#1863).
- कस्टम
- मेटाडेटा:
C.TRACK_TYPE_METADATAटाइप को उन ट्रैक पर असाइन करें जिनमें icy या vnd.dvb.ait कॉन्टेंट शामिल है.
- इमेज:
- Glide या Coil जैसी इमेज लोड करने वाली बाहरी लाइब्रेरी के साथ इंटिग्रेशन को आसान बनाने के लिए,
ExternallyLoadedImageDecoderजोड़ें.
- Glide या Coil जैसी इमेज लोड करने वाली बाहरी लाइब्रेरी के साथ इंटिग्रेशन को आसान बनाने के लिए,
- DataSource:
FileDescriptorDataSourceजोड़ें. यह एक नयाDataSourceहै, जिसका इस्तेमालFileDescriptorसे डेटा पढ़ने के लिए किया जा सकता है (#3757).
- असर:
- नाबालिग
SurfaceTextureके लिए,SurfaceTextureको छोटा करने से जुड़ी समस्या को हल करने का तरीका जोड़ा गया.DefaultVideoFrameProcessorSurfaceTextureमें, छोटी स्केलिंग शामिल हो सकती है. इससे, काटी गई बफ़र इमेज के किनारे के चारों ओर मौजूद एक टेक्सल बॉर्डर कट जाता है. अब इसे इस तरह से मैनेज किया जाता है कि आउटपुट, अनुमानित आउटपुट के ज़्यादा करीब हो. - स्पीड बढ़ाएं
DefaultVideoFrameProcessor.queueInputBitmap(). इस वजह से,Transformerकी मदद से इमेज को वीडियो में एक्सपोर्ट करने की प्रोसेस तेज़ी से होती है.
- नाबालिग
- IMA एक्सटेंशन:
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से प्लेलिस्ट मिटाने पर,
ArrayIndexOutOfBoundsExceptionमेंImaServerSideAdInsertionMediaSourceहो सकता है. - हमने उस गड़बड़ी को ठीक कर दिया है जिसमें सर्वर साइड से डाली गई ऐसी डीएआई स्ट्रीम जिनमें प्रीरोल नहीं होता है, आखिरी मिडरोल के बाद चलाने पर
ArrayIndexOutOfBoundsExceptionगड़बड़ी हो सकती है (#1741).
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से प्लेलिस्ट मिटाने पर,
- सेशन:
MediaButtonReceiver.shouldStartForegroundService(Intent)को जोड़ें, ताकि ऐप्लिकेशन इस तरीके को बदलकर, वीडियो चलाने की सुविधा को फिर से शुरू करने के लिए आने वाले प्ले कमांड को बंद कर सकें. डिफ़ॉल्ट रूप से, यह सेवा हमेशा चालू रहती है. साथ ही, सिस्टम के क्रैश होने के बिना, इस सेवा के ऑडियो को बंद नहीं किया जा सकता. सिस्टम,ForegroundServiceDidNotStartInTimeException(#1528) की मदद से इस सेवा को क्रैश कर देता है.- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, लेगसी सेवा से कनेक्ट होने पर,
MediaBrowserसे भेजे गए कस्टम निर्देश,MediaBrowserServiceCompatके बजायMediaSessionCompat.Callbackको भेजे जाते थे. इस वजह से,MediaBrowserको लेगसी सेवा से भेजी गई असल वैल्यू (#1474) नहीं मिल पाई. - मीडिया बटन के इंटेंट (#1730) के लिए ब्रॉडकास्ट रिसीवर सेट करते समय, कुछ कंपनियों के डिवाइसों से थ्रो किए गए
IllegalArgumentExceptionको हैंडल किया गया. - मीडिया आइटम के लिए कमांड बटन जोड़ें. इससे Media3 API को
Custom browse actionsके लिए जोड़ा जाता है. साथ ही, लेगसी लाइब्रेरी कोMediaBrowserCompatके साथ जोड़ा जाता है. ध्यान दें कि Media3 की मदद से, मीडिया आइटम के लिए कमांड बटन,MediaBrowserऔरMediaController, दोनों के लिए उपलब्ध हैं. ब्राउज़ करने की कस्टम कार्रवाइयां लागू करना लेख पढ़ें. * उस बग को ठीक किया गया है जिसकी वजह से, Media3 कंट्रोलर कभी-कभी सेशन ऐप्लिकेशन कोplay()का अनुरोध करने के बाद, फ़ोरग्राउंड सेवा शुरू करने की अनुमति नहीं दे पाता था. CommandButton.Builder.setIconUriको सिर्फ़ कॉन्टेंट यूआरआई स्वीकार करने के लिए सीमित करें.- Media3 ब्राउज़र के कनेक्शन के सुझावों को शुरुआती
MediaBrowserCompatमें पास करें, ताकि लेगसीMediaBrowserCompatसे कनेक्ट किया जा सके. यह सेवा,onGetRoot()को किए गए पहले कॉल के साथ रूट हिंट के तौर पर पास किए गए कनेक्शन हिंट पा सकती है. - उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी ब्राउज़र सेवा से कनेक्ट किए गए
MediaBrowserको, ब्राउज़र केparentidकी सदस्यता लेने के बाद, सेवा से भेजी गई गड़बड़ी नहीं मिली. - इंटरऑपरेबिलिटी के व्यवहार को बेहतर बनाएं, ताकि लेगसी
MediaBrowserServiceसे जुड़ा Media3 ब्राउज़र, पैरंट को सदस्यता लेते समयparentIdके बच्चों से दो बार अनुरोध न करे.
- यूआई:
- एक्सएमएल पर आधारित शेयर किए गए ट्रांज़िशन से जुड़ी समस्याओं की वजह से, स्ट्रेच/क्रॉप किए गए वीडियो को
PlayerView-in-Compose-AndroidViewवर्कअराउंड में ऑप्ट-इन करें.PlayerViewका इस्तेमाल करने वाले ऐप्लिकेशन को, ऑप्ट-इन करने के लिएAndroidViewको कॉल करना होगा (#1237, #1594).PlayerView.setEnableComposeSurfaceSyncWorkaround PlayerViewमेंsetFullscreenButtonStateजोड़ें, ताकि फ़ुलस्क्रीन बटन के आइकॉन को ज़रूरत के हिसाब से अपडेट किया जा सके. इसका मतलब है कि आइकॉन को क्लिक इंटरैक्शन के हिसाब से अपडेट नहीं किया जाएगा, बल्कि आउट-ऑफ़-बैंड तरीके से अपडेट किया जाएगा (#1590, #184).- उस बग को ठीक किया गया है जिसमें ऐप्लिकेशन के हिसाब से टेक्स्ट ट्रैक चुनने की सेटिंग मौजूद होने पर, टेक्स्ट चुनने के विकल्प में "कोई नहीं" विकल्प काम नहीं करता था.
- एक्सएमएल पर आधारित शेयर किए गए ट्रांज़िशन से जुड़ी समस्याओं की वजह से, स्ट्रेच/क्रॉप किए गए वीडियो को
- DASH एक्सटेंशन:
- सेगमेंट के बीच से शुरू होने वाली अवधियों के लिए सहायता जोड़ी गई (#1440).
- स्मूद स्ट्रीमिंग एक्सटेंशन:
- टेक्स्ट ट्रैक के साथ SmoothStreaming स्ट्रीम चलाने पर,
Bad magic number for Bundleगड़बड़ी को ठीक किया गया है (#1779).
- टेक्स्ट ट्रैक के साथ SmoothStreaming स्ट्रीम चलाने पर,
- आरटीएसपी एक्सटेंशन:
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- IAMF डिकोडर मॉड्यूल जोड़ें. यह libiamf नेटिव लाइब्रेरी का इस्तेमाल करके, IAMF ट्रैक वाली MP4 फ़ाइलों को चलाने की सुविधा देता है, ताकि ऑडियो को सिंथेसाइज़ किया जा सके.
- इसमें स्टीरियो लेआउट के साथ-साथ, स्पेशल ऑडियो और 5.1 ऑडियो की सुविधा भी मिलती है. साथ ही, हेड ट्रैकिंग की सुविधा को चालू करने का विकल्प भी मिलता है. हालांकि, फ़िलहाल इसमें बाइनॉरल ऑडियो की सुविधा उपलब्ध नहीं है.
- Android 15 पर डिकोडर एक्सटेंशन के लिए, 16 केबी पेज इस्तेमाल करने की सुविधा जोड़ी गई है (#1685).
- IAMF डिकोडर मॉड्यूल जोड़ें. यह libiamf नेटिव लाइब्रेरी का इस्तेमाल करके, IAMF ट्रैक वाली MP4 फ़ाइलों को चलाने की सुविधा देता है, ताकि ऑडियो को सिंथेसाइज़ किया जा सके.
- कास्ट एक्सटेंशन:
- CastSession डिसकनेक्ट होने के बाद, टाइमलाइन को साफ़ करना बंद कर देता है. इससे, डिसकनेक्ट होने के बाद, भेजने वाला ऐप्लिकेशन स्थानीय तौर पर कॉन्टेंट चलाना फिर से शुरू कर पाता है.
Contextदिए जाने पर, CastPlayer केDeviceInfoको पॉप्युलेट करें. इससेMediaSessionकोRoutingSessionसे लिंक किया जा सकता है. आउटपुट स्विचर (#1056) को इंटिग्रेट करने के लिए, यह ज़रूरी है.
- टेस्ट यूटिलिटी:
DataSourceContractTestमें अब इन चीज़ों की पुष्टि करने के लिए टेस्ट शामिल हैं:- इनपुट स्ट्रीम
read positionअपडेट कर दी गई है. - आउटपुट बफ़र
offsetको सही तरीके से लागू किया गया है.
- इनपुट स्ट्रीम
- डेमो ऐप्लिकेशन
- डेमो के तौर पर उपलब्ध शॉर्ट-फ़ॉर्म ऐप्लिकेशन में मेमोरी लीक की समस्या ठीक की गई है (#1839).
- हटाए गए सिंबल हटाएं:
- अब काम न करने वाले
Player.hasPrevious,Player.hasPreviousWindow()को हटाएं. इसके बजाय,Player.hasPreviousMediaItem()का इस्तेमाल करें. - बंद किए गए
Player.previous()तरीके को हटा दिया गया है. इसके बजाय,Player.seekToPreviousMediaItem()का इस्तेमाल करें. - बंद किए गए
DrmSessionEventListener.onDrmSessionAcquiredतरीके को हटा दिया गया है. - ऐसे
DefaultEncoderFactoryकंस्ट्रक्टर हटाएं जो अब इस्तेमाल में नहीं हैं. इसके बजाय,DefaultEncoderFactory.Builderका इस्तेमाल करें.
- अब काम न करने वाले
वर्शन 1.5.0-rc02
19 नवंबर, 2024
1.5.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.5.0-rc01
13 नवंबर, 2024
1.5.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.5.0-beta01
30 अक्टूबर, 2024
1.5.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.5.0-alpha01
10 सितंबर, 2024
1.5.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.4.0
वर्शन 1.4.1
27 अगस्त, 2024
androidx.media3:media3-*:1.4.1 रिलीज़ हो गया है. वर्शन 1.4.1 में ये बदलाव शामिल हैं.
- ExoPlayer:
- डेटा निकालने वाले टूल:
- MP3:
Searched too many bytesफ़्रेम में मौजूद लंबाई वाले फ़ील्ड के आधार पर, आखिर में मौजूद MP3 फ़ॉर्मैट के अलावा अन्य फ़ॉर्मैट के डेटा को सही तरीके से अनदेखा करके,Searched too many bytesगड़बड़ी ठीक करें (#1480).Info
- MP3:
- टेक्स्ट:
- टीटीएमएल: प्रतिशत
tts:fontSizeवैल्यू को हैंडल करने की सुविधा को ठीक किया गया है, ताकि यह पक्का किया जा सके कि वे प्रतिशतtts:fontSizeवैल्यू वाले पैरंट नोड से सही तरीके से इनहेरिट की गई हैं. IndexOutOfBoundsExceptionमेंLegacySubtitleUtilको ठीक किया गया है. इसकी वजह यह है कि अनुरोध किए गए आउटपुट के शुरू होने का समय,Subtitleमें मौजूद इवेंट के आखिरी समय से ज़्यादा या उसके बराबर होने की स्थिति को गलत तरीके से हैंडल किया गया था (#1516).
- टीटीएमएल: प्रतिशत
- DRM:
- API 31 या इसके बाद के वर्शन वाले डिवाइसों पर, L1 Widevine कॉन्टेंट चलाने के दौरान आने वाली
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEगड़बड़ी को ठीक किया गया. यह गड़बड़ी, फ़्रेमवर्कMediaDrm.requiresSecureDecoderतरीके (#1603) को पूरी तरह से लागू न करने की वजह से होती है.
- API 31 या इसके बाद के वर्शन वाले डिवाइसों पर, L1 Widevine कॉन्टेंट चलाने के दौरान आने वाली
- असर:
GlObjectsProviderमेंrelease()तरीका जोड़ें.
- सेशन:
KEYCODE_HEADSETHOOKपर दो बार टैप करने की सुविधा को 'अगले पर जाएं' सुविधा में बदल दिया गया है. इसके बारे में दस्तावेज़ में बताया गया है (#1493).KEYCODE_HEADSETHOOKको 'चलाएं' कमांड के तौर पर हैंडल करें. साथ ही, यह तय करते समय कि इसे अनदेखा करना है या नहीं,MediaButtonReceiverको ध्यान में रखें, ताकिForegroundServiceDidNotStartInTimeException(#1581) से बचा जा सके.
- आरटीएसपी एक्सटेंशन:
- एसडीपी पार्सिंग में, मीडिया के अमान्य ब्यौरे छोड़ें (#1087).
वर्शन 1.4.0
25 जुलाई, 2024
androidx.media3:media3-*:1.4.0 रिलीज़ हो गया है. वर्शन 1.4.0 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
- यह विकल्प, seek के उन कॉल को अनदेखा करने के बजाय, सुरक्षित
BasePlayer.seekTo()औरSimpleBasePlayer.handleSeek()तरीकों पर फ़ॉरवर्ड करता है जिनके बारे में यह माना जाता है कि वे कोई कार्रवाई नहीं करते. अगर इन तरीकों को किसी कस्टम प्लेयर में लागू किया जा रहा है, तो आपकोmediaItemIndex == C.INDEX_UNSETकी मदद से इन अतिरिक्त कॉल को मैनेज करना पड़ सकता है. - Java 8 के बेहतर डिसुगरिंग पर कंपाइल डिपेंडेंसी हटाएं (#1312).
- पक्का करें कि इमेज के अलावा किसी अन्य
MediaItemके लिए,MediaItem.Builder.setImageDurationMs()को दी गई अवधि को अनदेखा किया गया हो (जैसा कि दस्तावेज़ में बताया गया है). Format.customDataको जोड़कर,Formatइंस्टेंस के बारे में ऐप्लिकेशन से मिली कस्टम जानकारी सेव करें.
- यह विकल्प, seek के उन कॉल को अनदेखा करने के बजाय, सुरक्षित
- ExoPlayer:
BasePreloadManagerजोड़ें. यहBasePreloadManagerके ज़रिए तय की गई प्राथमिकताओं के आधार पर, कई सोर्स के लिए प्रीलोडिंग को मैनेज करता है.rankingDataइस क्लास को बढ़ाकर, अपनी पसंद के मुताबिक बनाया जा सकता है. AddDefaultPreloadManagerजोPreloadMediaSourceका इस्तेमाल करके, सोर्स के मीडिया सैंपल को मेमोरी में प्रीलोड करता है. साथ ही,rankingDataका इस्तेमाल करके, यूज़र इंटरफ़ेस (यूआई) पर मौजूद किसी आइटम का इंडेक्स दिखाता है.- एक से ज़्यादा खिलाड़ियों के लिए
LoadControlलागू करने की सुविधा चालू करने के लिए,LoadControlके ज़्यादातर तरीकों मेंPlayerIdजोड़ें. Buffer.isDecodeOnly()औरC.BUFFER_FLAG_DECODE_ONLYहटाएं. इस फ़्लैग को सेट करने की ज़रूरत नहीं है, क्योंकि रेंडरर और डिकोडर, टाइमस्टैंप के आधार पर बफ़र को छोड़ने का फ़ैसला करेंगे. कस्टमRendererलागू करने के दौरान, यह जांच की जानी चाहिए कि बफ़र का समय कम से कमBaseRenderer.getLastResetPositionUs()है या नहीं. इससे यह तय किया जा सकेगा कि कोई सैंपल दिखाया जाना चाहिए या नहीं. कस्टमSimpleDecoderलागू करने के तरीके से, ज़रूरत पड़ने परisAtLeastOutputStartTimeUs()की जांच की जा सकती है. इसके अलावा, अन्य बफ़र कोDecoderOutputBuffer.shouldBeSkippedके तौर पर मार्क करके उन्हें स्किप किया जा सकता है.TargetPreloadStatusControl.getTargetPreloadStatus(T)को शून्य वैल्यू लौटाने की अनुमति दें, ताकि यह पता चल सके कि दिए गएrankingDataके साथMediaSourceको प्रीलोड नहीं करना है.remove(MediaSource)कोBasePreloadManagerमें जोड़ें.- प्रीलोड मैनेजर इंस्टेंस को बनाए रखते हुए, होल्ड किए गए सभी सोर्स को रिलीज़ करने के लिए,
BasePreloadManagerमेंreset()जोड़ें. ExoPlayer.setPriority()(औरBuilder.setPriority()) जोड़ें, ताकिPriorityTaskManagerमें इस्तेमाल की गई प्राथमिकता की वैल्यू तय की जा सके. साथ ही, एपीआई 35 से MediaCodec के लिए प्राथमिकता तय की जा सके.- बफ़र होने में लगे आखिरी समय को अपडेट करने से जुड़ी समस्या ठीक की गई है. इस वजह से, CMCD में
bs(बफ़रिंग में रुकावट) कुंजी गलत थी (#1124). PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)जोड़ें, ताकि यह पता चल सके कि सोर्स आखिर तक लोड हो गया है. इससेDefaultPreloadManagerऔर कस्टमPreloadMediaSource.PreloadControlलागू करने की सुविधा, अगले सोर्स को प्रीलोड कर सकती है या अन्य कार्रवाइयां कर सकती है.- इस गड़बड़ी को ठीक किया गया है, जिसमें आइटम के आखिर में आवाज़ बंद करने की सुविधा को स्किप करने पर, ऑडियो चलाने में समस्या आ सकती है.
- पहले से लोड करने की अवधि को खारिज करने के लिए,
PreloadMediaSourceमेंclearजोड़ें. - नया गड़बड़ी कोड
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDजोड़ें. इसका इस्तेमाल तब किया जाता है, जब ज़्यादा प्राथमिकता वाले टास्क के लिए कोडेक संसाधनों को वापस लिया जाता है. AdsMediaSourceको शुरुआती कॉन्टेंट मीडिया तैयार होने से पहले, प्रीरोल विज्ञापन लोड करने की अनुमति दें (#1358).- उस बग को ठीक किया गया है जिसमें ओरिजनल अवधि को मेनिफ़ेस्ट से हटा दिए जाने के बाद, एक से ज़्यादा अवधि वाली DASH लाइव स्ट्रीम को फिर से तैयार करने पर, प्लेबैक
STATE_ENDEDपर चला जाता था. PreloadMediaSource.PreloadControlमें,onTimelineRefreshed()का नाम बदलकरonSourcePrepared()औरonPrepared()का नाम बदलकरonTracksSelected()कर दें. साथ ही,DefaultPreloadManager.Stageमें मौजूद IntDefs के नाम भी बदलें.- डाइनैमिक शेड्यूलिंग के लिए एक्सपेरिमेंट के तौर पर सहायता जोड़ी गई है. इससे, सीपीयू के वेक-अप साइकल के साथ काम को बेहतर तरीके से अलाइन किया जा सकेगा. साथ ही, रेंडरर के काम करने तक वेक-अप में देरी की जा सकेगी.
ExoPlayer इंस्टेंस सेट अप करते समय,
experimentalSetDynamicSchedulingEnabled()का इस्तेमाल करके इसे चालू किया जा सकता है. Renderer.getDurationToProgressUs()जोड़ें.Rendererइस तरीके को लागू कर सकता है, ताकि ExoPlayer को वह अवधि बताई जा सके जिसके लिए रेंडरर को आगे बढ़ना है. अगरExoPlayerकोexperimentalSetDynamicSchedulingEnabled()के साथ सेट किया जाता है, तोExoPlayerअपने काम के टास्क को शेड्यूल करने का समय तय करते समय, इस तरीके को कॉल करेगा.MediaCodecAdapter#OnBufferAvailableListenerको जोड़ें, ताकिMediaCodecRendererके इस्तेमाल के लिए इनपुट और आउटपुट बफ़र उपलब्ध होने पर सूचना मिल सके. इन कॉलबैक को पाने पर,MediaCodecRendererExoPlayerको सूचना देगा. अगरExoPlayerकोexperimentalSetDynamicSchedulingEnabled()के साथ सेट किया गया है, तोExoPlayerअपने वर्क लूप को शेड्यूल करेगा, ताकि रेंडरर आगे बढ़ सकें.- अलग-अलग पैरामीटर के बजाय,
LoadControlतरीकों के लिए डेटा क्लास का इस्तेमाल करें. ExoPlayer.isReleased()को जोड़ें, ताकि यह पता लगाया जा सके किExoplayer.release()को कॉल किया गया है या नहीं.ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()जोड़कर, उस ज़्यादा से ज़्यादा पोज़िशन को कॉन्फ़िगर करें जिसके लिएseekToPrevious()पिछले आइटम (#1425) पर जाता है.- ऑडियो फ़ोकस से जुड़ी कुछ गड़बड़ियों को ठीक किया गया है. जैसे, प्लेयर के रुकने पर फ़ोकस के पूरी तरह या कुछ समय के लिए हट जाने की जानकारी न देना (#1436).
- एक्सट्रैक्टर की रिपोर्टिंग की वजह से होने वाली संभावित
IndexOutOfBoundsExceptionको ठीक किया गया. एक्सट्रैक्टर, तैयारी के शुरुआती चरण के बाद अतिरिक्त ट्रैक रिपोर्ट करते हैं (#1476). EffectsमेंExoPlayer.setVideoEffect()को, रेंडरर ऑफ़सेट हटाकर टाइमस्टैंप मिलेंगे (#1098).- खिलाड़ी की गड़बड़ी को ठीक किया गया है. यह गड़बड़ी, किसी दूसरी प्लेलिस्ट आइटम को पढ़ते समय हुई थी (#1483).
IllegalArgumentException
- ट्रांसफ़ॉर्मर:
audioConversionProcessऔरvideoConversionProcessकोExportResultमें जोड़ें. इससे पता चलेगा कि आउटपुट फ़ाइल में मौजूद ट्रैक कैसे बनाए गए थे.- H.264 लेवल की जांच के लिए, वीडियो के कुछ हिस्से को हटाने की सुविधा को ऑप्टिमाइज़ किया गया है.
- किसी क्रम में एसडीआर और एचडीआर इनपुट मीडिया के बीच स्विच करने की सुविधा जोड़ी गई है.
- कंपोज़िशन-लेवल पर ऑडियो इफ़ेक्ट के लिए सहायता जोड़ी गई है.
- अल्ट्रा एचडीआर इमेज को एचडीआर वीडियो में ट्रांसकोड करने की सुविधा जोड़ी गई.
- उस समस्या को ठीक किया गया है जिसमें रीसेट करने और फिर से इस्तेमाल करने के बाद,
DefaultAudioMixerसही बाइट आउटपुट नहीं देता है. - डिकोडर की गड़बड़ी को ठीक किया गया है. इस गड़बड़ी में, पीसीएम इनपुट को हैंडल करते समय ऑडियो चैनलों की संख्या को स्टीरियो पर सीमित कर दिया गया था.
ExoPlayerAssetLoaderमें ट्रैक चुनते समय, ऑडियो चैनल की संख्या से जुड़ी पाबंदियों को अनदेखा करें. ये पाबंदियां सिर्फ़ ऑडियो चलाने पर लागू होती हैं.androidx.media3.transformer.Muxerइंटरफ़ेस कोandroidx.media3.muxer.Muxerसे बदलें औरandroidx.media3.transformer.Muxerको हटाएं.- कॉन्टेंट यूआरआई स्कीम से HEIC इमेज लोड करने की समस्या ठीक की गई. (#1373).
- एवी सिंक को बेहतर बनाने के लिए,
AudioGraphInputमें ऑडियो ट्रैक की अवधि में बदलाव करें. ExportResult.processedInputsफ़ील्ड हटाएं. अगर आपको इस फ़ील्ड का इस्तेमाल कोडेक की जानकारी के लिए करना है, तो इसके बजायDefaultDecoderFactory.listenerका इस्तेमाल करें. कोडेक से जुड़ी समस्या होने पर, कोडेक की जानकारीExportException.codecInfoमें उपलब्ध होगी.
- डेटा निकालने वाले टूल:
- MPEG-TS: बदलाव को आगे बढ़ाएं. साथ ही, यह पक्का करें कि स्ट्रीम की आखिरी ऐक्सेस यूनिट को सैंपल क्यू में भेजकर, आखिरी फ़्रेम रेंडर किया गया हो (#7909). सिर्फ़ आई-फ़्रेम वाली एचएलएस स्ट्रीम(#1150) और H.262 एचएलएस स्ट्रीम (#1126) में आने वाली समस्याओं को ठीक किया गया है.
- MP3:
Infoफ़्रेम से मिले डेटा साइज़ को, स्ट्रीम से मिले डेटा साइज़ (जैसे, फ़ाइल का साइज़ या एचटीटीपीContent-Lengthहेडर) की तुलना में प्राथमिकता दें. इससे, लगातार बिटरेट पर सीकिंग की कैलकुलेशन से, न चलने वाले ट्रेलर डेटा (जैसे, एल्बम का आर्टवर्क) को बाहर रखने में मदद मिलती है. इससे सीकिंग ज़्यादा सटीक हो जाती है (#1376). - MP3: कॉन्स्टेंट बिटरेट सीकिंग के लिए औसत बिटरेट का हिसाब लगाने के लिए,
Infoफ़्रेम (अगर मौजूद है) में फ़्रेम की संख्या और अन्य डेटा का इस्तेमाल करें.इसके बजाय,Infoफ़्रेम के बाद वाले फ़्रेम के बिटरेट से एक्सट्रपलेट करें, जो आर्टिफ़िशियली छोटा हो सकता है. उदाहरण के लिए,PCUTफ़्रेम (#1376). - AVI कंटेनर में, PCM ऑडियो फ़ॉर्मैट एक्सट्रैक्ट करने से जुड़ी समस्या ठीक की गई.
- ऑडियो:
- पासथ्रू प्लेबैक के लिए, DTS:X Profile 2 एन्कोडिंग एट्रिब्यूट से जुड़ी समस्या ठीक की गई है (#1299).
- ऑफ़लोड किए गए कॉन्टेंट को चलाने के लिए,
AudioTrack.stop()को कॉल करने से पहलेDefaultAudioSinkमें स्ट्रीम पूरी होने के लिए ट्रैकिंग फ़ील्ड को रीसेट करें, ताकिAudioTrack.StreamEventCallback#onPresentationEndedयह सही तरीके से पहचान सके कि सभी लंबित डेटा को कब चलाया गया है. SilenceSkippingAudioProcessorमें मौजूद गड़बड़ी को ठीक किया गया है. अलग-अलग ऑडियो फ़ॉर्मैट (उदाहरण के लिए, स्टीरियो से मोनो) के बीच ट्रांज़िशन होने पर, प्रोसेसर एक अपवाद (#1352) दिखा सकता है.MediaCodecAudioRenderer.getDurationToProgressUs()लागू करें, ताकि ExoPlayer अपने मुख्य वर्क लूप को डाइनैमिक तरीके से शेड्यूल कर सके. ऐसा तब होगा, जब MediaCodecAudioRenderer काम कर पाएगा.
- वीडियो:
- उस समस्या को ठीक किया गया है जिसमें वीडियो चलाते समय डिवाइस बदलने पर,
Listener.onRenderedFirstFrame()बहुत जल्दी दिखने लगता था. - Dolby Vision के लिए डिकोडर फ़ॉलबैक लॉजिक को ठीक किया गया है, ताकि ज़रूरत पड़ने पर AV1 के साथ काम करने वाले डिकोडर का इस्तेमाल किया जा सके (#1389).
- कोडेक से जुड़ी उस समस्या को ठीक किया गया है जो वीडियो रेंडरर को वीडियो के बीच में चालू करने की वजह से हो सकती है.
- उस समस्या को ठीक किया गया है जिसमें वीडियो चलाते समय डिवाइस बदलने पर,
- टेक्स्ट:
- उस समस्या को ठीक किया गया है जिसमें सीक की गई जगह से पहले शुरू होने वाले सबटाइटल स्किप हो जाते थे. यह समस्या सिर्फ़ Media3 1.4.0-alpha01 में आई है.
- डिफ़ॉल्ट रूप से सबटाइटल पार्स करने के तरीके में बदलाव करें, ताकि यह रेंडरिंग के बजाय एक्सट्रैक्शन के दौरान हो. एक्सट्रैक्शन और रेंडरिंग के बीच के अंतर को समझने के लिए, ExoPlayer के आर्किटेक्चर का डायग्राम देखें.
- दोनों
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)औरTextRenderer.experimentalSetLegacyDecodingEnabled(true)पर कॉल करके, इस बदलाव को बदला जा सकता है. इन कॉम्पोनेंट कोExoPlayerइंस्टेंस में जोड़ने का तरीका जानने के लिए, कस्टम बनाने से जुड़े दस्तावेज़ देखें. इन तरीकों और लेगसी सबटाइटल डिकोडिंग के लिए उपलब्ध सभी सुविधाओं को आने वाले समय में हटा दिया जाएगा. - जिन ऐप्लिकेशन में कस्टम
SubtitleDecoderलागू किए गए हैं उन्हेंSubtitleParserलागू करने के लिए, उन्हें अपडेट करना होगा. साथ ही,SubtitleDecoderFactoryके बजायSubtitleParser.Factoryलागू करना होगा.
- दोनों
- PGS: रंग के इंडेक्स के तौर पर
0को हल करने के लिए, रन-लेंथ डिकोडिंग की समस्या ठीक करें. इसके बजाय, रंग की लिटरल वैल्यू (#1367) का इस्तेमाल करें. - CEA-708:
rowLockवैल्यू को अनदेखा करें. CEA-708-E S-2023 स्पेसिफ़िकेशन के मुताबिक,rowLockऔरcolumnLock, दोनों को सही माना जाना चाहिए. भले ही, स्ट्रीम में मौजूद वैल्यू कुछ भी हों.columnLockकी सुविधा लागू नहीं की गई है. इसलिए, इसे हमेशा गलत माना जाता है.- यह बदलाव, मूल रूप से
1.3.0-alpha01रिलीज़ की जानकारी में शामिल किया गया था. हालांकि,1.3.0-rc01रिलीज़ होने से पहले, गलती से इस बदलाव को पहले जैसा कर दिया गया था. अब यह समस्या ठीक कर दी गई है. इसलिए, बदलाव फिर से दिख रहा है.
- यह बदलाव, मूल रूप से
- CEA-708: ExoPlayer के 'सेट पेन लोकेशन' कमांड को हैंडल करने के तरीके की वजह से, डुप्लीकेट नई लाइनें जोड़ने से बचें (#1315).
- जब WebVTT सबटाइटल के सैंपल में कोई क्यू शामिल न हो, तब
IllegalArgumentExceptionसेLegacySubtitleUtilको ठीक करें. उदाहरण के लिए, DASH स्ट्रीम के हिस्से के तौर पर (#1516).
- मेटाडेटा:
- MP4 को ID3 सॉर्ट टैग से मैप करने की समस्या ठीक की गई. पहले, MP4 टैग 'एल्बम सॉर्ट' (
soal), 'कलाकार सॉर्ट' (soar), और 'एल्बम कलाकार सॉर्ट' (soaa) कोTSO2,TSOA, औरTSOPID3 टैग (#1302) पर गलत तरीके से मैप किया गया था. - जब वैल्यू एक बाइट से ज़्यादा लंबी हो, तब MP4 (/iTunes) के संख्यात्मक
gnre(शैली) औरtmpo(टेंपो) टैग को पढ़ने की समस्या ठीक की गई. - आईडी3
TCONफ़्रेम कोMediaMetadata.genre(#1305) पर भेजें.
- MP4 को ID3 सॉर्ट टैग से मैप करने की समस्या ठीक की गई. पहले, MP4 टैग 'एल्बम सॉर्ट' (
- इमेज:
- स्क्वेयर नहीं होने वाली DASH थंबनेल ग्रिड के लिए सहायता जोड़ी गई है (#1300).
- एपीआई 34 और इसके बाद के वर्शन के लिए, AVIF फ़ॉर्मैट का इस्तेमाल करने की सुविधा जोड़ी गई.
- पहले से सेट किए गए
ImageOutputको हटाने के लिए,ExoPlayer.setImageOutput()के पैरामीटर के तौर परnullका इस्तेमाल करने की अनुमति दें.
- DataSource:
android.resource://package/idरॉ रिसोर्स यूआरआई के लिए सहायता लागू करें, जहांpackageमौजूदा ऐप्लिकेशन के पैकेज से अलग है. पहले, इस तरीके के काम करने के बारे में कोई दस्तावेज़ मौजूद नहीं था. हालांकि, यह नाम के बजाय किसी दूसरे पैकेज में मौजूद संसाधनों को ऐक्सेस करने का ज़्यादा असरदार तरीका है.DataSpecकंस्ट्रक्टर मेंurlकी वैल्यू की जांच करें. इस पैरामीटर को पहले ही गैर-शून्य के तौर पर एनोटेट किया जा चुका है.ByteArrayDataSourceकोopen()के दौरान यूआरआई को बाइट ऐरे में बदलने की अनुमति दें. इसके बजाय, कंस्ट्रक्शन के दौरान इसे हार्ड-कोड किया जाता है (#1405).
- DRM:
- यह कुकी,
DefaultDrmSessionManagerProviderपरLoadErrorHandlingPolicyसेट करने की अनुमति देती है (#1271).
- यह कुकी,
- असर:
SpeedChangeEffectमें, एक हीEditedMediaItemयाCompositionके अंदर, रफ़्तार में कई बदलावों के लिए सहायता जोड़ी गई है.- अल्ट्रा एचडीआर बिटमैप इनपुट से, HLG और PQ आउटपुट के लिए सहायता.
- EGL_GL_COLORSPACE_BT2020_HLG_EXT के लिए सहायता जोड़ी गई है. इससे ExoPlayer.setVideoEffect और Transformer के DebugSurfaceView में, एचएलजी सर्फ़ेस आउटपुट बेहतर होता है.
- ओवरले मैट्रिक्स के लागू करने के तरीके को अपडेट करें, ताकि यह दस्तावेज़ के मुताबिक हो. इसके लिए,
setOverlayFrameAnchor()में लागू की गई x और y वैल्यू को बदलें. अगरOverlaySettings.Builder.setOverlayFrameAnchor()का इस्तेमाल किया जा रहा है, तो x और y की वैल्यू को-1से गुणा करके, उन्हें फ़्लिप करें. - उस गड़बड़ी को ठीक किया गया है जिसमें
TimestampWrapperके साथExoPlayer#setVideoEffectsका इस्तेमाल करने पर,TimestampWrapperक्रैश हो जाता था (#821). - एसडीआर वीडियो के लिए, डिफ़ॉल्ट एसडीआर कलर वर्किंग स्पेस को लीनियर कलर से बदलकर इलेक्ट्रिकल बीटी 709 एसडीआर वीडियो करें. साथ ही, ओरिजनल कलरस्पेस को बनाए रखने के लिए तीसरा विकल्प भी दें.
- EditedMediaItemSequences के लिए, z-ऑर्डर तय न करने की अनुमति दी गई है (#1055).
- एचडीआर कॉन्टेंट के अलग-अलग हिस्सों में एक जैसी ल्यूमिनेंस रेंज बनाए रखता है (एचएलजी रेंज का इस्तेमाल करता है).
- एचडीआर कॉन्टेंट पर अल्ट्रा एचडीआर (बिटमैप) ओवरले के लिए सपोर्ट जोड़ा गया है.
- एपीआई 26 से पहले,
SeparableConvolutionइफ़ेक्ट इस्तेमाल करने की अनुमति दें. - इस्तेमाल नहीं किए गए
OverlaySettings.useHdrहटाएं, क्योंकि ओवरले और फ़्रेम की डाइनैमिक रेंज एक जैसी होनी चाहिए. TextOverlayके लिए, एचडीआर की सुविधा जोड़ी गई.OverlaySettings.Builder.setHdrLuminanceMultiplier()की मदद से, टेक्स्ट ओवरले की चमक को अडजस्ट किया जा सकता है.
- IMA एक्सटेंशन:
- Promote API को स्टेबल वर्शन में प्रमोट करें. यह एपीआई, ऐप्लिकेशन के लिए DAI विज्ञापन स्ट्रीम चलाने के लिए ज़रूरी है.
replaceAdTagParameters(Map <String, String>)कोImaServerSideAdInsertionMediaSource.AdLoaderमें जोड़ें. इससे विज्ञापन टैग पैरामीटर को रनटाइम में बदलने की अनुमति मिलती है.- उस गड़बड़ी को ठीक किया गया है जिसमें विज्ञापन चलाने के दौरान प्लेयर में गड़बड़ी होने पर,
VideoAdPlayer.VideoAdPlayerCallback.onError()को कॉल नहीं किया जाता था (#1334). data://विज्ञापन टैग यूआरआई का इस्तेमाल करते समय,NullPointerExceptionको ठीक करने के लिए, IMA SDK का वर्शन 3.33.0 पर अपग्रेड किया गया (#700).
- सेशन:
CommandButton.enabledकी डिफ़ॉल्ट वैल्यू कोtrueमें बदलें. साथ ही, यह पक्का करें कि कंट्रोलर के लिए वैल्यू को 'गलत है' पर सेट किया जा सकता हो. भले ही, उससे जुड़ा निर्देश उपलब्ध हो.CommandButtonके लिए आइकॉन कॉन्स्टेंट जोड़ें. इनका इस्तेमाल कस्टम आइकॉन रिसॉर्स के बजाय किया जाना चाहिए.MediaSessionService.isPlaybackOngoing()जोड़ें, ताकि ऐप्लिकेशन यह क्वेरी कर सकें किonTaskRemoved()में सेवा को बंद करने की ज़रूरत है या नहीं (#1219).MediaSessionService.pauseAllPlayersAndStopSelf()जोड़ें. इससे सभी सेशन के प्लेबैक को आसानी से रोका जा सकता है. साथ ही,MediaSessionServiceके लाइफ़साइकल को खत्म करने के लिए,stopSelf()को कॉल किया जा सकता है.MediaSessionService.onTaskRemoved(Intent)को बदलकर, सुरक्षित डिफ़ॉल्ट सेटिंग लागू करें. इससे, अगर वीडियो चल रहा है, तो सेवा फ़ोरग्राउंड में चलती रहेगी. अगर वीडियो नहीं चल रहा है, तो सेवा बंद हो जाएगी.- लाइव स्ट्रीम के लिए मीडिया सूचना में सीकबार को छिपाएं. इसके लिए, प्लैटफ़ॉर्म सेशन के मेटाडेटा में अवधि सेट न करें (#1256).
MediaMetadataकोMediaDescriptionCompatके साथ अलाइन करें, ताकि मेटाडेटा प्रॉपर्टी चुनते समय उसी पसंदीदा क्रम और लॉजिक का इस्तेमाल किया जा सके जैसा कि media1 में किया गया था.MediaSession.sendError()जोड़ें. इससे Media3 कंट्रोलर को ऐसी गड़बड़ियां भेजी जा सकती हैं जिनसे कोई गंभीर समस्या नहीं होती. सूचना कंट्रोलर (MediaSession.getMediaNotificationControllerInfo()देखें) का इस्तेमाल करते समय, कस्टम गड़बड़ी का इस्तेमाल प्लैटफ़ॉर्म सेशन केPlaybackStateको गड़बड़ी की स्थिति में अपडेट करने के लिए किया जाता है. इसमें गड़बड़ी की जानकारी दी जाती है (#543).MediaSession.Callback.onPlayerInteractionFinished()जोड़ें, ताकि सेशन को यह सूचना दी जा सके कि किसी कंट्रोलर से प्लेयर के साथ इंटरैक्शन की एक सीरीज़ खत्म हो गई है.- गड़बड़ी के बारे में ज़्यादा जानकारी देने के लिए, गड़बड़ी के कोड के बजाय
SessionErrorजोड़ें और इसका इस्तेमालSessionResultऔरLibraryResultमें करें. साथ ही, अगर हो सके, तो गड़बड़ी को ठीक करने का तरीका भी बताएं. - Media3 कंट्रोलर टेस्ट ऐप्लिकेशन के लिए कोड पब्लिश करें. इसका इस्तेमाल, मीडिया सेशन पब्लिश करने वाले ऐप्लिकेशन के साथ इंटरैक्शन की जांच करने के लिए किया जा सकता है.
- media3 के
MediaSession[Builder].setSessionExtras()को पास किए गए अतिरिक्त डेटा को media1 कंट्रोलर केPlaybackStateCompat.getExtras()में ट्रांसफ़र करें. - इस कुकी का इस्तेमाल, प्लैटफ़ॉर्म सेशन में नुकसान पहुंचाने वाली और नुकसान न पहुंचाने वाली गड़बड़ियों को मैप करने के लिए किया जाता है.
PlaybackExceptionकोPlaybackStateCompatकी गंभीर गड़बड़ी वाली स्थिति पर मैप किया गया है.MediaSession.sendError(ControllerInfo, SessionError)के साथ मीडिया सूचना कंट्रोलर को भेजा गयाSessionError,PlaybackStateCompatमें एक ऐसी गड़बड़ी के तौर पर मैप किया जाता है जो गंभीर नहीं है. इसका मतलब है कि गड़बड़ी का कोड और मैसेज सेट किया गया है, लेकिन प्लैटफ़ॉर्म सेशन की स्थितिSTATE_ERRORसे अलग रहती है. - इस कुकी का इस्तेमाल, हर कंट्रोलर के लिए सेशन ऐक्टिविटी सेट करने के लिए किया जाता है, ताकि ग्लोबल सेशन ऐक्टिविटी को बदला जा सके. कनेक्शन के समय, कंट्रोलर के लिए सेशन गतिविधि को तय किया जा सकता है. इसके लिए,
ConnectionResultके साथAcceptedResultBuilder.setSessionActivivty(PendingIntent)बनाएं. कनेक्ट होने के बाद, सेशन की गतिविधि कोMediaSession.setSessionActivity(ControllerInfo, PendingIntent)से अपडेट किया जा सकता है. MediaLibrarySession.Callbackको किए गए कॉल की गड़बड़ी को बेहतर तरीके से दोहराना. गड़बड़ी को दोहराने की सुविधा को अब कॉन्फ़िगर किया जा सकता है. इसके लिए,MediaLibrarySession.Builder.setLibraryErrorReplicationMode()का इस्तेमाल करके, गड़बड़ी का टाइप चुनें या गड़बड़ी को दोहराने की सुविधा से ऑप्ट-आउट करें. यह सुविधा डिफ़ॉल्ट रूप से चालू होती है.
- यूआई:
PlayerViewकोExoPlayerसे कनेक्ट करने पर, इमेज डिसप्ले करने की सुविधा जोड़ी गई (#1144).PlayerControlViewमें मौजूद अलग-अलग आइकॉन को पसंद के मुताबिक बनाने की सुविधा जोड़ें. इसके लिए, xml एट्रिब्यूट का इस्तेमाल करें, ताकि हरPlayerControlViewइंस्टेंस के लिए अलग-अलग ड्रॉएबल इस्तेमाल किए जा सकें. ऐसा ग्लोबल ओवरराइड (#1200) के बजाय किया जाना चाहिए.PlayerView- API 34 पर Compose
AndroidViewके अंदरSurfaceViewका इस्तेमाल करते समय, प्लैटफ़ॉर्म के एक बग को ठीक किया गया है. इस बग की वजह से, वीडियो स्ट्रेच हो जाता था या कट जाता था (#1237).
- डाउनलोड:
- पक्का करें कि
DownloadHelper, रिलीज़ नहीं किए गएRendererइंस्टेंस को लीक न करे. इससे ऐप्लिकेशन क्रैश हो सकता है औरIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224) गड़बड़ी दिख सकती है.
- पक्का करें कि
- Cronet एक्सटेंशन:
CronetDataSourceमेंSocketTimeoutExceptionठीक करें. Cronet के कुछ वर्शन में, कॉलबैक से मिला अनुरोध हमेशा एक जैसा नहीं होता. इस वजह से, कॉल बैक पूरा नहीं होता है और अनुरोध का समय खत्म हो जाता है (https://issuetracker.google.com/328442628).
- एचएलएस एक्सटेंशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें डिसकंटिन्यूटी का इंतज़ार कर रहे ईएमएसजी सैंपल को
HlsSampleStreamWrapperमें गलत ऑफ़सेट के साथ डेलिगेट किया गया था. इससेIndexOutOfBoundsExceptionयाIllegalArgumentException(#1002) की समस्या आ रही थी. - उस गड़बड़ी को ठीक किया गया है जिसमें एलएल-एचएलएस स्ट्रीम के लिए, मुख्य प्लेलिस्ट के अलावा अन्य प्लेलिस्ट बार-बार रीलोड होती रहती हैं (#1240).
- उस बग को ठीक किया गया है जिसकी वजह से, HLS के लिए सीएमसीडी चालू करने पर,
Source ErrorऔरIllegalArgumentExceptionगड़बड़ियां होती थीं. - उस गड़बड़ी को ठीक किया गया है जिसकी वजह से लाइव कॉन्टेंट चलाने के दौरान, मुख्य प्लेलिस्ट के अलावा अन्य प्लेलिस्ट रीफ़्रेश नहीं होती थीं (#1240).
- उस बग को ठीक किया गया है जिसमें एचएलएस लाइव स्ट्रीम के लिए सीएमसीडी चालू करने पर
ArrayIndexOutOfBoundsExceptionकी समस्या आ रही थी (#1395).
- उस गड़बड़ी को ठीक किया गया है जिसमें डिसकंटिन्यूटी का इंतज़ार कर रहे ईएमएसजी सैंपल को
- DASH एक्सटेंशन:
- कास्ट एक्सटेंशन:
- उस बग को ठीक किया गया है जिसकी वजह से,
MediaQueueItemके एल्बम का टाइटल, Media3 मीडिया आइटम में मौजूद कलाकार के नाम में बदल जाता था (#1255).
- उस बग को ठीक किया गया है जिसकी वजह से,
- टेस्ट यूटिलिटी:
FakeRendererमेंonInit()औरonRelease()को लागू करें.TestPlayerRunHelper.runUntil()/playUntil()तरीकों को बदलकर, नॉनफ़ैटल गड़बड़ियों (जैसे किAnalyticsListener.onVideoCodecError()को रिपोर्ट की गई गड़बड़ियां) को ठीक करें. इस व्यवहार को बंद करने के लिए, नईTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()तरीके की चेन का इस्तेमाल करें.
- डेमो ऐप्लिकेशन:
- मिनी ड्रामा वाले डेमो ऐप्लिकेशन में
DefaultPreloadManagerका इस्तेमाल करें. - कमांड लाइन से
Intentआर्ग्युमेंट के साथ, दोहराने का मोड सेट करने की अनुमति दें (#1266). - डिवाइस पर काम करने पर,
HttpEngineDataSourceकोHttpDataSourceके तौर पर इस्तेमाल करें.
- मिनी ड्रामा वाले डेमो ऐप्लिकेशन में
- हटाए गए सिंबल हटाएं:
CronetDataSourceFactoryहटाएं. इसके बजाय,CronetDataSource.Factoryका इस्तेमाल करें.- कुछ
DataSpecकंस्ट्रक्टर हटाएं. इसके बजाय,DataSpec.Builderका इस्तेमाल करें. DefaultHttpDataSource,OkHttpDataSource, औरCronetDataSourceसेsetContentTypePredicate(Predicate)तरीका हटाएं. इसके बजाय, हरXXXDataSource.Factoryपर एक जैसे तरीके का इस्तेमाल करें.OkHttpDataSourceकंस्ट्रक्टर औरOkHttpDataSourceFactoryहटाएं. इसके बजाय,OkHttpDataSource.Factoryका इस्तेमाल करें.PlayerMessage.setHandler(Handler)हटाएं. इसके बजाय,setLooper(Looper)का इस्तेमाल करें.Timeline.Window.isLiveफ़ील्ड हटाएं. इसके बजाय,isLive()वाला तरीका इस्तेमाल करें.DefaultHttpDataSourceकंस्ट्रक्टर हटाएं. इसके बजाय,DefaultHttpDataSource.Factoryका इस्तेमाल करें.DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MSहटाएं. इसके बजाय,DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MSका इस्तेमाल करें.MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)हटाएं. इसके बजाय,MediaCodecInfo.canReuseCodec(Format, Format)का इस्तेमाल करें.DrmSessionManager.DUMMYऔरgetDummyDrmSessionManager()तरीके को हटाएं. इसके बजाय,DrmSessionManager.DRM_UNSUPPORTEDका इस्तेमाल करें.AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format)को हटाएं. इसके बजाय,DecoderReuseEvaluationका इस्तेमाल करने वाले ओवरलोड का इस्तेमाल करें.RendererSupport.FormatSupportIntDef औरFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPE,FORMAT_UNSUPPORTED_TYPEकॉन्स्टेंट हटाएं. इसके बजाय,androidx.media3.common.Cमें मौजूद IntDef और कॉन्स्टेंट का इस्तेमाल करें. उदाहरण के लिए,C.FORMAT_HANDLED.Bundleableइंटरफ़ेस हटाएं. इसमें सभीBundleable.Creator<Foo> CREATORकॉन्स्टेंट फ़ील्ड हटाना शामिल है. इसके बजाय, कॉल करने वालों को हर टाइप के लिएBundle toBundle()औरstatic Foo fromBundle(Bundle)तरीकों का इस्तेमाल करना चाहिए.
वर्शन 1.4.0-rc01
10 जुलाई, 2024
1.4.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.4.0-beta01
26 जून, 2024
1.4.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.4.0-alpha02
07 जून, 2024
1.4.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.4.0-alpha01
17 अप्रैल, 2024
1.4.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.3.0
वर्शन 1.3.1
11 अप्रैल, 2024
androidx.media3:media3-*:1.3.1 रिलीज़ हो गया है. वर्शन 1.3.1 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
- स्थानीय भाषा या अन्य वैकल्पिक लेबल इस्तेमाल करने की अनुमति देने के लिए,
Format.labelsजोड़ें.
- स्थानीय भाषा या अन्य वैकल्पिक लेबल इस्तेमाल करने की अनुमति देने के लिए,
- ExoPlayer:
- उस समस्या को ठीक किया गया है जिसमें
PreloadMediaPeriodको फिर से प्रीलोड करने पर, स्ट्रीम को बनाए नहीं रखा जा सकता. - ट्रैक को फिर से चुनने के दौरान, खेलने की अवधि के लिए सही
TrackSelectionResultलागू करें. - मीडिया आइटम के बीच ट्रांज़िशन करते समय, वीडियो चलाने की अवधि बढ़ाने के बाद ही, रेंडर करने की सुविधा को जल्दी चालू करने वाले रेंडरर शुरू करें (#1017).
- proguard
-keepclasseswithmembersनियम में,DefaultVideoFrameProcessor.Factory.Builder.build()के लिए छूटा हुआ रिटर्न टाइप जोड़ें (#1187).
- उस समस्या को ठीक किया गया है जिसमें
- ट्रांसफ़ॉर्मर:
- एपीआई 30 से पहले, नेगेटिव प्रज़ेंटेशन टाइमस्टैंप के साथ काम न करने की वजह से होने वाली गड़बड़ी को ठीक करने के लिए, समाधान जोड़ा गया.
MediaMuxer
- एपीआई 30 से पहले, नेगेटिव प्रज़ेंटेशन टाइमस्टैंप के साथ काम न करने की वजह से होने वाली गड़बड़ी को ठीक करने के लिए, समाधान जोड़ा गया.
- ट्रैक के विकल्प:
DefaultTrackSelector: कम या अनसेट फ़्रेम रेट वाले वीडियो ट्रैक के बजाय, 'सही' फ़्रेम रेट (>=10fps) वाले वीडियो ट्रैक को प्राथमिकता दें. इससे यह पक्का होता है कि प्लेयर, मोशन फ़ोटो से निकाले गए MP4 में 'असली' वीडियो ट्रैक को चुनता है. इनमें दो HEVC ट्रैक हो सकते हैं. इनमें से एक ट्रैक का रिज़ॉल्यूशन ज़्यादा होता है, लेकिन फ़्रेम की संख्या बहुत कम होती है (#1051).
- डेटा निकालने वाले टूल:
- WAV फ़ाइलों से, अजीब साइज़ वाले चंक पढ़ते समय पैडिंग को स्किप न करने की समस्या को ठीक किया गया है (#1117).
- MP3:
Format.averageBitrateको मेटाडेटा फ़्रेम से भरें. जैसे,XINGऔरVBRI. - MPEG-TS: इस बदलाव को पहले जैसा किया गया है. इस बदलाव का मकसद यह पक्का करना था कि स्ट्रीम की आखिरी ऐक्सेस यूनिट को सैंपल क्यू में भेजकर, आखिरी फ़्रेम रेंडर किया जाए (#7909). ऐसा इसलिए हुआ है, क्योंकि इस बदलाव की वजह से, सिर्फ़ आई-फ़्रेम वाली HLS स्ट्रीम (#1150) और H.262 HLS स्ट्रीम (#1126) में नई समस्याएं आ रही हैं.
- ऑडियो:
- अगर ऑडियो ट्रैक, ऑफ़लोड मोड में शुरू नहीं हो पाता है, तो ऑफ़लोड की सुविधा बंद करके रेंडरर को ठीक करने की अनुमति दें.
- वीडियो:
- Galaxy Tab S7 FE, Chromecast with Google TV, और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को ठीक करने के लिए वर्कअराउंड जोड़ा गया है. इस समस्या की वजह से, 60fps H265 स्ट्रीम को 'इस डिवाइस पर नहीं चलाया जा सकता' के तौर पर मार्क किया जाता है
- एक ऐसा तरीका जोड़ा गया है जिससे टनलिंग के दौरान पहला फ़्रेम हमेशा रेंडर होता है. भले ही, डिवाइस एपीआई की ज़रूरत के मुताबिक ऐसा अपने-आप न करता हो (#1169). (#966).
- उस समस्या को ठीक किया गया है जिसमें एचडीआर कलर की जानकारी को हैंडल करने की वजह से कोडेक ठीक से काम नहीं करता था. साथ ही, एसडीआर वीडियो ट्रैक के लिए अडैप्टिव फ़ॉर्मैट स्विच को रोकता था (#1158).
- टेक्स्ट:
- WebVTT: एक के बाद एक आने वाले क्यू से,
CuesWithTimingके फ़र्ज़ी अतिरिक्त इंस्टेंस बनने से रोकेंWebvttParser.parse(#1177).
- WebVTT: एक के बाद एक आने वाले क्यू से,
- DRM:
- Android 14 वाले कुछ डिवाइसों पर,
ResourceBusyExceptionयाNotProvisionedExceptionके बजायMediaDrmफ़्रेमवर्क से जनरेट होने वालीNoSuchMethodErrorको ठीक किया गया है (#1145).
- Android 14 वाले कुछ डिवाइसों पर,
- असर:
- कलर स्पेस बदलकर, PQ से एसडीआर टोन-मैपिंग को बेहतर बनाया गया है.
- सेशन:
- यूआई:
- अगर
Localeडिसप्ले नेम की पहचान नहीं कर पाता है, तो ऑडियो ट्रैक की भाषा का नाम शामिल करने के लिए फ़ॉलबैक करें (#988).
- अगर
- DASH एक्सटेंशन:
- मेनिफ़ेस्ट से सभी
Labelएलिमेंट कोFormat.labelsमें पॉप्युलेट करें (#1054).
- मेनिफ़ेस्ट से सभी
- आरटीएसपी एक्सटेंशन:
- एसडीपी पार्सिंग में, सेशन की जानकारी के खाली मान (i-टैग) छोड़ें (#1087).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
- MIDI एक्सटेंशन को डिफ़ॉल्ट रूप से, लोकल डिपेंडेंसी के तौर पर बंद करें. ऐसा इसलिए, क्योंकि इसे कॉन्फ़िगर करने के लिए, एक अतिरिक्त Maven रिपॉज़िटरी की ज़रूरत होती है. जिन उपयोगकर्ताओं को लोकल डिपेंडेंसी से इस मॉड्यूल की ज़रूरत है वे इसे फिर से चालू कर सकते हैं.
वर्शन 1.3.0
6 मार्च, 2024
androidx.media3:media3-*:1.3.0 रिलीज़ हो गया है. वर्शन 1.3.0 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
android.resource://package/[type/]nameraw resource यूआरआई के लिए सहायता लागू करें, जहांpackage, मौजूदा ऐप्लिकेशन के पैकेज से अलग हो. यह सुविधा हमेशा से काम करती है, लेकिन इसे अब तक सही तरीके से लागू नहीं किया गया था.- ऐप्लिकेशन कोड से सेट किए गए MIME टाइप या मीडिया से पढ़े गए MIME टाइप को पूरी तरह से छोटे अक्षरों में बदलता है.
AdPlaybackStateमें, सिंगलUriके बजाय पूरेMediaItemके साथ विज्ञापन तय करें.minSdkको 19 (Android KitKat) पर सेट करें. यह AndroidX की अन्य सभी लाइब्रेरी के साथ काम करता है. साथ ही, AndroidX की डिपेंडेंसी के नए वर्शन पर अपग्रेड करने के लिए, यह ज़रूरी है.- जब
artworkUriऔरartworkDataमें से कम से कम एक की वैल्यू मौजूद हो, तबMediaMetadata.Builder.populate(MediaMetadata)में दोनों प्रॉपर्टी की वैल्यू भरें (#964).
- ExoPlayer:
PreloadMediaSourceऔरPreloadMediaPeriodजोड़ें. इससे ऐप्लिकेशन, कॉन्टेंट मीडिया सोर्स को किसी खास शुरुआती पोज़िशन पर प्रीलोड कर सकते हैं. ऐसा, कॉन्टेंट चलाने से पहले किया जाता है.PreloadMediaSource, कॉन्टेंट मीडिया सोर्स कोTimelineपाने के लिए तैयार करता है. साथ ही, दी गई शुरुआती पोज़िशन पर अवधि को तैयार और कैश करता है. इसके अलावा, यह अवधि के लिए ट्रैक चुनता है और मीडिया डेटा लोड करता है. ऐप्लिकेशन,PreloadMediaSource.PreloadControlको लागू करके प्रीलोडिंग की प्रोसेस को कंट्रोल करते हैं. साथ ही, प्रीलोड किए गए सोर्स को प्लेयर पर सेट करते हैं, ताकि उसे चलाया जा सके.- ऐसी
ExoPlayer.setImageOutputजोड़ें जिससे ऐप्लिकेशन,ImageRenderer.ImageOutputसेट कर सकें. DefaultRenderersFactoryअब डिफ़ॉल्ट रूप से प्लेयर कोImageRendererउपलब्ध कराता है. इसमेंImageOutputऔरImageDecoder.Factory.DEFAULTकी वैल्यू शून्य होती है.- साइलेंट मोड को स्किप करने पर,
Player.Listener.onPositionDiscontinuityइवेंट को ट्रिगर करें (#765). - एक्सट्रैक्शन के दौरान सबटाइटल पार्स करने की सुविधा को एक्सपेरिमेंट के तौर पर जोड़ा गया है.
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()का इस्तेमाल करके, इस सुविधा को चालू किया जा सकता है. PreloadMediaSourceकी मदद से, अडैप्टिव मीडिया सोर्स के लिए सहायता जोड़ी गई.- HttpEngine API का इस्तेमाल करके,
HttpDataSourceकोHttpEngineDataSourceके तौर पर लागू करें. - सबक्लासिंग
CompositeSequenceableLoaderको रोकें. इस कॉम्पोनेंट को पहले एक्सटेंड किया जा सकता था, लेकिन इसे कभी भी लाइब्रेरी में सबक्लास नहीं किया गया. डेकोरेटर पैटर्न का इस्तेमाल करके किसी इंस्टेंस को रैप करके और कस्टमCompositeSequenceableLoaderFactoryलागू करके, पसंद के मुताबिक बनाया जा सकता है. - उस समस्या को ठीक किया गया है जिसमें एक ही समय को दोहराने पर, इस आइटम का मेटाडेटा मिट जाता था (#1007).
experimentalSetSubtitleParserFactoryऔरDefaultHlsExtractorFactoryपर मौजूदexperimentalSetSubtitleParserFactoryतरीकों का नाम बदलकरsetSubtitleParserFactoryकर दिया गया है. साथ ही,nullको पास करने की अनुमति नहीं है.BundledChunkExtractor.Factoryपार्सिंग के तरीके को कंट्रोल करने के लिए,experimentalParseSubtitlesDuringExtraction(boolean)के नए तरीकों का इस्तेमाल करें.- डेटा निकालने के दौरान इस्तेमाल किए गए
SubtitleParser.Factoryको पसंद के मुताबिक बनाने की सुविधा जोड़ी गई. इसके लिए,MediaSource.Factory.setSubtitleParserFactory()का इस्तेमाल करें. MergingMediaSourceसे जनरेट किए गए सभीFormat.idफ़ील्ड में सोर्स प्रीफ़िक्स जोड़ें. इससे यह पता लगाने में मदद मिलती है कि किस सोर्स नेFormat(#883) बनाया है.- कस्टम Common Media Client Data (CMCD) के मुख्य नामों की पुष्टि करने के लिए इस्तेमाल किए गए रेगुलर एक्सप्रेशन को ठीक किया गया है. इसके लिए, रेगुलर एक्सप्रेशन में बदलाव करके, सिर्फ़ हाइफ़न की जांच करने की सुविधा जोड़ी गई है (#1028).
- सीएमसीडी क्वेरी पैरामीटर की डबल-कोडिंग बंद की गई (#1075).
- ट्रांसफ़ॉर्मर:
- H.265/HEVC SEF फ़ॉर्मैट में स्लो मोशन वाले वीडियो को फ़्लैट करने की सुविधा जोड़ी गई है.
- ट्रांसमक्सिंग की स्पीड बढ़ाएं. खास तौर पर, 'वीडियो हटाएं' बदलावों के लिए.
- एपीआई जोड़ें, ताकि आउटपुट फ़ाइल वीडियो फ़्रेम से शुरू हो. इससे, ट्रिम करने की कार्रवाइयों का आउटपुट, प्लेयर के उन वर्शन के साथ ज़्यादा बेहतर तरीके से काम कर सकता है जो वीडियो के पहले फ़्रेम को तब तक नहीं दिखाते, जब तक उसका प्रज़ेंटेशन टाइमस्टैंप (#829) नहीं आ जाता.
- एकल ऐसेट MP4 ट्रिम ऑपरेशन को ऑप्टिमाइज़ करने की सुविधा जोड़ी गई.
- यह पक्का करने के लिए कि वीडियो फ़्रेम में आउटपुट फ़ाइल का पहला टाइमस्टैंप हो, सहायता जोड़ी गई. iOS पर आधारित प्लेयर में, आउटपुट फ़ाइलों की शुरुआत में दिखने वाले ब्लैक फ़्रेम की समस्या ठीक की गई (#829).
- ट्रैक के विकल्प:
- इमेज ट्रैक चुनने की सुविधा चालू करने के लिए,
DefaultTrackSelector.selectImageTrackजोड़ें. - अगर इमेज ट्रैक और वीडियो ट्रैक, दोनों उपलब्ध हैं, तो इमेज ट्रैक को चुना जाना चाहिए या नहीं, यह तय करने के लिए
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledजोड़ें. डिफ़ॉल्ट वैल्यूfalseहोती है. इसका मतलब है कि वीडियो ट्रैक को चुनने को प्राथमिकता दी जाती है.
- इमेज ट्रैक चुनने की सुविधा चालू करने के लिए,
- डेटा निकालने वाले टूल:
- MP4 एक्सट्रैक्टर में AV1C पार्सिंग की सुविधा जोड़ी गई है, ताकि
ColorInfo.colorSpace,ColorInfo.colorTransfer, औरColorInfo.colorRangeवैल्यू (#692) वापस पाई जा सकें. - MP3:
Infoहेडर वाली फ़ाइलों के लिए, स्थिर बिटरेट (सीबीआर) सीकिंग का इस्तेमाल करें. यहXingहेडर के सीबीआर के बराबर होता है. इससे पहले, हमInfoहेडर से seek table का इस्तेमाल करते थे. हालांकि, इससे seek करने की सुविधा कम सटीक होती है. ऐसा तब होता है, जब हम इसे अनदेखा करते हैं और यह मान लेते हैं कि फ़ाइल CBR है. - MPEG2-TS: DTS, DTS-LBR, और DTS:X Profile2 के लिए सहायता जोड़ी गई (#275).
- टीएस डिस्क्रिप्टर से ऑडियो टाइप एक्सट्रैक्ट किए गए हैं और उन्हें भूमिका के फ़्लैग पर मैप किया गया है. इससे उपयोगकर्ता, ऑडियो ट्रैक के बारे में बेहतर जानकारी पाकर उन्हें चुन सकते हैं (#973).
- MP4 एक्सट्रैक्टर में AV1C पार्सिंग की सुविधा जोड़ी गई है, ताकि
- ऑडियो:
- आवाज़ न होने वाले हिस्सों को स्किप करने वाले एल्गोरिदम को बेहतर बनाया गया है. इससे वॉल्यूम में अचानक बदलाव नहीं होता. साथ ही, आवाज़ न होने वाले हिस्सों की अवधि को कम किया गया है और उन्हें ज़्यादा नैचुरल बनाया गया है (#7423).
- आवाज़ बंद करने की सुविधा को स्किप करने की रिपोर्ट ज़्यादा सटीक तरीके से भेजें (#1035).
- वीडियो:
MediaCodecVideoRendererकंस्ट्रक्टर को बदलें. यहVideoFrameProcessor.Factoryआर्ग्युमेंट लेता है. इसे ऐसे कंस्ट्रक्टर से बदलें जोVideoSinkProviderआर्ग्युमेंट लेता है. जिन ऐप्लिकेशन को कस्टमVideoFrameProcessor.Factoryइंजेक्ट करना है वे कस्टमVideoFrameProcessor.Factoryका इस्तेमाल करने वालेCompositingVideoSinkProviderको इंस्टैंशिएट कर सकते हैं. साथ ही, वीडियो सिंक प्रोवाइडर कोMediaCodecVideoRendererपास कर सकते हैं.
- टेक्स्ट:
- बिटमैप के सीरियल बनाने की प्रोसेस से जुड़ी गड़बड़ी को ठीक किया गया है, ताकि
Tried to marshall a Parcel that contained Binder objectsगड़बड़ी को ठीक किया जा सके. यह गड़बड़ी,DefaultExtractorsFactory.setTextTrackTranscodingEnabledका इस्तेमाल करते समय होती है (#836). - CEA-708:
rowLockवैल्यू को अनदेखा करें. CEA-708-E S-2023 स्पेसिफ़िकेशन के मुताबिक,rowLockऔरcolumnLock, दोनों को सही माना जाना चाहिए. भले ही, स्ट्रीम में मौजूद वैल्यू कुछ भी हों.columnLockकी सुविधा लागू नहीं की गई है. इसलिए, इसे हमेशा गलत माना जाता है.
- बिटमैप के सीरियल बनाने की प्रोसेस से जुड़ी गड़बड़ी को ठीक किया गया है, ताकि
- इमेज:
- DASH थंबनेल के लिए सहायता जोड़ी गई. ग्रिड इमेज को काट-छांट दिया जाता है और अलग-अलग थंबनेल, वीडियो में उनके दिखने के समय के आस-पास दिखाए जाते हैं.
ImageOutput
- DASH थंबनेल के लिए सहायता जोड़ी गई. ग्रिड इमेज को काट-छांट दिया जाता है और अलग-अलग थंबनेल, वीडियो में उनके दिखने के समय के आस-पास दिखाए जाते हैं.
- DRM:
- DRM कॉन्टेंट में, 'क्लियर लीड' के बिना एन्क्रिप्ट (सुरक्षित) किए गए सैंपल को डिफ़ॉल्ट रूप से तुरंत चलाएं. भले ही, बाद में एन्क्रिप्ट (सुरक्षित) किए गए सैंपल के लिए कुंजियां अभी तैयार न हों. ऐसा हो सकता है कि वीडियो चलाने के दौरान, एन्क्रिप्ट (सुरक्षित) किए गए सैंपल तक पहुंचने पर, वीडियो रुक जाए. हालांकि, ऐसा तब होगा, जब कुंजियां अब भी तैयार नहीं होंगी. इससे पहले, वीडियो इस पॉइंट पर शुरू ही नहीं होता था. इस सुविधा को बंद करने के लिए,
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyयाDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeysका इस्तेमाल करें.- IMA एक्सटेंशन:
- उस समस्या को ठीक किया गया है जिसमें सही फ़ाइल एक्सटेंशन के बिना DASH और HLS विज्ञापनों को नहीं चलाया जा सकता था.
- DRM कॉन्टेंट में, 'क्लियर लीड' के बिना एन्क्रिप्ट (सुरक्षित) किए गए सैंपल को डिफ़ॉल्ट रूप से तुरंत चलाएं. भले ही, बाद में एन्क्रिप्ट (सुरक्षित) किए गए सैंपल के लिए कुंजियां अभी तैयार न हों. ऐसा हो सकता है कि वीडियो चलाने के दौरान, एन्क्रिप्ट (सुरक्षित) किए गए सैंपल तक पहुंचने पर, वीडियो रुक जाए. हालांकि, ऐसा तब होगा, जब कुंजियां अब भी तैयार नहीं होंगी. इससे पहले, वीडियो इस पॉइंट पर शुरू ही नहीं होता था. इस सुविधा को बंद करने के लिए,
- सेशन:
- टीवी ऐप्लिकेशन के लिए, दो बार क्लिक करने का पता लगाने की सुविधा बंद करें (#962).
- उस समस्या को ठीक किया गया है जिसमें सिर्फ़ नॉन-नल एक्स्ट्रा के साथ
MediaItem.RequestMetadataको मीडिया कंट्रोलर और सेशन के बीच ट्रांसमिट नहीं किया जाता है. MediaLibrarySession.Builderमें ऐसा कंस्ट्रक्टर जोड़ें जोMediaLibraryServiceके बजाय सिर्फ़Contextलेता हो.
- एचएलएस एक्सटेंशन:
HlsMediaPeriodको पैकेज-प्राइवेट विज़िबिलिटी पर कम करें. इस टाइप पर, HLS पैकेज के बाहर से सीधे तौर पर निर्भर नहीं रहना चाहिए.- Resolve seeks to beginning of a segment more efficiently (#1031).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
- एमआईडीआई डिकोडर: SysEx इवेंट मैसेज अनदेखा करें (#710).
- टेस्ट यूटिलिटी:
TestPlayerRunHelper.playUntilPositionमें वीडियो चलने की सुविधा को न रोकें. इस टेस्ट में, वीडियो को चालू रखा जाता है. हालांकि, जब तक टेस्ट में दावे और अन्य कार्रवाइयां नहीं जोड़ी जातीं, तब तक वीडियो की प्रोग्रेस को रोक दिया जाता है.
- डेमो ऐप्लिकेशन:
- शॉर्ट वीडियो के इस्तेमाल के उदाहरण के साथ
PreloadMediaSourceके इस्तेमाल का डेमो देने के लिए, शॉर्ट वीडियो का डेमो मॉड्यूल जोड़ें.
- शॉर्ट वीडियो के इस्तेमाल के उदाहरण के साथ
वर्शन 1.3.0-rc01
22 फ़रवरी, 2024
1.3.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.3.0-beta01
7 फ़रवरी, 2024
1.3.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.3.0-alpha01
15 जनवरी, 2024
1.3.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.2.0
वर्शन 1.2.1
9 जनवरी, 2024
- ExoPlayer:
- उस समस्या को ठीक किया गया है जिसमें
LiveConfiguration.min/maxOffsetरेंज से बाहर मैन्युअल तरीके से खोज करने पर, ऑफ़सेट को वापसmin/maxOffsetपर अडजस्ट किया जाता था. - OPUS और VORBIS के चैनल लेआउट से जुड़ी समस्या ठीक की गई है. यह समस्या 3, 5, 6, 7, और 8 चैनलों के लिए थी (#8396).
- उस समस्या को ठीक किया गया है जिसमें लाइव स्ट्रीम में शून्य पर सीक करने के बाद ट्रैक चुनने पर, स्ट्रीम गलत तरीके से अपनी डिफ़ॉल्ट पोज़िशन से शुरू हो जाती थी (#9347).
- उस समस्या को ठीक किया गया है जिसमें
CmcdData.Factoryके नए इंस्टेंस को, चंक सोर्स सेbufferedDurationUsके लिए नेगेटिव वैल्यू मिल रही थीं. इस वजह से,IllegalArgumentException(#888) की समस्या आ रही थी.
- उस समस्या को ठीक किया गया है जिसमें
- ट्रांसफ़ॉर्मर:
- इस समस्या को ठीक किया गया है. इसमें, ज़्यादा ऑपरेटिंग रेट सेट करने की वजह से, कॉन्फ़िगरेशन के समय एनकोडर काम नहीं करता था.
- डेटा निकालने वाले टूल:
- JPEG मोशन फ़ोटो में मौजूद सेकंडरी (चलाए न जा सकने वाले) HEVC ट्रैक को
ROLE_FLAG_ALTERNATEके तौर पर मार्क करें. इससे, ज़्यादा रिज़ॉल्यूशन होने की वजह से, उन्हें अपने-आप चलने के लिए नहीं चुना जाएगा. - TS H264 स्ट्रीम के लिए, गलत कीफ़्रेम का पता लगाने की समस्या को ठीक किया गया है (#864).
- 47,721 सेकंड से ज़्यादा लंबी टीएस स्ट्रीम की अवधि के अनुमान को ठीक किया गया है (#855).
- JPEG मोशन फ़ोटो में मौजूद सेकंडरी (चलाए न जा सकने वाले) HEVC ट्रैक को
- ऑडियो:
SilenceSkippingAudioProcessorको कई बार कॉल किए जाने पर, ईओएस को हैंडल करने की समस्या ठीक की गई (#712).
- वीडियो:
- Galaxy Tab S7 FE, Chromecast with Google TV, और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया है. इस समस्या की वजह से, 60fps AVC स्ट्रीम को 'काम नहीं करता' के तौर पर मार्क किया जाता है (#693).
- मेटाडेटा:
- उस बग को ठीक किया गया है जिसमें
MediaMetadataसिर्फ़ उन Vorbis टिप्पणियों से भरा जाता था जिनमें बड़े अक्षरों वाले कुंजियां होती थीं (#876). - बहुत बड़े ID3 फ़्रेम को पार्स करते समय
OutOfMemoryErrorको पकड़ता है. इसका मतलब है कि टैग की जानकारी के बिना भी ऑडियो चलाया जा सकता है. ऐसा तब होता है, जब ऑडियो पूरी तरह से नहीं चल पाता.
- उस बग को ठीक किया गया है जिसमें
- DRM:
- एपीआई 33 और इसके बाद के वर्शन के लिए, फ़र्ज़ी ClearKey
https://default.urlलाइसेंस यूआरएल से जुड़ी समस्या को ठीक करने के तरीके को बेहतर बनाया गया है. इससे पहले, यह तरीका सिर्फ़ एपीआई 33 पर लागू होता था (#837). - जब प्लेयर से जुड़ा कोई डिसप्ले न हो, तब एन्क्रिप्ट (सुरक्षित) किए गए कॉन्टेंट से साफ़ तौर पर दिखने वाले कॉन्टेंट पर स्विच करते समय,
ERROR_DRM_SESSION_NOT_OPENEDको ठीक करें. यह गड़बड़ी, साफ़ तौर पर दिखने वाले कॉन्टेंट को चलाने के लिए, सुरक्षित डिकोडर का गलत तरीके से इस्तेमाल करने की वजह से हुई है.
- एपीआई 33 और इसके बाद के वर्शन के लिए, फ़र्ज़ी ClearKey
- सेशन:
- कस्टम कुंजियों और वैल्यू को
MediaMetadataCompatमेंMediaMetadata.extrasऔरMediaMetadata.extrasमेंMediaMetadataCompat(#756, #802) रखें. - लेगसी कंट्रोलर के लिए, ब्रॉडकास्ट करने की सुविधा से जुड़ी समस्या ठीक की गई है
(#644).
notifyChildrenChanged - हमने एक गड़बड़ी को ठीक किया है. इस गड़बड़ी की वजह से, सूचना के लिए बंद किए गए
setWhenटाइमर के लिए नेगेटिव समय सेट करने पर, कुछ डिवाइसों पर ऐप्लिकेशन क्रैश हो जाता था (#903). IllegalStateExceptionको ठीक किया गया है. यह समस्या तब होती है, जब पहली सूचना अपडेट करने का अनुरोध किया जाता है और मीडिया सूचना कंट्रोलर कनेक्ट नहीं होता है (#917).
- कस्टम कुंजियों और वैल्यू को
- यूआई:
- DASH एक्सटेंशन:
- DASH मेनिफ़ेस्ट में Dolby के लिए, चैनल की संख्या के तौर पर "f800" को 5 के तौर पर पार्स किया गया (#688).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
- कास्ट एक्सटेंशन:
Timelineबनाने की प्रोसेस को बेहतर बनाया गया है, ताकि कास्ट किए गए डिवाइस पर मीडिया लोड न होने पर ऐप्लिकेशन क्रैश न हो (#708).
वर्शन 1.2.0
15 नवंबर, 2023
- कॉमन लाइब्रेरी:
@Nullable Throwableइंटरफ़ेस में मौजूद तरीकों में@Nullable Throwableपैरामीटर जोड़ें.Log.Loggerइन तरीकों के लिएmessageपैरामीटर में अबLog.{d,i,w,e}()तरीकों को पास किए गएThrowableके बारे में कोई जानकारी नहीं होती है. इसलिए, अगर चाहें, तो लागू करने वाले लोगों को यह जानकारी मैन्युअल तरीके से जोड़नी होगी. इसके लिए,Logger.appendThrowableString(String, Throwable)का इस्तेमाल किया जा सकता है.- Kotlin के साथ काम करने से जुड़ी समस्या को ठीक किया गया है. इसमें, नल वैल्यू स्वीकार करने वाले सामान्य टाइप पैरामीटर और नल वैल्यू स्वीकार करने वाले ऐरे एलिमेंट टाइप को नल वैल्यू स्वीकार करने वाले टाइप के तौर पर नहीं पहचाना जाता है. उदाहरण के लिए,
TrackSelectorResultऔरSimpleDecoder, सामान लौटाने के तरीके के पैरामीटर हैं (#6792). Util.shouldShowPlayButtonमें डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) और सूचना के व्यवहार में बदलाव करें, ताकि ऑडियो फ़ोकस के अस्थायी तौर पर बंद होने की वजह से, कॉन्टेंट के चलने पर "चलाएं" बटन दिखे.PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)याMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213) का इस्तेमाल करके, लेगसी वर्शन के व्यवहार को बनाए रखा जा सकता है.- https://issuetracker.google.com/251172715 को ठीक करने के लिए,
androidx.annotation:annotation-experimentalको1.3.1पर अपग्रेड करें. ExoPlayer.setAudioAttributesकोPlayerइंटरफ़ेस पर ले जाएं.
- ExoPlayer:
- AC4 स्ट्रीम में सीकिंग से जुड़ी समस्याओं को ठीक किया गया है. ये समस्याएं, सिर्फ़ डिकोड किए जाने वाले सैंपल की सही पहचान न होने की वजह से होती हैं (#11000).
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutputके ज़रिए इस सुविधा को चालू करने पर, ऐसे ऑडियो आउटपुट डिवाइसों पर वीडियो चलाने की सुविधा बंद कर दी जाएगी जो वीडियो चलाने के लिए सही नहीं हैं. जैसे, Wear OS डिवाइसों पर मौजूद बिल्ट-इन स्पीकर. अगर ऑडियो चलाने के लिए कोई सही आउटपुट उपलब्ध नहीं है या ऑडियो चलाने के दौरान सभी सही आउटपुट डिसकनेक्ट हो जाते हैं, तो ऑडियो चलाने की सुविधा बंद होने की वजह कोPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTके तौर पर अपडेट किया जाएगा. सही आउटपुट कनेक्ट होने पर, जवाब न दिखने की वजह हट जाएगी.Player.replaceMediaItem(s)के ज़रिएMediaItemअपडेट स्वीकार करने के लिए,MediaSource.canUpdateMediaItemऔरMediaSource.updateMediaItemजोड़ें.Player.replaceMediaItem(s)के ज़रिए लाइब्रेरी से मिली सभीMediaSourceक्लास के लिए,MediaItemअपडेट करने की अनुमति दें (#33, #9978).MimeTypes.TEXT_EXOPLAYER_CUESका नाम बदलकरMimeTypes.APPLICATION_MEDIA3_CUESकरें.PngExtractorजोड़ें. यह पूरी PNG फ़ाइल कोTrackOutputमें एक सैंपल के तौर पर भेजता और पढ़ता है.SequenceableLoader.continueLoading(long)इंटरफ़ेस मेंSequenceableLoader.continueLoading(long)तरीके को बेहतर बनाया गया है, ताकिSequenceableLoader.continueLoading(LoadingInfo loadingInfo).SequenceableLoaderLoadingInfoमें अतिरिक्त पैरामीटर शामिल हैं. इनमें मौजूदाplaybackPositionUsके अलावा,playbackSpeedऔरlastRebufferRealtimeMsभी शामिल हैं.ChunkSourceइंटरफ़ेस मेंChunkSource.getNextChunk(long, long, List, ChunkHolder)तरीके को बेहतर बनाया गया है, ताकिChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).- कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) लॉगिंग में ये फ़ील्ड जोड़े गए हैं: बफ़र स्टार्वेशन (
bs), समयसीमा (dl), चलाने की स्पीड (pr), और स्टार्टअप (su) (#8699). ColorInfo(#491) में ल्यूमा और क्रोमा बिटडेप्थ जोड़ें.- कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) लॉगिंग में ये फ़ील्ड जोड़े गए हैं: अगले ऑब्जेक्ट का अनुरोध (
nor) और अगली रेंज का अनुरोध (nrr) (#8699). - क्वेरी पैरामीटर (#553) का इस्तेमाल करके, Common Media Client Data (CMCD) डेटा ट्रांसमिट करने की सुविधा जोड़ी गई.
ExperimentalBandwidthMeterमेंConcurrentModificationExceptionठीक करें (#612).MediaPeriodIdमेंMediaPeriodIdपैरामीटर जोड़ें.CompositeMediaSource.getMediaTimeForChildMediaTimeClippingMediaSourceऔर अन्य सोर्स में, अवधि/विंडो के समय के ऑफ़सेट के साथConcatenatingMediaSource2(#11226) के लिए सहायता.BaseRenderer.onStreamChanged()को बदलकरMediaPeriodIdभी पाएं.
- ट्रांसफ़ॉर्मर:
- इमेज इनपुट के लिए, EXIF रोटेशन डेटा को पार्स करता है.
TransformationRequest.HdrModeएनोटेशन टाइप और उससे जुड़े कॉन्स्टेंट हटाएं. इसके बजाय,Composition.HdrModeऔर इससे जुड़े कॉन्स्टेंट का इस्तेमाल करें.- रोटेशन से जुड़ी समस्याओं को ठीक करने के लिए,
OverlaySettingsको आसान बनाएं. SampleConsumer.queueInputBitmapकेframeRateऔरdurationUsपैरामीटर कोTimestampIteratorमें बदल दिया गया है.
- ट्रैक के विकल्प:
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessजोड़ें, ताकि नॉन-सीमलेस अडैप्टेशन की अनुमति दी जा सके या उसे अस्वीकार किया जा सके. डिफ़ॉल्ट सेटिंग में,trueके तौर पर काम करने का मौजूदा तरीका बना रहता है.
- डेटा निकालने वाले टूल:
- MPEG-TS: पक्का करें कि स्ट्रीम की आखिरी ऐक्सेस यूनिट को सैंपल क्यू में पास करके, आखिरी फ़्रेम रेंडर किया गया हो (#7909).
rotationDegreesतय करते समय, टाइपिंग की गलती को ठीक करें.projectionPosePitchकोprojectionPoseRoll(#461) में बदला गया.- यह मानकर न चलें कि
Extractorइंस्टेंस की सीधे तौर परinstanceofसे जांच की जा सकती है. अगर आपको किसीExtractorकी लागू करने से जुड़ी जानकारी का रनटाइम ऐक्सेस चाहिए, तो आपको सबसे पहलेExtractor.getUnderlyingInstanceको कॉल करना होगा. BmpExtractorजोड़ें.WebpExtractorजोड़ें.HeifExtractorजोड़ें.Mp4Extractorमें, QuickTime classic के साथ काम करने की सुविधा जोड़ी गई.
- ऑडियो:
- MP4 और Matroska में 24/32-बिट बिग-एंडियन पीसीएम के लिए सहायता जोड़ी गई है. साथ ही, MP4 में
lpcmके लिए पीसीएम एन्कोडिंग पार्स की गई है. - MP4 फ़ाइल से Vorbis ऑडियो निकालने की सुविधा जोड़ी गई.
AudioSink.getFormatOffloadSupport(Format)जोड़ें. यहAudioSink.getFormatOffloadSupport(Format)के ज़रिए, फ़ॉर्मैट के लिए सिंक की ओर से ऑफ़लोडिंग की सुविधा के लेवल को वापस लाता है.DefaultAudioOffloadSupportProviderयहAudioOffloadSupportकी नई वैल्यू दिखाता है, जिसमेंisFormatSupported,isGaplessSupported, औरisSpeedChangeSupportedशामिल हैं.AudioSink.setOffloadMode()जोड़ें, जिसकी मदद से ऑडियो सिंक पर ऑफलोड कॉन्फ़िगरेशन को कॉन्फ़िगर किया जाता है. डिफ़ॉल्ट वैल्यूAudioSink.OFFLOAD_MODE_DISABLEDहै.TrackSelectionParametersमेंsetAudioOffloadPreferenceके ज़रिए, ऑफ़लोड करने की सुविधा चालू की जा सकती है. अगर सेट की गई प्राथमिकता के मुताबिक, ऑडियो ऑफलोड की सुविधा चालू करनी है, डिवाइस पर उस फ़ॉर्मैट के लिए ऑडियो ऑफलोड की सुविधा काम करती है, और ट्रैक के तौर पर सिर्फ़ एक ऑडियो ट्रैक चुना गया है, तो ऑडियो ऑफलोड की सुविधा चालू हो जाएगी.- अगर
audioOffloadModePreferenceकोAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIREDपर सेट किया जाता है, तोDefaultTrackSelectorसिर्फ़ एक ऑडियो ट्रैक चुनेगा. ऐसा सिर्फ़ तब होगा, जब उस ट्रैक का फ़ॉर्मैट, ऑफ़लोडिंग की सुविधा के साथ काम करता हो. अगर ऑफलोड किए गए वीडियो में कोई भी ऑडियो ट्रैक काम नहीं करता है, तो कोई भी ट्रैक नहीं चुना जाएगा. - ट्रैक ट्रांज़िशन के बाद, प्लेबैक की पोज़िशन से जुड़ी समस्या की वजह से, एपीआई लेवल 33 से पहले के वर्शन के लिए, ऑफ़लोडिंग के दौरान बिना रुकावट के चलने की सुविधा बंद कर दी गई है.
DefaultRenderersFactory.buildAudioSinkमेथड के सिग्नेचर सेenableOffloadपैरामीटर हटाएं.DefaultAudioSink.Builder.setOffloadModeको हटाएं.- intdef वैल्यू
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLEDहटाएं. - ऑफ़लोड किए गए कॉन्टेंट को चलाने के दौरान, Opus gapless मेटाडेटा के लिए सहायता जोड़ी गई.
- पहली बार लिखने में गड़बड़ी होने पर, ऑफ़लोड करने की सुविधा बंद करके रेंडरर को वापस लाने की अनुमति दें (#627).
- सिर्फ़-ऑडियो वाले ऑफ़लोड किए गए कॉन्टेंट को चलाने के लिए, ऑफ़लोड करने की शेड्यूलिंग की सुविधा डिफ़ॉल्ट रूप से चालू करें.
ExoPlayer.experimentalSetOffloadSchedulingEnabledऔरAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChangedको मिटाएं.onExperimentalSleepingForOffloadChangedका नाम बदलकरonSleepingForOffloadChangedऔरonExperimentalOffloadedPlaybackका नाम बदलकरonOffloadedPlaybackकर दिया गया है.- ऑडियो ऑफ़लोड मोड से जुड़े
TrackSelectionParametersइंटरफ़ेस और परिभाषाओं को इनरAudioOffloadPreferencesक्लास में ले जाएं. AnalyticsListener,AudioRendererEventListener, औरAudioSink.ListenerमेंonAudioTrackInitializedऔरonAudioTrackReleasedकॉलबैक जोड़ें.- DTS Express में ऑडियो बफ़र अंडरफ़्लो की समस्या ठीक की गई है (#650).
- उस गड़बड़ी को ठीक किया गया है जिसमें E-AC3-JOC के लिए, क्षमता की जांच करने पर
IllegalArgumentException(#677) दिखता है.
- MP4 और Matroska में 24/32-बिट बिग-एंडियन पीसीएम के लिए सहायता जोड़ी गई है. साथ ही, MP4 में
- वीडियो:
MediaCodecVideoRendererको कस्टमVideoFrameProcessor.Factoryइस्तेमाल करने की अनुमति दें.- उस गड़बड़ी को ठीक किया गया है जिसमें ऑडियो स्ट्रीम के नेगेटिव टाइमस्टैंप से शुरू होने पर, पहला फ़्रेम रेंडर नहीं किया जा सकता था (#291).
- टेक्स्ट:
ExoplayerCuesDecoderहटाएं.sampleMimeType = application/x-media3-cuesवाले टेक्स्ट ट्रैक को अब सीधे तौर परTextRendererमैनेज करता है. इसके लिए,SubtitleDecoderइंस्टेंस की ज़रूरत नहीं होती.
- मेटाडेटा:
MetadataDecoder.decodeको अब "decode-only" सैंपल के लिए कॉल नहीं किया जाएगा, क्योंकि लागू करने पर, यह हमेशा शून्य वैल्यू दिखाता है.
- असर:
- टाइमस्टैंप के हिसाब से,
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)बिटमैप इनपुट को कतार में जोड़ता है. VideoFrameProcessor.registerInputStream()को नॉन-ब्लॉकिंग में बदलें. ऐप्लिकेशन मेंVideoFrameProcessor.Listener#onInputStreamRegistered()लागू होना चाहिए.VideoFrameProcessor.queueInputBitmapकेframeRateऔरdurationUsपैरामीटर कोTimestampIteratorमें बदल दिया गया है.
- टाइमस्टैंप के हिसाब से,
- IMA एक्सटेंशन:
- उस बग को ठीक किया गया है जिसकी वजह से, प्लेलिस्ट में पहले आइटम के तौर पर शामिल न की गई मल्टी-पीरियड डैश लाइव स्ट्रीम में अपवाद (#571) दिख सकता है.
AdsLoader.destroy()को कॉल करने से पहले, StreamManager को रिलीज़ करें- IMA SDK के वर्शन को 3.31.0 पर अपग्रेड किया गया.
- सेशन:
DefaultMediaNotificationProviderमें सूचनाओं की फ़ोरग्राउंड सेवा के व्यवहार कोFOREGROUND_SERVICE_IMMEDIATEपर सेट करें (#167).- Samsung डिवाइसों पर, बंद किए गए एपीआई से जुड़ी समस्याओं से बचने के लिए, सिर्फ़
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()का इस्तेमाल करें. यह एपीआई 31 से ऊपर के वर्शन के लिए उपलब्ध है (#167). - मीडिया सूचना कंट्रोलर का इस्तेमाल प्रॉक्सी के तौर पर करें, ताकि उपलब्ध कमांड और कस्टम लेआउट सेट किया जा सके. इसका इस्तेमाल सूचना और प्लैटफ़ॉर्म सेशन को पॉप्युलेट करने के लिए किया जाता है.
- मीडिया बटन से जुड़े उन इवेंट को Media3 में
MediaSessionService.onStartCommand()के ज़रिए मैनेज किया जाता है जो प्लैटफ़ॉर्म सेशन पर रूट होने के बजाय Media3 को मिलते हैं. इससे, कॉल करने वाले व्यक्ति का कंट्रोलर हमेशा मीडिया सूचना कंट्रोलर होता है. साथ ही, ऐप्लिकेशन सूचना से आने वाले कॉल को आसानी से पहचान सकते हैं. ऐसा सभी एपीआई लेवल पर एक ही तरीके से किया जा सकता है. - उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी
MediaSessionCompatसे कनेक्ट होने पर,MediaController.getCurrentPosition()आगे नहीं बढ़ रहा था. - आसानी के लिए
MediaLibrarySession.getSubscribedControllers(mediaId)जोड़ें. MediaLibrarySession.Callback.onSubscribe()को बदलकर, उस पैरंट आईडी की उपलब्धता की पुष्टि करें जिसके लिए कंट्रोलर ने सदस्यता ली है. अगर यह प्रोसेस पूरी हो जाती है, तो सदस्यता स्वीकार कर ली जाती है. इसके बाद, ब्राउज़र को सूचना देने के लिएnotifyChildrenChanged()को तुरंत कॉल किया जाता है (#561).- Automotive OS के लिए सेशन डेमो मॉड्यूल जोड़ें और Android Auto के लिए सेशन डेमो चालू करें.
- मीडिया नोटिफ़िकेशन कंट्रोलर के लिए
COMMAND_GET_TIMELINEउपलब्ध न होने पर, फ़्रेमवर्क सेशन की कतार सेट न करें. Android Auto को क्लाइंट कंट्रोलर के तौर पर इस्तेमाल करने पर, फ़्रेमवर्क सेशन से डेटा पढ़ा जाता है. इससे Android Auto के यूज़र इंटरफ़ेस (यूआई) मेंqueueबटन नहीं दिखता (#339). - डिफ़ॉल्ट रूप से
SimpleBitmapLoaderके बजायDataSourceBitmapLoaderका इस्तेमाल करें (#271, #327). MediaSession.Callback.onMediaButtonEvent(Intent)जोड़ें, ताकि ऐप्लिकेशन मीडिया बटन के इवेंट हैंडलिंग के डिफ़ॉल्ट तरीके को बदल सकें.
- यूआई:
- Wear OS डिवाइसों के लिए
Player.Listenerलागू करें.इससेPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTकी वजह से होने वाले प्लेबैक को रोका जा सकेगा. इसके लिए, सिस्टम डायलॉग लॉन्च किया जाएगा, ताकि उपयोगकर्ता ऑडियो आउटपुट (जैसे, ब्लूटूथ हेडफ़ोन) को कनेक्ट कर सके. अगर कॉन्फ़िगर किए गए टाइम आउट (डिफ़ॉल्ट रूप से पांच मिनट) के अंदर कोई सही डिवाइस कनेक्ट होता है, तो सुनने वाले व्यक्ति के डिवाइस पर संगीत अपने-आप चलने लगेगा.
- Wear OS डिवाइसों के लिए
- डाउनलोड:
- Android 14 के साथ काम करने के लिए,
DownloadServiceके लिए "डेटा सिंक" फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इस सेवा का इस्तेमाल करते समय, ऐप्लिकेशन को मेनिफ़ेस्ट मेंdataSyncकोforegroundServiceTypeके तौर पर जोड़ना होगा. साथ ही,FOREGROUND_SERVICE_DATA_SYNCअनुमति (#11239) जोड़नी होगी.
- Android 14 के साथ काम करने के लिए,
- एचएलएस एक्सटेंशन:
- एचएलएस लाइव प्लेलिस्ट को रीफ़्रेश करने के लिए, आखिरी बार लोड होने के समय के बजाय, आखिरी बार लोड होने के शुरू होने के समय के आधार पर तय किए गए इंटरवल का इस्तेमाल किया जाता है (#663).
- DASH एक्सटेंशन:
- सेगमेंट टेंप्लेट यूआरएल में, एक से ज़्यादा बार एक ही DASH आइडेंटिफ़ायर का इस्तेमाल करने की अनुमति देता है.
- एक्सट्रैक्शन के दौरान सबटाइटल पार्स करने की सुविधा को एक्सपेरिमेंट के तौर पर जोड़ा गया है. इसमें ओवरलैप होने वाले सबटाइटल को मर्ज करने की सुविधा बेहतर तरीके से काम करती है. साथ ही, सबटाइटल सेगमेंट के बीच ट्रांज़िशन करते समय होने वाली फ़्लिकरिंग की समस्या को ठीक किया जाता है.
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288) का इस्तेमाल करके, इस सुविधा को चालू किया जा सकता है.
- आरटीएसपी एक्सटेंशन:
- रेस कंडीशन की समस्या ठीक की गई है. इससे टीसीपी पर वापस आने पर
IndexOutOfBoundsExceptionकी समस्या हो सकती थी या कुछ मामलों में वीडियो रुक सकता था. RtspMediaPeriod(#577) की लोडिंग की स्थिति वापस लाते समय, आरटीएसपी सेटअप में स्थिति की जांच करें.- Options रिस्पॉन्स के सार्वजनिक हेडर में, कस्टम आरटीएसपी अनुरोध के तरीकों को अनदेखा करें (#613).
- RTSP Setup Response timeout value का इस्तेमाल, RTSP Options के अनुरोधों को भेजने के समय अंतराल में करें keep-alive RTSP Options requests (#662).
- रेस कंडीशन की समस्या ठीक की गई है. इससे टीसीपी पर वापस आने पर
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
- एमआईडीआई डीकोडर मॉड्यूल रिलीज़ किया गया है. यह Jsyn लाइब्रेरी का इस्तेमाल करके, स्टैंडर्ड एमआईडीआई फ़ाइलों को चलाने की सुविधा देता है. इससे ऑडियो को सिंथेसाइज़ किया जा सकता है.
DecoderOutputBuffer.shouldBeSkippedजोड़कर, उन आउटपुट बफ़र को सीधे तौर पर मार्क करें जिन्हें दिखाने की ज़रूरत नहीं है. इसेC.BUFFER_FLAG_DECODE_ONLYके बजाय इस्तेमाल करने का सुझाव दिया जाता है.C.BUFFER_FLAG_DECODE_ONLYको बंद कर दिया जाएगा.Decoder.setOutputStartTimeUsऔरSimpleDecoder.isAtLeastOutputStartTimeUsको जोड़ें, ताकि डिकोडर, शुरू होने के समय से पहले सिर्फ़ डिकोड किए गए सैंपल छोड़ सकें. इसेBuffer.isDecodeOnlyके बजाय इस्तेमाल करना चाहिए, क्योंकिBuffer.isDecodeOnlyको बंद कर दिया जाएगा.- एमआईडीआई डिकोडर आर्टफ़ैक्ट को Maven रिपॉज़िटरी में पब्लिश करने से जुड़ी गड़बड़ी को ठीक किया गया है. आर्टफ़ैक्ट का नाम बदलकर
media3-exoplayer-midiकर दिया गया है #734.
- लीन्बैक एक्सटेंशन:
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, किसी प्लैटफ़ॉर्म को बंद करने पर Leanback कोड में
ArithmeticExceptionआ सकता था (#617).
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, किसी प्लैटफ़ॉर्म को बंद करने पर Leanback कोड में
- टेस्ट यूटिलिटी:
TestExoPlayerBuilderऔरFakeClockको Espresso यूज़र इंटरफ़ेस (यूआई) टेस्ट और Compose यूज़र इंटरफ़ेस (यूआई) टेस्ट के साथ काम करने लायक बनाएं. इस अपडेट में, उस गड़बड़ी को ठीक किया गया है जिसमें Espresso या Compose व्यू इंटरैक्शन के दौरान, वीडियो अपने-आप आगे बढ़ जाता था.
- हटाए गए सिंबल हटाएं:
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)औरTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)हटाएं. इसके बजाय,Composition.Builder.setHdrMode(int)का इस्तेमाल करें औरCompositionकोTransformer.start(Composition, String)पर पास करें.- अब काम न करने वाले
DownloadNotificationHelper.buildProgressNotificationतरीके को हटाएं. इसके बजाय, ऐसे तरीके का इस्तेमाल करें जो अब भी काम करता है और जिसमेंnotMetRequirementsपैरामीटर का इस्तेमाल किया जाता है.
वर्शन 1.2.0-rc01
1 नवंबर, 2023
स्टेबल वर्शन 1.2.0 का इस्तेमाल करें.
वर्शन 1.2.0-beta01
19 अक्टूबर, 2023
स्टेबल वर्शन 1.2.0 का इस्तेमाल करें.
वर्शन 1.2.0-alpha02
29 सितंबर, 2023
स्टेबल वर्शन 1.2.0 का इस्तेमाल करें.
वर्शन 1.2.0-alpha01
17 अगस्त, 2023
स्टेबल वर्शन 1.2.0 का इस्तेमाल करें.
वर्शन 1.1.0
वर्शन 1.1.1
16 अगस्त, 2023
- कॉमन लाइब्रेरी:
- सभी मॉड्यूल से, गलती से जोड़ी गई
multidexडिपेंडेंसी को हटाएं (#499).
- सभी मॉड्यूल से, गलती से जोड़ी गई
- ExoPlayer:
PlaybackStatsListenerमें मौजूद उस समस्या को ठीक किया गया है जिसमें प्लेलिस्ट मिटाने के बाद, फ़र्ज़ीPlaybackStatsबन जाते थे.- कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) लॉगिंग में ये फ़ील्ड जोड़े गए हैं: स्ट्रीमिंग फ़ॉर्मैट (sf), स्ट्रीम टाइप (st), वर्शन (v), टॉप बिटरेट (tb), ऑब्जेक्ट की अवधि (d), मेज़र किया गया थ्रूपुट (mtp), और ऑब्जेक्ट टाइप (ot) (#8699).
- ऑडियो:
- एक गड़बड़ी को ठीक किया गया है. इसमें बहुत छोटी फ़ाइलें चलाने पर,
Player.getState()कभी भीSTATE_ENDEDमें नहीं बदलता था (#538).
- एक गड़बड़ी को ठीक किया गया है. इसमें बहुत छोटी फ़ाइलें चलाने पर,
- ऑडियो ऑफ़लोडिंग:
- RFC 7845 के मुताबिक, बिटस्ट्रीम में Ogg ID हेडर और Comment हेडर पेजों को जोड़ता है, ताकि Opus को ऑफ़लोड किया जा सके.
- वीडियो:
- H.265/HEVC: एसपीएस शॉर्ट और लॉन्ग टर्म रेफ़रंस फ़ोटो की जानकारी को पार्स करने से जुड़ी समस्या ठीक की गई.
- टेक्स्ट:
- CEA-608: क्यू के टेक्स्ट को छोटा करने के लॉजिक में बदलाव किया गया है. अब सिर्फ़ दिखने वाले टेक्स्ट को ध्यान में रखा जाएगा. पहले, इंडेंट और टैब ऑफ़सेट को तब शामिल किया जाता था, जब क्यू की लंबाई को 32 वर्णों तक सीमित किया जाता था. यह तकनीकी तौर पर स्पेसिफ़िकेशन के हिसाब से सही था (#11019).
- IMA एक्सटेंशन:
- IMA SDK के वर्शन को 3.30.3 पर अपग्रेड किया गया.
- सेशन:
- कंट्रोलर की स्थिति में कस्टम लेआउट जोड़ें और इसे ऐक्सेस करने के लिए, गेटर उपलब्ध कराएं. कस्टम लेआउट में बदलाव होने पर,
MediaController.Listener.onCustomLayoutChangedको कॉल किया जाता है. जिन ऐप्लिकेशन को अलग-अलग Media3 कंट्रोलर को अलग-अलग कस्टम लेआउट भेजने हैं वेMediaSession.Callback.onConnectमें ऐसा कर सकते हैं. इसके लिए, उन्हेंMediaSession.Callback.onConnectका इस्तेमाल करना होगा, ताकि यह पक्का किया जा सके कि कनेक्शन पूरा होने पर कंट्रोलर के लिए कस्टम लेआउट उपलब्ध हो.AcceptedResultBuilder - उन मामलों को ठीक किया गया है जिनमें
MediaLibraryServiceLegacyStubनेResultको ऐसी गड़बड़ी भेजी थी जो इस सुविधा के साथ काम नहीं करती थी. इससेUnsupportedOperationException(#78) गड़बड़ी हुई थी. PlayerWrapperकेVolumeProviderCompatबनाने के तरीके को ठीक किया गया है. इसके लिए, लेगसी कमांड (COMMAND_ADJUST_DEVICE_VOLUMEऔरCOMMAND_SET_DEVICE_VOLUME) और नई कमांड (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSऔरCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS), दोनों के ज़रिएvolumeControlTypeतय किया गया है (#554).
- कंट्रोलर की स्थिति में कस्टम लेआउट जोड़ें और इसे ऐक्सेस करने के लिए, गेटर उपलब्ध कराएं. कस्टम लेआउट में बदलाव होने पर,
वर्शन 1.1.0
5 जुलाई, 2023
- कॉमन लाइब्रेरी:
- अनुपयुक्त ऑडियो रूट के लिए, ऑडियो को दबाने की वजह जोड़ें और तैयार होने पर चलाएं ऑडियो को बहुत देर तक दबाने की वजह बदलें. (#15).
- प्लेयर में निर्देश जोड़ना:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Player में ओवरलोड किए गए ऐसे तरीके जोड़ें जिनसे उपयोगकर्ता वॉल्यूम फ़्लैग तय कर सकें:
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
DeviceInfoके लिएBuilderजोड़ा गया और मौजूदा कंस्ट्रक्टर को बंद कर दिया गया.- रिमोट प्लेबैक के लिए, रूटिंग कंट्रोलर का आईडी तय करने के लिए
DeviceInfo.routingControllerIdजोड़ें. - एक ही जगह पर आइटम जोड़ने और हटाने के लिए,
Player.replaceMediaItem(s)को शॉर्टकट के तौर पर जोड़ें (#8046).
- ExoPlayer:
- ExoPlayer को डिवाइस के वॉल्यूम कंट्रोल करने के तरीकों को सिर्फ़ तब कंट्रोल करने की अनुमति दें, जब आपने साफ़ तौर पर ऑप्ट इन किया हो.
ExoPlayer.Builder.setDeviceVolumeControlEnabledका इस्तेमाल करके, इन चीज़ों का ऐक्सेस पाएं:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)औरsetDeviceVolume(int, int)increaseDeviceVolume(int)औरincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)औरdecreaseDeviceVolume(int, int)
FilteringMediaSourceजोड़ें. इससेMediaSourceमें उपलब्ध ट्रैक टाइप को फ़िल्टर किया जा सकेगा.- अब अडेप्टिव स्ट्रीमिंग फ़ॉर्मैट DASH, HLS, और SmoothStreaming के आउटगोइंग अनुरोधों में, कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) शामिल किया जा सकता है. इन फ़ील्ड को शामिल किया गया है:
br,bl,cid,rtp, औरsid(#8699). एपीआई स्ट्रक्चर और एपीआई के तरीके:- सीएमसीडी लॉगिंग डिफ़ॉल्ट रूप से बंद होती है. इसे चालू करने के लिए,
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)का इस्तेमाल करें. - डिफ़ॉल्ट रूप से सभी कुंजियां चालू होती हैं. लॉग की गई कुंजियों को फ़िल्टर करने के लिए,
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)को बदलें. - कस्टम कुंजी लॉगिंग की सुविधा चालू करने के लिए,
CmcdConfiguration.RequestConfig.getCustomData()को ओवरराइड करें.
- सीएमसीडी लॉगिंग डिफ़ॉल्ट रूप से बंद होती है. इसे चालू करने के लिए,
- मुख्य डेमो के मेनिफ़ेस्ट में एक और कार्रवाई जोड़ी गई है, ताकि कस्टम
*.exolist.jsonफ़ाइल के साथ डेमो ऐप्लिकेशन को आसानी से शुरू किया जा सके (#439). - वीडियो चलाने के दौरान
Effectका इस्तेमाल करने के लिएExoPlayer.setVideoEffects()जोड़ें. sourceIdकोintके बजायlongके तौर पर सेव करने के लिए,SampleQueueअपडेट करें. इससे सार्वजनिक तरीकोंSampleQueue.sourceIdऔरSampleQueue.peekSourceIdके सिग्नेचर बदल जाते हैं.LoadControlतरीकोंshouldStartPlaybackऔरonTracksSelectedमें ऐसे पैरामीटर जोड़ें जिनकी मदद से, इन तरीकों को काम केMediaPeriodसे जोड़ा जा सके.ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)के सिग्नेचर में बदलाव करें. इसके लिए, टाइमलाइन पैरामीटर जोड़ें. इसमें मैप में कुंजियों के तौर पर इस्तेमाल किए गए यूआईडी वाले पीरियड शामिल होते हैं. यह मल्टी-पीरियड लाइव स्ट्रीम के साथ एक साथ होने वाली समस्याओं से बचने के लिए ज़रूरी है.EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)औरBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)का इस्तेमाल बंद कर दिया गया है. इसके बजाय,mediaTimeOffsetUsके बिना तरीकों के वैरिएंट को कॉल किया जा सकता है. ध्यान दें कि अब बंद हो चुके वैरिएंट के लिए भी, डिस्पैचर से भेजे गएMediaLoadDataऑब्जेक्ट केstartTimeUsऔरendTimeUsमें ऑफ़सेट नहीं जोड़ा जाता है.ExoTrackSelection.blacklistका नाम बदलकरexcludeTrackऔरisBlacklistedका नाम बदलकरisTrackExcludedकर दो.- खाली प्लेलिस्ट पर कॉल किए जाने पर,
ExoPlayer.setMediaItem(s)औरaddMediaItem(s)के बीच अलग-अलग व्यवहार की समस्या ठीक की गई.
- ExoPlayer को डिवाइस के वॉल्यूम कंट्रोल करने के तरीकों को सिर्फ़ तब कंट्रोल करने की अनुमति दें, जब आपने साफ़ तौर पर ऑप्ट इन किया हो.
- ट्रांसफ़ॉर्मर:
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)हटाएं. इसके बजाय,ExoPlayerAssetLoader.Factory(MediaSource.Factory)औरTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)का इस्तेमाल करें.Transformer.startTransformation(MediaItem, ParcelFileDescriptor)हटाएं.- उस गड़बड़ी को ठीक किया गया है जिसमें वीडियो स्ट्रीम के खत्म होने का सिग्नल मिलने के दौरान, इनपुट फ़्रेम को प्रोसेस करने में समय लग सकता था. इससे मक्सर टाइमआउट हो जाता था.
- ज़्यादा डिवाइसों पर काम करने के लिए,
findDecoder/EncoderForFormatयूटिलिटी का इस्तेमाल करने के बजाय,MediaCodecListके ज़रिए कोडेक के बारे में क्वेरी करें. DefaultEncoderFactoryमें B-फ़्रेम कॉन्फ़िगरेशन हटाएं, क्योंकि यह कुछ डिवाइसों पर काम नहीं करता.
- ट्रैक चुनने की सुविधा:
- जो डिफ़ॉल्ट रूप से बंद होती है, उसे चालू करें
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeजोड़ें. इस विकल्प के चालू होने पर, रेंडरर की क्षमताओं में बदलाव होने पर,DefaultTrackSelectorनया ट्रैक चुनने की सुविधा ट्रिगर होगी.
- जो डिफ़ॉल्ट रूप से बंद होती है, उसे चालू करें
- डेटा निकालने वाले टूल:
- ऑडियो:
- उस गड़बड़ी को ठीक किया गया है जिसमें टनलिंग चालू होने पर, कुछ वीडियो नहीं चलते थे.साथ ही,
AudioProcessorsचालू थे. उदाहरण के लिए, बिना किसी रुकावट के वीडियो ट्रिम करने की सुविधा (#10847). - सीधे तौर पर चलाए जाने वाले वीडियो (ऑफ़लोड) में, ओग पैकेट में ओपस फ़्रेम को शामिल करें.
- स्लीप मोड के दौरान, ऑफ़लोड शेड्यूल करने की सुविधा की मदद से मौजूदा जगह का अनुमान लगाएं.
- खिलाड़ी के लाइफ़साइकल के आखिर में, संसाधनों को रिलीज़ करने के लिए
Renderer.release()औरAudioSink.release()जोड़ें. DefaultAudioSinkमें ऑडियो से जुड़ी सुविधाओं में होने वाले बदलावों के बारे में सूचनाएं पाएं.DefaultAudioSinkके कंस्ट्रक्टर में ज़रूरी पैरामीटरcontextजोड़ें. इससेDefaultAudioSink,AudioCapabilitiesReceiverके लिसनर के तौर पर रजिस्टर हो जाएगा. साथ ही, क्षमता में बदलाव होने पर,audioCapabilitiesप्रॉपर्टी को अपडेट कर देगा.onAudioCapabilitiesChangedइंटरफ़ेस में नए इवेंट औरRendererCapabilities.Listenerनए इंटरफ़ेस के ज़रिए, ऑडियो की सुविधाओं में हुए बदलावों को लागू करें. इससेonRendererCapabilitiesChangedइवेंट ट्रिगर होते हैं.AudioSink.Listener- ऑडियो चैनलों पर स्केलिंग/मिक्सिंग लागू करने के लिए,
ChannelMixingAudioProcessorजोड़ा गया. - ऑडियो की सुविधाओं में बदलाव होने के बाद, बाईपास मोड चालू होने पर ऑडियो डिकोडर को बंद करने के लिए,
DecoderDiscardReasonsमें नई पूर्णांक वैल्यूDISCARD_REASON_AUDIO_BYPASS_POSSIBLEजोड़ें. - DTS Express और DTS:X के लिए, सीधे तौर पर वीडियो चलाने की सुविधा जोड़ी गई है (#335).
- उस गड़बड़ी को ठीक किया गया है जिसमें टनलिंग चालू होने पर, कुछ वीडियो नहीं चलते थे.साथ ही,
- वीडियो:
- रेंडरर के बंद होने पर,
MediaCodecVideoRendererको चौड़ाई और ऊंचाई 0 वालीVideoSizeरिपोर्ट करने के लिए कहें.Player.Listener.onVideoSizeChangedमें बदलाव होने पर,Player.Listener.onVideoSizeChangedको कॉल किया जाता है.Player.getVideoSize()इस बदलाव के बाद,MediaCodecVideoRendererके साथ ExoPlayer के वीडियो का साइज़ 0 होता है. ऐसा तब होता है, जबMediaCodecVideoRendererवीडियो के साथ काम नहीं करता या वीडियो ट्रैक का साइज़ अब तक तय नहीं किया गया है.Player.getCurrentTracks
- रेंडरर के बंद होने पर,
- DRM:
DefaultDrmSessionपर, सिर्फ़ इंटरनल इस्तेमाल के लिए उपलब्ध कई तरीकों की विज़िबिलिटी कम करें. इन तरीकों को DRM पैकेज के बाहर से कॉल नहीं किया जाना चाहिए:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Muxer:
- एक नई मक्सर लाइब्रेरी जोड़ी गई है. इसका इस्तेमाल MP4 कंटेनर फ़ाइल बनाने के लिए किया जा सकता है.
- IMA एक्सटेंशन:
- डीएआई के लिए, एक से ज़्यादा अवधि वाली लाइव डीएएसएच स्ट्रीम चालू करें. कृपया ध्यान दें कि फ़िलहाल, लाइव स्ट्रीम में आगे-पीछे करने की सुविधा काम नहीं करती (#10912).
- उस बग को ठीक किया गया है जिसकी वजह से लाइव स्ट्रीम में नया विज्ञापन ग्रुप डाला जाता था. ऐसा इसलिए होता था, क्योंकि लगातार टाइमलाइन में कॉन्टेंट की कैलकुलेट की गई पोज़िशन में थोड़ा अंतर होता था.
- सेशन:
MediaSession.getControllerForCurrentRequestहेल्पर मेथड जोड़ें, ताकि उस कंट्रोलर के बारे में जानकारी मिल सके जो फ़िलहालPlayerमेथड को कॉल कर रहा है.androidx.media3.session.MediaButtonReceiverको जोड़ें, ताकि ऐप्लिकेशन, मीडिया बटन के इवेंट के साथ कॉन्टेंट को फिर से चलाने की सुविधा लागू कर सकें. ये इवेंट, ब्लूटूथ हेडसेट जैसे डिवाइस भेजते हैं (#167).MediaSession.Callback.onAddMediaItemsमें डिफ़ॉल्ट सेटिंग लागू करने की सुविधा जोड़ी गई है, ताकि अनुरोध किए गएMediaItemsकोPlayerमें पास किया जा सके. ऐसा तब होगा, जब उनमेंLocalConfiguration(जैसे कि यूआरआई) मौजूद हो (#282).- Android 12 और इससे पहले के वर्शन के लिए, मीडिया सूचना के कॉम्पैक्ट व्यू में डिफ़ॉल्ट रूप से "पिछले पर जाएं" और "अगले पर जाएं" कमांड बटन जोड़ें (#410).
MediaSession.Callback.onAddMediaItemsमें डिफ़ॉल्ट सेटिंग लागू करने की सुविधा जोड़ी गई है, ताकि अनुरोध किए गएMediaItemsकोPlayerमें पास किया जा सके. ऐसा तब होगा, जब उनमेंLocalConfiguration(जैसे कि यूआरआई) मौजूद हो (#282).- Android 12 और इससे पहले के वर्शन के लिए, मीडिया सूचना के कॉम्पैक्ट व्यू में डिफ़ॉल्ट रूप से "पिछले पर जाएं" और "अगले पर जाएं" कमांड बटन जोड़ें (#410).
- यूआई:
- प्ले/रोकें बटन के साथ कस्टम यूज़र इंटरफ़ेस (यूआई) एलिमेंट लिखने के लिए, Util के
shouldShowPlayButtonऔरhandlePlayPauseButtonActionतरीके जोड़ें.
- प्ले/रोकें बटन के साथ कस्टम यूज़र इंटरफ़ेस (यूआई) एलिमेंट लिखने के लिए, Util के
- आरटीएसपी एक्सटेंशन:
- DASH एक्सटेंशन:
- एक से ज़्यादा समयावधि वाली DASH स्ट्रीम के लिए,
MediaLoadData.startTimeMsऔरMediaLoadData.endTimeMsसे मीडिया टाइम ऑफ़सेट हटाएं. - लाइव डैश मीडिया सोर्स को फिर से तैयार करने पर,
IndexOutOfBoundsException(#10838) वाली गड़बड़ी को ठीक किया गया है.
- एक से ज़्यादा समयावधि वाली DASH स्ट्रीम के लिए,
- एचएलएस एक्सटेंशन:
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)जोड़ें, ताकि लोडिंग थ्रेड के लिए टाइम आउट सेट किया जा सके. इससेTimestampAdjusterके शुरू होने तक इंतज़ार किया जा सकेगा. अगर टाइम आउट से पहले शुरू नहीं होता है, तोPlaybackExceptionको थ्रो किया जाता है, ताकि वीडियो को लगातार बफ़र होने से रोका जा सके. डिफ़ॉल्ट रूप से, टाइम आउट को शून्य पर सेट किया जाता है (#323).
- टेस्ट यूटिलिटी:
DataSourceContractTestमें यूआरआई स्कीम के केस-इनसेंसिटिव होने की जांच करें.
- हटाए गए सिंबल हटाएं:
DefaultAudioSinkकंस्ट्रक्टर हटाएं और इसके बजायDefaultAudioSink.Builderका इस्तेमाल करें.HlsMasterPlaylistको हटाएं और इसके बजायHlsMultivariantPlaylistका इस्तेमाल करें.Player.stop(boolean)हटाएं. इसके बजाय,Player.stop()औरPlayer.clearMediaItems()(अगरresettrueहै) का इस्तेमाल करें.- बंद किए गए दो
SimpleCacheकंस्ट्रक्टर हटाएं. बेहतर परफ़ॉर्मेंस के लिए, बंद नहीं किए गए ऐसे कंस्ट्रक्टर का इस्तेमाल करें जोDatabaseProviderलेता हो. DefaultBandwidthMeterकंस्ट्रक्टर हटाएं. इसके बजाय,DefaultBandwidthMeter.Builderका इस्तेमाल करें.DefaultDrmSessionManagerकंस्ट्रक्टर हटाएं और इसके बजायDefaultDrmSessionManager.Builderका इस्तेमाल करें.- अब काम नहीं करने वाले दो
HttpDataSource.InvalidResponseCodeExceptionकंस्ट्रक्टर हटा दिए गए हैं. गड़बड़ी की लॉगिंग को बेहतर बनाने के लिए, अब काम करने वाले ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अतिरिक्त फ़ील्ड(cause,responseBody) स्वीकार करता है. DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDash, औरDownloadHelper.forSmoothStreamingहटाएं. इसके बजाय,DownloadHelper.forMediaItemका इस्तेमाल करें.- अब काम नहीं करने वाले
DownloadServiceकंस्ट्रक्टर को हटाएं. इसके बजाय, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अब भी काम करता है. इसमेंchannelDescriptionResourceIdपैरामीटर देने का विकल्प शामिल होता है. - Charsets के लिए, बंद किए गए स्ट्रिंग कॉन्स्टेंट (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAME, औरUTF16LE_NAME) हटाएं. इसके बजाय,kotlin.textपैकेज,java.nio.charset.StandardCharsetsयाcom.google.common.base.Charsetsसे Kotlin Charsets का इस्तेमाल करें. - अब काम नहीं करने वाले
WorkManagerSchedulerकंस्ट्रक्टर को हटाएं. इसके बजाय, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अब भी काम करता है. इसमेंContextपैरामीटर देने का विकल्प शामिल होता है. - बंद किए गए
createVideoSampleFormat,createAudioSampleFormat,createContainerFormat, औरcreateSampleFormatतरीकों को हटाएं. इनका इस्तेमालFormatक्लास को इंस्टैंटिएट करने के लिए किया जाता था. इसके बजाय,Formatके इंस्टेंस बनाने के लिएFormat.Builderका इस्तेमाल करें. - अब काम न करने वाले
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateऔरcopyWithVideoSizeतरीकों को हटाएं. इसके बजाय,Format.buildUpon()और सेटर तरीकों का इस्तेमाल करें. - इस्तेमाल बंद किए जा चुके
ExoPlayer.retry()को हटाएं. इसके बजाय,prepare()का इस्तेमाल करें. - बंद किए गए ज़ीरो-आर्ग
DefaultTrackSelectorकंस्ट्रक्टर को हटाएं. इसके बजाय,DefaultTrackSelector(Context)का इस्तेमाल करें. - इस्तेमाल बंद किए गए
OfflineLicenseHelperकंस्ट्रक्टर को हटाएं. इसके बजाय,OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)का इस्तेमाल करें. - इस्तेमाल बंद किए गए
DownloadManagerकंस्ट्रक्टर को हटाएं. इसके बजाय,DownloadManagerलेने वाले कंस्ट्रक्टर का इस्तेमाल करें.Executor - इस्तेमाल बंद किए जा चुके
Cueकंस्ट्रक्टर हटाएं. इसके बजाय,Cue.Builderका इस्तेमाल करें. - इस्तेमाल बंद किए गए
OfflineLicenseHelperकंस्ट्रक्टर को हटाएं. इसके बजाय,OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)का इस्तेमाल करें. - बंद किए गए चार
AnalyticsListenerतरीकों को हटाएं:onDecoderEnabledके बजाय,onAudioEnabledऔर/याonVideoEnabledका इस्तेमाल करें.onDecoderInitializedके बजाय,onAudioDecoderInitializedऔर/याonVideoDecoderInitializedका इस्तेमाल करें.onDecoderInputFormatChangedके बजाय,onAudioInputFormatChangedऔर/याonVideoInputFormatChangedका इस्तेमाल करें.onDecoderDisabledके बजाय,onAudioDisabledऔर/याonVideoDisabledका इस्तेमाल करें.
- हटाए गए
Player.Listener.onSeekProcessedऔरAnalyticsListener.onSeekProcessedको हटाएं. इसके बजाय,DISCONTINUITY_REASON_SEEKके साथonPositionDiscontinuityका इस्तेमाल करें. ExoPlayer.setHandleWakeLock(boolean)हटाएं और इसके बजायsetWakeMode(int)का इस्तेमाल करें.- बहिष्कृत किए गए
DefaultLoadControl.Builder.createDefaultLoadControl()को हटाएं. इसके बजाय,build()का इस्तेमाल करें. - इस्तेमाल बंद किए जा चुके
MediaItem.PlaybackPropertiesको हटाएं. इसके बजाय,MediaItem.LocalConfigurationका इस्तेमाल करें.MediaItem.playbackPropertiesएट्रिब्यूट की वैल्यू के तौर पर दिया गया फ़ील्ड अबMediaItem.LocalConfigurationटाइप का है.
वर्शन 1.1.0-rc01
21 जून, 2023
1.1.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.1.0-beta01
7 जून, 2023
1.1.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.1.0-alpha01
10 मई, 2023
1.1.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.0.0
वर्शन 1.0.2
18 मई, 2023
androidx.media3:media3-*:1.0.2 रिलीज़ हो गया है. वर्शन 1.0.2 में ये बदलाव शामिल हैं.
यह रिलीज़, ExoPlayer 2.18.7 रिलीज़ से जुड़ी है.
1.0.1 रिलीज़ के बाद से, इस रिलीज़ में ये बदलाव किए गए हैं:
- कोर लाइब्रेरी:
Buffer.isLastSample()एट्रिब्यूट जोड़ें. इससे पता चलता है किBufferमें फ़्लैगC.BUFFER_FLAG_LAST_SAMPLEशामिल है या नहीं.- उस समस्या को ठीक किया गया है जिसमें फ़्रेम वाले आखिरी सैंपल को 'स्ट्रीम खत्म' सैंपल पढ़े बिना डीक्यू किए जाने पर, आखिरी फ़्रेम रेंडर नहीं होता था. (#11079).
- डेटा निकालने वाले टूल:
- MPEG-TS फ़ाइलों में H.265 SPS को पार्स करने की समस्या ठीक की गई है. इसके लिए, RTSP और MP4 एक्सट्रैक्टर के लिए पहले से इस्तेमाल किए जा रहे पार्सिंग लॉजिक का फिर से इस्तेमाल किया गया है (#303).
- टेक्स्ट:
- एसएसए: अगर UTF-16 फ़ाइलें बाइट ऑर्डर मार्क से शुरू होती हैं, तो उनके लिए सहायता जोड़ें (#319).
- सेशन:
- उस समस्या को ठीक किया गया है जिसमें
MediaController, लेगसीMediaSessionCompatसे कनेक्ट होने पर उपलब्ध कमांड अपडेट नहीं करता था. लेगसीMediaSessionCompat, कार्रवाइयों को अपडेट करता है. - उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, सिस्टम यूज़र इंटरफ़ेस (यूआई) से
params.isRecent == trueको किए गए कॉल के लिए,MediaLibraryServiceशून्य वैल्यू नहीं दिखा रहा था. यह गड़बड़ी, एपीआई लेवल 30 परparams.isRecent == trueके साथ हो रही थी (#355).Callback.onGetLibraryRoot MediaSessionServiceयाMediaLibraryServiceकी मेमोरी लीक की समस्या ठीक की गई (#346).- उस गड़बड़ी को ठीक किया गया है जिसमें
MediaSessionमेंTimelineऔर पोज़िशन अपडेट करने पर,MediaControllerसेIllegalStateExceptionमिल सकता है.
- उस समस्या को ठीक किया गया है जिसमें
वर्शन 1.0.1
18 अप्रैल, 2023
androidx.media3:media3-*:1.0.1 रिलीज़ हो गया है. वर्शन 1.0.1 में ये बदलाव शामिल हैं.
यह रिलीज़, ExoPlayer 2.18.6 रिलीज़ से जुड़ी है.
- कोर लाइब्रेरी:
- डिफ़ॉल्ट पोज़िशन पर जाने पर, टारगेट लाइव स्ट्रीम को ओवरराइड करने की सुविधा को रीसेट करता है (#11051).
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से मीडिया में खाली सैंपल स्ट्रीम होने पर, प्लेबैक अटक जाता था.
- सेशन:
- उस बग को ठीक किया गया है जिसमें लेगसी
MediaSessionCompatसे पब्लिश किए गए एक जैसे कई आइटम की वजह सेMediaControllerमें अपवाद दिखता है (#290). MediaSession.broadcastCustomCommandको लेगसीMediaControllerCompat.Callback.onSessionEventपर फ़ॉरवर्ड करने की सुविधा जोड़ें (#293).- उस गड़बड़ी को ठीक किया गया है जिसमें
MediaSession.setPlayerको कॉल करने पर, उपलब्ध निर्देश अपडेट नहीं होते थे. - उस समस्या को ठीक किया गया है जिसमें
TrackSelectionOverrideइंस्टेंस,MediaControllerसे भेजे जाते हैं, लेकिन उन्हें अनदेखा कर दिया जाता है. ऐसा तब होता है, जब वेFormat.metadata(#296) वाले ग्रुप का रेफ़रंस देते हैं. - उस समस्या को ठीक किया गया है जिसमें लेगसी
MediaSessionCompatके ज़रिए मेटाडेटा ऐक्सेस करने के लिए,Player.COMMAND_GET_CURRENT_MEDIA_ITEMका उपलब्ध होना ज़रूरी है. - उस समस्या को ठीक किया गया है जिसमें बैकग्राउंड थ्रेड पर
MediaSessionइंस्टेंस का इस्तेमाल करने पर,MediaSessionServiceमें क्रैश होने की समस्या आती थी (#318). - उस समस्या को ठीक किया गया है जिसमें लाइब्रेरी ने मीडिया बटन रिसीवर का एलान किया था, जबकि ऐप्लिकेशन ने ऐसा नहीं किया था (#314).
- उस बग को ठीक किया गया है जिसमें लेगसी
- डैश:
- खाली सेगमेंट की टाइमलाइन को हैंडल करने से जुड़ी समस्या ठीक की गई है (#11014).
- RTSP:
- अगर यूडीपी के साथ RTSP सेटअप करने पर, RTSP Error 461 UnsupportedTransport (#11069) की गड़बड़ी होती है, तो टीसीपी के साथ फिर से कोशिश करें.
वर्शन 1.0.0
22 मार्च, 2023
androidx.media3:media3-*:1.0.0 रिलीज़ हो गया है. वर्शन 1.0.0 में ये बदलाव शामिल हैं.
यह रिलीज़, ExoPlayer 2.18.5 रिलीज़ से जुड़ी है.
1.0.0-rc02 के बाद से कोई बदलाव नहीं हुआ है.
वर्शन 1.0.0-rc02
2 मार्च, 2023
androidx.media3:media3-*:1.0.0-rc02 रिलीज़ हो गया है. वर्शन 1.0.0-rc02 में ये बदलाव शामिल हैं.
यह रिलीज़, ExoPlayer 2.18.4 रिलीज़ से जुड़ी है.
- कोर लाइब्रेरी:
- डाउनलोड:
SegmentDownloaderऔर सबक्लास में, मर्ज किए जाने वाले दो सेगमेंट के शुरू होने के समय के बीच के अंतर को कॉन्फ़िगर करने की सुविधा जोड़ें (#248).
- ऑडियो:
- वीडियो:
- HEVC HDR10 फ़ॉर्मैट को
HEVCProfileMain10के बजायHEVCProfileMain10HDR10पर मैप करें. - Chromecast with Google TV और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को ठीक करने के लिए, वर्कअराउंड जोड़ा गया है. इस समस्या की वजह से, 60fps AVC स्ट्रीम को काम न करने वाली स्ट्रीम के तौर पर मार्क किया जाता है (#10898).
- स्क्रीन रीफ़्रेश रेट से बहुत ज़्यादा फ़्रेम रेट वाले मीडिया को चलाने पर, फ़्रेम रिलीज़ करने से जुड़ी परफ़ॉर्मेंस की समस्याओं को ठीक किया गया है.
- HEVC HDR10 फ़ॉर्मैट को
- कास्ट करें:
- मीडिया आइटम के बीच ट्रांज़िशन करते समय, कुछ समय के लिए दिखने वाली
STATE_IDLEकी समस्या ठीक की गई है (#245).
- मीडिया आइटम के बीच ट्रांज़िशन करते समय, कुछ समय के लिए दिखने वाली
- RTSP:
- अमान्य RTSP Describe रिस्पॉन्स मैसेज को पार्स करने के दौरान, IllegalArgumentException को पकड़ा गया (#10971).
- सेशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें सूचना में मौजूद 'चलाएं/रोकें' बटन, प्लेयर की स्थिति के साथ अपडेट नहीं होता था (#192).
- IMA एक्सटेंशन:
- उस बग को ठीक किया गया है जिसकी वजह से, बिना किसी विज्ञापन वाली DAI स्ट्रीम शुरू नहीं हो पाती थीं. ऐसा इसलिए होता था, क्योंकि पहला (और बिना विज्ञापन वाली स्ट्रीम के मामले में सिर्फ़)
LOADEDइवेंट नहीं मिला था.
- उस बग को ठीक किया गया है जिसकी वजह से, बिना किसी विज्ञापन वाली DAI स्ट्रीम शुरू नहीं हो पाती थीं. ऐसा इसलिए होता था, क्योंकि पहला (और बिना विज्ञापन वाली स्ट्रीम के मामले में सिर्फ़)
वर्शन 1.0.0-rc01
16 फ़रवरी, 2023
androidx.media3:media3-*:1.0.0-rc01 रिलीज़ हो गया है. वर्शन 1.0.0-rc01 में ये बदलाव शामिल हैं.
यह रिलीज़, ExoPlayer 2.18.3 रिलीज़ से जुड़ी है.
- कोर लाइब्रेरी:
- रेंडरर के डिकोडर के क्रम से जुड़े लॉजिक में बदलाव किया गया है, ताकि
MediaCodecSelectorकी प्राथमिकताओं को पूरा किया जा सके. भले ही, डिकोडर यह रिपोर्ट करे कि वह मीडिया को अच्छी तरह से नहीं चला पाएगा. उदाहरण के लिए, डिफ़ॉल्ट सिलेक्टर के साथ, सिर्फ़ काम करने की सुविधा देने वाले हार्डवेयर डिकोडर को उस सॉफ़्टवेयर डिकोडर के मुकाबले प्राथमिकता दी जाएगी जो फ़ॉर्मैट को पूरी तरह से सपोर्ट करता है (#10604). ExoPlayer.Builder.setPlaybackLooperजोड़ें. यह एक नए ExoPlayer इंस्टेंस के लिए, पहले से मौजूद प्लेबैक थ्रेड सेट करता है.- डाउनलोड मैनेजर हेल्पर को मिटाने की अनुमति दें (#10776).
BasePlayer.seekToमें पैरामीटर जोड़ें, ताकि यह भी पता चल सके कि वीडियो को आगे बढ़ाने या पीछे ले जाने के लिए किस कमांड का इस्तेमाल किया गया.- API 21 या इसके बाद के वर्शन पर ड्रॉएबल लोड करते समय थीम का इस्तेमाल करें (#220).
ConcatenatingMediaSource2जोड़ें, ताकि एक से ज़्यादा मीडिया आइटम को एक ही विंडो में जोड़ा जा सके (#247).
- रेंडरर के डिकोडर के क्रम से जुड़े लॉजिक में बदलाव किया गया है, ताकि
- डेटा निकालने वाले टूल:
- अगर trak ऐटम पार्स करते समय, सैंपल टेबल (stbl) में ज़रूरी सैंपल के बारे में जानकारी (stsd) मौजूद नहीं है, तो
NullPointerExceptionके बजायParserExceptionथ्रो करें. - fMP4 में सीधे तौर पर सिंक फ़्रेम पर जाते समय, सैंपल को सही तरीके से स्किप करें (#10941).
- अगर trak ऐटम पार्स करते समय, सैंपल टेबल (stbl) में ज़रूरी सैंपल के बारे में जानकारी (stsd) मौजूद नहीं है, तो
- ऑडियो:
- कंप्रेस किए गए ऑडियो फ़ॉर्मैट के बिटरेट का इस्तेमाल करके, डायरेक्ट प्लेबैक (पासथ्रू) में
AudioTrackके लिए कम से कम बफ़र साइज़ का हिसाब लगाएं.
- कंप्रेस किए गए ऑडियो फ़ॉर्मैट के बिटरेट का इस्तेमाल करके, डायरेक्ट प्लेबैक (पासथ्रू) में
- टेक्स्ट:
- अगर किसी सबटाइटल फ़ाइल में कोई क्यू नहीं है, तो
Subtitle.getEventTimeको अमान्य (नेगेटिव) इंडेक्स पास करने की समस्या को ठीक करें.TextRenderer - SubRip: अगर फ़ाइलें बाइट ऑर्डर मार्क से शुरू होती हैं, तो UTF-16 फ़ाइलों के लिए सहायता जोड़ें.
- अगर किसी सबटाइटल फ़ाइल में कोई क्यू नहीं है, तो
- मेटाडेटा:
- ID3 फ़्रेम से, शून्य से अलग की गई कई वैल्यू पार्स करता है. ऐसा ID3 v2.4 की अनुमति के मुताबिक किया जाता है.
- मेटाडेटा में बताए गए कॉन्टेंट या फ़ोल्डर के टाइप को दिखाने के लिए,
MediaMetadata.mediaTypeजोड़ें. MediaMetadata.isBrowsableकोMediaMetadata.folderTypeके बदले में जोड़ें. अगले रिलीज़ में, फ़ोल्डर टाइप काम नहीं करेगा.
- डैश:
- इमेज अडैप्टेशन सेट के लिए पूरी पार्सिंग की सुविधा जोड़ी गई है. इसमें टाइल की संख्या भी शामिल है (#3752).
- यूआई:
- डिप्रेकेट किए गए
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)को ठीक करें, ताकि दिखने की स्थिति में हुए बदलावों को रजिस्टर किए गए लिसनर (#229) को भेजा जा सके. - दाईं से बाईं ओर (आरटीएल) लिखे जाने वाले लेआउट का इस्तेमाल करते समय,
PlayerViewमें मौजूद प्लेयर कंट्रोल के क्रम को ठीक किया गया (#227).
- डिप्रेकेट किए गए
- सेशन:
- कस्टम प्लेयर के लिए
Playerइंटरफ़ेस लागू करने में मदद पाने के लिए, ऐब्स्ट्रैक्टSimpleBasePlayerजोड़ें. - प्लैटफ़ॉर्म सेशन टोकन को Media3 में बदलने के लिए हेल्पर मेथड जोड़ें
SessionToken(#171). - प्लैटफ़ॉर्म मीडिया सेशन (#219) के अपडेट को ट्रिगर करने के लिए,
onMediaMetadataChangedका इस्तेमाल करें. - मीडिया सेशन को
getMediaButtons()के आर्ग्युमेंट के तौर पर जोड़ें. साथ ही,DefaultMediaNotificationProviderके लिए इम्यूटेबल सूचियों का इस्तेमाल करें, ताकि जानकारी साफ़ तौर पर दिख सके (#216). onSetMediaItemsकॉलबैक लिसनर जोड़ा गया है, ताकि प्लेयर पर सेट करने से पहले, सेशन के हिसाब सेMediaItemसूची, शुरुआती इंडेक्स, और पोज़िशन में बदलाव किया जा सके/उन्हें सेट किया जा सके (#156).- नॉन-ब्लूटूथ मीडिया बटन इवेंट के लिए, दो बार टैप करने की सुविधा को बंद किया गया (#233).
- लेगसी सेशन की संदिग्ध स्थिति में
QueueTimelineको ज़्यादा बेहतर बनाएं (#241).
- कस्टम प्लेयर के लिए
- मेटाडेटा:
- ID3 फ़्रेम से, शून्य से अलग की गई कई वैल्यू पार्स करता है. ऐसा ID3 v2.4 की अनुमति के मुताबिक किया जाता है.
- मेटाडेटा में बताए गए कॉन्टेंट या फ़ोल्डर के टाइप को दिखाने के लिए,
MediaMetadata.mediaTypeजोड़ें. MediaMetadata.isBrowsableकोMediaMetadata.folderTypeके बदले में जोड़ें. अगले रिलीज़ में, फ़ोल्डर टाइप काम नहीं करेगा.
- कास्ट एक्सटेंशन:
- Cast SDK के वर्शन को 21.2.0 पर अपग्रेड किया गया है.
- IMA एक्सटेंशन:
- थ्रेडिंग से जुड़ी समस्याओं से बचने के लिए, ऐप्लिकेशन थ्रेड पर
ImaServerSideAdInsertionMediaSourceके प्लेयर लिसनर को हटाएं. - टीवी डिवाइसों पर स्किप बटन को फ़ोकस करने का अनुरोध करने के लिए,
ImaServerSideAdInsertionMediaSource.AdsLoader.BuilderमेंfocusSkipButtonWhenAvailableप्रॉपर्टी जोड़ें. साथ ही, इसे डिफ़ॉल्ट रूप से सही पर सेट करें. - प्रोग्राम के हिसाब से, स्किप बटन पर फ़ोकस करने का अनुरोध करने के लिए,
ImaServerSideAdInsertionMediaSource.AdsLoaderमेंfocusSkipButton()तरीका जोड़ें. - IMA SDK टूल का वर्शन 3.29.0 पर अपडेट किया गया.
- थ्रेडिंग से जुड़ी समस्याओं से बचने के लिए, ऐप्लिकेशन थ्रेड पर
- डेमो ऐप्लिकेशन:
- रनटाइम के दौरान, डाउनलोड की सूचनाओं के लिए सूचना पाने की अनुमति का अनुरोध करें (#10884).
वर्शन 1.0.0-beta03
22 नवंबर, 2022
androidx.media3:media3-*:1.0.0-beta03 रिलीज़ हो गया है. वर्शन 1.0.0-beta03 में ये बदलाव शामिल हैं.
यह रिलीज़, ExoPlayer 2.18.2 रिलीज़ से जुड़ी है.
- कोर लाइब्रेरी:
- यह देखने के लिए कि फ़िलहाल चुने गए ट्रैक के लिए टनलिंग की सुविधा चालू है या नहीं,
ExoPlayer.isTunnelingEnabledजोड़ें (#2518). - किसी एक
MediaSourceको रैप करने की प्रोसेस को आसान बनाने के लिए,WrappingMediaSourceजोड़ें (#7279). - वीडियो चलाने के लिए ज़रूरी मेमोरी उपलब्ध न होने की वजह से, वीडियो अटकने से पहले बैक बफ़र को खारिज करें.
- ऑफलोड की सुविधा चालू होने पर, Tracing "doSomeWork" ब्लॉक बंद करें.
PlaybackStatsListenerमें तेज़ी से खोज करने पर, सेशन ट्रैकिंग से जुड़ी समस्या ठीक की गई है #180.- एक आइटम वाली प्लेलिस्ट में
seekToNextयाseekToPreviousको कॉल करते समय,onMediaItemTransitionकॉलबैक भेजने की सुविधा काम नहीं करती (#10667). Player.getSurfaceSizeजोड़ें. इससे उस जगह का साइज़ पता चलता है जहां वीडियो रेंडर किया गया है.- उस बग को ठीक किया गया है जिसकी वजह से, प्लेयर रिलीज़ के दौरान लिसनर हटाने पर
IllegalStateException(#10758) हो सकता है.
- यह देखने के लिए कि फ़िलहाल चुने गए ट्रैक के लिए टनलिंग की सुविधा चालू है या नहीं,
- बनाएं:
- कंपाइलेशन से जुड़ी गड़बड़ियों से बचने के लिए, कम से कम
compileSdkVersionलागू करें (#10684). - किसी दूसरे ग्रैडल बिल्ड में शामिल होने पर, पब्लिशिंग ब्लॉक करने से बचें.
- कंपाइलेशन से जुड़ी गड़बड़ियों से बचने के लिए, कम से कम
- ट्रैक चुनने की सुविधा:
- अगर डिसप्ले पर Dolby Vision काम नहीं करता है, तो Dolby Vision के बजाय दूसरे ट्रैक को प्राथमिकता दें. (#8944).
- डाउनलोड:
- वीडियो:
- अगर डिसप्ले पर Dolby Vision काम नहीं करता है, तो इसके लिए कोई दूसरा डिकोडर इस्तेमाल करें. (#9794).
- ऑडियो:
- एक साथ कई खिलाड़ियों को रिलीज़ करते समय, OutOfMemory गड़बड़ियों से बचने के लिए,
AudioTrackइंस्टेंस रिलीज़ करने के लिएSingleThreadExecutorका इस्तेमाल करें (#10057). - यह कुकी, AudioTrack के ऑफ़लोड स्टेटस के लिए
AudioOffloadListener.onExperimentalOffloadedPlaybackजोड़ती है. (#134). AudioTrackBufferSizeProviderको सार्वजनिक इंटरफ़ेस के तौर पर सेट करें.- #135 पसंदीदा ऑडियो आउटपुट डिवाइस सेट करने के लिए,
ExoPlayer.setPreferredAudioDeviceजोड़ें. androidx.media3.exoplayer.audio.AudioProcessorका नाम बदलकरandroidx.media3.common.audio.AudioProcessorकरें.- Android के सभी वर्शन पर, 8-चैनल और 12-चैनल वाले ऑडियो को 7.1 और 7.1.4 चैनल मास्क पर मैप किया गया है (#10701).
- एक साथ कई खिलाड़ियों को रिलीज़ करते समय, OutOfMemory गड़बड़ियों से बचने के लिए,
- मेटाडेटा:
MetadataRendererको अब इस तरह कॉन्फ़िगर किया जा सकता है कि मेटाडेटा उपलब्ध होते ही रेंडर हो जाए.MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)का इस्तेमाल करके एक इंस्टेंस बनाएं. इससे यह तय किया जा सकेगा कि रेंडरर, मेटाडेटा को जल्दी आउटपुट करेगा या प्लेयर की पोज़िशन के साथ सिंक करेगा.
- DRM:
- Android 13 में ClearKey को लागू करने के दौरान हुई गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से, लाइसेंस का ऐसा यूआरएल मिलता था जो खाली नहीं होता था, लेकिन अमान्य होता था.
- प्लेलिस्ट में डीआरएम स्कीम (जैसे, Widevine से ClearKey) के बीच स्विच करते समय,
setMediaDrmSession failed: session not openedगड़बड़ी को ठीक करता है.
- टेक्स्ट:
- CEA-608: पक्का करें कि फ़ील्ड 2 पर सेवा स्विच करने के निर्देशों को सही तरीके से हैंडल किया गया हो (#10666).
- डैश:
- मेनिफ़ेस्ट से
EventStream.presentationTimeOffsetपार्स करें (#10460).
- मेनिफ़ेस्ट से
- यूआई:
TrackSelectionDialogBuilder(#10429) में, प्लेयर के मौजूदा ओवरराइड को प्रीसेट के तौर पर इस्तेमाल करें.
- सेशन:
- पक्का करें कि कमांड हमेशा सही क्रम में लागू की गई हों. भले ही, कुछ कमांड के लिए एसिंक्रोनस रिज़ॉल्यूशन की ज़रूरत हो (#85).
DefaultMediaNotificationProvider.Builderइंस्टेंस बनाने के लिए,DefaultMediaNotificationProvider.Builderजोड़ें.DefaultMediaNotificationProviderबिल्डर, सूचना आईडी, सूचना चैनल आईडी, और सूचना चैनल का नाम कॉन्फ़िगर कर सकता है. इनका इस्तेमाल सेवा देने वाली कंपनी करती है. साथ ही, सूचनाओं के छोटे आइकॉन को सेट करने के लिए, methodDefaultMediaNotificationProvider.setSmallIcon(int)जोड़ें. (#104).- पक्का करें कि
MediaController.release()से पहले भेजे गए निर्देश न छोड़े जाएं (#99). SimpleBitmapLoader,file://यूआरआई से बिटमैप लोड कर सकता है (#108).- उस दावे को ठीक किया गया है जिसकी वजह से,
MediaControllerकिसी अवधि में विज्ञापन पर नहीं जा सकता था (#122). - प्लेबैक खत्म होने पर,
MediaSessionServiceको फ़ोरग्राउंड से बंद कर दिया जाता है. साथ ही, पिछली बार चलाए गए मीडिया आइटम का प्लेबैक फिर से शुरू करने के लिए एक सूचना दिखाई जाती है (#112). - रोकने के लिए, फ़ोरग्राउंड सेवा को ऐसे इंटेंट से शुरू न करें जो अभी तक पूरा नहीं हुआ है (#167).
- API 26 और API 27 पर,
DefaultNotificationProviderसे बनाई गई सूचना से जुड़े 'बैज' को मैन्युअल तरीके से छिपाएं (API 28 और इसके बाद के वर्शन पर, बैज अपने-आप छिप जाता है) (#131). - उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी MediaSession से Media3 MediaController तक दूसरा बाइंडर कनेक्शन, IllegalStateExceptions (#49) का कारण बनता है.
- RTSP:
- आईएमए:
- विज्ञापन की जानकारी लोड करने के लिए टाइम आउट जोड़ें, ताकि उन मामलों को हैंडल किया जा सके जहां IMA SDK, विज्ञापन लोड करने में अटक जाता है (#10510).
- कॉन्टेंट के आखिर में जाने पर, वीडियो के बीच में दिखने वाले विज्ञापनों को स्किप करने से रोकें (#10685).
- सर्वर-साइड पर डाले गए विज्ञापनों वाली लाइव स्ट्रीम के लिए, विंडो की अवधि का सही हिसाब लगाया जाता है. उदाहरण के लिए, IMA DAI (#10764).
- FFmpeg एक्सटेंशन:
- NDK 23.1.7779620 और इसके बाद के वर्शन के साथ FFmpeg लाइब्रेरी को लिंक करने के लिए, नए फ़्लैग जोड़े गए हैं (#9933).
- AV1 एक्सटेंशन:
- CMake के वर्शन को अपडेट करें, ताकि Android Studio के नए वर्शन के साथ काम न करने से जुड़ी समस्याओं से बचा जा सके (#9933).
- कास्ट एक्सटेंशन:
getDeviceInfo()को लागू करें, ताकिMediaControllerकी मदद से वीडियो चलाने की सुविधा को कंट्रोल करते समयCastPlayerकी पहचान की जा सके (#142).
- ट्रांसफ़ॉर्मर:
- आउटपुट सैंपल जनरेट करने में ज़्यादा समय लगने का पता लगाने के लिए, muxer वॉचडॉग टाइमर जोड़ें.
- हटाए गए सिंबल हटाएं:
Transformer.Builder.setOutputMimeType(String)हटाएं. यह सुविधा हटा दी गई है. डिफ़ॉल्ट मक्सर का इस्तेमाल करने पर, MIME टाइप हमेशा MP4 होगा.
वर्शन 1.0.0-beta02
21 जुलाई, 2022
androidx.media3:media3-*:1.0.0-beta02 रिलीज़ हो गया है. वर्शन 1.0.0-beta02 में ये बदलाव शामिल हैं.
यह रिलीज़, ExoPlayer 2.18.1 रिलीज़ से जुड़ी है.
- कोर लाइब्रेरी:
- पक्का करें कि
ShuffleOrderकोExoPlayer.setShuffleOrderसे बदलने पर,Player.Listener#onTimelineChangedकोreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED(#9889) पर कॉल किया जा सके. - प्रोग्रेसिव मीडिया के लिए, बफ़र की गई पोज़िशन में सिर्फ़ चुने गए ट्रैक शामिल करें (#10361).
- ExoPlayer के सभी लॉग आउटपुट के लिए, कस्टम लॉगर की अनुमति दी गई (#9752).
setDataSourceFactoryमेंDefaultMediaSourceFactoryको लागू करने से जुड़ी समस्या ठीक की गई. कुछ मामलों में यह काम नहीं कर रहा था (#116).
- पक्का करें कि
- डेटा निकालने वाले टूल:
- डैश:
- मेनिफ़ेस्ट से ClearKey लाइसेंस का यूआरएल पार्स करें (#10246).
- यूआई:
- पक्का करें कि TalkBack, वीडियो चलाने की स्पीड के लिए चुने गए विकल्प के बारे में बताए. यह विकल्प, वीडियो चलाने से जुड़े कंट्रोल के मेन्यू में मौजूद होता है (#10298).
- RTSP:
- VP8 के फ़्रैगमेंट किए गए पैकेट को हैंडल करने की सुविधा जोड़ी गई है (#110).
- लीन्बैक एक्सटेंशन:
LeanbackAdapterमेंplayWhenReadyमें हुए बदलावों के बारे में सुनें (10420).
- कास्ट करें:
वर्शन 1.0.0-beta01
16 जून, 2022
androidx.media3:media3-*:1.0.0-beta01 रिलीज़ हो गया है. वर्शन 1.0.0-beta01 में ये बदलाव शामिल हैं.
यह ExoPlayer 2.18.0 के रिलीज़ वर्शन से मेल खाता है.
- कोर लाइब्रेरी:
MediaMetricsManagerके ज़रिए, Android प्लैटफ़ॉर्म के डाइग्नोस्टिक्स की सुविधा चालू करें. ExoPlayer, प्लैटफ़ॉर्म को वीडियो चलाने से जुड़े इवेंट और परफ़ॉर्मेंस का डेटा भेजेगा. इससे डिवाइस पर सिस्टम की परफ़ॉर्मेंस और डीबग करने से जुड़ी जानकारी मिलती है. इस डेटा को Google भी इकट्ठा कर सकता है. ऐसा तब होता है, जब डिवाइस का इस्तेमाल करने वाला व्यक्ति, इस्तेमाल और गड़बड़ी की जानकारी शेयर करने की सुविधा चालू करता है. ऐप्लिकेशन,ExoPlayer.Builder.setUsePlatformDiagnostics(false)की मदद से ExoPlayer के लिए, प्लैटफ़ॉर्म के डाइग्नोस्टिक्स में योगदान देने से ऑप्ट-आउट कर सकते हैं.- उस बग को ठीक किया गया है जिसकी वजह से,
MergingMediaSourceका इस्तेमाल करते समय ट्रैक बहुत बार रीसेट हो जाते थे. उदाहरण के लिए, सबटाइटल साइड-लोड करते समय और वीडियो चलाने के दौरान चुने गए सबटाइटल को बदलते समय (#10248). - एपीआई 29 और 30 पर 5G-NSA नेटवर्क टाइप का पता लगाना बंद कर दिया गया है. इन वीडियो को 4G नेटवर्क पर चलाया जाएगा.
nullकोMediaSource.Factory.setDrmSessionManagerProviderऔरMediaSource.Factory.setLoadErrorHandlingPolicyमें पास करने की अनुमति नहीं है. ज़रूरत पड़ने पर,DefaultDrmSessionManagerProviderऔरDefaultLoadErrorHandlingPolicyके इंस्टेंस को साफ़ तौर पर पास किया जा सकता है.MediaItem.RequestMetadataजोड़ें, ताकि मीडिया चलाने के लिए ज़रूरी मेटाडेटा दिखाया जा सके. ऐसा तब किया जाता है, जब सटीकLocalConfigurationकी जानकारी न हो.MediaMetadata.mediaUrlको भी हटाएं, क्योंकि अब इसेRequestMetadataमें शामिल कर दिया गया है.Player.Command.COMMAND_SET_MEDIA_ITEMजोड़ें, ताकि खिलाड़ी किसी एक आइटम को सेट करने की अनुमति दे सकें.
- ट्रैक चुनने की सुविधा:
TrackSelectionOverridesक्लास कोTrackSelectionParametersमें बदलें. साथ ही,TrackSelectionOverrideको टॉप लेवल की क्लास के तौर पर प्रमोट करें.TracksInfoका नाम बदलकरTracksऔरTracksInfo.TrackGroupInfoका नाम बदलकरTracks.Groupकर दो.Player.getCurrentTracksInfoऔरPlayer.Listener.onTracksInfoChangedका नाम बदलकरPlayer.getCurrentTracksऔरPlayer.Listener.onTracksChangedकर दिया गया है. इसमेंPlayer.Listener.onTracksChangedतरीके के नाम को 'अन-डेप्रिकेट' करना शामिल है. हालांकि, इसमें पैरामीटर के टाइप अलग-अलग होते हैं.- डिप्रेकेट किए गए
DefaultTrackSelector.ParametersBuilderके बजाय,DefaultTrackSelector.Parameters.Builderको वापस लाने के लिए,DefaultTrackSelector.buildUponParametersऔरDefaultTrackSelector.Parameters.buildUponको बदलें. - जो डिफ़ॉल्ट रूप से चालू होती है, उसे जोड़ें
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilitiesइस सुविधा के चालू होने पर,DefaultTrackSelectorउन ऑडियो ट्रैक को प्राथमिकता देगा जिनमें चैनलों की संख्या, डिवाइस की आउटपुट क्षमताओं से ज़्यादा नहीं होती. हैंडहेल्ड डिवाइसों पर,DefaultTrackSelectorमल्टीचैनल ऑडियो फ़ॉर्मैट के बजाय स्टीरियो/मोनो को प्राथमिकता देगा. हालांकि, ऐसा तब तक होगा, जब तक मल्टीचैनल फ़ॉर्मैट को स्पेशलाइज़ (Android 12L+) नहीं किया जा सकता या वह डॉल्बी सराउंड साउंड फ़ॉर्मैट नहीं है. इसके अलावा, जिन डिवाइसों पर ऑडियो स्पैटियलाइज़ेशन की सुविधा काम करती है उन परDefaultTrackSelector, स्पैटियलाइज़र प्रॉपर्टी में होने वाले बदलावों पर नज़र रखेगा. साथ ही, इन बदलावों के आधार पर नए ट्रैक को चुनेगा. जिन डिवाइसों मेंtelevisionयूज़र इंटरफ़ेस (यूआई) मोड होता है उन्हें इन पाबंदियों से बाहर रखा जाता है. साथ ही, सबसे ज़्यादा चैनल वाले फ़ॉर्मैट को प्राथमिकता दी जाएगी. इस सुविधा को चालू करने के लिए,DefaultTrackSelectorइंस्टेंस कोContextके साथ बनाया जाना चाहिए.
- वीडियो:
DummySurfaceका नाम बदलकरPlaceholderSurfaceकरें.MediaCodecVideoRenderer.getCodecMaxInputSizeमें AV1 फ़ॉर्मैट के साथ काम करने की सुविधा जोड़ी गई.
- ऑडियो:
- LG AC3 ऑडियो डिकोडर, नॉन-स्टैंडर्ड MIME टाइप के विज्ञापन के लिए इस्तेमाल किया जाता है.
- एपीआई < 21 पर एआरटी की पुष्टि करने में लगने वाले समय को कम करने के लिए,
AudioAttributes.getAudioAttributesV21()के रिटर्न टाइप कोandroid.media.AudioAttributesसे बदलकर, नईAudioAttributesV21रैपर क्लास करें. - जब फ़ॉर्मैट ऑडियो चैनल की संख्या सेट नहीं होती है, तो प्लैटफ़ॉर्म (एपीआई 29+) से क्वेरी करें या ऑडियो पासथ्रू के लिए ऑडियो एन्कोडिंग चैनल की संख्या मान लें. ऐसा एचएलएस चंकलेस तैयारी (10204) के साथ होता है.
- अगर डिकोडर, 12 चैनल वाला पीसीएम ऑडियो आउटपुट करता है, तो चैनल मास्क के साथ
AudioTrackको कॉन्फ़िगर करेंAudioFormat.CHANNEL_OUT_7POINT1POINT4(#10322.
- डीआरएम
- पक्का करें कि फ़ॉर्मैट बदलने के तुरंत बाद, डीआरएम सेशन हमेशा सही तरीके से अपडेट हो (10274).
- टेक्स्ट:
Player.getCurrentCues()को बदलकरCueGroupकर दें, ताकिList<Cue>के बजायCueGroupदिखे.- एसएसए:
OutlineColourस्टाइल सेटिंग के साथ काम करता है, जबBorderStyle == 3(यानी किOutlineColour, क्यू का बैकग्राउंड सेट करता है) (#8435). - CEA-708: डेटा को कई सर्विस ब्लॉक में पार्स करता है और उन ब्लॉक को अनदेखा करता है जो फ़िलहाल चुने गए सर्विस नंबर से जुड़े नहीं हैं.
RawCcExtractorहटाएं. इसका इस्तेमाल सिर्फ़ Google के अंदर सबटाइटल फ़ॉर्मैट को मैनेज करने के लिए किया जाता था.
- डेटा निकालने वाले टूल:
- यूआई:
PlayerViewपर सेट किए गएOnClickListenerको इवेंट डिलीवर करने की समस्या ठीक की गई है. यह समस्या तब होती है, जबuseController=false(#9605). साथ ही, सभी व्यू कॉन्फ़िगरेशन के लिएOnLongClickListenerको इवेंट डिलीवर करने की समस्या ठीक करें.PlayerViewकी सीमाओं से बाहर निकलने वाले टच इवेंट के क्रम को,ACTION_UPसे पहले क्लिक के तौर पर गलत तरीके से ट्रीट करने की समस्या ठीक की गई है (#9861).PlayerViewऐक्सेसिबिलिटी से जुड़ी उस समस्या को ठीक किया गया है जिसमें टैप करने पर कंट्रोल छिपाने के बजाय वीडियो चलने लगता था (#8627).TrackSelectionViewऔरTrackSelectionDialogBuilderको फिर से लिखें, ताकि वेExoPlayerके बजायPlayerइंटरफ़ेस के साथ काम कर सकें. इससे व्यू को अन्यPlayerके साथ इस्तेमाल किया जा सकता है. साथ ही, यूज़र इंटरफ़ेस (यूआई) मॉड्यूल से ExoPlayer मॉड्यूल की निर्भरता हट जाती है. यह एक बड़ा बदलाव है.PlayerViewट्रैक सिलेक्टर में, फ़ोर्स किए गए टेक्स्ट ट्रैक न दिखाएं. साथ ही, अगर "कोई नहीं" चुना गया है, तो फ़ोर्स किए गए टेक्स्ट ट्रैक को चुना हुआ रखें (#9432).
- डैश:
- डीटीएस
AudioChannelConfigurationएलिमेंट से चैनल की संख्या पार्स करें. इससे DTS स्ट्रीम के लिए ऑडियो पासथ्रू की सुविधा फिर से चालू हो जाती है (#10159). nullकोDashMediaSource.Factory.setCompositeSequenceableLoaderFactoryमें पास करने की अनुमति न दें. ज़रूरत पड़ने पर,DefaultCompositeSequenceableLoaderFactoryके इंस्टेंस को साफ़ तौर पर पास किया जा सकता है.
- डीटीएस
- HLS:
- अगर प्लेलिस्ट के CODECS एट्रिब्यूट में ऑडियो कोडेक (#10065) शामिल नहीं है, तो चंकफ़ुल तैयारी पर फ़ॉलबैक करें.
nullकोHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactory, औरHlsMediaSource.Factory.setPlaylistTrackerFactoryको पास करने की अनुमति नहीं है. ज़रूरत पड़ने पर,DefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactoryयाDefaultHlsPlaylistTracker.FACTORYके रेफ़रंस के इंस्टेंस को साफ़ तौर पर पास किया जा सकता है.
- स्मूद स्ट्रीमिंग:
nullकोSsMediaSource.Factory.setCompositeSequenceableLoaderFactoryमें पास करने की अनुमति न दें. ज़रूरत पड़ने पर,DefaultCompositeSequenceableLoaderFactoryके इंस्टेंस को साफ़ तौर पर पास किया जा सकता है.
- RTSP:
- H263 के लिए आरटीपी रीडर जोड़ें (#63).
- MPEG4 के लिए आरटीपी रीडर जोड़ें (#35).
- HEVC के लिए आरटीपी रीडर जोड़ें (#36).
- एएमआर के लिए, आरटीपी रीडर जोड़ा गया. फ़िलहाल, सिर्फ़ मोनो-चैनल और नॉन-इंटरलीव्ड एएमआर स्ट्रीम काम करती हैं. कंपाउंड एएमआर आरटीपी पेलोड काम नहीं करता. (#46)
- VP8 के लिए आरटीपी रीडर जोड़ें (#47).
- WAV के लिए आरटीपी रीडर जोड़ें (#56).
- आरटीएसपी के लिए, पुष्टि करने वाले मूल हेडर से जुड़ी समस्या ठीक की गई. (#9544).
- एसडीपी के ज़रूरी फ़ील्ड की जांच करना बंद करें, क्योंकि ExoPlayer को इनकी ज़रूरत नहीं होती (#10049).
- आरटीएसपी टाइमिंग को पार्स करते समय, चेक की गई गड़बड़ी को ठीक किया गया (#10165).
- VP9 (#47) के लिए आरटीपी रीडर जोड़ें.
- OPUS के लिए आरटीपी रीडर जोड़ें (#53).
- डेटा सोर्स:
DummyDataSourceका नाम बदलकरPlaceholderDataSourceकरें.- OkHttp में रुकावट को हैंडल करने से जुड़ी समस्या को ठीक करता है.
- सेशन:
- अनुरोधों को एसिंक्रोनस तरीके से हल करने की अनुमति देने के लिए,
MediaSession.MediaItemFillerकोMediaSession.Callback.onAddMediaItemsसे बदलें. setMediaItems(s)के किसी लेगसी मीडिया सेशन से कनेक्ट होने पर,MediaControllerके लिए उपलब्ध तरीके.MediaController.setMediaUriऔरMediaSession.Callback.onSetMediaUriहटाएं.MediaController.setMediaItemऔरMediaSession.Callback.onAddMediaItemsका इस्तेमाल करके भी, इसी तरह के नतीजे पाए जा सकते हैं.- लेगसी
MediaControllerसे किए गए कॉल कोonSetMediaUriके बजायMediaSession.Callback.onAddMediaItemsपर फ़ॉरवर्ड करें, ताकि मीडिया चलाया जा सके. - सूचना को पसंद के मुताबिक बनाने के लिए,
MediaNotification.ProviderऔरDefaultMediaNotificationProviderजोड़ें. - आर्टवर्क की इमेज डाउनलोड करने के लिए,
BitmapLoaderऔरSimpleBitmapLoaderजोड़ें. - लेगसी सेशन के साथ काम करने की सुविधा देने के लिए,
MediaSession.setCustomLayout()जोड़ें. - लेगसी सेशन के साथ सुविधाओं को एक जैसा बनाने के लिए,
MediaSession.setSessionExtras()जोड़ें. MediaSession.MediaSessionCallbackका नाम बदलकरMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallbackका नाम बदलकरMediaLibrarySession.CallbackऔरMediaSession.Builder.setSessionCallbackका नाम बदलकरsetCallbackकर दें.MediaControllerImplLegacyमें NPE ठीक किया गया (#59).- टाइमलाइन पर सेशन की पोज़िशन की जानकारी अपडेट करें change(#51).
- कंट्रोलर को रिलीज़ करने के बाद,
MediaControllerImplBaseमें NPE की समस्या ठीक की गई है (#74).
- अनुरोधों को एसिंक्रोनस तरीके से हल करने की अनुमति देने के लिए,
- विज्ञापन का प्लेबैक / IMA:
- Media Rating Council (MRC) के सुझावों के मुताबिक, विज्ञापन पोलिंग रेट को हर 100 मिलीसेकंड से घटाकर हर 200 मिलीसेकंड करें.
- FFmpeg एक्सटेंशन:
- CMake के वर्शन को
3.21.0+पर अपडेट करें, ताकि CMake में मौजूद बग की वजह से AndroidStudio के gradle सिंक में होने वाली गड़बड़ी से बचा जा सके (#9933).
- CMake के वर्शन को
- हटाए गए सिंबल हटाएं:
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)हटाएं. इसके बजाय,Player.Listener.onTracksChanged(Tracks)का इस्तेमाल करें.Player.getCurrentTrackGroupsऔरPlayer.getCurrentTrackSelectionsहटाएं. इसके बजाय,Player.getCurrentTracksका इस्तेमाल करें.ExoPlayer.getCurrentTrackGroupsऔरExoPlayer.getCurrentTrackSelectionsका इस्तेमाल भी जारी रखा जा सकता है. हालांकि, इन तरीकों को बंद कर दिया गया है.DownloadHelperDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTऔरDEFAULT_TRACK_SELECTOR_PARAMETERSकॉन्स्टेंट हटाएं. जब हो सके, तबgetDefaultTrackSelectorParameters(Context)का इस्तेमाल करें. अगर ऐसा नहीं है, तोDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXTका इस्तेमाल करें.- कंस्ट्रक्टर
DefaultTrackSelector(ExoTrackSelection.Factory)को हटाएं. इसके बजाय,DefaultTrackSelector(Context, ExoTrackSelection.Factory)का इस्तेमाल करें. Transformer.Builder.setContextहटाएं.ContextकोTransformer.Builderकंस्ट्रक्टर को पास किया जाना चाहिए.
वर्शन 1.0.0-alpha03
14 मार्च, 2022
androidx.media3:media3-*:1.0.0-alpha03 रिलीज़ हो गया है. वर्शन 1.0.0-alpha03 में ये बदलाव शामिल हैं.
यह ExoPlayer 2.17.1 के रिलीज़ वर्शन से मेल खाता है.
- ऑडियो:
- एचएलएस में Dolby Atmos (E-AC3-JOC) के लिए, ऑडियो की सुविधाओं की जांच करने से जुड़ी गड़बड़ी ठीक की गई.
- डेटा निकालने वाले टूल:
- FMP4: उस समस्या को ठीक किया गया है जिसमें v0 और v1, दोनों तरह के emsg ऐटम वाली स्ट्रीम के लिए, emsg सैंपल मेटाडेटा को गलत क्रम में आउटपुट किया जा सकता था (#9996).
- टेक्स्ट:
SingleSampleMediaSource.Factory.setTrackIdऔरMediaItem.SubtitleConfiguration.Builder.setIdके इंटरैक्शन को ठीक किया गया है, ताकिSubtitleConfigurationफ़ील्ड को प्राथमिकता दी जा सके. साथ ही, अगरFactoryकी वैल्यू सेट नहीं है, तोFactoryकी वैल्यू का इस्तेमाल किया जा सके (#10016).
- विज्ञापन का प्लेबैक:
- लाइव एचएलएस एसएसएआई स्ट्रीम में, विज्ञापन दिखाने के दौरान ऑडियो के रुकने की समस्या ठीक की गई.
वर्शन 1.0.0-alpha02
2 मार्च, 2022
androidx.media3:media3-*:1.0.0-alpha02 रिलीज़ हो गया है. वर्शन 1.0.0-alpha02 में ये बदलाव शामिल हैं.
यह ExoPlayer 2.17.0 के रिलीज़ होने से जुड़ा है.
- कोर लाइब्रेरी:
- सुरक्षित तरीका
DefaultRenderersFactory.getCodecAdapterFactory()जोड़ें, ताकिDefaultRenderersFactoryकी सबक्लास,buildVideoRenderers()याbuildAudioRenderers()को बदल सकें. साथ ही, कोडेक अडैप्टर फ़ैक्ट्री को ऐक्सेस कर सकें और उसेMediaCodecRendererके उन इंस्टेंस को पास कर सकें जिन्हें वे बनाते हैं. - ICY हेडर फ़ील्ड
nameऔरgenreको क्रमशःMediaMetadata.stationऔरMediaMetadata.genreपर भेजें, ताकि वेPlayer.Listener.onMediaMetadataChanged()(#9677) के ज़रिए ऐप्लिकेशन तक पहुंच सकें. DefaultHttpDataSource#getResponseHeadersसे शून्य वैल्यू वाले कुंजियां हटाएं.MediaCodecइंस्टेंस बनाने में गड़बड़ी होने पर, कुछ समय के लिए रुकें और फिर से कोशिश करें. यह सुविधा, कुछ डिवाइसों पर होने वाली एक समस्या को ठीक करती है. यह समस्या तब होती है, जब किसी सुरक्षित कोडेक से किसी दूसरे कोडेक पर स्विच किया जाता है (#8696).- उपयोगकर्ताओं को
MediaCodecसे मेट्रिक डेटा पाने की अनुमति देने के लिए,MediaCodecAdapter.getMetrics()जोड़ें. (#9766). - Maven डिपेंडेंसी रिज़ॉल्यूशन से जुड़ी समस्या ठीक की गई है (#8353).
- उन लाइव स्ट्रीम के लिए, स्पीड अपने-आप कम-ज़्यादा होने की सुविधा बंद करें जिनमें कम समय में डेटा ट्रांसफ़र करने की सुविधा नहीं है. साथ ही, जिनमें किसी उपयोगकर्ता ने स्पीड सेट करने का अनुरोध नहीं किया है (#9329).
DecoderCounters#inputBufferCountका नाम बदलकरqueuedInputBufferCountकरें.SimpleExoPlayer.renderersको निजी बनाएं. रेंडरर कोExoPlayer.getRendererके ज़रिए ऐक्सेस किया जा सकता है.Player.EventFlagsमें मौजूद वैल्यू से मेल खाने के लिए, कुछAnalyticsListener.EventFlagsकी स्थिर वैल्यू अपडेट की गई हैं.AnalyticsCollectorको इंटरफ़ेस और डिफ़ॉल्ट तौर पर लागू होने वाले कोड में बांट दिया गया है, ताकि अगर किसी ऐप्लिकेशन को इसकी ज़रूरत न हो, तो R8 इसे हटा सके.
- सुरक्षित तरीका
- ट्रैक चुनने की सुविधा:
- ट्रैक चुनने के दौरान, वीडियो के लिए पसंदीदा भूमिका वाले फ़्लैग इस्तेमाल करने की सुविधा जोड़ी गई है (#9402).
- वीडियो ट्रैक चुनने के लॉजिक को अपडेट किया गया है. इससे अडैप्टेशन के लिए एक से ज़्यादा वीडियो ट्रैक चुनते समय, पसंदीदा MIME टाइप और भूमिका के फ़्लैग को ध्यान में रखा जा सकेगा (#9519).
- वीडियो और ऑडियो ट्रैक चुनने के लॉजिक को अपडेट किया गया है. अब सिर्फ़ उन फ़ॉर्मैट को चुना जा सकेगा जिनमें अडैप्टिव सिलेक्शन के लिए, डिकोडर और हार्डवेयर का एक जैसा सपोर्ट लेवल हो (#9565).
- वीडियो ट्रैक चुनने के लॉजिक को अपडेट किया गया है. इससे, अगर हार्डवेयर से तेज़ी से डिकोड करने वाले मुख्य डिकोडर, एक से ज़्यादा कोडेक के साथ काम करते हैं, तो ज़्यादा बेहतर कोडेक को प्राथमिकता दी जाएगी (#4835).
- टेक्निकल ट्रैक चुनने से जुड़ी शर्तों (उदाहरण के लिए, पसंदीदा MIME टाइप या ज़्यादा से ज़्यादा चैनल की संख्या) के बजाय, ऑडियो कॉन्टेंट की प्राथमिकताओं (उदाहरण के लिए, "डिफ़ॉल्ट" ऑडियो ट्रैक या सिस्टम की स्थान-भाषा से मेल खाने वाला ट्रैक) को प्राथमिकता दें.
- ट्रैक चुनने से जुड़ी समस्या ठीक की गई है. इस समस्या में, एक ट्रैक ग्रुप को बंद करने पर, उसी तरह के अन्य ट्रैक ग्रुप बंद नहीं होते थे (#9675).
- ट्रैक चुनने से जुड़ी समस्या को ठीक किया गया है. इस समस्या में, नॉन-एम्टी और एम्टी ट्रैक ओवरराइड को सही तरीके से लागू नहीं किया जाता है (#9649).
- किसी
TrackGroupArrayमें डुप्लीकेटTrackGroups को अनुमति न दें.TrackGroupकंस्ट्रक्टर मेंidसेट करके,TrackGroupको हमेशा अलग किया जा सकता है. इससे, ऐक्टिव ट्रैक ओवरराइड की सुविधा चालू होने पर, ऐप्लिकेशन को बैकग्राउंड में ले जाने के बाद फिर से चलाने पर होने वाली क्रैश की समस्या ठीक हो जाती है (#9718). AdaptiveTrackSelectionमें लॉजिक में बदलाव करें, ताकि नेटवर्क का बैंडविड्थ ज़्यादा होने पर क्वालिटी को बेहतर किया जा सके. भले ही, वीडियो लाइव स्ट्रीम के बहुत करीब हो (#9784).
- वीडियो:
- अगर ज़रूरत हो, तो Dolby Vision के लिए डिकोडर फ़ॉलबैक लॉजिक को ठीक करें, ताकि H264/H265 डिकोडर का इस्तेमाल किया जा सके.
- ऑडियो:
- Dolby Atmos (E-AC3-JOC) के लिए, डिकोडर फ़ॉलबैक लॉजिक को ठीक किया गया है, ताकि ज़रूरत पड़ने पर E-AC3 के साथ काम करने वाले डिकोडर का इस्तेमाल किया जा सके.
AudioCapabilitiesएपीआई में बदलाव करके,nullके बजायAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESको साफ़ तौर पर पास करने की ज़रूरत होगी.DefaultAudioSinkमेंAudioTrackBufferSizeProviderको इंजेक्ट करके,AudioTrackके बफ़र साइज़ के कैलकुलेशन को पसंद के मुताबिक बनाने की अनुमति देता है. (#8891).- अगर बफ़र का अनुरोध किया गया साइज़ 1 एमबी से ज़्यादा था, तो
AudioTrackको फिर से बनाने की कोशिश करें. (#9712).
- डेटा निकालने वाले टूल:
- टेक्स्ट:
- एक
MediaItem.SubtitleConfiguration.idफ़ील्ड जोड़ें. यह कॉन्फ़िगरेशन (#9673) से बनाए गए सबटाइटल ट्रैक केFormat.idफ़ील्ड में अपने-आप ट्रांसफ़र हो जाता है. - Matroska कंटेनर में WebVTT सबटाइटल के लिए बुनियादी सहायता जोड़ी गई है (#9886).
Cea708Decoderको सेवा ब्लॉक के तय किए गए साइज़ से ज़्यादा डेटा पढ़ने से रोकना.
- एक
- DRM:
DrmSessionManager.(pre)acquireSessionसेplaybackLooperको हटाएं. जब किसी ऐप्लिकेशन में कस्टमMediaSourceके लिएDrmSessionManagerका इस्तेमाल किया जाता है, तोplaybackLooperकोDrmSessionManager.setPlayerमें पास करना होता है.
- विज्ञापन का प्लेबैक / IMA:
- IMA डाइनैमिक ऐड इंसर्शन (डीएआई) के लिए सहायता जोड़ी गई है (#8213).
AdPlaybackStateमें एक तरीका जोड़ें, ताकि विज्ञापन ग्रुप को रीसेट किया जा सके. इससे उसे फिर से चलाया जा सकेगा (#9615).- विज्ञापन के दौरान, वीडियो चलाने की स्पीड 1.0 पर सेट करने की सुविधा लागू की गई (#9018).
- उस समस्या को ठीक किया गया है जिसकी वजह से, लोड न हो पाने वाले विज्ञापन ग्रुप की वजह से तुरंत प्लेबैक रीसेट हो जाता था (#9929).
- यूआई:
- डैश:
- पार्स की गई ज़रूरी और अलग से दी गई प्रॉपर्टी को
Representation(#9579) में जोड़ें. forced-subtitleट्रैक की भूमिका के लिए सहायता उपलब्ध है (#9727).mainट्रैक की भूमिका कोC.SELECTION_FLAG_DEFAULTके तौर पर समझना बंद करें.- उन मेनिफ़ेस्ट के लिए, बेस यूआरएल को बाहर रखने की लॉजिक से जुड़ी समस्या ठीक की गई है जो डीवीबी नेमस्पेस (#9856) के बारे में नहीं बताते हैं.
- मिलते-जुलते
MPD.Locationयूआरएल के लिए सहायता जोड़ी गई (#9939).
- पार्स की गई ज़रूरी और अलग से दी गई प्रॉपर्टी को
- HLS:
- सिर्फ़ ऑडियो वाली एचएलएस स्ट्रीम के लिए,
Format.labelएट्रिब्यूट की वैल्यू सही तरीके से भरें (#9608). - स्टार्ट अप टाइम को बेहतर बनाने के लिए, डिफ़ॉल्ट रूप से बिना चंक वाली तैयारी का इस्तेमाल करें. अगर आपके रेंडिशन में, मक्स किए गए ऐसे क्लोज़्ड कैप्शन ट्रैक शामिल हैं जिन्हें मास्टर प्लेलिस्ट में नहीं बताया गया है, तो आपको उन्हें मास्टर प्लेलिस्ट में जोड़ना चाहिए, ताकि वे चलाने के लिए उपलब्ध हों. इसके अलावा,
HlsMediaSource.Factory.setAllowChunklessPreparation(false)की मदद से, बिना चंक वाली तैयारी की सुविधा बंद करें. - एचएलएस में, की-फ़्रेम के हिसाब से सटीक सीकिंग की सुविधा जोड़ी गई है (#2882).
- सिर्फ़ ऑडियो वाली एचएलएस स्ट्रीम के लिए,
- RTSP:
- किसी भी सर्वर कनेक्शन के लिए इस्तेमाल किए गए
SocketFactoryको बदलने के लिए, क्लाइंट एपीआई उपलब्ध कराएं (#9606). - अगर दोनों मौजूद हैं, तो BASIC के बजाय DIGEST पुष्टि करने के तरीके को प्राथमिकता दें (#9800).
- जब आरटीएसपी ट्रैक की टाइमिंग उपलब्ध न हो, तब उसे हैंडल करें (#9775).
- अमान्य RTP-Info हेडर वैल्यू को अनदेखा करें (#9619).
- किसी भी सर्वर कनेक्शन के लिए इस्तेमाल किए गए
- ट्रांसफ़ॉर्मर:
- एपीआई के ज़रूरी वर्शन को 21 पर बढ़ाएं.
TransformationExceptionका इस्तेमाल अब ट्रांसफ़ॉर्मेशन के दौरान होने वाली गड़बड़ियों के बारे में बताने के लिए किया जाता है.- ट्रांसफ़ॉर्मेशन के विकल्प तय करने के लिए,
TransformationRequestजोड़ा गया. - एक से ज़्यादा श्रोताओं को रजिस्टर करने की अनुमति दें.
- कोडेक आउटपुट को आंशिक रूप से पढ़ने पर, ट्रांसफ़ॉर्मर के रुकने की समस्या ठीक की गई.
- मक्सर को रिलीज़ करते समय,
Transformer.getProgressमें संभावित NPE को ठीक करें. - ट्रांसफ़ॉर्मेशन लागू करने के लिए, एक डेमो ऐप्लिकेशन जोड़ें.
- MediaSession एक्सटेंशन:
- डिफ़ॉल्ट रूप से,
MediaSessionConnectorअब बंद होने पर प्लेलिस्ट को मिटा देता है. जिन ऐप्लिकेशन को प्लेलिस्ट बनाए रखनी है वे कनेक्टर परsetClearMediaItemsOnStop(false)कॉल कर सकते हैं.
- डिफ़ॉल्ट रूप से,
- कास्ट एक्सटेंशन:
- FFmpeg एक्सटेंशन:
build_ffmpeg.shको GNU के बजाय LLVM के बिन यूटिलिटी पर निर्भर बनाएं (#9933).
- Android 12 के साथ काम करता है या नहीं:
- कास्ट एक्सटेंशन को
com.google.android.gms:play-services-cast-framework:20.1.0पर निर्भर करने के लिए अपग्रेड करें.play-services-cast-frameworkके पुराने वर्शन, Android 12 को टारगेट करने वाले ऐप्लिकेशन के साथ काम नहीं करते. साथ ही,PendingIntentबनाते समयIllegalArgumentExceptionकी वजह से क्रैश हो जाएंगे (#9528).
- कास्ट एक्सटेंशन को
- हटाए गए सिंबल हटाएं:
Player.EventListenerहटाएं. इसके बजाय,Player.Listenerका इस्तेमाल करें.MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactory, औरMediaSourceFactory#setDrmUserAgentहटाएं. इसके बजाय,MediaSourceFactory#setDrmSessionManagerProviderका इस्तेमाल करें.MediaSourceFactory#setStreamKeysहटाएं. इसके बजाय,MediaItem.Builder#setStreamKeysका इस्तेमाल करें.MediaSourceFactory#createMediaSource(Uri)हटाएं. इसके बजाय,MediaSourceFactory#createMediaSource(MediaItem)का इस्तेमाल करें.DashMediaSource,HlsMediaSource, औरSsMediaSourceसेsetTagको हटाएं. इसके बजाय,MediaItem.Builder#setTagका इस्तेमाल करें.DashMediaSource#setLivePresentationDelayMs(long, boolean)हटाएं. मेनिफ़ेस्ट को बदलने के लिए,MediaItem.Builder#setLiveConfigurationऔरMediaItem.LiveConfiguration.Builder#setTargetOffsetMsका इस्तेमाल करें. इसके अलावा, फ़ॉलबैक वैल्यू देने के लिएDashMediaSource#setFallbackTargetLiveOffsetMsका इस्तेमाल करें.(Simple)ExoPlayer.setThrowsWhenUsingWrongThreadहटाएं. थ्रेड पर पाबंदी लगाने की सुविधा से ऑप्ट-आउट नहीं किया जा सकता.ActionFileऔरActionFileUpgradeUtilहटाएं. लेगसी ऐक्शन फ़ाइलों कोDefaultDownloadIndexमें मर्ज करने के लिए, ExoPlayer 2.16.1 या इससे पहले के वर्शन का इस्तेमाल करें.ActionFileUpgradeUtilProgressiveMediaSource#setExtractorsFactoryहटाएं. इसके बजाय,ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)कंस्ट्रक्टर का इस्तेमाल करें.ProgressiveMediaSource.Factory#setTagऔरProgressiveMediaSource.Factory#setCustomCacheKeyहटाएं. इसके बजाय,MediaItem.Builder#setTagऔरMediaItem.Builder#setCustomCacheKeyका इस्तेमाल करें.DefaultRenderersFactory(Context, @ExtensionRendererMode int)औरDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)कंस्ट्रक्टर हटाएं. इसके बजाय,DefaultRenderersFactory(Context)कंस्ट्रक्टर,DefaultRenderersFactory#setExtensionRendererMode, औरDefaultRenderersFactory#setAllowedVideoJoiningTimeMsका इस्तेमाल करें.- सभी सार्वजनिक
CronetDataSourceकंस्ट्रक्टर हटाएं. इसके बजाय,CronetDataSource.Factoryका इस्तेमाल करें.
- सिर्फ़ इन
IntDefsको@Target(TYPE_USE)में बदलें. इससे Kotlin में इस्तेमाल किए गए कोड को कंपाइल करने में समस्या आ सकती है. इसे ठीक करने के लिए, एनोटेशन को टाइप (Int) के साथ एनोटेट करने के लिए ले जाएं.@AacAudioObjectType@Ac3Util.SyncFrameInfo.StreamType@AdLoadException.Type@AdtsExtractor.Flags@AmrExtractor.Flags@AspectRatioFrameLayout.ResizeMode@AudioFocusManager.PlayerCommand@AudioSink.SinkFormatSupport@BinarySearchSeeker.TimestampSearchResult.Type@BufferReplacementMode@C.BufferFlags@C.ColorRange@C.ColorSpace@C.ColorTransfer@C.CryptoMode@C.Encoding@C.PcmEncoding@C.Projection@C.SelectionReason@C.StereoMode@C.VideoOutputMode@CacheDataSource.Flags@CaptionStyleCompat.EdgeType@DataSpec.Flags@DataSpec.HttpMethods@DecoderDiscardReasons@DecoderReuseResult@DefaultAudioSink.OutputMode@DefaultDrmSessionManager.Mode@DefaultTrackSelector.SelectionEligibility@DefaultTsPayloadReaderFactory.Flags@EGLSurfaceTexture.SecureMode@EbmlProcessor.ElementType@ExoMediaDrm.KeyRequest.RequestType@ExtensionRendererMode@Extractor.ReadResult@FileTypes.Type@FlacExtractor.Flags(com.google.android.exoplayer2.ext.flacपैकेज में)@FlacExtractor.Flags(com.google.android.exoplayer2.extractor.flacपैकेज में)@FragmentedMp4Extractor.Flags@HlsMediaPlaylist.PlaylistType@HttpDataSourceException.Type@IllegalClippingException.Reason@IllegalMergeException.Reason@LoadErrorHandlingPolicy.FallbackType@MatroskaExtractor.Flags@Mp3Extractor.Flags@Mp4Extractor.Flags@NotificationUtil.Importance@PlaybackException.FieldNumber@PlayerNotificationManager.Priority@PlayerNotificationManager.Visibility@PlayerView.ShowBuffering@Renderer.State@RendererCapabilities.AdaptiveSupport@RendererCapabilities.Capabilities@RendererCapabilities.DecoderSupport@RendererCapabilities.FormatSupport@RendererCapabilities.HardwareAccelerationSupport@RendererCapabilities.TunnelingSupport@SampleStream.ReadDataResult@SampleStream.ReadFlags@StyledPlayerView.ShowBuffering@SubtitleView.ViewType@TextAnnotation.Position@TextEmphasisSpan.MarkFill@TextEmphasisSpan.MarkShape@Track.Transformation@TrackOutput.SampleDataPart@Transformer.ProgressState@TsExtractor.Mode@TsPayloadReader.Flags@WebvttCssStyle.FontSizeUnit
वर्शन 1.0.0-alpha01
27 अक्टूबर, 2021
androidx.media3:media3-*:1.0.0-alpha01 रिलीज़ हो गया है. वर्शन 1.0.0-alpha01 में ये बदलाव शामिल हैं.
नई सुविधाएं
Media3, मीडिया से जुड़ी लाइब्रेरी के लिए नया होम है. इसमें ExoPlayer भी शामिल है. पहले ऐल्फ़ा वर्शन में, मीडिया से जुड़े इस्तेमाल के उदाहरणों को लागू करने के लिए, लाइब्रेरी के शुरुआती और काम करने वाले वर्शन शामिल हैं. जैसे:
- ExoPlayer, Android के लिए ऐप्लिकेशन-लेवल का मीडिया प्लेयर है. इसे आसानी से पसंद के मुताबिक बनाया जा सकता है और इसकी सुविधाओं को बढ़ाया जा सकता है.
- मीडिया सेशन की सुविधा, ताकि प्लेबैक को दिखाया और कंट्रोल किया जा सके. यह नया सेशन मॉड्यूल, ExoPlayer की तरह ही
Playerइंटरफ़ेस का इस्तेमाल करता है. - मीडिया चलाने के लिए यूज़र इंटरफ़ेस बनाने के लिए यूआई कॉम्पोनेंट.
- ExoPlayer के साथ इस्तेमाल करने के लिए, अन्य लाइब्रेरी में फ़ंक्शन रैप करने वाले मॉड्यूल. उदाहरण के लिए, IMA SDK के ज़रिए विज्ञापन डालना.
ज़्यादा जानकारी के लिए, Media3 GitHub प्रोजेक्ट देखें.
ExoPlayer को पहले एक अलग ExoPlayer GitHub प्रोजेक्ट में होस्ट किया जाता था. Media3 में इसका पैकेज नाम androidx.media3.exoplayer है. हम कुछ समय तक ExoPlayer GitHub प्रोजेक्ट को बनाए रखेंगे और उसे रिलीज़ करते रहेंगे, ताकि ऐप्लिकेशन को Media3 पर माइग्रेट करने के लिए समय मिल सके.
Media3 में, लेगसी media2 और mediasession एक्सटेंशन को छोड़कर, ExoPlayer के सभी मॉड्यूल के विकल्प मौजूद हैं. इन दोनों एक्सटेंशन को नए media3-session मॉड्यूल से बदल दिया गया है. इससे प्लेयर और मीडिया सेशन के बीच सीधे तौर पर इंटिग्रेशन होता है. इसके लिए, अडैप्टर/कनेक्टर क्लास का इस्तेमाल करने की ज़रूरत नहीं होती.