Media3
नया अपडेट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा वर्शन |
---|---|---|---|---|
16 जुलाई, 2025 | 1.7.1 | 1.8.0-rc01 | - | - |
डिपेंडेंसी का एलान करना
Media3 पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle
फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
Groovy
dependencies { def media3_version = "1.6.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For 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.6.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For 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.8.0
वर्शन 1.8.0-rc01
16 जुलाई, 2025
वर्शन 1.8.0-rc01 में ये कमिट शामिल हैं.
- ExoPlayer:
- उस गड़बड़ी को ठीक किया गया है जिसमें टीवी पर नॉन-स्टीरियो ऑडियो फ़ॉर्मैट को
DefaultTrackSelector
के साथ काम न करने वाले फ़ॉर्मैट के तौर पर मार्क किया जा सकता है. - MediaCodec के
DECODE_ONLY
फ़्लैग का इस्तेमाल करते समय, पक्का करें कि आखिरी फ़्रेम सही तरीके से रेंडर हो. यह फ़्लैग, स्क्रबर मोड में डिफ़ॉल्ट रूप से चालू होता है.
- उस गड़बड़ी को ठीक किया गया है जिसमें टीवी पर नॉन-स्टीरियो ऑडियो फ़ॉर्मैट को
- एक्सट्रैक्टर:
- वीडियो:
- डिटैच किए गए डिसप्ले की समस्या को ठीक करने के लिए, "lenovo" और "motorola" डिवाइसों के लिए वर्कअराउंड उपलब्ध कराया गया है (#2059).
- टेक्स्ट:
- MP4 फ़ाइलों में VobSub ट्रैक के लिए सहायता जोड़ी गई (#2510).
- DRM:
OfflineLicenseHelper.newWidevineInstance
को स्वीकार करने वालेMediaItem.DrmConfiguration
का नया ओवरलोड जोड़ें, ताकि एचटीटीपी अनुरोध हेडर को सही तरीके से लागू किया जा सके (#2169).
- सेशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें सेशन के ज़रिए हैंडल नहीं किए गए कंट्रोलर में कुछ बदलावों की वजह से
IllegalStateExceptions
हो सकता है. - उस गड़बड़ी को ठीक किया गया है जिसमें सेशन से मैनेज नहीं की जा रही कंट्रोलर कार्रवाइयों की वजह से, कंट्रोलर अमान्य स्थिति में चला जाता था.
- StrictMode के असुरक्षित लॉन्च से जुड़े उल्लंघन की चेतावनी को ठीक किया गया है (#2330).
- उस गड़बड़ी को ठीक किया गया है जिसमें सेशन के ज़रिए हैंडल नहीं किए गए कंट्रोलर में कुछ बदलावों की वजह से
- यूआई:
PlayerSurface
के अंदर, बार-बार इस्तेमाल किए जा सकने वाले कॉम्पोनेंट जैसे किLazyColumn
के ठीक से काम न करने की गड़बड़ी को ठीक किया गया है (#2493).
- एचएलएस एक्सटेंशन:
- उस बग को ठीक किया गया है जिसमें कम समय में लोड होने वाले हिस्सों को लोड करने के बाद, ट्रैक का चुनाव बदल जाता था. साथ ही, प्रीलोड करने के सुझावों की वजह से वीडियो रुक जाता था या फ़्रीज़ हो जाता था (#2299).
- अगर सर्वर,
CAN-BLOCK-RELOAD=YES
का पालन नहीं करता है, तो टारगेट अवधि के आधे समय तक इंतज़ार करके, बार-बार रीलोड होने से रोकें (#2317). - उस बग को ठीक किया गया है जिसकी वजह से, इंटरस्टीशियल स्ट्रीम शुरू करने पर वीडियो रुक जाता था. ऐसा तब होता था, जब मिड रोल से पहले और गलत विज्ञापन के लिए ऐसेट की सूची को ठीक करने की कोशिश की जाती थी (#2558).
- डैश एक्सटेंशन:
- उस समस्या को ठीक किया गया है जिसमें ट्रिक-प्ले अडैप्टेशन सेट को उसके मुख्य अडैप्टेशन सेट के साथ मर्ज कर दिया जाता है. इससे अमान्य
TrackGroup
(#2148) बन जाता है.
- उस समस्या को ठीक किया गया है जिसमें ट्रिक-प्ले अडैप्टेशन सेट को उसके मुख्य अडैप्टेशन सेट के साथ मर्ज कर दिया जाता है. इससे अमान्य
- आरटीएसपी एक्सटेंशन:
- आरएफ़सी 7798#4.4.2 (#2413) के मुताबिक, H265 के लिए आरटीपी एग्रीगेशन पैकेट की सुविधा जोड़ी गई है.
वर्शन 1.8.0-beta01
2 जुलाई, 2025
androidx.media3:media3-*:1.8.0-beta01
रिलीज़ हो गया है.
वर्शन 1.8.0-beta01 में ये कमिट शामिल हैं.
- कॉमन लाइब्रेरी:
ForwardingSimpleBasePlayer
में प्लेयर को बदलने की सुविधा जोड़ी गई.
- ExoPlayer:
Context
सेExoPlayer.Builder
को पास किए गए वर्चुअल डिवाइस आईडी का इस्तेमाल करने की सुविधा जोड़ी गई.- स्क्रबिंग मोड में, डाइनैमिक शेड्यूलिंग की सुविधा को डिफ़ॉल्ट रूप से चालू करें.
- किसी आइटम के आखिर तक पहुंचने के लिए, सोर्स को बार-बार रीलोड करने से बचें.
- स्क्रबिंग मोड में, डिफ़ॉल्ट रूप से
MediaCodec.BUFFER_FLAG_DECODE_ONLY
का इस्तेमाल करें. - जब
PreloadMediaSource
को किसी ऐसेExoPlayer
से चलाया जाता है जिसका प्लेबैक थ्रेड, प्रीलोड थ्रेड (#2495) से अलग होता है, तबIllegalStateException
थ्रो करें. - डिफ़ॉल्ट तौर पर लागू करने की सुविधा के साथ,
ShuffleMode
मेंcloneAndMove
जोड़ें (#2226). Renderer.getMinDurationToProgressUs
के डिफ़ॉल्ट व्यवहार को बदलकर, ऐसी बड़ी वैल्यू दिखाएं जिसके लिएrender
को कॉल करने की ज़रूरत न हो.- उस गड़बड़ी को ठीक किया गया है जिसमें वीडियो को रोकने के बाद, वीडियो के आखिर में जाने पर आखिरी फ़्रेम दिखने में देरी होती थी. फ़िलहाल, बग ठीक करने की सुविधा सिर्फ़ तब काम करती है, जब
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled
चालू हो.
- ट्रांसफ़ॉर्मर:
CodecDbLite
जोड़ें. इससे वीडियो एन्कोडिंग की सेटिंग को चिपसेट के हिसाब से ऑप्टिमाइज़ किया जा सकेगा.- CodecDB Lite की सेटिंग ऑप्टिमाइज़ करने की सुविधा चालू करने के लिए,
setEnableCodecDbLite
मेंsetEnableCodecDbLite
फ़्लैग जोड़ें.DefaultEncoderFactory
डिफ़ॉल्ट रूप से, इस फ़्लैग को गलत पर सेट किया जाता है.
- एक्सट्रैक्टर:
- एक से ज़्यादा
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).
- एक से ज़्यादा
- ऑडियो:
ChannelMappingAudioProcessor
औरTrimmingAudioProcessor
में, सभी लीनियर पीसीएम सैंपल फ़ॉर्मैट के लिए सहायता जोड़ी गई.CompositionPlayer
में ऑडियो गैप की सुविधा जोड़ी गई.BaseAudioProcessor#reset()
सेBaseAudioProcessor#flush()
को किए गए फ़र्ज़ी कॉल को हटाएं.
- वीडियो:
- जब ऑडियो सैंपल, अनुरोध की गई जगह से शुरू नहीं होते हैं, तो वीडियो फ़्रेम को स्टार्टअप पर बेहतर तरीके से रिलीज़ करने की सुविधा को बेहतर बनाया गया है.
- "realme" डिवाइसों के लिए, डिसकनेक्ट किए गए डिसप्ले को फिर से कनेक्ट करने की सुविधा को बेहतर बनाया गया है (#2059).
- टेक्स्ट:
- जब उपशीर्षक का कोई सेगमेंट शुरू में लोड नहीं होता है और बाद में लोड हो जाता है, तो वीडियो रुकने की समस्या ठीक की गई है. इसके बाद, उपशीर्षक के कई सेगमेंट खाली दिखते हैं (#2517).
- मेटाडेटा:
- मीडिया की अवधि और
Timeline
कोMetadataRetriever
से वापस पाने की सुविधा जोड़ी गई है. साथ ही, इसे इंस्टेंस पर आधारित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
ऐसा करता है.
- डिकोड किए गए बिटमैप को
- Muxers:
- उस गड़बड़ी को ठीक किया गया है जिसमें फ़्रैगमेंट किए गए MP4 में ऑडियो सैंपल के लिए सही सैंपल फ़्लैग सेट नहीं किए गए थे.
- सेशन:
- उस बग को ठीक किया गया है जिसमें किसी अन्य ऐप्लिकेशन थ्रेड से प्लेयर चलाने पर, मुख्य थ्रेड से
setSessionExtras
को कॉल करने परIllegalStateException
(#2265) होता था. - अगर किसी प्लेयर को मीडिया आइटम के साथ सेट अप किया गया है, लेकिन उन्हें तैयार या चलाया नहीं गया है, तो सूचना अपने-आप न दिखाएं
(#2423https://github.com/androidx/media/issues/2423). इस सुविधा को
MediaSessionService.setShowNotificationForIdlePlayer
के ज़रिए कॉन्फ़िगर किया जा सकता है. - सभी या चुने गए कंट्रोलर के लिए, कस्टम
PlaybackException
जोड़ें. - उस गड़बड़ी को ठीक किया गया है जिसमें
MediaController
पर लाइव स्ट्रीम में आगे-पीछे करने सेIllegalArgumentException
हो सकती है. - लाइव स्ट्रीम के लिए, प्लैटफ़ॉर्म मीडिया कंट्रोलर के लिए, वीडियो चलाने की पोज़िशन और मौजूदा आइटम में आगे-पीछे करने की सुविधा को बंद करें. इससे Android Auto के यूज़र इंटरफ़ेस (यूआई) और प्लैटफ़ॉर्म मीडिया सेशन से इस जानकारी का इस्तेमाल करने वाले अन्य कंट्रोलर में, पोज़िशन से जुड़ी गड़बड़ियां नहीं होंगी (#1758).
- उस बग को ठीक किया गया है जिसमें किसी अन्य ऐप्लिकेशन थ्रेड से प्लेयर चलाने पर, मुख्य थ्रेड से
- Cronet एक्सटेंशन:
- कुकी को अपने-आप मैनेज करने की सुविधा जोड़ी गई है (#5975).
- एचएलएस एक्सटेंशन:
- कोट की गई स्ट्रिंग एट्रिब्यूट वैल्यू में
\f
(फ़ॉर्म फ़ीड) को स्वीकार करने के लिए, प्लेलिस्ट पार्सिंग की समस्या ठीक की गई है (#2420). - एक ही आईडी वाले इंटरस्टीशियल को अपडेट करने की सुविधा जोड़ी गई है (#2427).
- उस गड़बड़ी को ठीक किया गया है जिसमें कभी-कभी लाइव स्ट्रीम के लोड होने के लिए सेगमेंट खत्म हो जाने के बाद, प्लेलिस्ट लोड होने से जुड़ी गड़बड़ियों की जानकारी नहीं मिलती है (#2401https://github.com/androidx/media/issues/2401).
- सबटाइटल रेंडिशन को NAME टैग के हिसाब से ग्रुप करें. ठीक उसी तरह जैसे ऑडियो रेंडिशन पहले से ही ग्रुप किए जाते हैं (#1666).
- कोट की गई स्ट्रिंग एट्रिब्यूट वैल्यू में
- डैश एक्सटेंशन:
- उस बग को ठीक किया गया है जिसकी वजह से, DASH की अवधि कम करने पर अपवाद मिल सकता है. ऐसा तब होता है, जब नई अवधि से ज़्यादा सैंपल को रेंडरिंग पाइपलाइन पहले ही पढ़ चुकी हो (#2440).
- उस बग को ठीक किया गया है जिसमें सीएमसीडी क्वेरी पैरामीटर का इस्तेमाल करने पर, रीडायरेक्ट को फ़ॉलो नहीं किया जाता था (#2475).
- आरटीएसपी एक्सटेंशन:
RtspClient
को ठीक किया गया है, ताकि HTTP 302 रिस्पॉन्स (#2398) को प्रोसेस करते समय, जगह की जानकारी वाले यूआरआई का इस्तेमाल किया जा सके.
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- उस गड़बड़ी को ठीक किया गया है जिसमें ऑडियो डिकोडर एक्सटेंशन के लिए
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange
का कोई असर नहीं होता (#2258).
- उस गड़बड़ी को ठीक किया गया है जिसमें ऑडियो डिकोडर एक्सटेंशन के लिए
- कास्ट एक्सटेंशन:
setVolume()
औरgetVolume()
के लिए सहायता जोड़ी गई है (#2279).- टाइमलाइन खाली होने पर, CastPlayer को STATE_BUFFERING में जाने से रोकता है.
- टेस्ट यूटिलिटी:
- खिलाड़ी को किसी तय की गई पोज़िशन तक आगे बढ़ाने के लिए,
TestPlayerRunHelper
मेंadvance(player).untilPositionAtLeast
औरuntilMediaItemIndex
जोड़ें. ज़्यादातर मामलों में, ये तरीके मौजूदाuntilPosition
औरuntilStartOfMediaItem
तरीकों से ज़्यादा भरोसेमंद होते हैं. FakeDownloader
कोtest-utils-robolectric
मॉड्यूल में ले जाएं, ताकि इसका इस्तेमाल अन्य टेस्ट में किया जा सके.
- खिलाड़ी को किसी तय की गई पोज़िशन तक आगे बढ़ाने के लिए,
वर्शन 1.8.0-alpha01
19 मई, 2025
androidx.media3:media3-*:1.8.0-alpha01
रिलीज़ हो गया है.
वर्शन 1.8.0-alpha01 में ये कमिट शामिल हैं.
- ExoPlayer:
ExoPlayer.setScrubbingModeEnabled(boolean)
तरीका जोड़ें. इससे प्लेयर को बार-बार वीडियो को आगे-पीछे करने के लिए ऑप्टिमाइज़ किया जाता है. उदाहरण के लिए, जब कोई उपयोगकर्ता स्क्रबर बार को इधर-उधर खींचता है.ExoPlayer
औरExoPlayer.Builder
परsetScrubbingModeParameters(..)
की मदद से, स्क्रबर मोड के व्यवहार को अपनी पसंद के मुताबिक बनाया जा सकता है.- स्क्रबिंग मोड में, फ़्रैक्शनल सीक टॉलरेंस को पसंद के मुताबिक बनाने की अनुमति दें.
- स्क्रबिंग मोड में कोडेक की ऑपरेटिंग रेट बढ़ाएं.
- उस गड़बड़ी को ठीक किया गया है जिसमें
AdsMediaSource
के कॉन्टेंट में मौजूद गड़बड़ियों की रिपोर्ट कभी नहीं की जाती थी (#2337). MergingMediaSource
में मेमोरी लीक की समस्या ठीक की गई. उदाहरण के लिए, इसका इस्तेमाल तब किया जाता है, जब सबटाइटल साइडलोड किए जाते हैं (#2338).CmcdConfiguration.Factory
कोnull
वापस लाने की अनुमति दें, ताकि कुछ मीडिया आइटम के लिए CMCD लॉगिंग को बंद किया जा सके (#2386).- इमेज के डिफ़ॉल्ट बफ़र साइज़ को 128 केबी (टेक्स्ट ट्रैक से कॉपी-पेस्ट करने की वजह से हुई गड़बड़ी) से बढ़ाकर 26 एमबी करें. यह 50 मेगापिक्सल की अल्ट्रा एचडीआर इमेज के लिए काफ़ी है (#2417).
PreCacheHelper
जोड़ा गया है. इससे ऐप्लिकेशन, किसी मीडिया को पहले से कैश मेमोरी में सेव कर सकते हैं. इसके लिए, उन्हें मीडिया के शुरू होने की जगह और अवधि बतानी होगी.
- ट्रांसफ़ॉर्मर:
- अब
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
जोड़ें.
- अब
- एक्सट्रैक्टर:
- MP3:
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)
(#2194) की वजह से, स्थिर बिटरेट पर वापस आने पर, Xing, VBRI, और इसी तरह के वैरिएबल बिटरेट वाले मेटाडेटा की अवधि और डेटा साइज़ का इस्तेमाल करें.
- MP3:
- ऑडियो:
- DefaultAudioMixer में, लगातार पावर अपमिक्सिंग/डाउनमिक्सिंग की अनुमति दें.
ChannelMappingAudioProcessor
,TrimmingAudioProcessor
, औरToFloatPcmAudioProcessor
को सार्वजनिक करें (#2339).- बेस्ट-एफ़र्ट अनुमान के बजाय,
DefaultAudioSink
में अंडररन का पता लगाने के लिए,AudioTrackPositionTracker
मेंAudioTrack#getUnderrunCount()
का इस्तेमाल करें. - ऑडियो आउटपुट डिवाइस की जगह में अचानक बदलाव होने की वजह से, ऑडियो टाइमस्टैंप को स्मूथ करने की सुविधा को बेहतर बनाया गया है.
- उस बग को ठीक किया गया है जिसमें ब्लूटूथ डिवाइसों से कनेक्ट होने पर, वीडियो को रोकने के बाद फिर से चलाने पर, पहले 10 सेकंड के लिए ऑडियो/वीडियो सिंक नहीं होता था.
- उस बग को ठीक किया गया है जिसकी वजह से
AnalyticsListener.onAudioPositionAdvancing
, ऑडियो के आगे बढ़ने का समय रिपोर्ट नहीं कर रहा था. हालांकि, यह पहली बार मेज़रमेंट का समय रिपोर्ट कर रहा था.
- वीडियो:
- सिर्फ़ डिकोड करने के लिए इनपुट बफ़र को लाइन में लगाते समय,
ExoPlayer
फ़्लैग शामिल करने के लिए, एक्सपेरिमेंटलExoPlayer
एपीआई जोड़ा गया.MediaCodec.BUFFER_FLAG_DECODE_ONLY
यह फ़्लैग, डिकोडर को सिर्फ़ डिकोड किए गए बफ़र को छोड़ने का सिग्नल देगा. इससे वीडियो को तेज़ी से आगे-पीछे किया जा सकेगा.DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag
की मदद से इसे चालू करें. - सॉफ़्टवेयर वीडियो कोडेक के लिए, कोडेक की परफ़ॉर्मेंस की जांच को बेहतर बनाना. इस वजह से, कुछ और ट्रैक को
EXCEEDS_CAPABILITIES
के तौर पर मार्क किया जा सकता है. - कुछ डिवाइसों पर, VP9 Widevine वीडियो चलाने से जुड़ी गड़बड़ियों को ठीक किया गया है (#2408).
- सिर्फ़ डिकोड करने के लिए इनपुट बफ़र को लाइन में लगाते समय,
- टेक्स्ट:
- सबटाइटल चालू करने पर, प्रोग्रेस में मौजूद क्यू दिखाने के लिए, 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).
- असर:
Presentation.createForShortSide(int)
जोड़ें, जोPresentation
बनाता है. इससे यह पक्का होता है कि सबसे छोटी साइड हमेशा दी गई वैल्यू से मेल खाती है, भले ही इनपुट ओरिएंटेशन कुछ भी हो.
- Muxers:
writeSampleData()
एपीआई अबMediaCodec.BufferInfo
के बजाय, मल्टीप्लेक्सिंग करने वाले खासBufferInfo
क्लास का इस्तेमाल करता है.Muxer.Factory#supportsWritingNegativeTimestampsInEditList
जोड़ें, जो डिफ़ॉल्ट रूप से गलत पर सेट होता है.
- IMA एक्सटेंशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें एक विज्ञापन में लोड होने से जुड़ी गड़बड़ी की वजह से, गलती से दूसरा विज्ञापन ग्रुप अमान्य हो सकता है.
- उस गड़बड़ी को ठीक किया गया है जिसमें वीओडी विंडो खत्म होने के बाद, विज्ञापन ग्रुप की वजह से वीडियो नहीं चल रहा था.
विज्ञापन ग्रुप के शुरू होने का समय, विंडो के बाद होने पर उन्हें अब
MediaPeriodQueue
में शामिल नहीं किया जाता (#2215).
- सेशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी
MediaBrowserServiceCompat
से कनेक्ट किए गएMediaBrowser
केgetLibraryRoot
में null पास करने परNullPointerException
जनरेट होता था. - उस गड़बड़ी को ठीक किया गया है जिसमें कस्टम ऐक्शन, खोज के नतीजे या getItem अनुरोध भेजने पर, लेगसी सेशन ऐप्लिकेशन
ClassNotFoundException
के साथ क्रैश हो जाता था. - उस गड़बड़ी को ठीक किया गया है जिसमें
MediaItem.LocalConfiguration.uri
को प्लैटफ़ॉर्म सेशन केMediaMetadata
पर शेयर किया गया था. अगर आपको जान-बूझकर कोई यूआरआई शेयर करना है, ताकि कंट्रोलर मीडिया के लिए फिर से अनुरोध कर सकें, तोMediaItem.RequestMetadata.mediaUri
सेट करें.
- उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी
- यूआई:
- 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
बनाया जा सकता है और उसके हिसाब से कॉन्टेंट डाउनलोड किया जा सकता है.
- प्रोग्रेसिव स्ट्रीम के लिए, आंशिक डाउनलोड की सुविधा जोड़ी गई. ऐप्लिकेशन,
- एचएलएस एक्सटेंशन:
HlsInterstitialsAdsLoader
के साथ X-ASSET-LIST और लाइव स्ट्रीम के लिए सहायता.
- आरटीएसपी एक्सटेंशन:
- SessionDescriptions के लिए पार्सिंग की सुविधा जोड़ी गई है. इनमें ऐसी लाइनें शामिल होती हैं जिनमें ट्रेलिंग व्हाइटस्पेस वर्ण होते हैं (#2357).
- कास्ट एक्सटेंशन:
getDeviceVolume()
,setDeviceVolume()
,getDeviceMuted()
, औरsetDeviceMuted()
के लिए सहायता जोड़ी गई है (#2089).
- टेस्ट यूटिलिटी:
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.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 में ये कमिट शामिल हैं.
- कॉमन लाइब्रेरी:
PlaybackParameters.withPitch(float)
को आसानी से कॉपी करने के लिए,PlaybackParameters.withPitch(float)
तरीका जोड़ें. इसमें नईpitch
वैल्यू शामिल है (#2257).PlaybackParameters
- 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
में मौजूद गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से,setPlaylist
के बादState
मेंnull
MediaMetadata
के साथ नया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)
के साथ दिखाया जा सकता है. selectedAudioLanguage
पैरामीटर कोDefaultTrackSelector.selectVideoTrack()
तरीके में जोड़ें.MediaSourceEventListener.onLoadStarted
और उससे जुड़ेMediaSourceEventListener.EventDispatcher
तरीकों मेंretryCount
पैरामीटर जोड़ें.- उस बग को ठीक किया गया है जिसकी वजह से, एक से ज़्यादा अवधि वाली DASH स्ट्रीम में प्लेलिस्ट आइटम या अवधि की अवधि, असल कॉन्टेंट से मेल नहीं खाती थी. इस वजह से, आइटम के आखिर में फ़्रेम फ़्रीज़ हो जाते थे (#1698).
BasePreloadManager.Listener
को टॉप-लेवलPreloadManagerListener
पर ले जाएं.RenderersFactory.createSecondaryRenderer
को लागू करके, प्री-वार्मिंग के लिए सेकंडरी रेंडरर उपलब्ध कराए जा सकते हैं. प्री-वार्मिंग की सुविधा चालू होने पर, मीडिया आइटम को चलाने के दौरान तेज़ी से ट्रांज़िशन होता है.- DASH, HLS, और SmoothStreaming जैसे अडैप्टिव स्ट्रीमिंग फ़ॉर्मैट में मेनिफ़ेस्ट के अनुरोधों के लिए,
CmcdData
भेजने की सुविधा चालू की गई (#1951). - उस कोडेक का
MediaCodecInfo
दें जिसेMediaCodecRenderer.onReadyToInitializeCodec
में शुरू किया जाएगा (#1963). - विज्ञापन ग्रुप जोड़कर,
AdPlaybackStates
को बढ़ाने की अनुमति देने के लिए,AdsMediaSource
में बदलाव करें. अमान्य बदलावों का पता चलता है और एक अपवाद दिखता है. - उस समस्या को ठीक किया गया है जिसमें वीडियो के बीच में दिखने वाले विज्ञापन के बाद, कॉन्टेंट मीडिया पर स्विच करते समय, डिकोड किए गए अतिरिक्त फ़्रेम तेज़ी से दिख सकते हैं.
DefaultRenderersFactory
में दोMetadataRenderer
इंस्टेंस जोड़ें, ताकि ऐप्लिकेशन डिफ़ॉल्ट रूप से मेटाडेटा की दो अलग-अलग स्कीमें पा सकें.- फिर से आकलन करें कि जब वीडियो चलाने की सुविधा रोकी जाती है, तब क्या किसी चंक को लोड करने की प्रोसेस को रद्द कर देना चाहिए (#1785).
ClippingMediaSource
के लिए, ऐसे मीडिया में क्लिप बनाने की सुविधा जोड़ी गई है जिसे आगे-पीछे नहीं किया जा सकता.- प्री-वार्मिंग के साथ सीक करने पर, मीडिया आइटम के ट्रांज़िशन को ब्लॉक करने वाली गड़बड़ी को ठीक किया गया.
- उस गड़बड़ी को ठीक किया गया है जिसमें
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) के इस्तेमाल को ब्लॉक करने के लिए ओवरराइड कर सकें.- सीकिंग की प्रोसेस को तेज़ करने के लिए, एक्सपेरिमेंट के तौर पर
ExoPlayer
AV1 सैंपल डिपेंडेंसी पार्सिंग की सुविधा जोड़ी गई. इसे नएDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies
एपीआई की मदद से चालू करें. - ऐसे
ExoPlayer
डिकोडर इनपुट बफ़र को हटाने के लिए, एक्सपेरिमेंट के तौर परExoPlayer
API जोड़ें जिन पर निर्भर नहीं रहा जाता.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 लाइन के आखिर में इस्तेमाल करके, मल्टी-बाइट UTF-8 वर्णों को मैनेज करने की समस्या ठीक की गई है (#2167).
- 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 को बेहतर तरीके से हैंडल किया गया है. इससे उपलब्ध कमांड के हिसाब से, इनमें से सिर्फ़ एक कार्रवाई सेट की जा सकती है. साथ ही, अगर इनमें से सिर्फ़ एक कार्रवाई सेट की गई है, तो उसे स्वीकार किया जा सकता है.
Context
कोMediaButtonReceiver.shouldStartForegroundService
में पैरामीटर के तौर पर जोड़ें (#1887).- उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी सेशन से कनेक्ट किए गए
MediaController
परPlayer
तरीके को कॉल करने पर, अपडेट होने वाले बदलाव हट जाते थे. MediaSession.setSessionActivity(PendingIntent)
में null वैल्यू स्वीकार करने की सुविधा जोड़ें (#2109).- उस गड़बड़ी को ठीक किया गया है जिसमें प्लेलिस्ट खाली होने पर भी पुरानी सूचना दिखती रहती थी (#2211).
- जब वीडियो चलाने की सुविधा रुक जाती है, बंद हो जाती है या काम नहीं करती है, तो फ़ोरग्राउंड सेवा की स्थिति को 10 मिनट तक बनाए रखें. इससे उपयोगकर्ता, इस टाइमआउट के दौरान वीडियो चलाना फिर से शुरू कर सकते हैं. साथ ही, उन्हें अलग-अलग डिवाइसों पर फ़ोरग्राउंड सेवा से जुड़ी पाबंदियों का सामना नहीं करना पड़ता. ध्यान दें कि
- यूआई:
media3-ui-compose
मॉड्यूल में स्टेट होल्डर और कंपोज़ेबल जोड़ें. ऐसाPlayerSurface
,PresentationState
,PlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
,ShuffleButtonState
, औरPlaybackSpeedState
के लिए करें.
- डाउनलोड:
CacheWriter
में मौजूद उस बग को ठीक किया गया है जिसकी वजह से, डेटा सोर्स खुले रहते हैं और कैश मेमोरी वाले एरिया लॉक हो जाते हैं. ऐसा तब होता है, जब डेटा सोर्स,IOException
(#9760) के अलावा कोई अन्यException
दिखाता है.
- एचएलएस एक्सटेंशन:
HlsInterstitialsAdsLoader
का पहला वर्शन जोड़ें. विज्ञापन लोडर, एचएलएस मीडिया प्लेलिस्ट के एचएलएस इंटरस्टीशियल विज्ञापन पढ़ता है और उन्हेंAdPlaybackState
पर मैप करता है. यहAdsMediaSource
को पास किया जाता है. इस शुरुआती वर्शन में, सिर्फ़X-ASSET-URI
एट्रिब्यूट वाली HLS VOD स्ट्रीम काम करती हैं.HlsInterstitialsAdsLoader.AdsMediaSourceFactory
जोड़ें. ऐप्लिकेशन इसका इस्तेमाल करके,AdsMediaSource
इंस्टेंस बना सकते हैं. ये इंस्टेंस,HlsInterstitialsAdsLoader
का इस्तेमाल आसान और सुरक्षित तरीके से करते हैं.- Dolby Vision फ़ॉर्मैट (#1785) का पता लगाने के लिए, HLS प्लेलिस्ट से
SUPPLEMENTAL-CODECS
टैग पार्स करें. - एचएलएस स्ट्रीम में पोज़िशन सिंक करने के लिए, शर्त को आसान बनाया गया है (#2209).
- डैश एक्सटेंशन:
- DASH के लिए 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()
तरीके से बदलें.- प्लेलिस्ट का स्ट्रक्चर बनाने के बजाय,
Timeline
और मौजूदाTracks
औरMetadata
को सीधे तौर पर बताने के लिए,SimpleBasePlayer.State.Builder.setPlaylist()
के लिए ओवरराइड जोड़ें. 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
: पुष्टि करें किopen()
को कॉल करने पर,DataSource.getUri()
औरgetResponseHeaders()
'open' वैल्यू दिखाते हैं. ऐसा तब होता है, जब 'नहीं मिला' रिसॉर्स की वजह से कॉल पूरा नहीं हो पाता है. साथ ही, यह पुष्टि करें किclose()
को कॉल करने से पहले भीDataSource.getUri()
औरgetResponseHeaders()
'open' वैल्यू दिखाते हैं.DataSourceContractTest.getNotFoundResources()
को बदलने की सुविधा की मदद से, टेस्ट सब-क्लास कई 'नहीं मिला' संसाधन उपलब्ध करा सकती हैं. साथ ही, वे ज़रूरी हेडर भी उपलब्ध करा सकती हैं. इससे, हेडर के साथ HTTP 404 और "सर्वर नहीं मिला" (कोई हेडर नहीं) के बीच अंतर किया जा सकता है.
- ऑडियो:
- अगर मीडिया में मौजूद है, तो कोडेक पर CTA-2075 के लाउडनेस मेटाडेटा को अपने-आप कॉन्फ़िगर करता है.
- वीडियो में आगे-पीछे जाते समय, आवाज़ धीरे-धीरे कम होनी चाहिए.
- सीख के दौरान होने वाली पॉप की आवाज़ों को ठीक किया गया.
- Sonic के टाइम-स्ट्रेचिंग/पिच-शिफ़्टिंग एल्गोरिदम के लिए, ट्रंकेशन की गड़बड़ी को ठीक किया गया.
SpeedChangingAudioProcessor
में मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से आउटपुट फ़्रेम ड्रॉप हो जाते थे.
- वीडियो:
MediaCodecVideoRenderer
ऐसे सैंपल को डिकोड करने से बचता है जिन्हें न तो रेंडर किया जाता है और न ही अन्य सैंपल के रेफ़रंस के तौर पर इस्तेमाल किया जाता है.- एपीआई 35 और इसके बाद के वर्शन पर,
MediaCodecAdapter
को अबnull
Surface
,configure
में मिल सकता है. साथ ही, अगर कोडेक इसका समर्थन करता है, तो पहले से सेट किए गएSurface
को हटाने के लिए, नए तरीकेdetachOutputSurface
को कॉल किया जा सकता है (MediaCodecInfo.detachedSurfaceSupported
). onOutputFormatChanged
को प्रोसेस करते समय, अगर पिक्सल के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की वैल्यू दी गई हैं, तो उनका इस्तेमाल करें (#1371).MediaCodecAdapter
- Galaxy Tab S7 FE पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया है. इस समस्या की वजह से, 60fps वाली सुरक्षित H264 स्ट्रीम को काम न करने वाली स्ट्रीम के तौर पर मार्क किया जाता है (#1619).
- उन कोडेक के लिए समाधान जोड़ा गया है जो स्ट्रीम के खत्म होने का सिग्नल नहीं देते हैं और आखिरी सैंपल के बाद रुक जाते हैं.
- टेक्स्ट:
- कस्टम
VoiceSpan
जोड़ें और उसे WebVTT वॉइस स्पैन के लिए भरें (#1632). - पक्का करें कि एचएलएस में WebVTT, बहुत बड़े सबटाइटल टाइमस्टैंप के साथ काम करता हो. ये टाइमस्टैंप, माइक्रोसेकंड के तौर पर दिखाए जाने पर 64-बिट
long
से ज़्यादा हो जाते हैं और90,000
MPEG टाइमबेस से गुणा किए जाते हैं. साथ ही, यह भी पक्का करें कि ये टाइमस्टैंप दिख रहे हों (#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
में थोड़ी सी स्केलिंग शामिल हो सकती है, जिससे क्रॉप किए गए बफ़र के किनारे के चारों ओर मौजूद 1-टेक्सल बॉर्डर कट जाता है. अब इसे इस तरह से मैनेज किया जाता है कि आउटपुट, अनुमानित आउटपुट के ज़्यादा करीब हो. - स्पीड बढ़ाओ
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
, दोनों के लिए उपलब्ध हैं. AAOS की कस्टम ब्राउज़ कार्रवाइयां देखें. - उस बग को ठीक किया गया है जिसकी वजह से, Media3 कंट्रोलर कभी-कभी सेशन ऐप्लिकेशन को
play()
का अनुरोध करने के बाद, फ़ोरग्राउंड सेवा शुरू करने की अनुमति नहीं दे पाता था. CommandButton.Builder.setIconUri
को सिर्फ़ कॉन्टेंट यूआरआई स्वीकार करने तक सीमित करें.- Media3 ब्राउज़र के कनेक्शन के सुझावों को शुरुआती
MediaBrowserCompat
में पास करें, ताकि लेगसीMediaBrowserCompat
से कनेक्ट किया जा सके. यह सेवा,onGetRoot()
को किए गए पहले कॉल के साथ रूट हिंट के तौर पर पास किए गए कनेक्शन हिंट पा सकती है. - उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी ब्राउज़र सेवा से कनेक्ट किए गए
MediaBrowser
को, ब्राउज़र केMediaBrowser
की सदस्यता लेने के बाद, सेवा से भेजी गई गड़बड़ी का मैसेज नहीं मिलता था.parentid
- इंटरऑपरेबिलिटी के व्यवहार को बेहतर बनाया गया है, ताकि लेगसी
MediaBrowserService
से कनेक्ट किया गया Media3 ब्राउज़र, माता-पिता की सदस्यता लेते समयparentId
के बच्चों से दो बार अनुरोध न करे.
- यूआई:
- एक्सएमएल पर आधारित शेयर किए गए ट्रांज़िशन से जुड़ी समस्याओं की वजह से, स्ट्रेच/क्रॉप किए गए वीडियो को
PlayerView
-in-Compose-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 के बेहतर डिसुगरिंग पर कंपाइल डिपेंडेंसी हटाएं (#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)
जोड़ें.- प्रीलोड मैनेजर इंस्टेंस को बनाए रखते हुए, होल्ड किए गए सभी सोर्स को रिलीज़ करने के लिए,
BasePreloadManager
कोBasePreloadManager
में जोड़ें.reset()
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.release()
को कॉल किया गया है या नहीं,ExoPlayer.isReleased()
जोड़ें. 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
, औरTSOP
ID3 टैग (#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
में अलाइन करें, ताकि मेटाडेटा प्रॉपर्टी चुनते समय उसी पसंदीदा क्रम और लॉजिक का इस्तेमाल किया जा सके जैसा कि media1 में किया गया था.MediaSession.sendError()
जोड़ें, ताकि Media3 कंट्रोलर को नुकसान न पहुंचाने वाली गड़बड़ियां भेजी जा सकें. सूचना कंट्रोलर (MediaSession.getMediaNotificationControllerInfo()
देखें) का इस्तेमाल करते समय, कस्टम गड़बड़ी का इस्तेमाल प्लैटफ़ॉर्म सेशन केPlaybackState
को गड़बड़ी की स्थिति में अपडेट करने के लिए किया जाता है. इसमें गड़बड़ी की जानकारी दी जाती है (#543).MediaSession.Callback.onPlayerInteractionFinished()
जोड़ें, ताकि सेशन को यह सूचना दी जा सके कि किसी कंट्रोलर से प्लेयर के इंटरैक्शन की सीरीज़ खत्म हो गई है.- गड़बड़ी के बारे में ज़्यादा जानकारी देने के लिए, गड़बड़ी कोड के बजाय
SessionError
जोड़ें और इसका इस्तेमालSessionResult
औरLibraryResult
में करें. साथ ही, अगर हो सके, तो गड़बड़ी को ठीक करने का तरीका भी बताएं. - Media3 कंट्रोलर टेस्ट ऐप्लिकेशन के लिए कोड पब्लिश करें. इसका इस्तेमाल, मीडिया सेशन पब्लिश करने वाले ऐप्लिकेशन के साथ इंटरैक्शन की जांच करने के लिए किया जा सकता है.
- media3 के
MediaSession[Builder].setSessionExtras()
को पास किए गए अतिरिक्त डेटा को media1 कंट्रोलर केPlaybackStateCompat.getExtras()
में ट्रांसफ़र करें. - इस कुकी का इस्तेमाल, प्लैटफ़ॉर्म सेशन में नुकसान पहुंचाने वाली और नुकसान न पहुंचाने वाली गड़बड़ियों को मैप करने के लिए किया जाता है.
PlaybackException
कोPlaybackStateCompat
की गंभीर गड़बड़ी वाली स्थिति पर मैप किया जाता है.MediaSession.sendError(ControllerInfo, SessionError)
के साथ मीडिया सूचना कंट्रोलर को भेजा गयाSessionError
,PlaybackStateCompat
में ऐसी गड़बड़ी के तौर पर मैप किया जाता है जिससे सिस्टम पर कोई असर नहीं पड़ता. इसका मतलब है कि गड़बड़ी का कोड और मैसेज सेट कर दिया गया है, लेकिन प्लैटफ़ॉर्म सेशन की स्थितिSTATE_ERROR
से अलग रहती है. - इस कुकी का इस्तेमाल, हर कंट्रोलर के लिए सेशन ऐक्टिविटी सेट करने की अनुमति देने के लिए किया जाता है, ताकि ग्लोबल सेशन ऐक्टिविटी को बदला जा सके. कनेक्शन के समय, कंट्रोलर के लिए सेशन गतिविधि को तय किया जा सकता है. इसके लिए,
ConnectionResult
के साथAcceptedResultBuilder.setSessionActivivty(PendingIntent)
बनाएं. कनेक्ट होने के बाद, सेशन की गतिविधि कोMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
की मदद से अपडेट किया जा सकता है. MediaLibrarySession.Callback
पर किए गए कॉल की गड़बड़ी को बेहतर तरीके से दोहराना. गड़बड़ी की नकल बनाने की सुविधा को अब कॉन्फ़िगर किया जा सकता है. इसके लिए,MediaLibrarySession.Builder.setLibraryErrorReplicationMode()
का इस्तेमाल करके गड़बड़ी का टाइप चुनें या गड़बड़ी की नकल बनाने की सुविधा से ऑप्ट-आउट करें. यह सुविधा डिफ़ॉल्ट रूप से चालू होती है.
- यूआई:
PlayerView
कोExoPlayer
से कनेक्ट करने पर, इमेज डिसप्ले करने की सुविधा जोड़ी गई (#1144).PlayerControlView
में अलग-अलग आइकॉन को पसंद के मुताबिक बनाने की सुविधा जोड़ें. इसके लिए, xml एट्रिब्यूट का इस्तेमाल करें, ताकि हर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.FormatSupport
IntDef औरFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
,FORMAT_UNSUPPORTED_TYPE
कॉन्स्टेंट हटाएं. इसके बजाय,androidx.media3.common.C
में IntDef और कॉन्स्टेंट का इस्तेमाल करें. जैसे,C.FORMAT_HANDLED
.Bundleable
इंटरफ़ेस हटाएं. इसमें सभीBundleable.Creator<Foo> CREATOR
कॉन्स्टेंट फ़ील्ड हटाना शामिल है. इसके बजाय, कॉल करने वालों को हर टाइप के लिएBundle toBundle()
औरstatic Foo fromBundle(Bundle)
तरीकों का इस्तेमाल करना चाहिए.
वर्शन 1.4.0-rc01
10 जुलाई, 2024
1.4.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.4.0-beta01
26 जून, 2024
1.4.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.4.0-alpha02
07 जून, 2024
1.4.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.4.0-alpha01
17 अप्रैल, 2024
1.4.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.3.0
वर्शन 1.3.1
11 अप्रैल, 2024
androidx.media3:media3-*:1.3.1
रिलीज़ हो गया है.
वर्शन 1.3.1 में ये कमिट शामिल हैं.
- कॉमन लाइब्रेरी:
- स्थानीय भाषा या अन्य वैकल्पिक लेबल इस्तेमाल करने की अनुमति देने के लिए,
Format.labels
जोड़ें.
- स्थानीय भाषा या अन्य वैकल्पिक लेबल इस्तेमाल करने की अनुमति देने के लिए,
- ExoPlayer:
- उस समस्या को ठीक किया गया है जिसमें
PreloadMediaPeriod
को फिर से प्रीलोड करने पर, स्ट्रीम को बनाए नहीं रखा जा सकता. - ट्रैक को फिर से चुनने के दौरान, वीडियो चलाने की अवधि के लिए सही
TrackSelectionResult
लागू करें. - मीडिया आइटम के बीच ट्रांज़िशन करते समय, वीडियो चलाने की अवधि बढ़ाने के बाद ही, रेंडर करने की सुविधा को जल्दी चालू करने वाले रेंडरर शुरू करें (#1017).
- proguard
-keepclasseswithmembers
नियम में,DefaultVideoFrameProcessor.Factory.Builder.build()
के लिए वापसी का टाइप जोड़ें (#1187).
- उस समस्या को ठीक किया गया है जिसमें
- ट्रांसफ़ॉर्मर:
- एपीआई 30 से पहले,
MediaMuxer
के नेगेटिव प्रज़ेंटेशन टाइमस्टैंप के साथ काम न करने की वजह से होने वाली गड़बड़ी को ठीक करने का तरीका जोड़ा गया.
- एपीआई 30 से पहले,
- ट्रैक के विकल्प:
DefaultTrackSelector
: कम या अनसेट फ़्रेम रेट वाले वीडियो ट्रैक के बजाय, 'सही' फ़्रेम रेट (>=10fps) वाले वीडियो ट्रैक को प्राथमिकता दें. इससे यह पक्का होता है कि प्लेयर, मोशन फ़ोटो से निकाले गए MP4 में 'असली' वीडियो ट्रैक को चुनता है. इनमें दो HEVC ट्रैक हो सकते हैं. इनमें से एक ट्रैक का रिज़ॉल्यूशन ज़्यादा होता है, लेकिन इसमें फ़्रेम की संख्या बहुत कम होती है (#1051).
- एक्सट्रैक्टर:
- WAV फ़ाइलों से अजीब साइज़ वाले चंक पढ़ते समय, पैडिंग को स्किप न करने की समस्या को ठीक किया गया है (#1117).
- MP3:
Format.averageBitrate
कोXING
औरVBRI
जैसे मेटाडेटा फ़्रेम से भरें. - MPEG-TS: इस बदलाव को पहले जैसा किया गया है. इस बदलाव का मकसद यह पक्का करना था कि स्ट्रीम की आखिरी ऐक्सेस यूनिट को सैंपल क्यू में भेजकर, आखिरी फ़्रेम रेंडर किया जाए (#7909). ऐसा इसलिए हुआ है, क्योंकि इस बदलाव की वजह से, सिर्फ़ आई-फ़्रेम वाली HLS स्ट्रीम (#1150) और H.262 HLS स्ट्रीम (#1126) में नई समस्याएं आ रही हैं.
- ऑडियो:
- अगर ऑडियो ट्रैक, ऑफ़लोड मोड में शुरू नहीं होता है, तो ऑफ़लोड की सुविधा बंद करके रेंडरर को ठीक करने की अनुमति दें.
- वीडियो:
- Galaxy Tab S7 FE, Chromecast with Google TV, और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया है. इस समस्या की वजह से, 60fps H265 स्ट्रीम को 'इस डिवाइस पर नहीं चलाया जा सकता' के तौर पर मार्क किया जाता है
- एक ऐसा तरीका जोड़ा गया है जिससे यह पक्का किया जा सकता है कि टनलिंग के दौरान पहला फ़्रेम हमेशा रेंडर हो. भले ही, डिवाइस एपीआई (#1169) की ज़रूरी शर्तों के मुताबिक, ऐसा अपने-आप न करता हो. (#966).
- उस समस्या को ठीक किया गया है जिसमें एचडीआर कलर की जानकारी को हैंडल करने की वजह से कोडेक ठीक से काम नहीं करता था. साथ ही, एसडीआर वीडियो ट्रैक के लिए अडैप्टिव फ़ॉर्मैट स्विच करने की सुविधा काम नहीं करती थी (#1158).
- टेक्स्ट:
- WebVTT: एक के बाद एक आने वाले क्यू से,
WebvttParser.parse
के फ़र्ज़ी अतिरिक्तCuesWithTiming
इंस्टेंस बनने से रोकें (#1177).
- WebVTT: एक के बाद एक आने वाले क्यू से,
- DRM:
- Android 14 के कुछ डिवाइसों पर,
ResourceBusyException
याNotProvisionedException
के बजायMediaDrm
फ़्रेमवर्क से जनरेट होने वालीNoSuchMethodError
को ठीक किया गया है (#1145).
- Android 14 के कुछ डिवाइसों पर,
- असर:
- कलर स्पेस बदलकर, PQ से एसडीआर टोन-मैपिंग को बेहतर बनाया गया है.
- सेशन:
- यूआई:
- अगर
Locale
डिसप्ले नेम की पहचान नहीं कर पाता है, तो ऑडियो ट्रैक की भाषा का नाम शामिल करने के लिए फ़ॉलबैक करें (#988).
- अगर
- डैश एक्सटेंशन:
- मेनिफ़ेस्ट से सभी
Label
एलिमेंट कोFormat.labels
में पॉप्युलेट करें (#1054).
- मेनिफ़ेस्ट से सभी
- आरटीएसपी एक्सटेंशन:
- एसडीपी पार्सिंग में, सेशन की जानकारी के खाली मान (आई-टैग) छोड़ें (#1087).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
- एमआईडीआई एक्सटेंशन को डिफ़ॉल्ट रूप से लोकल डिपेंडेंसी के तौर पर बंद करें, क्योंकि इसके लिए एक अतिरिक्त Maven रिपॉज़िटरी को कॉन्फ़िगर करना ज़रूरी होता है. जिन उपयोगकर्ताओं को स्थानीय डिपेंडेंसी से इस मॉड्यूल की ज़रूरत है वे इसे फिर से चालू कर सकते हैं.
वर्शन 1.3.0
6 मार्च, 2024
androidx.media3:media3-*:1.3.0
रिलीज़ हो गया है.
वर्शन 1.3.0 में ये कमिट शामिल हैं.
- कॉमन लाइब्रेरी:
android.resource://package/[type/]name
raw 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).
BundledChunkExtractor.Factory
औरDefaultHlsExtractorFactory
पर मौजूदexperimentalSetSubtitleParserFactory
तरीकों का नाम बदलकरsetSubtitleParserFactory
कर दिया गया है. साथ ही,null
को पास करने की अनुमति नहीं है. पार्सिंग के तरीके को कंट्रोल करने के लिए,experimentalParseSubtitlesDuringExtraction(boolean)
के नए तरीकों का इस्तेमाल करें.- डेटा निकालने के दौरान इस्तेमाल किए गए
SubtitleParser.Factory
को पसंद के मुताबिक बनाने की सुविधा जोड़ी गई है. इसके लिए,MediaSource.Factory.setSubtitleParserFactory()
का इस्तेमाल करें. MergingMediaSource
से जनरेट किए गए सभीFormat.id
फ़ील्ड में सोर्स प्रीफ़िक्स जोड़ें. इससे यह पता लगाने में मदद मिलती है कि किस सोर्स सेFormat
(#883) जनरेट हुआ है.- कस्टम सीएमसीडी (कॉमन मीडिया क्लाइंट डेटा) के मुख्य नामों की पुष्टि करने के लिए इस्तेमाल किए गए रेगुलर एक्सप्रेशन (रेगुलर एक्सप्रेशन) को ठीक किया गया है. इसके लिए, रेगुलर एक्सप्रेशन में बदलाव करके, सिर्फ़ हाइफ़न की जांच करने की सुविधा जोड़ी गई है (#1028).
- सीएमसीडी क्वेरी पैरामीटर की डबल-कोडिंग बंद की गई है (#1075).
- ट्रांसफ़ॉर्मर:
- H.265/HEVC SEF फ़ॉर्मैट वाले स्लो मोशन वीडियो को फ़्लैट करने की सुविधा जोड़ी गई है.
- ट्रांसमक्सिंग की स्पीड बढ़ाएं. खास तौर पर, 'वीडियो हटाएं' से जुड़े बदलावों के लिए.
- एपीआई जोड़ें, ताकि आउटपुट फ़ाइल वीडियो फ़्रेम से शुरू हो. इससे, ट्रिम करने की कार्रवाइयों का आउटपुट, प्लेयर के उन वर्शन के साथ ज़्यादा बेहतर तरीके से काम कर सकता है जो वीडियो का पहला फ़्रेम तब तक नहीं दिखाते, जब तक उसका प्रज़ेंटेशन टाइमस्टैंप (#829) नहीं आ जाता.
- एकल ऐसेट MP4 ट्रिम ऑपरेशन को ऑप्टिमाइज़ करने की सुविधा जोड़ी गई.
- यह पक्का करने के लिए कि आउटपुट फ़ाइल में वीडियो फ़्रेम का पहला टाइमस्टैंप मौजूद हो, सहायता जोड़ी गई. iOS पर आधारित प्लेयर में, आउटपुट फ़ाइलों की शुरुआत में दिखने वाले ब्लैक फ़्रेम की समस्या ठीक की गई है (#829).
- ट्रैक के विकल्प:
- इमेज ट्रैक चुनने की सुविधा चालू करने के लिए,
DefaultTrackSelector.selectImageTrack
जोड़ें. - अगर इमेज ट्रैक और वीडियो ट्रैक, दोनों उपलब्ध हैं, तो इमेज ट्रैक को चुना जाए या नहीं, यह तय करने के लिए
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
जोड़ें. डिफ़ॉल्ट वैल्यूfalse
होती है. इसका मतलब है कि वीडियो ट्रैक को चुनने को प्राथमिकता दी जाती है.
- इमेज ट्रैक चुनने की सुविधा चालू करने के लिए,
- एक्सट्रैक्टर:
- MP4 एक्सट्रैक्टर में AV1C पार्सिंग की सुविधा जोड़ी गई है, ताकि
ColorInfo.colorSpace
,ColorInfo.colorTransfer
, औरColorInfo.colorRange
वैल्यू वापस पाई जा सकें (#692). - MP3:
Info
हेडर वाली फ़ाइलों के लिए, स्थिर बिटरेट (सीबीआर) का इस्तेमाल करें. यहXing
हेडर के सीबीआर के बराबर होता है. इससे पहले, हमInfo
हेडर से seek table का इस्तेमाल करते थे. हालांकि, इससे seek करने की सुविधा कम सटीक होती है. ऐसा तब होता है, जब हम इसे अनदेखा करते हैं और यह मान लेते हैं कि फ़ाइल CBR है. - MPEG2-TS: DTS, DTS-LBR, और DTS:X Profile2 के लिए सहायता जोड़ी गई (#275).
- टीएस डिस्क्रिप्टर से ऑडियो टाइप एक्सट्रैक्ट किए गए हैं और उन्हें भूमिका के फ़्लैग पर मैप किया गया है. इससे उपयोगकर्ता, ऑडियो ट्रैक के बारे में बेहतर जानकारी पाकर उन्हें चुन सकते हैं (#973).
- MP4 एक्सट्रैक्टर में AV1C पार्सिंग की सुविधा जोड़ी गई है, ताकि
- ऑडियो:
- आवाज़ न होने वाले हिस्सों को स्किप करने वाले एल्गोरिदम को बेहतर बनाया गया है. इससे आवाज़ में अचानक बदलाव नहीं होता. साथ ही, आवाज़ न होने वाले हिस्सों की अवधि को कम किया गया है और उन्हें ज़्यादा नैचुरल बनाया गया है (#7423).
- आवाज़ बंद करने की सुविधा के स्किप होने की जानकारी ज़्यादा सटीक तरीके से दें (#1035).
- वीडियो:
MediaCodecVideoRenderer
कंस्ट्रक्टर को बदलें. यहVideoFrameProcessor.Factory
आर्ग्युमेंट लेता है. इसे ऐसे कंस्ट्रक्टर से बदलें जोVideoSinkProvider
आर्ग्युमेंट लेता है. जिन ऐप्लिकेशन को कस्टमVideoFrameProcessor.Factory
इंजेक्ट करना है वे कस्टमVideoFrameProcessor.Factory
का इस्तेमाल करने वालेCompositingVideoSinkProvider
को इंस्टैंशिएट कर सकते हैं. साथ ही, वीडियो सिंक प्रोवाइडर कोMediaCodecVideoRenderer
पास कर सकते हैं.
- टेक्स्ट:
- बिटमैप के सीरियल बनाने की प्रोसेस से जुड़ी गड़बड़ी को ठीक किया गया है, ताकि
Tried to marshall a Parcel that contained Binder objects
गड़बड़ी को ठीक किया जा सके. यह गड़बड़ीDefaultExtractorsFactory.setTextTrackTranscodingEnabled
का इस्तेमाल करते समय होती हैDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708:
rowLock
वैल्यू को अनदेखा करें. CEA-708-E S-2023 स्पेसिफ़िकेशन के मुताबिक,rowLock
औरcolumnLock
, दोनों को सही माना जाना चाहिए. भले ही, स्ट्रीम में मौजूद वैल्यू कुछ भी हों.columnLock
सुविधा लागू नहीं की गई है. इसलिए, इसे हमेशा गलत माना जाता है.
- बिटमैप के सीरियल बनाने की प्रोसेस से जुड़ी गड़बड़ी को ठीक किया गया है, ताकि
- इमेज:
- DASH थंबनेल के लिए सहायता जोड़ी गई. ग्रिड इमेज को काटा जाता है और हर इमेज के लिए अलग-अलग थंबनेल दिए जाते हैं. ये थंबनेल, इमेज के दिखने के समय के
ImageOutput
होते हैं.
- DASH थंबनेल के लिए सहायता जोड़ी गई. ग्रिड इमेज को काटा जाता है और हर इमेज के लिए अलग-अलग थंबनेल दिए जाते हैं. ये थंबनेल, इमेज के दिखने के समय के
- DRM:
- DRM कॉन्टेंट में, 'क्लियर लीड' वाले बिना एन्क्रिप्ट (सुरक्षित) किए गए सैंपल को डिफ़ॉल्ट रूप से तुरंत चलाएं. भले ही, बाद में एन्क्रिप्ट (सुरक्षित) किए गए सैंपल के लिए कुंजियां अभी तैयार न हुई हों. ऐसा हो सकता है कि वीडियो चलाने के बीच में ही रुक जाए. ऐसा तब होता है, जब वीडियो चलाने की पोज़िशन, एन्क्रिप्ट (सुरक्षित) किए गए सैंपल तक पहुंच जाती है, लेकिन कुंजियां अब भी तैयार नहीं होती हैं. हालांकि, पहले इस समय तक वीडियो चलना शुरू ही नहीं होता था. इस सुविधा को
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
याDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
की मदद से बंद किया जा सकता है.
- 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 ट्रैक को
- ऑडियो:
- #712:
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) में रखें. - लेगसी कंट्रोलर के लिए, ब्रॉडकास्ट करने की सुविधा से जुड़ी समस्या ठीक की गई
notifyChildrenChanged
(#644). - हमने एक गड़बड़ी को ठीक किया है. इस गड़बड़ी की वजह से, सूचना के लिए बंद किए गए
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
में काम करते हैं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
को अब "सिर्फ़ डिकोड करने वाले" सैंपल के लिए कॉल नहीं किया जाएगा, क्योंकि लागू करने पर यह हमेशा शून्य वैल्यू दिखाता है.
- असर:
- टाइमस्टैंप के हिसाब से,
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 यूज़र इंटरफ़ेस (यूआई) टेस्ट और Compose यूज़र इंटरफ़ेस (यूआई) टेस्ट के साथ काम करने लायक बनाएं. इस अपडेट में, उस गड़बड़ी को ठीक किया गया है जिसमें Espresso या Compose व्यू इंटरैक्शन के दौरान, वीडियो अपने-आप आगे बढ़ जाता था.
- बंद किए गए सिंबल हटाएं:
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
औरTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
हटाएं. इसके बजाय,Composition.Builder.setHdrMode(int)
का इस्तेमाल करें औरComposition
कोTransformer.start(Composition, String)
पर पास करें.- अब काम न करने वाले
DownloadNotificationHelper.buildProgressNotification
तरीके को हटाएं. इसके बजाय, ऐसे तरीके का इस्तेमाल करें जो अब भी काम करता है और जिसमेंnotMetRequirements
पैरामीटर का इस्तेमाल किया जाता है.
वर्शन 1.2.0-rc01
1 नवंबर, 2023
1.2.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.2.0-beta01
19 अक्टूबर, 2023
1.2.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.2.0-alpha02
29 सितंबर, 2023
1.2.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.2.0-alpha01
17 अगस्त, 2023
1.2.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.1.0
वर्शन 1.1.1
16 अगस्त, 2023
- कॉमन लाइब्रेरी:
- सभी मॉड्यूल से, गलती से जोड़ी गई
multidex
डिपेंडेंसी को हटाएं (#499).
- सभी मॉड्यूल से, गलती से जोड़ी गई
- ExoPlayer:
PlaybackStatsListener
में मौजूद उस समस्या को ठीक किया गया है जिसमें प्लेलिस्ट साफ़ करने के बाद, फ़र्ज़ीPlaybackStats
बन जाते थे.- कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) लॉगिंग में ये फ़ील्ड जोड़े गए हैं: स्ट्रीमिंग फ़ॉर्मैट (sf), स्ट्रीम टाइप (st), वर्शन (v), टॉप बिटरेट (tb), ऑब्जेक्ट की अवधि (d), मेज़र किया गया थ्रूपुट (mtp), और ऑब्जेक्ट टाइप (ot) (#8699).
- ऑडियो:
- एक गड़बड़ी को ठीक किया गया है. इसमें बहुत छोटी फ़ाइलें चलाने पर,
Player.getState()
कभी भीSTATE_ENDED
में नहीं बदलता था (#538).
- एक गड़बड़ी को ठीक किया गया है. इसमें बहुत छोटी फ़ाइलें चलाने पर,
- ऑडियो ऑफ़लोडिंग:
- RFC 7845 के मुताबिक, बिटस्ट्रीम में Ogg ID हेडर और Comment हेडर पेजों को पहले जोड़ें, ताकि Opus को ऑफ़लोड करके चलाया जा सके.
- वीडियो:
- H.265/HEVC: एसपीएस शॉर्ट और लॉन्ग टर्म रेफ़रंस फ़ोटो की जानकारी को पार्स करने से जुड़ी समस्या ठीक की गई.
- टेक्स्ट:
- CEA-608: क्यू के छोटे होने के लॉजिक में बदलाव किया गया है, ताकि सिर्फ़ दिखने वाले टेक्स्ट को ध्यान में रखा जा सके. पहले, इंडेंट और टैब ऑफ़सेट को तब शामिल किया जाता था, जब क्यू की लंबाई को 32 वर्णों तक सीमित किया जाता था. हालांकि, तकनीकी तौर पर यह स्पेसिफ़िकेशन के हिसाब से सही था (#11019).
- IMA एक्सटेंशन:
- IMA SDK टूल का वर्शन 3.30.3 पर अपडेट किया गया.
- सेशन:
- कंट्रोलर की स्थिति में कस्टम लेआउट जोड़ें और इसे ऐक्सेस करने के लिए, गेटर उपलब्ध कराएं. कस्टम लेआउट में बदलाव होने पर,
MediaController.Listener.onCustomLayoutChanged
को कॉल किया जाता है. जिन ऐप्लिकेशन को अलग-अलग Media3 कंट्रोलर को अलग-अलग कस्टम लेआउट भेजने हैं वेMediaSession.Callback.onConnect
में ऐसा कर सकते हैं. इसके लिए, उन्हेंMediaSession.Callback.onConnect
का इस्तेमाल करना होगा, ताकि यह पक्का किया जा सके कि कनेक्शन पूरा होने पर कंट्रोलर के लिए कस्टम लेआउट उपलब्ध हो.AcceptedResultBuilder
- उन मामलों को ठीक किया गया है जहां
MediaLibraryServiceLegacyStub
नेResult
को ऐसी गड़बड़ी भेजी थी जो इस सुविधा के साथ काम नहीं करती थी. इससेUnsupportedOperationException
(#78) गड़बड़ी हुई थी. PlayerWrapper
केVolumeProviderCompat
बनाने के तरीके को ठीक किया गया है. इसके लिए, लेगसी कमांड (COMMAND_ADJUST_DEVICE_VOLUME
औरCOMMAND_SET_DEVICE_VOLUME
) और नई कमांड (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
औरCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
), दोनों के ज़रिएvolumeControlType
तय किया गया है (#554).
- कंट्रोलर की स्थिति में कस्टम लेआउट जोड़ें और इसे ऐक्सेस करने के लिए, गेटर उपलब्ध कराएं. कस्टम लेआउट में बदलाव होने पर,
वर्शन 1.1.0
5 जुलाई, 2023
- कॉमन लाइब्रेरी:
- अनुपयुक्त ऑडियो रूट के लिए, ऑडियो को बंद करने की वजह जोड़ें और तैयार होने पर उसे चलाएं ऑडियो को बहुत देर तक बंद रखने की वजह बदलें. (#15).
- प्लेयर में निर्देश जोड़ना:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_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). - सीधे तौर पर वीडियो चलाने (ऑफ़लोड) के दौरान, ओपस फ़्रेम को Ogg पैकेट में शामिल करें.
- स्लीप मोड के दौरान, ऑफ़लोड शेड्यूल करने की सुविधा का इस्तेमाल करके मौजूदा जगह का अनुमान लगाना.
- खिलाड़ी के लाइफ़साइकल के आखिर में संसाधनों को रिलीज़ करने के लिए,
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 चौड़ाई और ऊंचाई वालाVideoSize
रिपोर्ट करने के लिए कहें.Player.Listener.onVideoSizeChanged
में बदलाव होने पर,Player.Listener.onVideoSizeChanged
को कॉल किया जाता है.Player.getVideoSize()
इस बदलाव के बाद,MediaCodecVideoRenderer
के साथ ExoPlayer के वीडियो का साइज़ 0 होता है. ऐसा तब होता है, जबMediaCodecVideoRenderer
वीडियो के साथ काम नहीं करता या वीडियो ट्रैक का साइज़ अब तक तय नहीं किया गया है.Player.getCurrentTracks
- रेंडरर के बंद होने पर,
- DRM:
DefaultDrmSession
पर, सिर्फ़ इंटरनल इस्तेमाल के लिए उपलब्ध कई तरीकों की विज़िबिलिटी कम करें. इन तरीकों को DRM पैकेज के बाहर से कॉल नहीं किया जाना चाहिए:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Muxer:
- एक नई मक्सर लाइब्रेरी जोड़ी गई है. इसका इस्तेमाल MP4 कंटेनर फ़ाइल बनाने के लिए किया जा सकता है.
- IMA एक्सटेंशन:
- डीएआई के लिए, एक से ज़्यादा अवधि वाली लाइव डैश स्ट्रीम चालू करें. कृपया ध्यान दें कि फ़िलहाल, लाइव स्ट्रीम में आगे-पीछे करने की सुविधा उपलब्ध नहीं है (#10912).
- उस गड़बड़ी को ठीक किया गया है जिसमें लाइव स्ट्रीम में नया विज्ञापन ग्रुप डाला जाता है. ऐसा इसलिए होता है, क्योंकि लगातार टाइमलाइन में कॉन्टेंट की कैलकुलेट की गई पोज़िशन में थोड़ा अंतर होता है.
- सेशन:
MediaSession.getControllerForCurrentRequest
हेल्पर तरीका जोड़ें, ताकि उस कंट्रोलर के बारे में जानकारी मिल सके जो फ़िलहालPlayer
तरीके को कॉल कर रहा है.- ऐप्लिकेशन में
androidx.media3.session.MediaButtonReceiver
जोड़ें, ताकि वे मीडिया बटन इवेंट के ज़रिए कॉन्टेंट को फिर से चलाना शुरू कर सकें. ये इवेंट, उदाहरण के लिए, Bluetooth हेडसेट (#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()
(अगरreset
true
है) का इस्तेमाल करें.- बंद किए गए दो
SimpleCache
कंस्ट्रक्टर हटाएं. इसके बजाय, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो बंद नहीं किया गया है और बेहतर परफ़ॉर्मेंस के लिएDatabaseProvider
लेता है. DefaultBandwidthMeter
कंस्ट्रक्टर हटाएं. इसके बजाय,DefaultBandwidthMeter.Builder
का इस्तेमाल करें.DefaultDrmSessionManager
कंस्ट्रक्टर हटाएं. इसके बजाय,DefaultDrmSessionManager.Builder
का इस्तेमाल करें.- अब काम न करने वाले दो
HttpDataSource.InvalidResponseCodeException
कंस्ट्रक्टर हटा दिए गए हैं. गड़बड़ी की लॉगिंग को बेहतर बनाने के लिए, अब काम करने वाले ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अतिरिक्त फ़ील्ड(cause
,responseBody
) स्वीकार करता है. DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
, औरDownloadHelper.forSmoothStreaming
हटाएं. इसके बजाय,DownloadHelper.forMediaItem
का इस्तेमाल करें.- अब काम न करने वाले
DownloadService
कंस्ट्रक्टर को हटाएं. इसके बजाय, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अब भी काम करता है. इसमेंchannelDescriptionResourceId
पैरामीटर देने का विकल्प शामिल होता है. - Charsets (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
, औरUTF16LE_NAME
) के लिए, बंद किए गए स्ट्रिंग कॉन्स्टेंट हटाएं. इसके बजाय,kotlin.text
पैकेज,java.nio.charset.StandardCharsets
याcom.google.common.base.Charsets
से Kotlin Charsets का इस्तेमाल करें. - अब काम नहीं करने वाले
WorkManagerScheduler
कंस्ट्रक्टर को हटाएं. इसके बजाय, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अब भी काम करता है. इसमेंContext
पैरामीटर देने का विकल्प शामिल होता है. createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
, औरcreateSampleFormat
के तौर पर इस्तेमाल किए गए ऐसे तरीके हटाएं जो अब काम नहीं करते. इनका इस्तेमालFormat
क्लास को इंस्टैंटिएट करने के लिए किया जाता था. इसके बजाय,Format
के इंस्टेंस बनाने के लिएFormat.Builder
का इस्तेमाल करें.- अब काम न करने वाले तरीकों
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
, औरcopyWithVideoSize
को हटाएं. इसके बजाय,Format.buildUpon()
और सेटर तरीकों का इस्तेमाल करें. - इस्तेमाल बंद किए जा चुके
ExoPlayer.retry()
को हटाएं. इसके बजाय,prepare()
का इस्तेमाल करें. - बंद किए गए ज़ीरो-आर्ग
DefaultTrackSelector
कंस्ट्रक्टर को हटाएं. इसके बजाय,DefaultTrackSelector(Context)
का इस्तेमाल करें. - हटाए गए
OfflineLicenseHelper
कंस्ट्रक्टर को हटाएं. इसके बजाय,OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
का इस्तेमाल करें. - इस्तेमाल बंद किए गए
DownloadManager
कंस्ट्रक्टर को हटाएं. इसके बजाय,Executor
लेने वाले कंस्ट्रक्टर का इस्तेमाल करें. - इस्तेमाल बंद किए जा चुके
Cue
कंस्ट्रक्टर हटाएं. इसके बजाय,Cue.Builder
का इस्तेमाल करें. - हटाए गए
OfflineLicenseHelper
कंस्ट्रक्टर को हटाएं. इसके बजाय,OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
का इस्तेमाल करें. - अब इस्तेमाल में नहीं हैं, ऐसे चार
AnalyticsListener
तरीके हटाएं:onDecoderEnabled
के बजाय,onAudioEnabled
और/याonVideoEnabled
का इस्तेमाल करें.onDecoderInitialized
के बजाय,onAudioDecoderInitialized
और/याonVideoDecoderInitialized
का इस्तेमाल करें.onDecoderInputFormatChanged
के बजाय,onAudioInputFormatChanged
और/याonVideoInputFormatChanged
का इस्तेमाल करें.onDecoderDisabled
के बजाय,onAudioDisabled
और/याonVideoDisabled
का इस्तेमाल करें.
- हटाए गए
Player.Listener.onSeekProcessed
औरAnalyticsListener.onSeekProcessed
को हटाएं. इसके बजाय,DISCONTINUITY_REASON_SEEK
के साथonPositionDiscontinuity
का इस्तेमाल करें. ExoPlayer.setHandleWakeLock(boolean)
हटाएं और इसके बजायsetWakeMode(int)
का इस्तेमाल करें.- इस्तेमाल बंद किए गए
DefaultLoadControl.Builder.createDefaultLoadControl()
को हटाएं. इसके बजाय,build()
का इस्तेमाल करें. - इस्तेमाल बंद किए गए
MediaItem.PlaybackProperties
को हटाएं. इसके बजाय,MediaItem.LocalConfiguration
का इस्तेमाल करें.MediaItem.playbackProperties
एट्रिब्यूट की वैल्यू के तौर पर दिया गया फ़ील्ड अबMediaItem.LocalConfiguration
टाइप का है.
वर्शन 1.1.0-rc01
21 जून, 2023
1.1.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.1.0-beta01
7 जून, 2023
1.1.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.1.0-alpha01
10 मई, 2023
1.1.0 स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.0.0
वर्शन 1.0.2
18 मई, 2023
androidx.media3:media3-*:1.0.2
रिलीज़ हो गया है.
वर्शन 1.0.2 में ये कमिट शामिल हैं.
यह रिलीज़, ExoPlayer 2.18.7 रिलीज़ से जुड़ी है.
1.0.1 रिलीज़ के बाद, इस रिलीज़ में ये बदलाव किए गए हैं:
- कोर लाइब्रेरी:
Buffer.isLastSample()
एट्रिब्यूट जोड़ें. इससे यह पता चलता है किBuffer
में फ़्लैगC.BUFFER_FLAG_LAST_SAMPLE
शामिल है या नहीं.- उस समस्या को ठीक किया गया है जिसमें फ़्रेम वाला आखिरी सैंपल, 'स्ट्रीम खत्म' सैंपल को पढ़े बिना डीक्यू किए जाने पर, आखिरी फ़्रेम रेंडर नहीं होता था. (#11079).
- एक्सट्रैक्टर:
- MPEG-TS फ़ाइलों में H.265 SPS को पार्स करने की समस्या ठीक की गई है. इसके लिए, RTSP और MP4 एक्सट्रैक्टर के लिए पहले से इस्तेमाल किए जा रहे पार्सिंग लॉजिक का फिर से इस्तेमाल किया गया है (#303).
- टेक्स्ट:
- एसएसए: अगर UTF-16 फ़ाइलें बाइट ऑर्डर मार्क (#319) से शुरू होती हैं, तो उनके लिए सहायता जोड़ें.
- सेशन:
- उस समस्या को ठीक किया गया है जिसमें लेगसी
MediaSessionCompat
से कनेक्ट होने पर,MediaController
उपलब्ध कमांड अपडेट नहीं करता है. लेगसीMediaSessionCompat
अपनी कार्रवाइयां अपडेट करता है. - उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, सिस्टम यूज़र इंटरफ़ेस (यूआई) से
MediaLibraryService
को किए गए कॉल के लिए,MediaLibraryService
शून्य वैल्यू नहीं दिखाता था. यह गड़बड़ी, एपीआई लेवल 30 परparams.isRecent == true
के साथ होती थी (#355).Callback.onGetLibraryRoot
MediaSessionService
याMediaLibraryService
की मेमोरी लीक की समस्या ठीक की गई है (#346).- उस गड़बड़ी को ठीक किया गया है जिसमें
MediaSession
मेंTimeline
और जगह की जानकारी को एक साथ अपडेट करने पर,MediaController
सेIllegalStateException
मिल सकता है.
- उस समस्या को ठीक किया गया है जिसमें लेगसी
वर्शन 1.0.1
18 अप्रैल, 2023
androidx.media3:media3-*:1.0.1
रिलीज़ हो गया है.
वर्शन 1.0.1 में ये कमिट शामिल हैं.
यह रिलीज़, ExoPlayer 2.18.6 रिलीज़ से जुड़ी है.
- कोर लाइब्रेरी:
- डिफ़ॉल्ट पोज़िशन पर जाने के दौरान, टारगेट की गई लाइव स्ट्रीम को बदलने की सुविधा को रीसेट किया गया है (#11051).
- उस गड़बड़ी को ठीक किया गया है जिसमें मीडिया में मौजूद खाली सैंपल स्ट्रीम की वजह से, वीडियो अटक जाता था.
- सेशन:
- उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी
MediaSessionCompat
से पब्लिश किए गए एक जैसे कई आइटम की वजह से,MediaController
में अपवाद दिखता है (#290). MediaSession.broadcastCustomCommand
को लेगसीMediaControllerCompat.Callback.onSessionEvent
में फ़ॉरवर्ड करने की सुविधा जोड़ें (#293).- उस गड़बड़ी को ठीक किया गया है जिसमें
MediaSession.setPlayer
को कॉल करने पर, उपलब्ध निर्देश अपडेट नहीं होते थे. - उस समस्या को ठीक किया गया है जिसमें
TrackSelectionOverride
इंस्टेंस,MediaController
से भेजे जाने पर अनदेखा कर दिए जाते हैं. ऐसा तब होता है, जब वेFormat.metadata
(#296) वाले ग्रुप का रेफ़रंस देते हैं. - उस समस्या को ठीक किया गया है जिसमें लेगसी
MediaSessionCompat
के ज़रिए मेटाडेटा ऐक्सेस करने के लिए,Player.COMMAND_GET_CURRENT_MEDIA_ITEM
का उपलब्ध होना ज़रूरी है. - उस समस्या को ठीक किया गया है जिसमें बैकग्राउंड थ्रेड पर
MediaSession
इंस्टेंस का इस्तेमाल करने पर,MediaSessionService
में क्रैश हो जाते थे (#318). - उस समस्या को ठीक किया गया है जिसमें लाइब्रेरी ने मीडिया बटन रिसीवर का एलान किया था, जबकि ऐप्लिकेशन ने ऐसा नहीं किया था (#314).
- उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी
- डैश:
- खाली सेगमेंट टाइमलाइन को हैंडल करने से जुड़ी समस्या ठीक की गई है (#11014).
- RTSP:
- अगर RTSP Setup with UDP, 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()
के आर्ग्युमेंट के तौर पर जोड़ें. साथ ही, साफ़ तौर पर जानकारी देने के लिए, न बदलने वाली सूचियों का इस्तेमाल करें (#216).DefaultMediaNotificationProvider
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
में तेज़ी से खोज करने पर, सेशन ट्रैकिंग से जुड़ी समस्या ठीक की गई है (#180).- एक आइटम वाली प्लेलिस्ट में
seekToNext
याseekToPrevious
को कॉल करते समय,onMediaItemTransition
कॉलबैक नहीं भेजा जा रहा है (#10667). Player.getSurfaceSize
जोड़ें. इससे उस जगह का साइज़ पता चलता है जहां वीडियो रेंडर किया जाता है.- उस बग को ठीक किया गया है जिसकी वजह से, प्लेयर रिलीज़ के दौरान श्रोताओं को हटाने पर
IllegalStateException
(#10758) हो सकती है.
- यह देखने के लिए कि फ़िलहाल चुने गए ट्रैक के लिए टनलिंग की सुविधा चालू है या नहीं,
- बिल्ड:
- कंपाइलेशन से जुड़ी गड़बड़ियों से बचने के लिए, कम से कम
compileSdkVersion
लागू करें (#10684). - किसी दूसरे Gradle बिल्ड में शामिल होने पर, पब्लिशिंग ब्लॉक करने से बचें.
- कंपाइलेशन से जुड़ी गड़बड़ियों से बचने के लिए, कम से कम
- ट्रैक चुनने की सुविधा:
- अगर डिसप्ले पर Dolby Vision काम नहीं करता है, तो Dolby Vision के बजाय दूसरे ट्रैक को प्राथमिकता दें. (#8944).
- डाउनलोड:
- वीडियो:
- अगर डिसप्ले पर 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).
- एपीआई 26 और एपीआई 27 पर,
DefaultNotificationProvider
से बनाई गई सूचना से जुड़े 'बैज' को मैन्युअल तरीके से छिपाएं (एपीआई 28 और इसके बाद के वर्शन पर, बैज अपने-आप छिप जाता है) (#131). - उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी MediaSession से Media3 MediaController तक दूसरा बाइंडर कनेक्शन, IllegalStateExceptions का कारण बनता है (#49).
- RTSP:
- आईएमए:
- विज्ञापन की जानकारी लोड करने के लिए टाइम आउट जोड़ें, ताकि उन मामलों को हैंडल किया जा सके जहां IMA SDK, विज्ञापन लोड करने में अटक जाता है (#10510).
- कॉन्टेंट के आखिर में जाने पर, वीडियो के बीच में दिखने वाले विज्ञापनों को स्किप करने से रोकना (#10685).
- सर्वर-साइड से डाले गए विज्ञापनों वाली लाइव स्ट्रीम के लिए, विंडो की अवधि का सही हिसाब लगाएं. उदाहरण के लिए, IMA DAI (#10764).
- FFmpeg एक्सटेंशन:
- NDK 23.1.7779620 और इसके बाद के वर्शन के साथ FFmpeg लाइब्रेरी लिंक करने के लिए, नए फ़्लैग जोड़े गए हैं (#9933).
- AV1 एक्सटेंशन:
- CMake के वर्शन को अपडेट किया गया है, ताकि Android Studio के नए वर्शन के साथ काम न करने की समस्या से बचा जा सके (#9933).
- कास्ट एक्सटेंशन:
getDeviceInfo()
को लागू करें, ताकिMediaController
की मदद से वीडियो चलाने पर,CastPlayer
की पहचान की जा सके (#142).
- ट्रांसफ़ॉर्मर:
- आउटपुट सैंपल जनरेट करने में ज़्यादा समय लगने का पता लगाने के लिए, मक्सर वॉचडॉग टाइमर जोड़ें.
- बंद किए गए सिंबल हटाएं:
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). - एपीआई 29 और 30 पर, 5G-NSA नेटवर्क टाइप का पता लगाना बंद कर दिया गया है. इन प्लेबैक के लिए, 4G नेटवर्क का इस्तेमाल किया जाएगा.
null
कोMediaSource.Factory.setDrmSessionManagerProvider
औरMediaSource.Factory.setLoadErrorHandlingPolicy
में पास करने की अनुमति नहीं है. ज़रूरत पड़ने पर,DefaultDrmSessionManagerProvider
औरDefaultLoadErrorHandlingPolicy
के इंस्टेंस को साफ़ तौर पर पास किया जा सकता है.- जब सटीक
LocalConfiguration
की जानकारी न हो, तब मीडिया चलाने के लिए ज़रूरी मेटाडेटा दिखाने के लिएMediaItem.RequestMetadata
जोड़ें.MediaMetadata.mediaUrl
को भी हटा दें, क्योंकि अब इसेRequestMetadata
में शामिल कर दिया गया है. Player.Command.COMMAND_SET_MEDIA_ITEM
जोड़ें, ताकि खिलाड़ी किसी एक आइटम को सेट करने की अनुमति दे सकें.
- ट्रैक चुनने की सुविधा:
TrackSelectionOverrides
क्लास कोTrackSelectionParameters
में बदलें. इसके अलावा,TrackSelectionOverride
को टॉप लेवल की क्लास के तौर पर प्रमोट करें.TracksInfo
का नाम बदलकरTracks
औरTracksInfo.TrackGroupInfo
का नाम बदलकरTracks.Group
कर दो.Player.getCurrentTracksInfo
औरPlayer.Listener.onTracksInfoChanged
का नाम बदलकरPlayer.getCurrentTracks
औरPlayer.Listener.onTracksChanged
कर दिया गया है. इसमेंPlayer.Listener.onTracksChanged
तरीके के नाम को 'अन-डेप्रिकेट' करना शामिल है. हालांकि, इसमें पैरामीटर के टाइप अलग-अलग होते हैं.- डिप्रेकेट किए गए
DefaultTrackSelector.ParametersBuilder
के बजाय,DefaultTrackSelector.Parameters.Builder
को वापस लाने के लिएDefaultTrackSelector.buildUponParameters
औरDefaultTrackSelector.Parameters.buildUpon
को बदलें. - जो डिफ़ॉल्ट रूप से चालू होता है.
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
इस सुविधा के चालू होने पर,DefaultTrackSelector
उन ऑडियो ट्रैक को प्राथमिकता देगा जिनके चैनलों की संख्या, डिवाइस की आउटपुट क्षमताओं से ज़्यादा नहीं है. हैंडहेल्ड डिवाइसों पर,DefaultTrackSelector
मल्टीचैनल ऑडियो फ़ॉर्मैट के बजाय स्टीरियो/मोनो को प्राथमिकता देगा. ऐसा तब तक होगा, जब तक मल्टीचैनल फ़ॉर्मैट को स्पैटियलाइज़ (Android 12L+) नहीं किया जा सकता या वह डॉल्बी सराउंड साउंड फ़ॉर्मैट नहीं है. इसके अलावा, जिन डिवाइसों पर ऑडियो स्पैटियलाइज़ेशन की सुविधा काम करती है उन परDefaultTrackSelector
, स्पैटियलाइज़र प्रॉपर्टी में होने वाले बदलावों पर नज़र रखेगा. साथ ही, इन बदलावों के आधार पर नए ट्रैक को चुनेगा.television
यूज़र इंटरफ़ेस (यूआई) मोड वाले डिवाइसों पर ये पाबंदियां लागू नहीं होती हैं. साथ ही, सबसे ज़्यादा चैनलों वाले फ़ॉर्मैट को प्राथमिकता दी जाएगी. इस सुविधा को चालू करने के लिए,DefaultTrackSelector
इंस्टेंस कोContext
के साथ बनाया जाना चाहिए.
- वीडियो:
DummySurface
का नाम बदलकरPlaceholderSurface
करें.MediaCodecVideoRenderer.getCodecMaxInputSize
में AV1 फ़ॉर्मैट के लिए सहायता जोड़ी गई.
- ऑडियो:
- LG AC3 ऑडियो डिकोडर, नॉन-स्टैंडर्ड MIME टाइप के विज्ञापन दिखाता है.
- एपीआई < 21 पर एआरटी की पुष्टि करने में लगने वाले समय को कम करने के लिए,
AudioAttributes.getAudioAttributesV21()
के रिटर्न टाइप कोandroid.media.AudioAttributes
से बदलकर नईAudioAttributesV21
रैपर क्लास में बदलें. - जब फ़ॉर्मैट के ऑडियो चैनल की संख्या सेट नहीं होती है, तब ऑडियो पासथ्रू के लिए प्लैटफ़ॉर्म (एपीआई 29+) से क्वेरी करता है या ऑडियो एन्कोडिंग चैनल की संख्या का अनुमान लगाता है. ऐसा एचएलएस चंकलेस तैयारी (10204) के साथ होता है.
- चैनल मास्क के साथ
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 की वजह से AndroidStudio के Gradle सिंक में होने वाली गड़बड़ी से बचा जा सके (#9933).
- CMake के वर्शन को
- बंद किए गए सिंबल हटाएं:
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
को हटाएं. इसके बजाय,Player.Listener.onTracksChanged(Tracks)
का इस्तेमाल करें.Player.getCurrentTrackGroups
औरPlayer.getCurrentTrackSelections
हटाएं. इसके बजाय,Player.getCurrentTracks
का इस्तेमाल करें.ExoPlayer.getCurrentTrackGroups
औरExoPlayer.getCurrentTrackSelections
का इस्तेमाल भी जारी रखा जा सकता है. हालांकि, इन तरीकों का इस्तेमाल अब नहीं किया जा सकता.DownloadHelper
DEFAULT_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
में डुप्लीकेटTrackGroup
s को अनुमति न दें.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
के तौर पर समझना बंद करें.- उन मेनिफ़ेस्ट के लिए बेस यूआरएल को बाहर रखने की लॉजिक से जुड़ी समस्या ठीक की गई है जो DVB नेमस्पेस (#9856) के बारे में नहीं बताते हैं.
- मिलते-जुलते
MPD.Location
यूआरएल के लिए सहायता उपलब्ध है (#9939).
- पार्स की गई ज़रूरी और अलग से दी गई प्रॉपर्टी को
- HLS:
- सिर्फ़ ऑडियो वाली एचएलएस स्ट्रीम के लिए,
Format.label
एट्रिब्यूट की वैल्यू सही तरीके से भरें (#9608). - स्टार्ट अप टाइम को बेहतर बनाने के लिए, डिफ़ॉल्ट रूप से बिना चंक वाली तैयारी का इस्तेमाल करें. अगर आपके रेंडिशन में, मक्स किए गए ऐसे क्लोज़्ड कैप्शन ट्रैक शामिल हैं जिन्हें मास्टर प्लेलिस्ट में नहीं बताया गया है, तो आपको उन्हें मास्टर प्लेलिस्ट में जोड़ना चाहिए, ताकि वे चलाने के लिए उपलब्ध हों. इसके अलावा,
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
की मदद से, बिना चंक वाली तैयारी की सुविधा बंद करें. - एचएलएस में, सटीक की-फ़्रेम की मदद से वीडियो में आगे-पीछे जाने की सुविधा उपलब्ध कराई गई है (#2882).
- सिर्फ़ ऑडियो वाली एचएलएस स्ट्रीम के लिए,
- RTSP:
- किसी भी सर्वर कनेक्शन (#9606) के लिए इस्तेमाल किए गए
SocketFactory
को बदलने के लिए, क्लाइंट एपीआई उपलब्ध कराएं. - अगर BASIC और DIGEST, दोनों मौजूद हैं, तो BASIC के बजाय DIGEST ऑथेंटिकेशन का इस्तेमाल करें (#9800).
- जब आरटीएसपी ट्रैक की टाइमिंग उपलब्ध न हो, तब उसे मैनेज करें (#9775).
- आरटीपी-जानकारी हेडर की अमान्य वैल्यू को अनदेखा करें (#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 या इससे पहले के वर्शन का इस्तेमाल करें.ActionFileUpgradeUtil
ProgressiveMediaSource#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
मॉड्यूल ने ले ली है. इससे, प्लेयर और मीडिया सेशन के बीच सीधे तौर पर इंटिग्रेशन होता है. इसके लिए, अडैप्टर/कनेक्टर क्लास का इस्तेमाल करने की ज़रूरत नहीं होती.