Media3
| नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
|---|---|---|---|---|
| 22 अक्टूबर, 2025 | 1.8.0 | - | - | 1.9.0-alpha01 |
डिपेंडेंसी का एलान करना
Media3 पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
ग्रूवी
dependencies { def media3_version = "1.8.0" // 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 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 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.8.0" // 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 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 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.9.0
वर्शन 1.9.0-alpha01
22 अक्टूबर, 2025
androidx.media3:media3-*:1.9.0-alpha01 रिलीज़ हो गया है.
वर्शन 1.9.0-alpha01 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
- AndroidX की अन्य लाइब्रेरी के मुताबिक,
minSdkको23पर अपडेट किया गया है. PlayerTransferStateको जोड़ा गया है. इससेPlayerके अलग-अलग इंस्टेंस के बीच, प्लेबैक की स्थिति को ट्रांसफ़र करने में मदद मिलती है.- Player में
void mute()औरvoid unmute()तरीके जोड़ें. ये तरीके, Player के वॉल्यूम को शून्य पर सेट करने से पहले और बाद में, उसे सुरक्षित रखते हैं और फिर से चालू करते हैं. ExoPlayerने पहले से इस्तेमाल की जा रही यूटिलिटी क्लासWakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManager, औरStuckPlayerDetectorको पब्लिश किया है, ताकि अन्य लोग इनका फिर से इस्तेमाल कर सकें (#1893).ForwardingPlayerलिसनर को मैनेज करने से जुड़ी समस्या ठीक की गई. यह समस्या तब होती थी, जब डेलिगेट प्लेयर, लिसनर इंस्टेंस की तुलना करने के लिए रेफ़रंस इक्वलिटी का इस्तेमाल करता था (#2675).media3-common-ktxलाइब्रेरी में,Player.listenToसस्पेंड करने वाला एक्सटेंशन फ़ंक्शन जोड़ें. यह फ़ंक्शन,Player.Eventsके बारे में बताता है जिस पर कार्रवाई की जानी चाहिए.BasePlayer.getBufferedPercentageमें क्रैश होने की समस्या ठीक की गई है. यह समस्या, पूर्णांक ओवरफ़्लो की वजह से होती है. ऐसा तब होता है, जब बफ़र की गई रिपोर्ट की गई पोज़िशन, रिपोर्ट की गई अवधि से काफ़ी ज़्यादा होती है (#2750).
- AndroidX की अन्य लाइब्रेरी के मुताबिक,
- ExoPlayer:
- ऐसी सुविधा जोड़ें जो प्लेयर के रुक जाने का पता लगाती हो. अगर प्लेयर रुक जाता है, तो यह सुविधा
StuckPlayerExceptionप्लेयर से जुड़ी गड़बड़ी को ट्रिगर करती है. ऐसा इन मामलों में होता है. अगर ज़रूरी हो, तो हर डिफ़ॉल्ट टाइम आउट कोExoPlayer.Builderमें कॉन्फ़िगर किया जा सकता है:- वीडियो चलाने की कोशिश करते समय, 10 मिनट तक
STATE_BUFFERINGहोने के बाद भी बफ़रिंग की प्रोसेस पूरी नहीं हुई. - वीडियो चलाने की कोशिश करते समय,
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में मौजूद सोर्स के लिए, कुल बफ़र बाइट को कंट्रोल करने की सुविधा जोड़ी गई है. इससे, प्रीलोडिंग के लिए कुल बफ़र बाइट को मनमाने तरीके से बढ़ने से रोका जा सकेगा. डिफ़ॉल्ट कंट्रोल लॉजिक का इस्तेमाल करने के लिए, ऐप्लिकेशनDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)के ज़रिए प्रीलोडिंग के लिए टारगेट बफ़र बाइट सेट कर सकते हैं. इसके लिए,PlayerId.Preload.name("preload") काplayerNameइस्तेमाल किया जा सकता है. साथ ही,DefaultPreloadManager.Builder.setLoadControl(LoadControl)के ज़रिए बनाए गएDefaultLoadControlको इंजेक्ट कर सकते हैं.
- ऐसी सुविधा जोड़ें जो प्लेयर के रुक जाने का पता लगाती हो. अगर प्लेयर रुक जाता है, तो यह सुविधा
- CompositionPlayer:
@ExperimentalApiको नए@ExperimentalApiएनोटेशन के तहत पब्लिश करें, ताकि यह पता चल सके कि यह एक्सपेरिमेंट के लिए उपलब्ध है. हालांकि, इस पर अब भी काम चल रहा है.CompositionPlayerऐसा हो सकता है कि आने वाले समय में, कुछ एपीआई में बड़े बदलाव किए जाएं. साथ ही, कुछ इस्तेमाल के उदाहरणों में समस्याएं और सीमाएं भी हो सकती हैं. इनमें से कुछ के बारे में दस्तावेज़ में जानकारी नहीं दी गई है.CompositionPlayerमें,COMMAND_SET_AUDIO_ATTRIBUTESऔर ऑडियो फ़ोकस हैंडलिंग की सुविधा जोड़ी गई.CompositionPlayerमें, सेकंडरी सीक्वेंस की स्पीड बदलने की सुविधा जोड़ी गई है.
- ट्रांसफ़ॉर्मर:
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).
- MP4: एक्सट्रैक्टर से ट्रैक फ़ॉर्मैट जारी करने से पहले, पहले सैंपल की लेयर वैल्यू देखकर
audio/mpeg(MP3),audio/mpeg-L1, औरaudio/mpeg-L2एमआईएमई टाइप के बीच अंतर करें (#2683). - MP4: 1 एमबी से बड़े
stblबॉक्स का मतलब है कि फ़ाइल को फ़्रैगमेंट नहीं किया जाना चाहिए. इससे बहुत बड़ी फ़ाइलों को स्निफ़ करने की क्षमता बेहतर होती है (#2650). - Matroska: DTS-HD का पता लगाने की सुविधा जोड़ी गई (#6225).
MatroskaExtractorमें एक समस्या को ठीक किया गया है. इसमें एक से ज़्यादा ट्रैक वाली फ़ाइलों के लिए, वीडियो में आगे-पीछे करने की सुविधा ठीक से काम नहीं कर रही थी. अब क्यू पॉइंट, अपने-अपने ट्रैक से सही तरीके से जुड़े हुए हैं. इससे वीडियो में सटीक जगह पर जाने में मदद मिलती है.- MP4:
©mvn(मूवमेंट का नाम) और©mvi(मूवमेंट इंडेक्स) मेटाडेटा के लिए सहायता जोड़ी गई है. अब इन्हेंFormat.metadataमेंTextInformationFrameऑब्जेक्ट के तौर पर दिखाया जाता है. इनके आईडी क्रमशःMVNMऔरMVINहैं (#2754). - MPEG-TS: टाइमस्टैंप के बिना पीईएस पैकेट की वजह से होने वाली
IllegalArgumentExceptionकी समस्या को ठीक किया गया हैReorderingBufferQueue(#2764). - MP4: पूरी फ़ाइल को पार्स करने में गड़बड़ी होने के बजाय,
stsdबॉक्स मौजूद न होने वाले ट्रैक को अनदेखा करें. - HEIC फ़ॉर्मैट वाली मोशन फ़ोटो को एक्सट्रैक्ट करने की सुविधा जोड़ी गई.
HeifExtractorअब एम्बेड किए गए वीडियो और ऑडियो ट्रैक वाली HEIC फ़ाइलों को पार्स कर सकता है. - MP3:
FLAG_ENABLE_INDEX_SEEKINGको बदलकर, मेटाडेटा हेडर (जैसे कि Xing और VBRI) से जानकारी पाने की सुविधा को प्राथमिकता दें. अगर कोई अन्य जानकारी मौजूद नहीं है, तो इंडेक्स पर आधारित जानकारी पाने की सुविधा पर वापस जाएं. इससे, सीकिंग मेटाडेटा वाली फ़ाइलों की परफ़ॉर्मेंस बेहतर होती है (#2839).
- Inspector:
- मीडिया की जांच करने वाले टूल के लिए, एक नया
:media3-inspectorमॉड्यूल जोड़ा गया है. इस मॉड्यूल में अब एक नयाandroidx.media3.inspector.MetadataRetrieverशामिल है. यह मेटाडेटा और फ़्रेम निकालने, दोनों के लिए एक यूनिफ़ाइड एपीआई उपलब्ध कराएगा. मौजूदाandroidx.media3.exoplayer.MetadataRetrieverअब काम नहीं करेगा. इसके बजाय, इस नए वर्शन का इस्तेमाल किया जा सकेगा. - फ़्रेम निकालने के लिए, नया सार्वजनिक एपीआई
androidx.media3.inspector.FrameExtractorलॉन्च किया गया. इसAutoCloseableक्लास की मदद से, एचडीआर वीडियो, वीडियो इफ़ेक्ट, और कस्टम डिकोडर चुनने की सुविधा के साथ फ़्रेम निकाले जा सकते हैं. इसे किसी खासMediaItemके लिए,Builderके ज़रिए बनाया जाना चाहिए. - FrameExtractor: किसी मीडिया फ़ाइल से थंबनेल फ़्रेम निकालने के लिए,
getThumbnail()को जोड़ें. इसके लिए, किसी खास टाइमस्टैंप की ज़रूरत नहीं होती.
- मीडिया की जांच करने वाले टूल के लिए, एक नया
- ऑडियो:
AudioProcessorइंस्टेंस को सीकिंग के बारे में बताएं.- कस्टम ऑडियो आउटपुट पाथ के लिए,
DefaultAudioSink.Builderमें नयाAudioOutputProviderइंटरफ़ेस इंजेक्ट करने की अनुमति दें. डिफ़ॉल्ट रूप से, इसकी वैल्यूAudioTrackAudioOutputProviderहोती है. - हैंडल
GainProcessorमें खोजता है. - ट्रैक फ़ॉर्मैट में AC-4 डिकोडर प्रोफ़ाइल और लेवल की क्षमताओं का इस्तेमाल करें. साथ ही, यह आकलन करें कि ये क्षमताएं काम करती हैं या नहीं (#2580).
- प्लेबैक की शुरुआत में, राउटिंग में बदलाव के कॉलबैक को हैंडल करने की वजह से होने वाली संभावित देरी से बचें (#2646).
- EAC3, EAC3-JOC, और AC-4 फ़ॉर्मैट के लिए कोडेक को फिर से इस्तेमाल करने की अनुमति दें (#1346).
Sonicमें फ़्लोट पीसीएम सैंपल के लिए सहायता जोड़ी गई.ToFloatPcmAudioProcessorमें 16 बिट पीसीएम सैंपल के लिए सहायता जोड़ी गई.
- वीडियो:
- अलग-अलग प्रोफ़ाइलों वाले Dolby-Vision कॉन्टेंट के लिए, कोडेक को फिर से इस्तेमाल करने की सुविधा बंद करें.
- टेक्स्ट:
- Dolby Vision कॉन्टेंट में CEA-6/708 सबटाइटल पार्स करने की समस्या ठीक की गई है (#2775).
- इमेज:
- स्क्रबिंग मोड से जुड़ी समस्या को ठीक किया गया है. इस समस्या में, DASH थंबनेल ट्रैक को स्क्रैप करते समय प्लेयर अटक जाता था (#2815).
- DRM:
MediaDrmCallbackतरीकों के रिटर्न टाइप कोbyte[]से बदलकर नएMediaDrmCallback.Responseटाइप में बदल दिया गया है, ताकि अतिरिक्त वैकल्पिक जानकारी दिखाई जा सके. यह सोर्स कोड में किया गया ऐसा बदलाव है जिससे कोड काम करना बंद कर सकता है. हालांकि,byte[]के पिछले वर्शन की रिटर्न वैल्यू कोnew Responseमें रैप करके, इस समस्या को आसानी से ठीक किया जा सकता है.AnalyticsListener.onDrmKeysLoaded(#1001) में, मुख्य अनुरोध की जानकारी जोड़ें. जैसे, यूआरएल और लेटेन्सी.- प्रावधान के अनुरोध के डेटा को यूआरएल पैरामीटर से POST बॉडी में ले जाएं.
- Muxers:
- फ़्रेमवर्क
MediaMuxerके लिए, ड्रॉप-इन रिप्लेसमेंटMediaMuxerCompatजोड़ा गया. - मोशन फ़ोटो बनाने की अनुमति देने के लिए,
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()जोड़ें. OPUS,VORBIS,VP8, औरVP9मीडिया स्ट्रीम कोwebmफ़ाइल फ़ॉर्मैट में मक्स करने की अनुमति देने के लिए,WebmMuxerजोड़ें.
- फ़्रेमवर्क
- IMA एक्सटेंशन:
- कस्टम प्रॉगार्ड नियमों को हटा दिया गया है, ताकि ऐप्लिकेशन, IMA Android संग्रह में रिलीज़ किए गए नियमों का इस्तेमाल कर सकें.
ImaServerSideAdInsertionUriBuilder.setNetworkCodeजोड़ें. यह एक नया एपीआई है. इसकी मदद से, IMA SDK के लिए Google Ad Manager नेटवर्क कोड सेट किया जा सकता है. इससे Google Ad Manager की सेटिंग में बताए गए तरीके से, विज्ञापन आइडेंटिफ़ायर मैनेज किए जा सकते हैं. नेटवर्क कोड ज़रूरी नहीं हैं, लेकिन फ़ुल सर्विस स्ट्रीम के अनुरोधों के लिए इनका इस्तेमाल करने का सुझाव दिया जाता है. नेटवर्क कोड ढूंढने के लिए, यह लेख पढ़ें.- IMA की डिपेंडेंसी को 3.37.0 पर ले जाएं. इसके लिए, कोर लाइब्रेरी के डिसुगरिंग को चालू करना ज़रूरी है. यह सुविधा, निर्भरता वाले ऐप्लिकेशन में भी चालू होनी चाहिए. IMA के कॉन्फ़िगरेशन नोट देखें.
- एसएसएआई यूआरआई बिल्डर में, IMA DAI के कस्टम यूज़र इंटरफ़ेस (यूआई) के विकल्पों के लिए सहायता. सर्वर साइड विज्ञापन डालने की सुविधा के लिए, कस्टम यूज़र इंटरफ़ेस (यूआई) के विकल्पों में "स्किप किया जा सकने वाला" और "इस विज्ञापन के बारे में जानकारी" रेंडर करने की सुविधा शामिल है. फ़िलहाल, यह सुविधा चुनिंदा पब्लिशर के लिए उपलब्ध है. इसके लिए, उन्हें अनुमति वाली सूची में शामिल होना होगा. इस बदलाव से, IMA SDK का वर्शन भी 3.38.0 (रिलीज़ नोट) पर अपग्रेड हो जाता है, ताकि कस्टम यूज़र इंटरफ़ेस (यूआई) के विकल्पों वाले एपीआई को ऐक्सेस किया जा सके.
- सेशन:
MediaSession.Callback.onPlaybackResumptionमें नया पैरामीटर जोड़ें, ताकि यह पता चल सके कि कॉल सिर्फ़ जानकारी इकट्ठा करने के लिए किया गया है या वीडियो चलाने के लिए (#1764).MediaSession.ControllerInfo.isTrustedको अपडेट करें, ताकि अपने ऐप्लिकेशन के कंट्रोलर को भी भरोसेमंद के तौर पर मार्क किया जा सके (#2542).- सूचना अपडेट को मैन्युअल तरीके से ट्रिगर करने के लिए,
MediaSessionService.triggerNotificationUpdateजोड़ें (#1833). - कस्टम कमांड के तरीकों में
ProgressListenerजोड़ें. MediaLibrarySession.Builder.setLibraryErrorReplicationModeकी डिफ़ॉल्ट वैल्यू को बदलकर, नॉन फ़ैटल करें.Contextपैरामीटर जोड़ेंMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625).- बाइंडर के ज़रिए वॉल्यूम कंट्रोल आईडी पाने के बजाय, प्लैटफ़ॉर्म
PlaybackInfoसे इसे पढ़ें. इससे यह पक्का होता है कि प्लेबैक टाइप और आवाज़ कम/ज़्यादा करने वाले कंट्रोल आईडी को एक साथ पढ़ा जाता है और वे एक-दूसरे से मेल खाते हैं. - उस बग को ठीक किया गया है जिसमें
ACTION_UPमुख्य इवेंट को कस्टम हैंडलिंग के लिए कॉलबैक को पास करने से पहले फ़िल्टर कर दिया जाता था. इससे, मीडिया1 के काम करने के तरीके और प्लैटफ़ॉर्म के काम करने के तरीके में समानता आ जाती है (#2637). - उस गड़बड़ी को ठीक किया गया है जिसमें
getCurrentTimeline()कोPlayerWrapperसे कॉल किया जाता था. ऐसा तब भी होता था, जब निर्देश उपलब्ध नहीं होता था (#2665). - उस गड़बड़ी को ठीक किया गया है जिसमें मुख्य लूपर की मैसेज कतार में एक मैसेज छूट गया था. इसकी वजह से, सेवा बंद होने के बाद मेमोरी लीक हो गई थी (#2692).
MediaBrowserवाले लेगसी सेशन ऐप्लिकेशन से कनेक्ट होने पर, कस्टम कमांड सिर्फ़ तब सेशन में भेजी जाती हैं, जब कस्टम ऐक्शन का विज्ञापन लेगसी सेशन केPlaybackStateCompatमें कस्टम ऐक्शन के तौर पर किया गया हो. अन्य सभी कस्टम कार्रवाइयां, सेवा को भेजी जाती हैं.onAudioSessionIdChangedको लागू किया गया है, ताकि मीडिया कंट्रोलर को सूचना दी जा सके कि सेशन ने ऑडियो सेशन आईडी सेट किया है (#244).- उस बग को ठीक किया गया है जिसकी वजह से,
onStartCommand()मेंIntentमीडिया कुंजी इवेंट आने पर,KEYCODE_HEADSETHOOKप्लेयर शुरू नहीं हुआ. इस समस्या को ठीक कर दिया गया है. इसके लिए, 'KEYCODE_HEADSETHOOK' कोKEYCODE_MEDIA_PLAY_PAUSE(#2816) की तरह हैंडल किया गया है. - उस गड़बड़ी को ठीक किया गया है जिसमें सेशन और कंट्रोलर के बीच Surface के साइज़ की जानकारी नहीं दी जाती थी. इस वजह से, डेमो-सेशन में वीडियो इफ़ेक्ट लागू नहीं किए जा सके. अगर कंट्रोलर का इस्तेमाल किया जा रहा है, तो यह एक बड़ा बदलाव हो सकता है. ऐसा तब होता है, जब आपका प्लेयर
setVideoSurfaceHolderकॉल को हैंडल नहीं कर पाता. StringCharSequenceके अलावा अन्य मेटाडेटा वैल्यू, जैसे कि स्पैन-स्टाइल वाली स्ट्रिंग (#2853) के ट्रांसफ़र की समस्या ठीक की गई.
- यूआई:
ProgressStateWithTickIntervalक्लास और उससे जुड़ेrememberProgressStateWithTickIntervalकंपोज़ेबल कोmedia3-ui-composeमॉड्यूल में जोड़ें. इस स्टेट होल्डर का इस्तेमाल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) जोड़ें. PlayerViewमें मीडिया रूट बटन जोड़ने की सुविधा जोड़ी गई.
- एचएलएस एक्सटेंशन:
- एचएलएस इंटरस्टीशियल स्किप एट्रिब्यूट पार्स करता है.
- HLS प्लेलिस्ट और ऐसेट की सूची वाले दस्तावेज़ से, स्किप कंट्रोल एट्रिब्यूट को
AdPlaybackStateमें मैप करें, ताकि उन्हें सार्वजनिक तौर पर ऐक्सेस किया जा सके. - उस बग को ठीक किया गया है जिसमें प्लेलिस्ट से EXT-X-PROGRAM-START-DATE टैग हटाने पर, प्लेलिस्ट के शुरू होने का समय हट जाता था. यह टैग, प्लेलिस्ट के शुरू होने का समय तय करता है (#2760).
- प्लेलिस्ट में किसी दी गई जगह का सेगमेंट इंडेक्स ढूंढने के लिए, बाइनरी सर्च का इस्तेमाल करें (#2826.
- डैश एक्सटेंशन:
- गैर-अनुक्रमिक
data:यूआरआई मेनिफ़ेस्टdata:का इस्तेमाल करके DASH स्ट्रीम चलाने के दौरान आने वालीUnsupportedOperationExceptionसमस्या को ठीक किया गया (#2688). LiveConfigurationकोDashMediaSourceकेMediaItemकी दी गई वैल्यू पर रीसेट करें. ऐसा तब किया जाता है, जब मीडिया आइटम रिलीज़ किया जाता है और जब उपयोगकर्ता उसे अपडेट करता है (#2606).- मेनिफ़ेस्ट के गलत अपडेट की वजह से होने वाली क्रैश की समस्याओं को ठीक किया गया है. इन समस्याओं की शिकायत, प्लेयर से जुड़ी गड़बड़ियों के तौर पर नहीं की गई थी (#2805).
- गैर-अनुक्रमिक
- आरटीएसपी एक्सटेंशन:
- H264 और H265 के लिए, फ़्रैगमेंट किए गए NAL यूनिट को प्रोसेस करते समय, RTP पैकेट के मौजूद न होने की गड़बड़ी को ठीक किया गया है (#2613).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- AV1 एक्सटेंशन: AV1 सॉफ़्टवेयर डिकोडर अब ज़्यादा परफ़ॉर्मेंस वाली
dav1dलाइब्रेरी का इस्तेमाल करता है. यह डिकोडिंग की स्पीड को बेहतर बनाने के लिए,libgav1के पिछले वर्शन की जगह लेता है.
- AV1 एक्सटेंशन: AV1 सॉफ़्टवेयर डिकोडर अब ज़्यादा परफ़ॉर्मेंस वाली
- कास्ट एक्सटेंशन:
CastPlayer.Builderजोड़ें. इससेCastPlayer, स्थानीय और कास्ट किए गए कॉन्टेंट, दोनों को चलाने की सुविधा मिलती है. अगर आपको सिर्फ़ कास्ट किए गए कॉन्टेंट को चलाने की सुविधा चाहिए, तोRemoteCastPlayerका इस्तेमाल करें. इससेCastPlayerकी पुरानी सुविधा का इस्तेमाल किया जा सकेगा. पहले से मौजूदCastPlayerकंस्ट्रक्टर, पहले की तरह ही काम करते हैं. हालांकि, अबCastPlayerयाRemoteCastPlayerबिल्डर का इस्तेमाल करने का सुझाव दिया जाता है.DefaultMediaItemConverterमें, गैर-शून्य माइम टाइप लागू करना बंद करें.- जब
DefaultCastOptionsProvider#toMediaQueueItemउपलब्ध हो, तबMediaItem.mediaMetadata.mediaTypeका इस्तेमाल करके, Cast MEDIA_TYPE का अनुमान लगाएं, ताकि उसका इस्तेमालDefaultCastOptionsProvider#toMediaQueueItemमें किया जा सके. DefaultCastOptionsProviderमें रिमोट से लोकल ट्रांसफ़र करने की सुविधा चालू करें.- सेशन के डेमो में कास्ट करने की सुविधा जोड़ी गई.
- Composable UI पर मीडिया रूट बटन दिखाने की सुविधा जोड़ी गई.
- ऐक्शन बार मेन्यू पर मीडिया रूट बटन दिखाने की सुविधा जोड़ी गई है.
- मीडिया रूट बटन को View UI के तौर पर दिखाने की सुविधा जोड़ी गई है.
- टेस्ट यूटिलिटी:
FakeClockके अपने-आप आगे बढ़ने की सुविधा के लिए, समय का ज़्यादा से ज़्यादा अंतर जोड़ें. यह डिफ़ॉल्ट रूप से एक सेकंड पर सेट होता है. हालांकि, इसेFakeClock.Builderके ज़रिए कॉन्फ़िगर किया जा सकता है.RobolectricUtil.runMainLooperUntil(औरrunLooperUntil) के लिए, मैसेज के बीच का ज़्यादा से ज़्यादा समय अंतर जोड़ें. यह डिफ़ॉल्ट रूप से एक सेकंड होता है. हालांकि, इन तरीकों के नए ओवरलोड के ज़रिए इसे कॉन्फ़िगर किया जा सकता है.CapturingRenderersFactoryकोtest-utilsसेtest-utils-robolectricमें ट्रांसफ़र करें.
- बंद किए गए सिंबल हटाएं:
- अब इस्तेमाल में नहीं आने वाले
DefaultPreloadManagerकंस्ट्रक्टर को हटाएं. इसके बजाय,DefaultPreloadManager.Builderका इस्तेमाल करें. - अब इस्तेमाल नहीं किए जा रहे
EditedMediaItemSequenceकंस्ट्रक्टर हटा दिए गए हैं. इसके बजाय,EditedMediaItemSequence.Builderका इस्तेमाल करें.
- अब इस्तेमाल में नहीं आने वाले
वर्शन 1.8.0
वर्शन 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). Renderer.getMinDurationToProgressUsके डिफ़ॉल्ट व्यवहार को बदलकर, ऐसी बड़ी वैल्यू दिखाएं जिसके लिएrenderको कॉल करने की ज़रूरत न हो.- उस गड़बड़ी को ठीक किया गया है जिसमें वीडियो को रोकने के बाद, आखिरी फ़्रेम पर जाने के दौरान इंटरनल शेड्यूलिंग की वजह से देरी होती थी. फ़िलहाल, बग ठीक करने की सुविधा सिर्फ़ तब काम करती है, जब
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledचालू हो. ExoPlayer.setScrubbingModeEnabled(boolean)तरीका जोड़ें. यह प्लेयर को बार-बार वीडियो को आगे-पीछे करने के लिए ऑप्टिमाइज़ करता है. उदाहरण के लिए, जब कोई उपयोगकर्ता स्क्रबर बार को इधर-उधर खींचता है.ExoPlayerऔरExoPlayer.Builderपर मौजूदsetScrubbingModeParameters(..)की मदद से, स्क्रबर मोड के व्यवहार को अपनी पसंद के मुताबिक बनाया जा सकता है.- स्क्रबिंग मोड में, फ़्रैक्शनल सीक टॉलरेंस को पसंद के मुताबिक बनाने की अनुमति दें.
- स्क्रबिंग मोड में कोडेक की ऑपरेटिंग रेट बढ़ाएं.
- उस गड़बड़ी को ठीक किया गया है जिसमें
AdsMediaSourceके कॉन्टेंट में मौजूद गड़बड़ियों की जानकारी कभी नहीं दी जाती थी (#2337). MergingMediaSourceमें मेमोरी लीक की समस्या ठीक की गई. उदाहरण के लिए, इसका इस्तेमाल तब किया जाता है, जब सबटाइटल साइडलोड किए जाते हैं (#2338).CmcdConfiguration.Factoryकोnullपर वापस जाने की अनुमति दें, ताकि कुछ मीडिया आइटम के लिए CMCD लॉगिंग बंद की जा सके (#2386).- इमेज के डिफ़ॉल्ट बफ़र साइज़ को 128 केबी (टेक्स्ट ट्रैक से कॉपी-पेस्ट करने की वजह से हुई गड़बड़ी) से बढ़ाकर 26 एमबी करें. यह 50 मेगापिक्सल की अल्ट्रा एचडीआर इमेज के लिए काफ़ी है (#2417).
PreCacheHelperजोड़ा गया है. इससे ऐप्लिकेशन, किसी मीडिया को पहले से कैश मेमोरी में सेव कर सकते हैं. इसके लिए, उन्हें मीडिया के शुरू होने की जगह और अवधि बतानी होगी.DefaultPreloadManagerमें बताई गई पोज़िशन से पहले से लोड करने की सुविधा जोड़ी गई.
- ट्रांसफ़ॉर्मर:
CodecDbLiteजोड़ें. इससे वीडियो एन्कोडिंग की सेटिंग को चिपसेट के हिसाब से ऑप्टिमाइज़ किया जा सकेगा.- CodecDB Lite की सेटिंग ऑप्टिमाइज़ करने की सुविधा चालू करने के लिए,
setEnableCodecDbLiteफ़्लैग कोsetEnableCodecDbLiteमें जोड़ें.DefaultEncoderFactoryडिफ़ॉल्ट रूप से, इस फ़्लैग को गलत पर सेट किया जाता है. - अब
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से मीडिया की अवधि को वापस पाने की सुविधा जोड़ी गई है. साथ ही, इसे इंस्टेंस पर आधारित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की मदद से प्रोग्रेसिव स्ट्रीम तैयार कर सकते हैं. साथ ही, हेल्पर से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 और लाइव स्ट्रीम की सुविधा काम करती है.
- उस गड़बड़ी को ठीक किया गया है जिसमें बफ़र में कोई भी हिस्सा उपलब्ध न होने पर,
- डैश एक्सटेंशन:
- उस समस्या को ठीक किया गया है जिसमें ट्रिक-प्ले अडैप्टेशन सेट को उसके मुख्य अडैप्टेशन सेट के साथ मर्ज कर दिया जाता है. इससे अमान्य
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के साथ नई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में मौजूद गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से,nullMediaMetadataके साथsetPlaylistके बादStateमें नयाcurrentMediaItemIndexसेट करने पर, मेटाडेटा का फिर से आकलन नहीं होता (#1940).SimpleBasePlayer.Stateऐक्सेस को सुरक्षित से सार्वजनिक में बदलें, ताकि अन्य क्लास में अपडेट को आसानी से मैनेज किया जा सके (#2128).
- ExoPlayer:
MediaExtractorCompatजोड़ें. यह एक नई क्लास है, जो प्लैटफ़ॉर्मMediaExtractorके जैसी सुविधाएं देती है.MediaCodecVideoRendererका इस्तेमाल करके वीडियो चलाने के लिए, एक्सपेरिमेंट के तौर पर 'ExoPlayer' को पहले से चालू रखने की सुविधा जोड़ी गई है.ExoPlayerको सेकंडरीMediaCodecVideoRendererदेने के लिए,experimentalSetEnableMediaCodecVideoRendererPrewarmingके ज़रिएDefaultRenderersFactoryको कॉन्फ़िगर किया जा सकता है. अगर यह सुविधा चालू है, तोExoPlayerलगातार मीडिया आइटम के वीडियो को पहले से प्रोसेस करता है, ताकि मीडिया आइटम के ट्रांज़िशन में लगने वाले समय को कम किया जा सके.DefaultLoadControlमेंbufferForPlaybackMsऔरbufferForPlaybackAfterRebufferMsकी डिफ़ॉल्ट वैल्यू को घटाकर, क्रमशः 1,000 और 2,000 मि॰से॰ करें.DeviceInfoऔर डिवाइस की आवाज़ को एसिंक्रोनस तरीके से शुरू करें. ऐसा तब करें, जबsetDeviceVolumeControlEnabledका इस्तेमाल करके इसे चालू किया गया हो.ExoPlayer.Builder.build()के बाद ये वैल्यू तुरंत उपलब्ध नहीं होती हैं. साथ ही,Player.Listener,onDeviceInfoChangedऔरonDeviceVolumeChangedके ज़रिए बदलावों की सूचना देता है.- प्लेयर बनाने के बाद, शुरुआती ऑडियो सेशन आईडी तुरंत उपलब्ध नहीं होता. अगर ज़रूरी हो, तो शुरुआती अपडेट सुनने के लिए
AnalyticsListener.onAudioSessionIdChangedका इस्तेमाल किया जा सकता है. - वीडियो ट्रैक चुनते समय भाषा का ध्यान रखें. डिफ़ॉल्ट रूप से, ऐसा 'मुख्य' वीडियो ट्रैक चुनें जो चुने गए ऑडियो ट्रैक की भाषा से मेल खाता हो. हालांकि, ऐसा तब ही किया जाता है, जब वह ट्रैक उपलब्ध हो. वीडियो की भाषा से जुड़ी प्राथमिकताओं को
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)के साथ दिखाया जा सकता है. DefaultTrackSelector.selectVideoTrack()पैरामीटर कोDefaultTrackSelector.selectVideoTrack()तरीके में जोड़ा गया.selectedAudioLanguageMediaSourceEventListener.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में एक विकल्प जोड़ा गया है, ताकि बिना स्किप किए देखे जा सकने वाले मीडिया में क्लिप बनाने की अनुमति दी जा सके.- प्री-वार्मिंग के साथ सीक करने पर, मीडिया आइटम के ट्रांज़िशन को ब्लॉक करने वाली गड़बड़ी को ठीक किया गया.
- उस गड़बड़ी को ठीक किया गया है जिसमें
ExoPlayer.isLoading(),STATE_IDLEयाSTATE_ENDEDमें बदलने के बाद भी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डिकोडर इनपुट बफ़र को हटाने के लिए, एक्सपेरिमेंटलExoPlayerAPI जोड़ें जिन पर निर्भर नहीं रहा जाता.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).
- WebVTT फ़ाइलों में, CR लाइन एंडिंग (#2167) का इस्तेमाल करके, मल्टी-बाइट 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एट्रिब्यूट वाली एचएलएस वीओडी स्ट्रीम काम करती हैं.HlsInterstitialsAdsLoader.AdsMediaSourceFactoryजोड़ें. ऐप्लिकेशन इसका इस्तेमाल करके,AdsMediaSourceइंस्टेंस बना सकते हैं. ये इंस्टेंस,HlsInterstitialsAdsLoaderका इस्तेमाल आसान और सुरक्षित तरीके से करते हैं.- Dolby Vision फ़ॉर्मैट (#1785) का पता लगाने के लिए, HLS प्लेलिस्ट से
SUPPLEMENTAL-CODECSटैग को पार्स करें. - एचएलएस स्ट्रीम में पोज़िशन सिंक करने के लिए, शर्त को आसान बनाया गया है (#2209).
- डैश एक्सटेंशन:
- 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में प्लंब करें.
- कस्टम
- कास्ट एक्सटेंशन:
play-services-cast-frameworkकी डिपेंडेंसी को 21.5.0 पर अपग्रेड करें, ताकि Google Play services इंस्टॉल किए गए लेकिन बंद किए गए डिवाइसों पर, API 34 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन मेंFLAG_MUTABLEक्रैश होने की समस्या को ठीक किया जा सके (#2178).
- डेमो ऐप्लिकेशन:
- अतिरिक्त बटन जोड़कर
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को पास किए गए ऑडियो को हटाने के लिए,Transformer.start()के बजायEditedMediaItem.Builder.setRemoveAudio()का इस्तेमाल करें.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आर्टफ़ैक्ट जोड़ें. यह कॉमन लाइब्रेरी के ऊपर बनाया गया है और 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 API 35+ पर प्लेबैक के लिए, पहले से मौजूद स्पीकर चुनने की अनुमति मिलती है. हालांकि, ऐसा सिर्फ़ तब किया जा सकता है, जब डिवाइस इस सुविधा के साथ काम करता हो.
- ऑडियो फ़ोकस हैंडलिंग की सुविधा चालू होने तक,
Context.getSystemService(Context.AUDIO_SERVICE)को कॉल ब्लॉक करने का अनुरोध न भेजें. इससे यह पक्का होता है कि अगर ऑडियो फ़ोकस हैंडलिंग की सुविधा चालू नहीं है, तो कॉल ब्लॉक नहीं किया जाएगा (#1616). - लोडिंग में गड़बड़ी होने पर, बफ़र किए गए कॉन्टेंट की अवधि के बावजूद उसे चलाने की अनुमति दें (#1571).
AnalyticsListener.onRendererReadyChanged()जोड़कर यह सिग्नल दें कि कब अलग-अलग रेंडरर पर वीडियो चलाने की सुविधा उपलब्ध है.MediaCodecको एसिंक्रोनस मोड (API 31 और इसके बाद के वर्शन पर डिफ़ॉल्ट व्यवहार) में चलाने पर, कभी-कभीMediaCodec.CryptoExceptionको "रनटाइम में अचानक हुई गड़बड़ी" के तौर पर रिपोर्ट किए जाने की समस्या ठीक की गई.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का इस्तेमाल करके जोड़े गए सबटाइटल) के लिए, loadstart/error/cancelled/completed इवेंट रिपोर्ट किए जाएंगे. ये इवेंट,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) के मुताबिक किया गया है. - एडिट लिस्ट (#1797) के साथ MP4 के लिए,
endIndicesकी गिनती में क्रम से बाहर के फ़्रेम हैंडल किए गए. - 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()को किए गए कॉल के फ़ेल होने के बाद 'open' वैल्यू दिखाते हैं. कॉल 'not found' रिसॉर्स की वजह से फ़ेल हुआ था. साथ ही, यह भी पुष्टि करें किDataSource.getUri()औरgetResponseHeaders(),close()को किए गए कॉल से पहले 'open' वैल्यू दिखाते हैं.DataSourceContractTest.getNotFoundResources()को बदलने की सुविधा की मदद से, टेस्ट सब-क्लास कई 'नहीं मिला' संसाधन उपलब्ध करा सकती हैं. साथ ही, वे उम्मीद के मुताबिक हेडर भी उपलब्ध करा सकती हैं. इससे, हेडर वाले एचटीटीपी 404 और "सर्वर नहीं मिला" (कोई हेडर नहीं) के बीच अंतर किया जा सकता है.
- ऑडियो:
- अगर मीडिया में मौजूद है, तो कोडेक पर CTA-2075 के लाउडनेस मेटाडेटा को अपने-आप कॉन्फ़िगर करता है.
- सीख करते समय, वॉल्यूम धीरे-धीरे कम होना चाहिए.
- सीख के दौरान होने वाली पॉप की आवाज़ों को ठीक किया गया.
- Sonic के टाइम-स्ट्रेचिंग/पिच-शिफ़्टिंग एल्गोरिदम के लिए, ट्रंकेशन की गड़बड़ी को ठीक किया गया है.
SpeedChangingAudioProcessorमें मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से आउटपुट फ़्रेम ड्रॉप हो जाते थे.
- वीडियो:
MediaCodecVideoRendererऐसे सैंपल को डिकोड करने से बचता है जिन्हें न तो रेंडर किया जाता है और न ही अन्य सैंपल के रेफ़रंस के तौर पर इस्तेमाल किया जाता है.- एपीआई 35 और इसके बाद के वर्शन पर,
MediaCodecAdapterको अबconfigureमेंnullSurfaceमिल सकता है. साथ ही, अगर कोडेक इसका समर्थन करता है, तो पहले से सेट किए गएSurfaceको हटाने के लिए, नए तरीकेdetachOutputSurfaceको कॉल किया जा सकता है (MediaCodecInfo.detachedSurfaceSupported). onOutputFormatChangedको प्रोसेस करते समय, अगर पिक्सल के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की वैल्यू दी गई हैं, तो उनका इस्तेमाल करें (#1371).MediaCodecAdapter- 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).
- कस्टम
- मेटाडेटा:
- जिन ट्रैक में icy या vnd.dvb.ait कॉन्टेंट मौजूद है उन्हें
C.TRACK_TYPE_METADATAटाइप असाइन करें.
- जिन ट्रैक में icy या vnd.dvb.ait कॉन्टेंट मौजूद है उन्हें
- इमेज:
- Glide या Coil जैसी इमेज लोड करने वाली बाहरी लाइब्रेरी के साथ इंटिग्रेशन को आसान बनाने के लिए,
ExternallyLoadedImageDecoderजोड़ें.
- Glide या Coil जैसी इमेज लोड करने वाली बाहरी लाइब्रेरी के साथ इंटिग्रेशन को आसान बनाने के लिए,
- DataSource:
FileDescriptorDataSourceजोड़ें. यह एक नयाDataSourceहै, जिसका इस्तेमालFileDescriptorसे डेटा पढ़ने के लिए किया जा सकता है (#3757).
- असर:
SurfaceTextureको थोड़ा-बहुत स्केल करने के लिए,DefaultVideoFrameProcessorवर्कअराउंड जोड़ा गया.SurfaceTextureमें, छोटी स्केलिंग शामिल हो सकती है. इससे, काटे गए बफ़र के किनारे के चारों ओर मौजूद एक टेक्सल का बॉर्डर कट जाता है. अब इसे इस तरह से मैनेज किया जाता है कि आउटपुट, अनुमानित आउटपुट के ज़्यादा करीब हो.- स्पीड बढ़ाओ
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को, ब्राउज़र केMediaBrowserकी सदस्यता लेने के बाद, सेवा से भेजी गई गड़बड़ी का मैसेज नहीं मिलता था.parentid - इंटरऑपरेबिलिटी के व्यवहार को बेहतर बनाएं, ताकि लेगसी
MediaBrowserServiceसे कनेक्ट किया गया Media3 ब्राउज़र, माता-पिता की सदस्यता लेते समयparentIdके बच्चों से दो बार अनुरोध न करे.
- यूआई:
- एक्सएमएल पर आधारित शेयर किए गए ट्रांज़िशन से जुड़ी समस्याओं की वजह से, स्ट्रेच किए गए/काटे गए वीडियो को
PlayerView-इन-कंपोज़-AndroidViewवर्कअराउंड में ऑप्ट-इन करें.PlayerViewका इस्तेमाल करने वाले ऐप्लिकेशन को, ऑप्ट-इन करने के लिएAndroidViewकॉल करना होगा (#1237, #1594).PlayerView.setEnableComposeSurfaceSyncWorkaround setFullscreenButtonStateकोPlayerViewमें जोड़ें, ताकि ज़रूरत पड़ने पर फ़ुलस्क्रीन बटन के आइकॉन को अपडेट किया जा सके. इसका मतलब है कि आइकॉन को क्लिक इंटरैक्शन के हिसाब से अपडेट नहीं किया जाएगा, बल्कि आउट-ऑफ़-बैंड तरीके से अपडेट किया जाएगा (#1590, #184).- उस बग को ठीक किया गया है जिसमें ऐप्लिकेशन के हिसाब से टेक्स्ट ट्रैक चुनने की सेटिंग मौजूद होने पर, टेक्स्ट चुनने के विकल्प में "कोई नहीं" विकल्प काम नहीं करता था.
- एक्सएमएल पर आधारित शेयर किए गए ट्रांज़िशन से जुड़ी समस्याओं की वजह से, स्ट्रेच किए गए/काटे गए वीडियो को
- डैश एक्सटेंशन:
- सेगमेंट के बीच से शुरू होने वाली अवधियों के लिए सहायता जोड़ी गई है (#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गड़बड़ी को ठीक करने के लिए,Infoफ़्रेम (#1480) में मौजूद लंबाई वाले फ़ील्ड के आधार पर, आखिर में मौजूद MP3 फ़ॉर्मैट के अलावा अन्य फ़ॉर्मैट के डेटा को सही तरीके से अनदेखा करें.
- 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 में ये बदलाव शामिल हैं.
- कॉमन लाइब्रेरी:
- नो-ऑप सीक कॉल को अनदेखा करने के बजाय, उन्हें सुरक्षित
BasePlayer.seekTo()औरSimpleBasePlayer.handleSeek()तरीकों पर फ़ॉरवर्ड करें. अगर इन तरीकों को किसी कस्टम प्लेयर में लागू किया जा रहा है, तो आपकोmediaItemIndex == C.INDEX_UNSETकी मदद से इन अतिरिक्त कॉल को मैनेज करना पड़ सकता है. - बेहतर Java 8 desugaring पर कंपाइल डिपेंडेंसी हटाएं (#1312).
- पक्का करें कि इमेज के अलावा अन्य
MediaItemके लिए,MediaItem.Builder.setImageDurationMs()में दी गई अवधि को अनदेखा किया गया हो (जैसा कि दस्तावेज़ में बताया गया है). Format.customDataएट्रिब्यूट का इस्तेमाल करके, ऐप्लिकेशन के ज़रिए दी गई कस्टम जानकारी को सेव करें. यह जानकारी,Formatइंस्टेंस के बारे में होती है.
- नो-ऑप सीक कॉल को अनदेखा करने के बजाय, उन्हें सुरक्षित
- ExoPlayer:
BasePreloadManagerजोड़ें. यहBasePreloadManagerके ज़रिए तय की गई प्राथमिकताओं के आधार पर, एक से ज़्यादा सोर्स के लिए प्रीलोडिंग को मैनेज करता है.rankingDataइस क्लास को बढ़ाकर, पसंद के मुताबिक बनाया जा सकता है.DefaultPreloadManagerजोड़ें. यहPreloadMediaSourceका इस्तेमाल करके, सोर्स के मीडिया सैंपल को मेमोरी में पहले से लोड करता है. साथ ही, यह पूर्णांकrankingDataका इस्तेमाल करता है, जो यूज़र इंटरफ़ेस (यूआई) पर किसी आइटम के इंडेक्स को दिखाता है.- एक से ज़्यादा खिलाड़ियों के लिए
LoadControlलागू करने की सुविधा चालू करने के लिए,LoadControlके ज़्यादातर तरीकों मेंPlayerIdजोड़ें. Buffer.isDecodeOnly()औरC.BUFFER_FLAG_DECODE_ONLYको हटाएं. इस फ़्लैग को सेट करने की कोई ज़रूरत नहीं है, क्योंकि रेंडरर और डिकोडर, टाइमस्टैंप के आधार पर बफ़र को छोड़ने का फ़ैसला करेंगे. कस्टमRendererलागू करने के दौरान, यह जांच की जानी चाहिए कि बफ़र का समय कम से कमBaseRenderer.getLastResetPositionUs()है या नहीं. इससे यह तय किया जा सकेगा कि कोई सैंपल दिखाया जाना चाहिए या नहीं. कस्टमSimpleDecoderलागू करने के तरीके से, ज़रूरत पड़ने परisAtLeastOutputStartTimeUs()की जांच की जा सकती है. इसके अलावा, अन्य बफ़र कोDecoderOutputBuffer.shouldBeSkippedके तौर पर मार्क किया जा सकता है, ताकि उन्हें स्किप किया जा सके.TargetPreloadStatusControl.getTargetPreloadStatus(T)को शून्य वैल्यू लौटाने की अनुमति दें, ताकि यह पता चल सके कि दिए गएrankingDataके साथMediaSourceको प्रीलोड नहीं करना है.BasePreloadManagerमेंremove(MediaSource)जोड़ें.- प्रीलोड मैनेजर इंस्टेंस को बनाए रखते हुए, होल्ड किए गए सभी सोर्स को रिलीज़ करने के लिए,
reset()कोBasePreloadManagerमें जोड़ें. ExoPlayer.setPriority()(औरBuilder.setPriority()) जोड़ें, ताकिPriorityTaskManagerमें इस्तेमाल की गई प्राथमिकता की वैल्यू तय की जा सके. साथ ही, API 35 से MediaCodec के लिए प्राथमिकता तय की जा सके.- लास्ट रीबफ़र टाइम को अपडेट करने से जुड़ी समस्या को ठीक किया गया है. इस वजह से, CMCD में
bs(बफ़र स्टार्वेशन) कुंजी गलत थी (#1124). PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)जोड़ें, ताकि यह पता चल सके कि सोर्स आखिर तक लोड हो गया है. इससेDefaultPreloadManagerऔर कस्टमPreloadMediaSource.PreloadControlलागू करने की सुविधा, अगले सोर्स को प्रीलोड कर सकती है या अन्य कार्रवाइयां कर सकती है.- इस गड़बड़ी को ठीक किया गया है, जिसमें आइटम के आखिर में आवाज़ बंद करने की सुविधा को स्किप करने पर, चलाने से जुड़ी गड़बड़ी हो सकती है.
- पहले से लोड करने की अवधि को खारिज करने के लिए,
PreloadMediaSourceमेंclearजोड़ें. - नया गड़बड़ी कोड
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDजोड़ें. इसका इस्तेमाल तब किया जाता है, जब ज़्यादा प्राथमिकता वाले टास्क के लिए कोडेक संसाधनों को वापस लिया जाता है. AdsMediaSourceको शुरुआती कॉन्टेंट मीडिया तैयार होने से पहले, प्रीरोल विज्ञापन लोड करने की अनुमति दें (#1358).- उस बग को ठीक किया गया है जिसमें ओरिजनल अवधि को मेनिफ़ेस्ट से हटा दिए जाने के बाद, मल्टी-पीरियड डैश लाइव स्ट्रीम को फिर से तैयार करने पर, वीडियो चलाने की सुविधा
STATE_ENDEDपर चली जाती थी. PreloadMediaSource.PreloadControlमें,onTimelineRefreshed()का नाम बदलकरonSourcePrepared()औरonPrepared()का नाम बदलकरonTracksSelected()कर दें. साथ ही,DefaultPreloadManager.Stageमें मौजूद IntDefs के नाम भी बदलें.- डाइनैमिक शेड्यूलिंग के लिए एक्सपेरिमेंटल सपोर्ट जोड़ा गया है, ताकि काम को सीपीयू के वेक-अप साइकल के साथ बेहतर तरीके से अलाइन किया जा सके. साथ ही, रेंडरर के काम करने तक वेक-अप में देरी की जा सके.
ExoPlayer इंस्टेंस सेट अप करते समय,
experimentalSetDynamicSchedulingEnabled()का इस्तेमाल करके इसे चालू किया जा सकता है. Renderer.getDurationToProgressUs()जोड़ें.Rendererइस तरीके को लागू कर सकता है, ताकि ExoPlayer को वह अवधि मिल सके जिसके लिए रेंडरर को आगे बढ़ना है. अगरExoPlayerकोexperimentalSetDynamicSchedulingEnabled()के साथ सेट किया जाता है, तोExoPlayerअपने काम के टास्क को शेड्यूल करने का समय तय करते समय, इस तरीके को कॉल करेगा.MediaCodecAdapter#OnBufferAvailableListenerको जोड़ें, ताकिMediaCodecRendererके इस्तेमाल के लिए इनपुट और आउटपुट बफ़र उपलब्ध होने पर सूचना मिल सके. इन कॉलबैक को पाने परMediaCodecRenderer,ExoPlayerको सिग्नल देगा. अगर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).
- API 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से गुणा करके, उन्हें फ़्लिप करें. - उस गड़बड़ी को ठीक किया गया है जिसमें
ExoPlayer#setVideoEffectsके साथ इस्तेमाल करने परTimestampWrapperक्रैश हो जाता हैExoPlayer#setVideoEffects(#821). - एसडीआर वीडियो के लिए, डिफ़ॉल्ट एसडीआर कलर वर्किंग स्पेस को लीनियर कलर से बदलकर इलेक्ट्रिकल बीटी 709 एसडीआर वीडियो करें. साथ ही, ओरिजनल कलरस्पेस को बनाए रखने के लिए तीसरा विकल्प भी दें.
- EditedMediaItemSequences के लिए, z-ऑर्डर को अनिश्चित तौर पर तय करने की अनुमति दें (#1055).
- एचडीआर कॉन्टेंट के अलग-अलग हिस्सों में, एक जैसी ल्यूमिनेंस रेंज बनाए रखता है (एचएलजी रेंज का इस्तेमाल करता है).
- एचडीआर कॉन्टेंट पर अल्ट्रा एचडीआर (बिटमैप) ओवरले के लिए सहायता जोड़ी गई है.
- एपीआई 26 से पहले,
SeparableConvolutionइफ़ेक्ट इस्तेमाल करने की अनुमति दें. - इस्तेमाल नहीं किए गए
OverlaySettings.useHdrहटाएं, क्योंकि ओवरले और फ़्रेम की डाइनैमिक रेंज एक जैसी होनी चाहिए. TextOverlayके लिए, एचडीआर टेक्नोलॉजी के काम करने की सुविधा जोड़ी गई.OverlaySettings.Builder.setHdrLuminanceMultiplier()की मदद से, टेक्स्ट ओवरले की चमक को अडजस्ट किया जा सकता है.
- IMA एक्सटेंशन:
- ऐसे एपीआई को प्रमोट करें जिनकी मदद से ऐप्लिकेशन, स्टेबल तौर पर 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में अलाइन करें, ताकि मेटाडेटा प्रॉपर्टी चुनते समय, मीडिया1 में इस्तेमाल किए गए पसंदीदा क्रम और लॉजिक का इस्तेमाल किया जा सके.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 एट्रिब्यूट का इस्तेमाल करें, ताकि हरPlayerViewइंस्टेंस के लिए अलग-अलग ड्रॉएबल इस्तेमाल किए जा सकें. ऐसा ग्लोबल ओवरराइड (#1200) के बजाय किया जाना चाहिए.- 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 के लिए CMCD चालू करने पर,
Source ErrorऔरIllegalArgumentExceptionदिखते थे. - उस गड़बड़ी को ठीक किया गया है जिसकी वजह से लाइव कॉन्टेंट चलाने के दौरान, मुख्य प्लेलिस्ट के अलावा अन्य प्लेलिस्ट रीफ़्रेश नहीं होती थीं (#1240).
- उस बग को ठीक किया गया है जिसकी वजह से, एचएलएस लाइव स्ट्रीम के लिए सीएमसीडी की सुविधा चालू करने पर
ArrayIndexOutOfBoundsExceptionकी समस्या आ रही थी (#1395).
- उस गड़बड़ी को ठीक किया गया है जिसमें डिसकंटिन्यूटी का इंतज़ार कर रहे ईएमएसजी सैंपल को
- डैश एक्सटेंशन:
- कास्ट एक्सटेंशन:
- उस बग को ठीक किया गया है जिसकी वजह से,
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()के लिए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: एक के बाद एक आने वाले क्यू से,
WebvttParser.parseके फ़र्ज़ी अतिरिक्तCuesWithTimingइंस्टेंस बनने से रोकें (#1177).
- WebVTT: एक के बाद एक आने वाले क्यू से,
- DRM:
- Android 14 के कुछ डिवाइसों पर,
ResourceBusyExceptionयाNotProvisionedExceptionके बजायMediaDrmफ़्रेमवर्क से जनरेट होने वालीNoSuchMethodErrorको ठीक किया गया है (#1145).
- Android 14 के कुछ डिवाइसों पर,
- असर:
- कलर स्पेस बदलकर, पीक्यू से एसडीआर टोन-मैपिंग को बेहतर बनाया गया है.
- सेशन:
- यूआई:
- अगर
Locale, डिसप्ले नेम की पहचान नहीं कर पाता है, तो ऑडियो ट्रैक की भाषा का नाम शामिल करने के लिए फ़ॉलबैक करें (#988).
- अगर
- डैश एक्सटेंशन:
- मेनिफ़ेस्ट से सभी
Labelएलिमेंट कोFormat.labelsमें पॉप्युलेट करें (#1054).
- मेनिफ़ेस्ट से सभी
- आरटीएसपी एक्सटेंशन:
- एसडीपी पार्सिंग में, सेशन की जानकारी (i-टैग) के खाली मानों को छोड़ें (#1087).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, 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 की डिपेंडेंसी के नए वर्शन पर अपग्रेड करने के लिए, यह ज़रूरी है.- जब इनमें से कम से कम एक वैल्यू शून्य न हो, तब
MediaMetadata.Builder.populate(MediaMetadata)मेंartworkUriऔरartworkData, दोनों को भरें (#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 का इस्तेमाल करके,
HttpEngineDataSourceलागू करें. यह एकHttpDataSourceहै. CompositeSequenceableLoaderको सबक्लासिंग से रोकें. इस कॉम्पोनेंट को पहले एक्सटेंड किया जा सकता था, लेकिन इसे कभी भी लाइब्रेरी में सबक्लास नहीं किया गया. डेकोरेटर पैटर्न का इस्तेमाल करके किसी इंस्टेंस को रैप करके और कस्टमCompositeSequenceableLoaderFactoryलागू करके, पसंद के मुताबिक बनाया जा सकता है.- उस समस्या को ठीक किया गया है जिसमें एक ही समय को दोहराने पर, इस आइटम का मेटाडेटा मिट जाता था (#1007).
experimentalSetSubtitleParserFactoryऔरDefaultHlsExtractorFactoryके नाम बदलकरsetSubtitleParserFactoryकर दिए गए हैं. साथ ही,nullको पास करने की अनुमति नहीं है.BundledChunkExtractor.Factoryपार्सिंग के तरीके को कंट्रोल करने के लिए,experimentalParseSubtitlesDuringExtraction(boolean)के नए तरीकों का इस्तेमाल करें.- डेटा निकालने के दौरान इस्तेमाल किए गए
SubtitleParser.Factoryको पसंद के मुताबिक बनाने की सुविधा जोड़ी गई. इसके लिए,MediaSource.Factory.setSubtitleParserFactory()का इस्तेमाल करें. MergingMediaSourceसे जनरेट किए गए सभीFormat.idफ़ील्ड में सोर्स प्रीफ़िक्स जोड़ें. इससे यह पता लगाने में मदद मिलती है कि किस सोर्स नेFormat(#883) बनाया है.- कस्टम कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) के मुख्य नामों की पुष्टि करने के लिए इस्तेमाल किए गए रेगुलर एक्सप्रेशन (रेगुलर एक्सप्रेशन) को ठीक किया गया है. इसके लिए, इसमें बदलाव करके सिर्फ़ हाइफ़न की जांच करने की सुविधा जोड़ी गई है (#1028).
- CMCD क्वेरी पैरामीटर को दो बार कोड में बदलने की सुविधा बंद की गई है (#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 करने की सुविधा कम सटीक होती है. ऐसा तब होता है, जब हम seek table को अनदेखा करते हैं और यह मान लेते हैं कि फ़ाइल CBR है. - MPEG2-TS: DTS, DTS-LBR, और DTS:X Profile2 के लिए सहायता जोड़ी गई (#275).
- टीएस डिस्क्रिप्टर से ऑडियो टाइप एक्सट्रैक्ट किए गए हैं और उन्हें भूमिका के फ़्लैग पर मैप किया गया है. इससे उपयोगकर्ता, ऑडियो ट्रैक के बारे में बेहतर जानकारी पाकर उन्हें चुन सकते हैं (#973).
- MP4 एक्सट्रैक्टर में AV1C पार्सिंग की सुविधा जोड़ी गई है, ताकि
- ऑडियो:
- वीडियो:
MediaCodecVideoRendererकंस्ट्रक्टर को बदलें. यहVideoFrameProcessor.Factoryआर्ग्युमेंट लेता है. इसे ऐसे कंस्ट्रक्टर से बदलें जोVideoSinkProviderआर्ग्युमेंट लेता है. जिन ऐप्लिकेशन को कस्टमVideoFrameProcessor.Factoryइंजेक्ट करना है वे कस्टमVideoFrameProcessor.Factoryका इस्तेमाल करने वालेCompositingVideoSinkProviderको इंस्टैंशिएट कर सकते हैं. साथ ही, वीडियो सिंक प्रोवाइडर कोMediaCodecVideoRendererपास कर सकते हैं.
- टेक्स्ट:
DefaultExtractorsFactory.setTextTrackTranscodingEnabledका इस्तेमाल करते समय,Tried to marshall a Parcel that contained Binder objectsगड़बड़ी को ठीक करने के लिए, बिटमैप के सीरियल बनाने की प्रोसेस को ठीक किया गया है (#836).- CEA-708:
rowLockवैल्यू को अनदेखा करें. CEA-708-E S-2023 स्पेसिफ़िकेशन के मुताबिक,rowLockऔरcolumnLock, दोनों को सही माना जाना चाहिए. भले ही, स्ट्रीम में मौजूद वैल्यू कुछ भी हों.columnLockसुविधा लागू नहीं की गई है. इसलिए, इसे हमेशा गलत माना जाता है.
- इमेज:
- DASH थंबनेल के लिए सहायता जोड़ी गई. ग्रिड इमेज को काट-छांटकर छोटा किया जाता है. साथ ही, हर इमेज के लिए अलग-अलग थंबनेल दिए जाते हैं, ताकि उन्हें प्रज़ेंटेशन के समय के
ImageOutputदिखाया जा सके.
- DASH थंबनेल के लिए सहायता जोड़ी गई. ग्रिड इमेज को काट-छांटकर छोटा किया जाता है. साथ ही, हर इमेज के लिए अलग-अलग थंबनेल दिए जाते हैं, ताकि उन्हें प्रज़ेंटेशन के समय के
- DRM:
- DRM कॉन्टेंट में, 'क्लियर लीड' वाले बिना एन्क्रिप्ट (सुरक्षित) किए गए सैंपल को डिफ़ॉल्ट रूप से तुरंत चलाएं. भले ही, बाद में एन्क्रिप्ट (सुरक्षित) किए गए सैंपल के लिए कुंजियां अभी तैयार न हुई हों. अगर वीडियो चलाने की पोज़िशन, एन्क्रिप्ट (सुरक्षित) किए गए सैंपल तक पहुंचने पर भी कुंजियां तैयार नहीं होती हैं, तो वीडियो बीच में रुक सकता है. हालांकि, पहले इस समय तक वीडियो चलना शुरू नहीं होता था. इस सुविधा को
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyयाDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeysकी मदद से बंद किया जा सकता है.
- DRM कॉन्टेंट में, 'क्लियर लीड' वाले बिना एन्क्रिप्ट (सुरक्षित) किए गए सैंपल को डिफ़ॉल्ट रूप से तुरंत चलाएं. भले ही, बाद में एन्क्रिप्ट (सुरक्षित) किए गए सैंपल के लिए कुंजियां अभी तैयार न हुई हों. अगर वीडियो चलाने की पोज़िशन, एन्क्रिप्ट (सुरक्षित) किए गए सैंपल तक पहुंचने पर भी कुंजियां तैयार नहीं होती हैं, तो वीडियो बीच में रुक सकता है. हालांकि, पहले इस समय तक वीडियो चलना शुरू नहीं होता था. इस सुविधा को
- IMA एक्सटेंशन:
- उस समस्या को ठीक किया गया है जिसकी वजह से, सही फ़ाइल एक्सटेंशन के बिना DASH और HLS विज्ञापन नहीं चलाए जा सकते थे.
- सेशन:
- टीवी ऐप्लिकेशन के लिए, दो बार क्लिक करने का पता लगाने की सुविधा बंद करें (#962).
- उस समस्या को ठीक किया गया है जिसमें सिर्फ़ नॉन-शून्य एक्स्ट्रा वाले
MediaItem.RequestMetadataको मीडिया कंट्रोलर और सेशन के बीच ट्रांसमिट नहीं किया जाता है. MediaLibrarySession.Builderमें ऐसा कंस्ट्रक्टर जोड़ें जोMediaLibraryServiceके बजाय सिर्फ़Contextलेता हो.
- एचएलएस एक्सटेंशन:
HlsMediaPeriodको पैकेज-प्राइवेट विज़िबिलिटी पर सेट करें. इस टाइप पर, HLS पैकेज के बाहर से सीधे तौर पर निर्भर नहीं रहना चाहिए.- Resolve, किसी सेगमेंट की शुरुआत को ज़्यादा असरदार तरीके से ढूंढता है (#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को कई बार कॉल किए जाने पर, EOS को हैंडल करने से जुड़ी समस्या ठीक की गई (#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 मेनिफ़ेस्ट में Dolby के लिए, "f800" को पांच चैनलों की संख्या के तौर पर पार्स करें (#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इंटरफ़ेस मेंSequenceableLoader.continueLoading(long)तरीके को बेहतर बनाया गया है, ताकिSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfoमें मौजूदा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).CompositeMediaSource.getMediaTimeForChildMediaTimeमेंMediaPeriodIdपैरामीटर जोड़ें.ClippingMediaSourceऔर अन्य सोर्स के लिए सहायता (जिनमें अवधि/विंडो के समय के ऑफ़सेट शामिल हैं)ConcatenatingMediaSource2(#11226) में.BaseRenderer.onStreamChanged()को बदलकरMediaPeriodIdकरें, ताकि आपको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 पर आने के बजाय, 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 आइडेंटिफ़ायर का इस्तेमाल करने की अनुमति देता है.
- एक्सट्रैक्शन के दौरान सबटाइटल पार्स करने की एक्सपेरिमेंटल सुविधा जोड़ी गई. इसमें ओवरलैप होने वाले सबटाइटल को मर्ज करने की सुविधा बेहतर तरीके से काम करती है. साथ ही, सबटाइटल सेगमेंट के बीच ट्रांज़िशन करते समय होने वाली फ़्लिकरिंग की समस्या को ठीक किया जाता है.
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288) का इस्तेमाल करके, इस सुविधा को चालू किया जा सकता है.
- आरटीएसपी एक्सटेंशन:
- रेस कंडीशन की समस्या ठीक की गई है. इससे टीसीपी पर वापस आने पर
IndexOutOfBoundsExceptionकी समस्या हो सकती थी या कुछ मामलों में वीडियो रुक सकता था. RtspMediaPeriod(#577) की लोडिंग की स्थिति वापस लाते समय, आरटीएसपी सेटअप में स्थिति की जांच करें.- Options रिस्पॉन्स के सार्वजनिक हेडर में, कस्टम आरटीएसपी अनुरोध के तरीकों को अनदेखा करें (#613).
- RTSP Setup Response timeout value का इस्तेमाल, RTSP Options के Keep-Alive अनुरोध भेजने के समय अंतराल में करें (#662).
- रेस कंडीशन की समस्या ठीक की गई है. इससे टीसीपी पर वापस आने पर
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
- एमआईडीआई डीकोडर मॉड्यूल रिलीज़ किया गया है. यह ऑडियो को सिंथेसाइज़ करने के लिए, Jsyn लाइब्रेरी का इस्तेमाल करके स्टैंडर्ड एमआईडीआई फ़ाइलों को चलाने की सुविधा देता है.
- उन आउटपुट बफ़र को सीधे तौर पर मार्क करने के लिए
DecoderOutputBuffer.shouldBeSkippedजोड़ें जिन्हें दिखाने की ज़रूरत नहीं है. इसेC.BUFFER_FLAG_DECODE_ONLYकी जगह इस्तेमाल किया जा सकता है.C.BUFFER_FLAG_DECODE_ONLYको बंद कर दिया जाएगा. Decoder.setOutputStartTimeUsऔरSimpleDecoder.isAtLeastOutputStartTimeUsजोड़ें, ताकि डिकोडर, शुरू होने के समय से पहले सिर्फ़ डिकोड किए गए सैंपल छोड़ सकें. इसेBuffer.isDecodeOnlyके बजाय इस्तेमाल करना चाहिए, क्योंकि यह सुविधा बंद हो जाएगी.- Maven रिपॉज़िटरी में एमआईडीआई डिकोडर आर्टफ़ैक्ट पब्लिश करने से जुड़ी गड़बड़ी ठीक की गई. आर्टफ़ैक्ट का नाम बदलकर
media3-exoplayer-midiकर दिया गया है #734.
- लीकबैक एक्सटेंशन:
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, किसी प्लैटफ़ॉर्म को बंद करने पर Leanback कोड में
ArithmeticExceptionआ सकता है (#617).
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, किसी प्लैटफ़ॉर्म को बंद करने पर Leanback कोड में
- टेस्ट यूटिलिटी:
TestExoPlayerBuilderऔरFakeClockको Espresso UI टेस्ट और Compose UI टेस्ट के साथ काम करने लायक बनाएं. इस अपडेट में, उस गड़बड़ी को ठीक किया गया है जिसमें 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से उपलब्ध ट्रैक टाइप को फ़िल्टर किया जा सके.- डैश, एचएलएस, और स्मूथस्ट्रीमिंग के अडेप्टिव स्ट्रीमिंग फ़ॉर्मैट के आउटगोइंग अनुरोधों में, कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) को शामिल करने की सुविधा जोड़ी गई है. इन फ़ील्ड को शामिल किया गया है:
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प्रॉपर्टी को अपडेट कर देगा.AudioSink.Listenerइंटरफ़ेस में नए इवेंटonAudioCapabilitiesChangedऔर नए इंटरफ़ेसRendererCapabilities.Listenerके ज़रिए, ऑडियो की सुविधाओं में हुए बदलावों को लागू करें. यहonRendererCapabilitiesChangedइवेंट को ट्रिगर करता है.- ऑडियो चैनल पर स्केलिंग/मिक्सिंग लागू करने के लिए,
ChannelMixingAudioProcessorजोड़ा गया. - ऑडियो की सुविधाओं में बदलाव होने के बाद, बाईपास मोड चालू होने पर ऑडियो डिकोडर को खारिज करने के लिए,
DecoderDiscardReasonsमें नई पूर्णांक वैल्यूDISCARD_REASON_AUDIO_BYPASS_POSSIBLEजोड़ें. - DTS Express और DTS:X के लिए, सीधे तौर पर प्लेबैक की सुविधा जोड़ी गई है (#335).
- उस गड़बड़ी को ठीक किया गया है जिसमें टनलिंग चालू होने और
- वीडियो:
- रेंडरर के बंद होने पर,
MediaCodecVideoRendererको 0 चौड़ाई और 0 ऊंचाई वालाVideoSizeरिपोर्ट करने के लिए कहें.Player.Listener.onVideoSizeChangedमें बदलाव होने पर,Player.Listener.onVideoSizeChangedको कॉल किया जाता है.Player.getVideoSize()इस बदलाव के बाद,MediaCodecVideoRendererके साथ ExoPlayer के वीडियो का साइज़ 0 होता है. ऐसा तब होता है, जब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).
- यूआई:
- प्ले/रोकें बटन के साथ कस्टम यूज़र इंटरफ़ेस (यूआई) एलिमेंट लिखने के लिए, यूटिलिटी के तरीके
shouldShowPlayButtonऔरhandlePlayPauseButtonActionजोड़ें.
- प्ले/रोकें बटन के साथ कस्टम यूज़र इंटरफ़ेस (यूआई) एलिमेंट लिखने के लिए, यूटिलिटी के तरीके
- आरटीएसपी एक्सटेंशन:
- डैश एक्सटेंशन:
- एक से ज़्यादा समयावधि वाली DASH स्ट्रीम के लिए,
MediaLoadData.startTimeMsऔरMediaLoadData.endTimeMsसे मीडिया टाइम ऑफ़सेट हटाएं. - उस गड़बड़ी को ठीक किया गया है जिसमें एक से ज़्यादा अवधि वाले लाइव डैश मीडिया सोर्स को फिर से तैयार करने पर
IndexOutOfBoundsException(#10838) गड़बड़ी होती थी.
- एक से ज़्यादा समयावधि वाली DASH स्ट्रीम के लिए,
- एचएलएस एक्सटेंशन:
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)को इनिशियलाइज़ करने के लिए, लोडिंग थ्रेड के इंतज़ार करने का समय सेट करने के लिए,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पैरामीटर देने का विकल्प शामिल होता है. Formatक्लास को इंस्टैंशिएट करने के लिए इस्तेमाल किए गए, बंद किए गए तरीकेcreateVideoSampleFormat,createAudioSampleFormat,createContainerFormat, औरcreateSampleFormatहटाएं. इसके बजाय,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).
- टेक्स्ट:
- SSA: अगर UTF-16 फ़ाइलें बाइट ऑर्डर मार्क (#319) से शुरू होती हैं, तो उनके लिए सहायता जोड़ें.
- सेशन:
- उस समस्या को ठीक किया गया है जिसमें लेगसी
MediaSessionCompatसे कनेक्ट होने पर,MediaControllerउपलब्ध कमांड अपडेट नहीं करता है. लेगसीMediaSessionCompatअपनी कार्रवाइयां अपडेट करता है. - उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, सिस्टम यूज़र इंटरफ़ेस (यूआई) से
MediaLibraryServiceको किए गए कॉल के लिए,Callback.onGetLibraryRootसे शून्य वैल्यू नहीं मिलती थी. यह गड़बड़ी, एपीआई लेवल 30 परparams.isRecent == trueचालू होने पर होती थी (#355). 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:
- अगर UDP के साथ RTSP सेटअप करने पर, RTSP Error 461 UnsupportedTransport (#11069) की समस्या आती है, तो TCP के साथ फिर से कोशिश करें.
वर्शन 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:
- अमान्य आरटीएसपी डिस्क्राइब रिस्पॉन्स मैसेज (#10971) को पार्स करने के दौरान, IllegalArgumentException को पकड़ा गया.
- सेशन:
- सूचना में मौजूद 'चलाएं/रोकें' बटन, प्लेयर की स्थिति के साथ अपडेट नहीं होता था. इस गड़बड़ी को ठीक किया गया है (#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के लिए बफ़र के कम से कम साइज़ का हिसाब लगाएं.
- कंप्रेस किए गए ऑडियो फ़ॉर्मैट के बिटरेट का इस्तेमाल करके, डायरेक्ट प्लेबैक (पासथ्रू) में
- टेक्स्ट:
- अगर किसी सबटाइटल फ़ाइल में कोई क्यू नहीं है, तो
TextRendererमेंSubtitle.getEventTimeको अमान्य (नेगेटिव) इंडेक्स पास करने की समस्या ठीक की गई. - 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). - वीडियो चलाने के लिए ज़रूरी मेमोरी उपलब्ध न होने की वजह से, वीडियो अटकने से पहले बैक बफ़र को खारिज करें.
- ऑफ़लोडिंग की सुविधा चालू होने पर, "doSomeWork" ब्लॉक की ट्रेसिंग बंद करें.
PlaybackStatsListenerमें तेज़ी से आगे-पीछे करने की सुविधा के साथ सेशन ट्रैकिंग की समस्या ठीक की गई हैPlaybackStatsListener(#180).- एक आइटम वाली प्लेलिस्ट में
seekToNextयाseekToPreviousको कॉल करते समय,onMediaItemTransitionकॉलबैक का अनुरोध नहीं किया जा सका (#10667). Player.getSurfaceSizeजोड़ें, जो उस सर्फ़ेस का साइज़ दिखाता है जिस पर वीडियो रेंडर किया गया है.- उस बग को ठीक किया गया है जिसकी वजह से, प्लेयर रिलीज़ के दौरान श्रोताओं को हटाने पर
IllegalStateException(#10758) हो सकती है.
- यह देखने के लिए कि फ़िलहाल चुने गए ट्रैक के लिए टनलिंग की सुविधा चालू है या नहीं,
- बिल्ड:
- कंपाइलेशन से जुड़ी गड़बड़ियों से बचने के लिए, कम से कम
compileSdkVersionलागू करें (#10684). - किसी दूसरे ग्रैडल बिल्ड में शामिल होने पर, पब्लिशिंग ब्लॉक करने से बचें.
- कंपाइलेशन से जुड़ी गड़बड़ियों से बचने के लिए, कम से कम
- ट्रैक चुनने की सुविधा:
- अगर डिसप्ले पर Dolby Vision काम नहीं करता है, तो Dolby Vision के बजाय दूसरे ट्रैक को प्राथमिकता दें. (#8944).
- डाउनलोड:
ProgressiveDownloaderमें संभावित इनफ़िनिट लूप की समस्या ठीक की गई. यह समस्या, एक हीPriorityTaskManagerको एक साथ डाउनलोड और चलाने की वजह से हुई थी (#10570).- डाउनलोड होने की सूचना तुरंत दिखना (#183).
- एक साथ कई फ़ाइलें डाउनलोड करने की सुविधा को बंद कर दिया गया है, ताकि ज़्यादा थ्रेड न बन पाएं (#10458).
- वीडियो:
- अगर डिसप्ले पर Dolby Vision काम नहीं करता है, तो इसके लिए किसी दूसरे डिकोडर का इस्तेमाल करें. (#9794).
- ऑडियो:
- एक साथ कई खिलाड़ियों को रिलीज़ करते समय, OutOfMemory गड़बड़ियों से बचने के लिए,
SingleThreadExecutorइंस्टेंस रिलीज़ करने के लिएSingleThreadExecutorका इस्तेमाल करें (#10057).AudioTrack - यह कुकी, 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(#142) की मदद से वीडियो चलाने की सुविधा को कंट्रोल करते समय,CastPlayerकी पहचान की जा सके.
- ट्रांसफ़ॉर्मर:
- आउटपुट सैंपल जनरेट करने में ज़्यादा समय लगने का पता लगाने के लिए, 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 के लिए प्लैटफ़ॉर्म के डाइग्नोस्टिक्स में योगदान देने से ऑप्ट-आउट कर सकते हैं. इसके लिए,ExoPlayer.Builder.setUsePlatformDiagnostics(false)का इस्तेमाल करें.- उस बग को ठीक किया गया है जिसकी वजह से
MergingMediaSourceका इस्तेमाल करते समय ट्रैक बहुत बार रीसेट हो जाते थे. उदाहरण के लिए, सबटाइटल साइड-लोड करते समय और वीडियो चलाने के दौरान चुने गए सबटाइटल को बदलते समय (#10248). - API 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+) नहीं किया जा सकता या वह Dolby सराउंड साउंड फ़ॉर्मैट नहीं है. इसके अलावा, जिन डिवाइसों पर ऑडियो स्पैटियलाइज़ेशन की सुविधा काम करती है उन परDefaultTrackSelector, स्पैटियलाइज़र प्रॉपर्टी में होने वाले बदलावों पर नज़र रखेगा. साथ ही, इन बदलावों के आधार पर नए ट्रैक को चुनेगा.televisionयूज़र इंटरफ़ेस (यूआई) मोड वाले डिवाइसों पर ये पाबंदियां लागू नहीं होतीं. साथ ही, सबसे ज़्यादा चैनलों वाले फ़ॉर्मैट को प्राथमिकता दी जाएगी. इस सुविधा को चालू करने के लिए,DefaultTrackSelectorइंस्टेंस कोContextके साथ बनाया जाना चाहिए.
- वीडियो:
DummySurfaceका नाम बदलकरPlaceholderSurfaceकरें.MediaCodecVideoRenderer.getCodecMaxInputSizeमें AV1 फ़ॉर्मैट के साथ काम करने की सुविधा जोड़ी गई.
- ऑडियो:
- LG AC3 ऑडियो डिकोडर, नॉन-स्टैंडर्ड MIME टाइप के विज्ञापन के लिए इस्तेमाल किया जाता है.
- एपीआई < 21 पर एआरटी की पुष्टि करने में लगने वाले समय को कम करने के लिए,
AudioAttributes.getAudioAttributesV21()के रिटर्न टाइप कोandroid.media.AudioAttributesसे बदलकर नईAudioAttributesV21रैपर क्लास करें. - जब फ़ॉर्मैट के ऑडियो चैनल की संख्या सेट नहीं होती है, तब ऑडियो पासथ्रू के लिए प्लैटफ़ॉर्म (एपीआई 29+) से क्वेरी करें या ऑडियो एन्कोडिंग चैनल की संख्या मान लें. ऐसा एचएलएस चंकलेस तैयारी (10204) के साथ होता है.
- चैनल मास्क के साथ
AudioTrackको कॉन्फ़िगर करें अगर डिकोडर 12 चैनल वाला पीसीएम ऑडियो आउटपुट करता है, तोAudioFormat.CHANNEL_OUT_7POINT1POINT4(#10322.
- डीआरएम
- पक्का करें कि फ़ॉर्मैट बदलने के तुरंत बाद, डीआरएम सेशन हमेशा सही तरीके से अपडेट हो (10274).
- टेक्स्ट:
List<Cue>के बजायCueGroupको वापस लाने के लिए,Player.getCurrentCues()को बदलें.- एसएसए:
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 की वजह से Android Studio के 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:
- किसी भी सर्वर कनेक्शन (#9606) के लिए इस्तेमाल किए गए
SocketFactoryको बदलने के लिए, क्लाइंट एपीआई उपलब्ध कराएं. - अगर BASIC और DIGEST, दोनों मौजूद हैं, तो BASIC के बजाय DIGEST ऑथेंटिकेशन का इस्तेमाल करें (#9800).
- जब आरटीएसपी ट्रैक की टाइमिंग उपलब्ध न हो, तब उसे मैनेज करने की सुविधा (#9775).
- अमान्य RTP-Info हेडर वैल्यू को अनदेखा करें (#9619).
- किसी भी सर्वर कनेक्शन (#9606) के लिए इस्तेमाल किए गए
- ट्रांसफ़ॉर्मर:
- ज़रूरी एपीआई वर्शन को बढ़ाकर 21 करें.
TransformationExceptionका इस्तेमाल अब ट्रांसफ़ॉर्मेशन के दौरान होने वाली गड़बड़ियों के बारे में बताने के लिए किया जाता है.- ट्रांसफ़ॉर्मेशन के विकल्प तय करने के लिए,
TransformationRequestजोड़ा गया. - एक से ज़्यादा लिसनर को रजिस्टर करने की अनुमति दें.
- कोडेक आउटपुट के कुछ हिस्से को पढ़ने के दौरान, ट्रांसफ़ॉर्मर के रुकने की समस्या को ठीक किया गया.
- मक्सर
थ्रो को रिलीज़ करते समय,
Transformer.getProgressमें संभावित एनपीई को ठीक करें. - ट्रांसफ़ॉर्मेशन लागू करने के लिए, एक डेमो ऐप्लिकेशन जोड़ें.
- MediaSession एक्सटेंशन:
- डिफ़ॉल्ट रूप से,
MediaSessionConnectorअब बंद करने पर प्लेलिस्ट को मिटा देता है. जिन ऐप्लिकेशन को प्लेलिस्ट बनाए रखनी है वे कनेक्टर परsetClearMediaItemsOnStop(false)कॉल कर सकते हैं.
- डिफ़ॉल्ट रूप से,
- कास्ट एक्सटेंशन:
- FFmpeg एक्सटेंशन:
- GNU के बजाय LLVM के बिन यूटिलिटी पर
build_ffmpeg.shको निर्भर बनाएं (#9933).
- GNU के बजाय LLVM के बिन यूटिलिटी पर
- 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 में, ExoPlayer के सभी मॉड्यूल के विकल्प मौजूद हैं. हालांकि, लेगसी media2 और mediasession एक्सटेंशन के विकल्प मौजूद नहीं हैं. इनकी जगह नए media3-session मॉड्यूल ने ले ली है. इससे, प्लेयर और मीडिया सेशन के बीच सीधे तौर पर इंटिग्रेशन होता है. इसके लिए, अडैप्टर/कनेक्टर क्लास का इस्तेमाल करने की ज़रूरत नहीं होती.