Media3

मीडिया के इस्तेमाल के उदाहरणों के लिए लाइब्रेरी.
नया अपडेट स्टेबल रिलीज़ रिलीज़ कैंडिडेट बीटा रिलीज़ ऐल्फ़ा रिलीज़
24 जून, 2026 1.10.1 - - 1.11.0-alpha01

डिपेंडेंसी का एलान करना

Media3 पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.

अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:

ग्रूवी

dependencies {
    def media3_version = "1.10.1"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For SmoothStreaming playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation "androidx.media3:media3-exoplayer-midi:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs using Jetpack Compose
    implementation "androidx.media3:media3-ui-compose:$media3_version"
    // For building media playback UIs using Jetpack Compose with Material Design 3
    implementation "androidx.media3:media3-ui-compose-material3:$media3_version"
    // For building media playback UIs using Views
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For inspecting media files
    implementation "androidx.media3:media3-inspector:$media3_version"
    // For extracting and processing video frames
    implementation "androidx.media3:media3-inspector-frame:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // For applying effects on video frames
    implementation "androidx.media3:media3-effect:$media3_version"
    // For applying Lottie effects on video frames
    implementation "androidx.media3:media3-effect-lottie:$media3_version"

    // For muxing media files
    implementation "androidx.media3:media3-muxer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for reading and writing media containers
    implementation "androidx.media3:media3-container:$media3_version"
    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
    // Common Kotlin-specific functionality
    implementation "androidx.media3:media3-common-ktx:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.10.1"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For SmoothStreaming playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation("androidx.media3:media3-exoplayer-midi:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs using Compose
    implementation("androidx.media3:media3-ui-compose:$media3_version")
    // For building media playback UIs using Views
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs using Jetpack Compose
    implementation("androidx.media3:media3-ui-compose:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For inspecting media files
    implementation("androidx.media3:media3-inspector:$media3_version")
    // For extracting and processing video frames
    implementation("androidx.media3:media3-inspector-frame:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // For applying effects on video frames
    implementation("androidx.media3:media3-effect:$media3_version")
    // For applying Lottie effects on video frames
    implementation("androidx.media3:media3-effect-lottie:$media3_version")

    // For muxing media files
    implementation("androidx.media3:media3-muxer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for reading and writing media containers
    implementation("androidx.media3:media3-container:$media3_version")
    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
    // Common Kotlin-specific functionality
    implementation("androidx.media3:media3-common-ktx:$media3_version")
}

डिपेंडेंसी के बारे में ज़्यादा जानकारी के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.

सुझाव/राय दें या शिकायत करें

आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. Media3 के समस्या ट्रैकर का इस्तेमाल करके, सवालों के जवाब, पहले से मालूम समस्याओं, और सुविधाओं के अनुरोधों के बारे में जानकारी पाई जा सकती है. साथ ही, नई समस्याएं सबमिट की जा सकती हैं.

वर्शन 1.11.0

1.11.0-alpha01

  • कॉमन लाइब्रेरी:
    • ऑडियो चैनल मास्क को साफ़ तौर पर दिखाने के लिए, Format.channelMask जोड़ें. साथ ही, इसे सुरक्षित तरीके से हल करने के लिए, नया Util.getAudioTrackChannelConfig(Format) ओवरलोड जोड़ें.
    • Kotlin को 2.0.20 से 2.2.0 पर अपग्रेड करें.
  • ExoPlayer:
    • समय पर निर्भर रहने वाली ऐसी गड़बड़ी को ठीक किया गया है जिसकी वजह से ExoPlayer में IllegalStateException या IndexOutOfBoundsException हो सकता है.
    • AdsMediaSource में विज्ञापन ग्रुप की संख्या की जांच को आसान बनाएं, ताकि जब किसी विज्ञापन ग्रुप को पूरी तरह से प्रोसेस किया जाए, तो विज्ञापन ग्रुप की संख्या कम हो सके (hasUnplayedAds() false है). इससे रीसेट वर्कफ़्लो के दौरान, डाइनैमिक विज्ञापन ग्रुप के साइज़ में बदलाव किया जा सकेगा.
    • एक से ज़्यादा अवधि वाले कॉन्टेंट (जैसे, DASH) में विज्ञापन दिखाने की सुविधा जोड़ें. इसके लिए, हर अवधि के लिए AdPlaybackState को अलग-अलग करें और ऑफ़सेट करें.
    • SampleStream में getFlags() और FLAG_STRICT_DURATION जोड़ें, ताकि स्ट्रीम रिपोर्टिंग फ़्लैग कर सकें. साथ ही, रेंडरर को अपडेट करें, ताकि वे इन फ़्लैग की डाइनैमिक तरीके से जांच कर सकें.
    • जब स्ट्रीम फ़ॉर्मैट से मान्य वैल्यू नहीं मिलती है, तब MediaCodecVideoRenderer में फ़्रेम रेट का अनुमान लगाने वाले टूल और MediaCodecAudioRenderer में कोडेक के आउटपुट फ़ॉर्मैट का इस्तेमाल करके, कोडेक के ऑपरेटिंग रेट का हिसाब लगाया जाता है. इससे कोडेक को बार-बार रीसेट करने से बचा जा सकता है.
    • कोर प्लेयर में क्लाइंट-साइड से डाले गए विज्ञापनों के लिए, कॉन्टेंट की क्लिपिंग हटाने की सुविधा. इसके बजाय, AdsMediaSource क्लिप करने की लॉजिक का ध्यान रखता है. क्लाइंट-साइड पर डाले गए विज्ञापन स्रोतों को अपडेट करना होगा, ताकि कॉन्टेंट क्लिप करने की सुविधा को इंटरनल तौर पर लागू किया जा सके.
    • अगर किसी ट्रैक में कोडेक प्रोफ़ाइल या लेवल की जानकारी सही फ़ॉर्मैट में दी गई है, लेकिन उसे पहचाना नहीं जा सका है, तो उसे supported=NO_EXCEEDS_CAPABILITIES के तौर पर मार्क करें. supported=YES के तौर पर मार्क न करें. supported=YES का इस्तेमाल उन ट्रैक के लिए किया जाता है जिनमें प्रोफ़ाइल या लेवल की जानकारी मौजूद नहीं होती या गलत फ़ॉर्मैट में दी गई होती है. इससे यह पक्का होता है कि डिवाइस पर काम न करने वाले ट्रैक न चुने जाएं. ऐसा तब होता है, जब डिवाइस पर काम करने वाले बेहतर ट्रैक उपलब्ध हों.
    • DefaultPreloadManager.SimpleRankingDataComparator जोड़ें. यह एक RankingDataComparator है. यह मीडिया आइटम की रैंक की तुलना करता है. यह तुलना, मौजूदा समय में चल रहे मीडिया आइटम के इंडेक्स से उनकी दूरी के आधार पर की जाती है. अगर ज़्यादा बारीकी से तुलना करने वाले लॉजिक की ज़रूरत है, तो ऐप्लिकेशन इसके compare(Integer, Integer) तरीके को बदल सकते हैं. कस्टम SimpleRankingDataComparator को DefaultPreloadManager.Builder के नए कंस्ट्रक्टर के ज़रिए इंजेक्ट किया जा सकता है.
    • अगर उपलब्ध हीप मेमोरी कम है, तो बफ़र बाइट के साइज़ की सीमाओं पर वापस जाकर, DefaultLoadControl.prioritizeTimeOverSizeThresholds के ओओएम जोखिम को कम करें.
    • MediaItem.imageDurationUs सेट न होने पर, अब भी इमेज को हैंडल किया जा सकता है: JPEG और HEIC फ़ॉर्मैट वाली इमेज अब बहुत कम समय के लिए 'प्ले' होती हैं. यह समय डिफ़ॉल्ट रूप से सेट होता है. ऐसा ही PNG और अन्य इमेज के साथ पहले होता था.
    • MediaSource में BandwidthMeter को MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter) से जोड़ें. हालांकि, कस्टम तरीके से लागू की गई बंद की गई विधि को अब भी डिफ़ॉल्ट रूप से कॉल किया जाएगा. हमारा सुझाव है कि आप नई विधि लागू करें और BandwidthMeter.getTransferListener() का इस्तेमाल करके, पुरानी विधि के बराबर नतीजे पाएं.
    • DefaultBandwidthMeter में, कस्टम InitialBitrateSupplier के लिए सहायता जोड़ें. इससे ऐप्लिकेशन, शुरुआती बिटरेट का अनुमान लगाने के लिए अपना लॉजिक दे सकते हैं. इसका इस्तेमाल DefaultBandwidthMeter बनाते समय और नेटवर्क टाइप में बदलाव होने पर किया जाएगा. DefaultBandwidthMeter.Builder.setInitialBitrateSupplier() के ज़रिए सप्लायर सेट किया जा सकता है.
    • डाइनैमिक शेड्यूलिंग की सुविधा डिफ़ॉल्ट रूप से चालू करें. ExoPlayer playback work loop स्टैटिक इंटरवल के बजाय, डाइनैमिक तरीके से चलेगा.
    • प्री-रोल सैंपल के साथ ट्रैक को चालू प्लेबैक में शामिल करते समय, गैर-ज़रूरी रीसेट को हटाता है.
    • DefaultBandwidthMeter में, getInitialBitrateCountryGroupAssignment को ऑप्टिमाइज़ किया गया है. इससे, देश के ग्रुप असाइनमेंट को ऐरे के बजाय 32-बिट पूर्णांक में पैक किया जा सकता है. इससे कोड का साइज़ कम हो जाता है और असाइनमेंट से बचा जा सकता है.
    • कुछ डिवाइसों पर AudioTrack को शुरू करने में आने वाली समस्याओं को ठीक किया गया है. इसके लिए, यह पक्का किया गया है कि फिर से कोशिश करने की सुविधा, हमेशा कम से कम एक सेकंड के बफ़र साइज़ का इस्तेमाल करे. ऐसा तब होगा, जब बफ़र साइज़ को आधा करके फिर से कोशिश करने पर भी समस्या ठीक न हो (#3207).
    • कुछ डिवाइसों पर कोडेक से जुड़ी समस्या ठीक की गई है. इन डिवाइसों पर, इनपुट बफ़र मिलने से पहले फ़्लश किए जाने पर, कोडेक सभी सैंपल को प्रोसेस नहीं कर पाता था.
    • एक्सपेरिमेंट के तौर पर ExoPlayer.Builder.enablePerStreamMediaProgression() जोड़ें, ताकि हर स्ट्रीम के हिसाब से मीडिया प्रोसेसिंग को बेहतर बनाया जा सके. इससे प्लेलिस्ट के आइटम के बीच स्टार्टअप लेटेंसी कम हो जाती है. साथ ही, बहुत कम अवधि के कॉन्टेंट के साथ "अटकने" की समस्या से बचा जा सकता है (#3122).
    • ऑडियो सेशन आईडी के इस्तेमाल से जुड़ी रेस कंडीशन को ठीक किया गया है. इसमें ExoPlayer से अपने-आप जनरेट होने वाले शुरुआती ऑडियो सेशन आईडी का इस्तेमाल किया जाता था. हालांकि, अब setAudioSessionId से सेट की गई वैल्यू का इस्तेमाल किया जाएगा (#3241).
    • प्रोग्रेसिव मीडिया (जैसे, MP4, Matroska) के लिए, एक्सपेरिमेंट के तौर पर HAGC (ST 2094-50) टाइम किए गए मेटाडेटा को चलाने की सुविधा जोड़ी गई है. प्लेयर, HAGC मेटाडेटा ट्रैक को उससे जुड़े वीडियो ट्रैक के साथ अपने-आप मर्ज कर देता है. साथ ही, API 37 या इसके बाद के वर्शन वाले डिवाइसों पर डिकोडर को मेटाडेटा आउट-ऑफ़-बैंड डिलीवर करता है. इस सुविधा को DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false) के ज़रिए बंद किया जा सकता है.
  • CompositionPlayer:
    • TrackSelector इंस्टेंस रिलीज़ न होने की समस्या को ठीक किया गया है.
  • ट्रांसफ़ॉर्मर:
    • उस समस्या को ठीक किया गया है जिसमें ExportResult.fileSizeBytes को ज़्यादा रिपोर्ट किया जा सकता है.
  • ट्रैक चुनने की सुविधा:
    • BaseTrackSelection.DEFAULT_FORMAT_COMPARATOR को दिखाएं और AdaptiveTrackSelection.Factory.setTrackFormatComparator को जोड़ें, ताकि बिटरेट के हिसाब से ऑर्डर करने के अलावा, कस्टम फ़ॉर्मैट को ऑर्डर करने और एबीआर चुनने की प्राथमिकता तय की जा सके.
  • डेटा निकालने वाले टूल:
    • MP4, MP3, और FLAC: कंटेनर पार्सिंग के दौरान अटैच की गई तस्वीरों और कवर आर्ट के मेटाडेटा को हटाने की अनुमति देने के लिए, FLAG_DISABLE_ARTWORK_METADATA जोड़ें. इससे रनटाइम मेमोरी की खपत कम हो जाएगी (#2077). इसे DefaultExtractorsFactory.setDisableArtworkMetadata की मदद से, एक ही जगह से भी चालू किया जा सकता है.
    • MP4: ITU-T T.35 (it35) टाइम किए गए मेटाडेटा ट्रैक को निकालने की सुविधा जोड़ी गई है.
    • MP4: Nero और QuickTime, दोनों फ़ॉर्मैट में चैप्टर के मेटाडेटा को निकालने की सुविधा जोड़ी गई है. अगर दोनों मौजूद हैं, तो QuickTime चैप्टर को प्राथमिकता दी जाती है. निकाली गई चैप्टर की जानकारी, ट्रैक के Metadata में Chapter एंट्री के तौर पर दिखती है. इससे MP4, M4A, और M4B फ़ाइलों (जैसे, ऑडियो बुक और पॉडकास्ट) में चैप्टर के हिसाब से नेविगेट किया जा सकता है (#2803).
    • WAV, Matroska, और MP4: 64-बिट फ़्लोटिंग पॉइंट पीसीएम ऑडियो के लिए सहायता जोड़ी गई (#3090).
    • Matroska: सटीक ColorInfo की जानकारी भरने के लिए, कोडेक बिटस्ट्रीम मेटाडेटा का इस्तेमाल करें.
    • MP4: mfra बॉक्स मौजूद न होने पर, sidx बॉक्स का इस्तेमाल करके, फ़्रैगमेंट की गई MP4 फ़ाइलों में ढूंढने की सुविधा जोड़ी गई है. इसे चालू करने के लिए, FragmentedMp4Extractor को FLAG_READ_MFRA_FOR_SEEK_MAP दें. यह अब DefaultExtractorsFactory में डिफ़ॉल्ट रूप से किया जाता है (#3088).
    • ऐसे av1C डेटा को अनदेखा करें जिसका वर्शन काम नहीं करता.
    • MP4: fpcm बॉक्स में, बिग-एंडियन फ़्लोटिंग पॉइंट पीसीएम के लिए सहायता जोड़ी गई.
    • Matroska: किसी ट्रैक के Chapter में, चैप्टर की जानकारी को Chapter एंट्री में पार्स करता है.Metadata
    • MPEG-TS: कोर और एक्सटेंशन सबस्ट्रीम को एक ही सैंपल में मिलाकर, DTS-HD और DTS Express स्ट्रीम को बेहतर तरीके से एक्सट्रैक्ट किया जा सकता है. साथ ही, इससे उन प्लेबैक समस्याओं को ठीक किया जा सकता है जहां पहले दोनों को अलग-अलग सैंपल के तौर पर आउटपुट किया जाता था (#3147).
    • MP4: खाली ilst मेटाडेटा टैग आइटम पार्स करते समय, इनफ़िनिट लूप और आउट-ऑफ़-बाउंड रीड को रोकें (#3191).
    • MPEG-TS: पक्का करें कि उन स्ट्रीम के लिए आखिरी फ़्रेम रेंडर किया गया हो जहां आखिरी पीईएस पैकेट की लंबाई पता हो (#3206).
    • MP3: Xing और VBRI हेडर वाली फ़ाइलों के लिए, बिटरेट की रिपोर्टिंग से जुड़ी समस्या ठीक की गई.
    • Matroska: Handle tracks defined in the last cluster (#3250).
    • Matroska: ALAC के लिए सहायता जोड़ी गई (#3268).
    • MP4: फ़्रैगमेंट की गई MP4 फ़ाइलों में अलग-अलग लंबाई वाले sgpd बॉक्स की अनुमति दें (#3243).
  • ऑडियो:
    • ExoPlayer के ऑडियो रेंडरर में 100 मि॰से॰ का ग्रेस पीरियड जोड़ें. ऐसा तब करें, जब रेडी स्टेट से नॉट-रेडी स्टेट में ट्रांज़िशन हो रहा हो. इससे, कुछ समय के लिए होने वाली रुकावटों को कम किया जा सकेगा. साथ ही, चालू प्लेआउट के दौरान अचानक बफ़रिंग की स्थितियों से बचा जा सकेगा (#3210).
    • DefaultAudioTrackBufferSizeProvider में डिफ़ॉल्ट पीसीएम बफ़र साइज़ के लॉजिक में बदलाव करें, ताकि 500 मि॰से॰ के निश्चित बफ़र का इस्तेमाल किया जा सके. इससे यह डिवाइस पर कम निर्भर होगा.
    • MediaCodecAudioRenderer को अपडेट करें, ताकि वह प्लैटफ़ॉर्म डिकोडर से spatial channelMask को निकाल सके. इससे DefaultAudioSink, चैनल की संख्या से मास्क का अनुमान लगाने के बजाय, इस मास्क का इस्तेमाल कर पाएगा.
    • AudioSink.configure के पैरामीटर को डेटा क्लास में बदलें. ForwardingAudioSink.configure के कस्टम ओवरराइड को नए तरीके के सिग्नेचर पर माइग्रेट करना होगा.
    • EditedMediaItem.Builder#setSpeed(SpeedParameters) की मदद से ऑडियो स्ट्रीम को टाइम-स्ट्रेच करते समय, पिच को बनाए रखने की सुविधा जोड़ी गई है.
    • ToFloatPcmAudioProcessor को बेहतर बनाएं, ताकि यह 8-बिट पीसीएम, 16-बिट बिग-एंडियन पीसीएम, और 64-बिट फ़्लोटिंग पॉइंट पीसीएम को 32-बिट फ़्लोटिंग पॉइंट पीसीएम में बदल सके (#3090).
    • DecoderAudioRenderer.getChannelMapping की रिटर्न वैल्यू को ImmutableIntArray में बदलें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें कंप्रेस किए गए ऑफ़लोड मोड में बिना रुके चलने वाले ऑडियो की प्लेलिस्ट चलाने पर, ऑडियो अटक जाता था.
    • ऑडियो प्रोसेसर (#418) को प्लेलिस्ट का कॉन्टेक्स्ट देने के लिए, Timeline और अवधि का यूआईडी, AudioSink.configure और AudioProcessor.StreamMetadata को फ़ॉरवर्ड करें.
    • समय के हिसाब से ऑडियो प्रोसेस करने की सुविधा (#418) चालू करने के लिए, सही AudioProcessor.StreamMetadata.positionOffsetUs सेट करें.
    • बिग एंडियन 32-बिट और 64-बिट फ़्लोटिंग पॉइंट पीसीएम के लिए सपोर्ट जोड़ा गया.
  • वीडियो:
    • वीडियो में शामिल होने के लॉजिक को ठीक किया गया है, ताकि शामिल होने के दौरान बफ़र होने की वजह से वीडियो रुकने की समस्या को, वीडियो रुकने के बजाय स्किप किया गया वीडियो माना जा सके.
    • नई सतह सेट करते समय, रेंडरिंग के फ़ैसले को तुरंत ठीक करें, ताकि उन डिवाइसों पर फ़्रेम न गिरें जिन पर प्लेसहोल्डर वाली सतहें काम नहीं करती हैं.
    • ड्रॉप किए गए या छोड़े गए फ़्रेम को ध्यान में रखकर, MediaCodecVideoRenderer में फ़्रेम रेट के अनुमान को ज़्यादा सटीक बनाएं.
    • इससे, फ़्रेम को जल्दी शेड्यूल करने के लिए इस्तेमाल किए गए थ्रेशोल्ड को कॉन्फ़िगर करने की अनुमति मिलती है. डिफ़ॉल्ट रूप से यह 50 मि॰से॰ होता है. हालांकि, MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold() का इस्तेमाल करके इस वैल्यू को अपनी ज़रूरत के मुताबिक बनाया जा सकता है.
  • टेक्स्ट:
    • TTML: style से displayAlign पर फ़ॉलबैक करें (#2559).
    • TTML: <p> एलिमेंट के पैरंट से क्यू के शुरू होने का समय इनहेरिट करें (#3246).
  • मेटाडेटा:
    • MediaMetadata.discSubtitle फ़ील्ड जोड़ें और इसे ID3v2.4 TSST और Vorbis DISCSUBTITLE डेटा से पार्स करें.
    • ID3 TPOS फ़्रेम से डिस्क नंबर और गिनती पार्स करता है.
  • असर:
    • रीड्रॉ की स्थिति को FinalShaderProgramWrapper में मिटाएं, ताकि वीडियो को फ़्लश करते समय प्लेयर फ़्रीज़ न हो.
  • Muxers:
    • नए addTrackReference एपीआई के ज़रिए, Mp4Muxer में ट्रैक रेफ़रंस (tref बॉक्स) के लिए सहायता जोड़ी गई है. इससे ट्रैक के बीच संबंध बनाए जा सकते हैं. जैसे, मेटाडेटा ट्रैक को उस वीडियो ट्रैक से लिंक करना जिसके बारे में वह बताता है.
    • OggMuxer को जोड़कर, OPUS या VORBIS मीडिया स्ट्रीम को ogg फ़ाइल फ़ॉर्मैट में मक्स किया जा सकता है.
    • WAV फ़ाइल जनरेट करने के लिए WavMuxer जोड़ें. यह पूर्णांक और फ़्लोटिंग-पॉइंट पीसीएम के साथ काम करता है.
    • InAppMp4Muxer.Factory में setAttemptStreamableOutputEnabled जोड़ें, ताकि रिज़र्व की गई जगह के बिना छोटी फ़ाइलें लिखी जा सकें. हालांकि, इन्हें स्ट्रीम नहीं किया जा सकता.
    • Mp4Muxer और FragmentedMp4Muxer में, IAMF ऑडियो के लिए सहायता जोड़ी गई.
  • IMA एक्सटेंशन:
    • विज्ञापनों को रोकने की सुविधा के लिए विज्ञापन स्लॉट उपलब्ध कराने की अनुमति देने के लिए, ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlot जोड़ें.
    • उस बग को ठीक किया गया है जिसमें स्किप किए जा सकने वाले वीएएसटी विज्ञापन, दूसरे विज्ञापन पर स्किप बटन तुरंत दिखाते हैं (#3165).
  • सेशन:
    • बैकग्राउंड थ्रेड प्लेयर लूपर के साथ सेशन का इस्तेमाल करते समय, IllegalStateException में संभावित डेडलॉक और MediaNotificationManager क्रैश की समस्या ठीक की गई.
    • MediaSession तरीकों के लिए, थ्रेडिंग से जुड़ी ज़्यादा सख्त शर्तों को लागू करें. अब शून्य नतीजे देने वाले तरीके, एक्ज़ीक्यूशन के बाद ऐप्लिकेशन लूपर थ्रेड पर अपने-आप पोस्ट हो जाते हैं. साथ ही, स्टेट ऐक्सेसर (गेटर्स), ऐप्लिकेशन लूपर के अलावा किसी अन्य थ्रेड से कॉल किए जाने पर, साफ़ तौर पर IllegalStateException थ्रो करते हैं.
    • सेशन के दौरान, हर कंट्रोलर के लिए स्थिति की अनुकूलता को ट्रैक करके, टाइमलाइन मर्ज करने के दौरान होने वाली क्रैश की समस्या (IllegalStateException in MediaUtils.mergePlayerInfo) को ठीक किया गया है.
    • ऐक्टिव मीडिया सेशन के बारे में क्वेरी करने और Media3 SessionToken इंस्टेंस वापस पाने की सुविधा देने के लिए, androidx.media3.session.MediaSessionManager जोड़ें.
    • अगर MediaSession.Callback.onConnect के डिफ़ॉल्ट तरीके को सिर्फ़ उन कंट्रोलर को रीड ऐक्सेस देने के लिए ओवरराइड नहीं किया जाता जिन पर भरोसा नहीं किया जाता, तो MediaSession.Callback.onConnect के डिफ़ॉल्ट तरीके को बदलें.
    • नए एपीआई MediaSession.Builder#setPackageNameOverride की मदद से MediaSession बनाते समय, पैकेज के नाम को बदलने की सुविधा जोड़ी गई. कॉल करने वाले के पास, सेशन के पैकेज का नाम बदलने की android.permission.OVERRIDE_MEDIA_SESSION_OWNER अनुमति होनी चाहिए.
    • MediaSession.Callback.onConnectAsync() जोड़ें. इस नए तरीके से, कंट्रोलर के कनेक्शन के अनुरोध को एसिंक्रोनस तरीके से प्रोसेस किया जा सकता है. ऐप्लिकेशन, पिछले जैसा व्यवहार करने के लिए, Futures.immediateFuture(ConnectionResult) के साथ तुरंत Future दिखा सकते हैं. हमारा सुझाव है कि आप नए तरीके पर माइग्रेट करें, क्योंकि Callback.onConnect को बंद किया जा सकता है.
    • उस समस्या को ठीक किया गया है जिसमें API 36 और 37 पर, ब्लूटूथ AVRCP ब्राउज़िंग में MediaLibraryService को पहचाना नहीं जा रहा था.
  • यूआई:
    • ContentFrame को वीडियो चलाने के दौरान फिर से कंपोज़ किए जाने पर, पहले फ़्रेम को गलत साइज़ में रेंडर करने की समस्या ठीक की गई (#3238).
    • media3-ui-compose मॉड्यूल में CurrentMediaItemState क्लास और उससे जुड़ा rememberCurrentMediaItemState कंपोज़ेबल जोड़ें. इस स्टेट होल्डर का इस्तेमाल demo-compose में किया जाता है, ताकि फ़िलहाल चल रहे MediaItem के बारे में अलग-अलग मेटाडेटा की जानकारी दिखाई जा सके.
    • media3-ui-compose मॉड्यूल में PlaylistState क्लास और उससे जुड़ा rememberPlaylistState Composable जोड़ें. इस स्टेट होल्डर का इस्तेमाल demo-compose में किया जाता है, ताकि प्लेयर पर सेट किए गए MediaItems के बारे में अलग-अलग मेटाडेटा की जानकारी दिखाई जा सके.
    • PlaybackSpeedState में, तेज़ी से आगे बढ़ाने/स्लो मोशन वाला एपीआई जोड़ें. तेज़ी से आगे बढ़ाने की सुविधा को दिखाने के लिए, demo-compose में इस फ़ंक्शन का इस्तेमाल करें. इसके लिए, वीडियो को देर तक दबाकर रखें.
    • media3-ui-compose-material3 मॉड्यूल में MiniController कंपोज़ेबल जोड़ा गया. यह Player को कंट्रोल करने के लिए एक कॉम्पैक्ट अफ़ॉर्डेंस उपलब्ध कराता है. साथ ही, मौजूदा मीडिया आइटम का टाइटल, कलाकार, आर्टवर्क, और प्रोग्रेस दिखाता है.
    • media3-ui-compose मॉड्यूल में ErrorState क्लास और उससे जुड़ा rememberErrorState Composable जोड़ें. ErrorText में ErrorText Composable जोड़ें और इसे Player पर डिफ़ॉल्ट ओवरले के तौर पर सेट करें.media3-ui-compose-material3
    • TopControls, CenterControls, BottomControls, और ErrorOverlay के लिए कंपोज़ेबल के साथ PlayerDefaults ऑब्जेक्ट पब्लिश करें.
    • Player कंपोज़ेबल और उसके कॉन्टेंट स्लॉट में FocusRequester जोड़ें.
    • स्लाइडिंग विंडो वाले यूज़र इंटरफ़ेस (यूआई) एनवायरमेंट में MediaItems को पहले से लोड करने की सुविधा के लिए, PlayerPool (common-ktx) और rememberPooledPlayer (ui-compose) पब्लिश करें. demo-compose में इस सुविधा को दिखाएं. इसके लिए, एक नया ShortFormPlayerScreen बनाएं.
  • Ktor एक्सटेंशन:
    • Ktor एचटीटीपी स्टैक की मदद से, KtorDataSource उपलब्ध कराने वाला नया media3-datasource-ktor एक्सटेंशन मॉड्यूल जोड़ें.
  • एचएलएस एक्सटेंशन:
    • एचएलएस कॉन्टेंट स्टीयरिंग और पाथवे क्लोनिंग के लिए सहायता जोड़ी गई है (#1689).
    • ऐप्लिकेशन को यह अनुमति देने के लिए कि वे पूरी तरह से प्रोसेस की गई ऐसेट लिस्ट इंटरस्टीशियल को फिर से उपलब्ध न होने की स्थिति में रीसेट कर सकें, setWithAssetListReset को setWithAssetListReset में जोड़ें. इससे, मांग पर समस्या को फिर से हल किया जा सकेगा.HlsInterstitialsAdsLoader
  • डैश एक्सटेंशन:
    • CEA सबटाइटल को भाषा (#3113) के आधार पर अलग-अलग TrackGroup में बांटें.
  • आरटीएसपी एक्सटेंशन:
    • यूडीपी पोर्ट बाइंडिंग की गड़बड़ियों की वजह से, आरटीएसपी चलाने की तैयारी के दौरान, वीडियो रुकने या चलाने में होने वाली अस्थायी गड़बड़ियों को ठीक किया गया.
  • कास्ट एक्सटेंशन:
    • कॉल करके कास्ट करने की सुविधा CastParams को कॉन्फ़िगर करने की अनुमति देने के लिए, नई CastParams क्लास जोड़ें.Cast.initialize(CastParams)
    • नया CastParams.getShowSystemOutputSwitcherOnCastIconClick() विकल्प जोड़ा गया है. यह विकल्प, उपलब्ध होने पर ऐप्लिकेशन में मौजूद कास्ट डिवाइस पिकर के बजाय, SystemUI Output Switcher का इस्तेमाल करने की सुविधा को ट्रिगर करता है.
  • टेस्ट यूटिलिटी:
    • DataSourceContractTest को बड़ा करें, ताकि इसमें हेडर और बॉडी वाले POST अनुरोधों के लिए सहायता शामिल हो. साथ ही, HttpDataSourceTestEnv में कुछ POST संसाधन जोड़ें. इसके अलावा, WebServerDispatcher में अनुमानित एचटीटीपी तरीके, हेडर, और बॉडी के लिए दावे जोड़ें.
    • DataSourceContractTest में, DataSource.open() से मिली लंबाई के लिए असर्शन को और ज़्यादा सटीक बनाएं. जिन संसाधनों से C.LENGTH_UNSET मिल सकता है उन्हें TestResource.Builder.setMayResolveToUnknownLength(boolean) का इस्तेमाल करके यह जानकारी देनी चाहिए.
  • हटाए गए सिंबल हटाएं:
    • androidx.media3.exoplayer.MetadataRetriever हटाएं. इसके बजाय, androidx.media3.inspector.MetadataRetriever का इस्तेमाल करें.
    • androidx.media3.exoplayer.MediaExtractorCompat हटाएं. इसके बजाय, androidx.media3.inspector.MediaExtractorCompat का इस्तेमाल करें.
    • Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA हटाएं. इसके बजाय, HEIC फ़ाइलों से मोशन फ़ोटो का मेटाडेटा निकालने के लिए, HeifExtractor का इस्तेमाल करें.
    • androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata हटाएं. इसके बजाय, androidx.media3.extractor.metadata.MotionPhotoMetadata का इस्तेमाल करें.
    • androidx.media3.extractor.DummyTrackOutput हटाएं. इसके बजाय, androidx.media3.extractor.DiscardingTrackOutput का इस्तेमाल करें.
    • androidx.media3.extractor.DummyExtractorOutput हटाएं. इसके बजाय, androidx.media3.extractor.NoOpExtractorOutput का इस्तेमाल करें.
  • बनाएं
    • Media3 पर स्थानीय तौर पर निर्भर रहने के लिए, README.md निर्देशों को अपडेट किया गया है, ताकि Gradle कंपोज़िट बिल्ड (includeBuild) का इस्तेमाल किया जा सके. core_settings.gradle स्क्रिप्ट हटा दी गई है. साथ ही, androidxMediaModulePrefix और androidxMediaEnableMidiModule प्रॉपर्टी का इस्तेमाल अब नहीं किया जाता.

वर्शन 1.10.0

1.10.1

12 मई, 2026

  • कॉमन लाइब्रेरी:
    • SimpleBasePlayer और ForwardingSimpleBasePlayer में onAudioSessionIdChanged को हैंडल करने से जुड़ी समस्या ठीक की गई.
  • ExoPlayer:
    • ऑडियो सेशन आईडी जनरेट करने से जुड़ी रेस कंडीशन की समस्या ठीक की गई है. इससे टनलिंग मोड में IllegalStateException की समस्या हो सकती थी. (#3099).
    • रेंडरर प्रीवार्मिंग की मदद से, डिकोडर से जुड़ी गड़बड़ियों को ठीक करते समय ऐप्लिकेशन क्रैश होने की समस्या को ठीक किया गया.
    • उस समस्या को ठीक किया गया है जिसमें AV1 पर आधारित Dolby Vision कोडेक (#3153) का इस्तेमाल करते समय, वीडियो में आर्टफ़ैक्ट दिखते थे. ऐसा, शुरुआती डेटा उपलब्ध कराने की वजह से होता था.
  • ट्रैक चुनने की सुविधा:
    • फ़ॉलबैक एमआईएमई टाइप की समस्या हल करने के लिए, VideoTrackInfo में ट्रैक चुनने के लॉजिक में बदलाव किया गया है. साथ ही, एचडीआर और कोडेक स्कोर की प्राथमिकताओं को क्वालिटी की प्राथमिकताओं (#3135) में ले जाया गया है.
  • डेटा निकालने वाले टूल:
    • MP3: अगर Xing डेटा की लंबाई, स्ट्रीम की लंबाई (#3117) से ज़्यादा है, तो उसे अनदेखा करें.
    • FLAG_OMIT_TRACK_SAMPLE_TABLE सेट होने पर, Mp4Extractor में मौजूद ArrayIndexOutOfBoundsException को ठीक करें. ऐसा तब करें, जब ट्रैक में सिंक सैंपल (stss) बॉक्स मौजूद न हो.
  • ऑडियो:
    • उस गड़बड़ी को ठीक किया गया है जिसमें प्लेयर में एक से ज़्यादा ऑडियो रेंडरर जोड़ने पर, ऑडियो इवेंट गलत तरीके से रूट हो सकते हैं.
  • वीडियो:
    • एपीआई के 30 से कम फ़्रेम रेट पर कोडेक के फिर से इस्तेमाल होने की सुविधा के लिए लॉजिक में बदलाव किया गया है, ताकि उन मामलों में कोडेक रीसेट न हों जहां वे फ़ायदेमंद नहीं हैं (#3120).
    • API 31 और इसके बाद के वर्शन के लिए, queueSecureInputBuffer में फ़ोर्स सिंक्रनाइज़ेशन के वर्कअराउंड को बंद करें. वर्कअराउंड एक आर्टिफ़िशियल बॉटलनेक था, जिसकी वजह से डिक्रिप्शन को क्रम से चलाना पड़ता था. इससे एपीआई 31 से पहले मौजूद फ़्रेमवर्क की समस्या की वजह से, वीडियो में गड़बड़ी नहीं होती थी.
  • इमेज:
    • स्क्रबिंग मोड में समस्या ठीक की गई है. इस मोड में, इमेज में बदलाव सिर्फ़ तब लागू होते थे, जब उपयोगकर्ता "स्क्रब करना बंद कर देता था" (#2815).
  • सेशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें ऐप्लिकेशन थ्रेड के मुख्य थ्रेड न होने पर, थ्रेड बाउंड्री में ForegroundServiceStartNotAllowedException को नहीं फैलाया गया था (#2499).
    • उस बग को ठीक किया गया है जिसमें सिर्फ़ प्लैटफ़ॉर्म वाले ऐसे सेशन से कनेक्ट करने पर MediaController में COMMAND_SEEK_TO_MEDIA_ITEM उपलब्ध नहीं होता है जो अन्य आइटम पर जाने की सुविधा देता है, लेकिन प्लेलिस्ट में बदलाव करने की सुविधा नहीं देता है.
    • उस समस्या को ठीक किया गया है जिसमें MediaController, ऐसे प्लैटफ़ॉर्म मीडिया सेशन पर मीडिया आइटम सेट नहीं कर पाता था जिनमें PREPARE_FROM कार्रवाइयों की अनुमति नहीं होती.
    • उस बग को ठीक किया गया है जिसमें प्लैटफ़ॉर्म कंट्रोलर के ज़रिए कनेक्ट करने पर, API 27 या इससे पहले के वर्शन में अपनी प्रोसेस को Controller.isTrusted() के तौर पर मार्क नहीं किया गया था.
  • एचएलएस एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें ट्रैक चुनने का विकल्प, उपलब्ध ट्रैक का सबसेट होने पर, स्ट्रीम फ़ॉलबैक के दौरान ArrayIndexOutOfBoundsException दिखता था (#3161).
    • उस समस्या को ठीक किया गया है जिसमें मीडिया प्लेलिस्ट अपडेट करने पर, शुरुआती सेगमेंट को ट्रांसफ़र नहीं किया जाता था. ऐसा तब होता था, जब बाद के अपडेट में #EXT-X-MAP टैग को दोहराया नहीं जाता था (#3105).
  • डैश एक्सटेंशन:
    • SampleQueue में क्रैश होने की समस्या को ठीक किया गया है. यह समस्या, ऐसे चंक में सीक करने पर होती थी जिसे फ़िलहाल रद्द किया जा रहा है.

1.10.0

26 मार्च, 2026

  • कॉमन लाइब्रेरी:
    • UnstableApi से Player.mute() और Player.unmute() को स्टेबल वर्शन पर प्रमोट करें.
    • UnstableApi से Format.pcmEncoding और C.PcmEncoding को स्टेबल वर्शन पर प्रमोट करें.
    • एम्बेड किए गए Format इंस्टेंस के प्राइमरी ग्रुप की पहचान करने के लिए, Format.primaryTrackGroupId जोड़ें (#294).
  • ExoPlayer:
    • AdsMediaSource में क्लिप बनाने की सुविधाएं जोड़ें.
    • MediaCodecVideoRenderer में डाइनैमिक शेड्यूलिंग की सुविधा जोड़ी गई है. इससे, वीडियो फ़्रेम प्रोसेस होने के समय के हिसाब से, शेड्यूलिंग के काम और सीपीयू के वेक-अप साइकल को बेहतर तरीके से अलाइन किया जा सकता है. इसे चालू करने के लिए, DefaultRenderersFactory में जाकर experimentalSetEnableMediaCodecVideoRendererDurationToProgressUs() का इस्तेमाल करें.
    • यह कुकी, DefaultPreloadManager.Builder में कस्टम DataSource.Factory सेट करने की अनुमति देती है.
    • कुछ डिफ़ॉल्ट कॉन्स्टेंट को ExoPlayer में ले जाकर, Robolectric के बिना ExoPlayer को मॉक करने की अनुमति दें.ExoPlayer.Builder आम तौर पर, इस जटिल इंटरफ़ेस को मॉक करने का सुझाव नहीं दिया जाता. ऐसा सिर्फ़ तब किया जाता है, जब इसका इस्तेमाल कम/आसान/कभी-कभी किया जाता हो (#2985).
      • इसके लिए, DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MS को ExoPlayer से ExoPlayer.Builder पर ले जाना पड़ा. हालांकि, ऐसा बिना किसी बदलाव के किया गया.
    • उस गड़बड़ी को ठीक किया गया है जिसमें ProgressiveMediaSource प्लेयर को टाइमलाइन की पुरानी जानकारी भेजता है. साथ ही, कतार में जोड़े गए वीडियो के समय अपने-आप हट जाते हैं (#3016).
    • उस समस्या को ठीक किया गया है जिसमें फ़ोन कॉल के दौरान वीडियो चलाने का अनुरोध करने पर, ExoPlayer ऑडियो फ़ोकस के लिए तुरंत अनुरोध नहीं करता था.
    • उस बग को ठीक किया गया है जिसकी वजह से, मांग पर उपलब्ध कॉन्टेंट से लाइव कॉन्टेंट पर स्विच करने के दौरान, मांग पर उपलब्ध कॉन्टेंट के आखिर में फिर से बफ़रिंग हो सकती है (#3052).
    • Dolby Vision Profile 10 के लिए सहायता जोड़ी गई है (#2830).
    • उस बग को ठीक किया गया है जिसमें शुरू नहीं किया गया प्री-रोल विज्ञापन, ArrayIndexOutOfBoundsException (#3125) दिखाता था.
  • CompositionPlayer:
    • EditedMediaItem.removeVideo के साथ काम करने की सुविधा जोड़ी गई.
  • ट्रांसफ़ॉर्मर:
    • EditedMediaItem.Builder.setFrameRate() अब वीडियो के लिए, आउटपुट फ़्रेम रेट की ज़्यादा से ज़्यादा सीमा सेट कर सकता है. यह सुविधा, setSpeed() की मदद से मीडिया की स्पीड बढ़ाने के दौरान खास तौर पर काम आती है.
  • ट्रैक चुनने की सुविधा:
    • DefaultTrackSelector.selectAllTracks के सिग्नेचर में बदलाव करके, आउटपुट ऐरे को पैरामीटर के तौर पर शामिल करें. इसमें ट्रैक ओवरराइड की जानकारी पहले से भरी हुई होती है.
    • उस समस्या को ठीक किया गया है जिसमें एम्बेड किए गए मेटाडेटा ट्रैक चुने जाते हैं. भले ही, उनसे जुड़ा प्राइमरी ट्रैक चुना गया हो या नहीं (#294).
    • preferredVideoLanguages, preferredVideoLabels, preferredAudioLabels, preferredTextLabels, और selectTextByDefault के लिए TrackSelectionParameters विकल्पों को स्थिर करें.
  • डेटा निकालने वाले टूल:
    • MP4: इसमें uuid जैसे बड़े बॉक्स वाली फ़ाइलों के साथ-साथ, moov (#3046) जैसे अन्य बॉक्स वाली फ़ाइलों का इस्तेमाल किया जा सकता है.
    • MP4: MP4 कंटेनर में वर्सटाइल वीडियो कोडिंग (वीवीसी) ट्रैक के लिए सहायता जोड़ी गई.
  • Inspector:
    • नुकसान पहुंचा सकने वाला बदलाव: FrameExtractor को हटा दिया गया है. अब उपयोगकर्ताओं को नए :media3-inspector-frame मॉड्यूल का इस्तेमाल करना चाहिए और इंपोर्ट को androidx.media3.inspector.frame.FrameExtractor पर अपडेट करना चाहिए.
    • डिकोड किए गए वीडियो फ़्रेम को निकालने और प्रोसेस करने के लिए, एक नया मॉड्यूल जोड़ा गया है.
  • ऑडियो:
    • IAMF डिकोडर एक्सटेंशन के लिए, डिकोडिंग लाइब्रेरी को libiamf से बदलकर iamf_tools कर दिया गया है.
    • IAMF डिकोडिंग, डिकोडर (IAMF डिकोडर एक्सटेंशन का इस्तेमाल करते समय) या Android Spatializer के ज़रिए, बाइनॉरल आउटपुट के साथ काम करती है.
    • ऑटोमोटिव से जुड़े मामलों में AC-4 डिकोडर की सुविधा का आकलन करते समय, AC4Profile22 और अन्य लेगसी प्रोफ़ाइलों के लिए सहायता को सही तरीके से हटाएं (#2609).
    • AudioOutput में AudioOutput को शुरू करने के लिए, फिर से कोशिश करने के लॉजिक को बेहतर बनाएं (#2905).DefaultAudioSink
    • IAMF को डिकोड करते समय, स्पीकर (या अगर लागू हो, तो स्पेशल ऑडियो की सुविधा देने वाले सॉफ़्टवेयर) के आउटपुट लेआउट से मैच करने की कोशिश करें. ऐसा IAMF एक्सटेंशन और मीडिया कोडेक डिकोडर, दोनों के साथ करें. AudioCapabilities और AudioCapabilitiesReceiver में नए फ़ील्ड और लॉजिक की मदद से ऐसा किया जा सकता है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें कंप्रेस किए गए ऑफ़लोड मोड में बिना रुके चलने वाले ऑडियो की प्लेलिस्ट चलाने पर, ऑडियो अटक जाता था.
  • टेक्स्ट:
    • VobSub: START और STOP SPU कंट्रोल कमांड का इस्तेमाल करके, हमेशा पांच सेकंड (#2935) पर डिफ़ॉल्ट होने के बजाय, क्यू की अवधि का पता लगाएं.
  • मेटाडेटा:
    • मेटाडेटा रेंडरर की डिफ़ॉल्ट संख्या को बढ़ाकर चार कर दिया गया है, ताकि एचएलएस के अलग-अलग वर्शन और रेंडिशन से पब्लिश किए गए सभी संभावित मेटाडेटा ट्रैक को कवर किया जा सके (#3043).
  • असर:
    • LottieOverlay को नए :media3-effect-lottie मॉड्यूल में ले जाएं. इसमें, LottieOverlay का नाम androidx.media3.effect.LottieOverlay से बदलकर androidx.media3.effect.lottie.LottieOverlay करना भी शामिल है.
  • Lottie इफ़ेक्ट:
    • एक नया :media3-effect-lottie मॉड्यूल पेश किया गया है. इससे वीडियो फ़्रेम पर लोट्टी इफ़ेक्ट लागू किए जा सकते हैं.
  • IMA एक्सटेंशन:
    • विज्ञापन मीडिया की जानकारी देने वाले नए एपीआई का ऐक्सेस पाने के लिए, IMA SDK के वर्शन को 3.39.0 पर अपडेट करें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें विज्ञापन का एमआईएमई टाइप, IMA LOADED इवेंट में दिए गए एमआईएमई टाइप से मेल नहीं खाता था. इस फ़िक्स की मदद से, IMA से मिली विज्ञापन मीडिया की जानकारी का इस्तेमाल करके, विज्ञापन के एमआईएमई टाइप को मैप किया जाता है.
    • ImaAdsLoader और ImaServerSideAdInsertionMediaSource में setEnableCustomTabs जोड़ें. इससे उपयोगकर्ताओं को यह कंट्रोल करने की सुविधा मिलती है कि कस्टम टैब का इस्तेमाल करके, विज्ञापन के क्लिक-थ्रू यूआरएल लॉन्च किए जाएं या नहीं.
    • ImaAdTagUriBuilder को जोड़ें. यह एक ऐसी क्लास है जो adTagUri को बनाने का एक वैकल्पिक तरीका उपलब्ध कराती है. इसमें setPreferredLinearOrientation एपीआई शामिल है. यह एक ऐसा एपीआई है जो फ़िलहाल अल्फ़ा टेस्टिंग में है. इसकी मदद से, लीनियर विज्ञापनों के लिए अपनी पसंद का ओरिएंटेशन सेट किया जा सकेगा. अगर आपको ऐल्फ़ा टेस्टिंग ग्रुप में शामिल होना है, तो कृपया अपने खाता पार्टनर से संपर्क करें.
  • सेशन:
    • ऐसी गड़बड़ी को ठीक किया गया है जिसमें MediaMetadata.artworkData में मौजूद बड़े ऐरे की वजह से ऐप्लिकेशन क्रैश हो सकता है.
    • ActionFactory इंटरफ़ेस (#2933) में @Player.Command आर्ग्युमेंट के लिए, int टाइप का इस्तेमाल करें.
    • MediaSessionService और MediaLibraryService को LifecycleService बनाएं, ताकि लाइफ़साइकल की जानकारी वाले ऑपरेशन को सेवा के लाइफ़साइकल से जोड़ा जा सके (#187).
    • लोकल प्लेबैक के लिए, MediaController और MediaBrowser से डिवाइस की आवाज़ कम या ज़्यादा करने के निर्देशों को बंद कर दिया गया है. ऐप्लिकेशन को डिवाइस का वॉल्यूम नहीं बदलना चाहिए. अगर ऐसा करना ज़रूरी है, तो इसके लिए AudioManager एपीआई का इस्तेमाल किया जा सकता है.
    • ऐसे पुराने Intent इंस्टेंस का पता लगाता है जिन्होंने सेवा को फ़ोरग्राउंड सेवा के तौर पर शुरू किया था. इससे सिस्टम की ओर से ForegroundServiceDidNotStartInTimeException को ट्रिगर होने से रोका जाता है. यह अस्थिर एपीआई पर एक बड़ा बदलाव है. यह उन ऐप्लिकेशन के लिए है जो कस्टम MediaNotification.Provider लागू करते हैं, क्योंकि अब एक नया ज़रूरी तरीका उपलब्ध है.
    • होम स्क्रीन पर इस्तेमाल किए जाने वाले विजेट के लिए, PendingIntent इंस्टेंस के बिल्डर जोड़ें (#2933).
    • Compose पर आधारित होम स्क्रीन विजेट के लिए, Intent इंस्टेंस बनाने के लिए स्टैटिक तरीके जोड़े गए (#2933).
    • उस बग को ठीक किया गया है जिसमें मीडिया आइटम के ट्रांज़िशन की जानकारी कंट्रोलर को नहीं दी जाती थी. ऐसा तब होता था, जब किसी मीडिया आइटम इंडेक्स से दूसरे इंडेक्स पर मीडिया आइटम को चलाने के लिए ट्रांज़िशन किया जाता था. साथ ही, ट्रांज़िशन की वजह 'AUTO' और 'SEEK' होती थी (#2997).
    • उस समस्या को ठीक किया गया है जिसमें सिस्टम यूज़र इंटरफ़ेस (यूआई) बटन की प्लेसमेंट से जुड़ी समस्या को हल करने के लिए इस्तेमाल किए गए तरीके का असर, Android Auto या उन मैन्युफ़ैक्चरर जैसे अन्य यूज़र इंटरफ़ेस (यूआई) पर पड़ता है जिन्हें इस तरीके की ज़रूरत नहीं है (#3041).
    • उस समस्या को ठीक किया गया है जिसमें सदस्यताओं का ऐक्सेस सिंक नहीं किया गया था (#3056).
    • API 29 पर SysUI की गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से, किसी खास साइज़ में मीडिया सेशन का आर्टवर्क दिखाने पर SysUI क्रैश हो जाता था और डिवाइस को रीबूट करना पड़ता था (#3118).
    • Android Q पर सूचना के आर्टवर्क आइकॉन के साइज़ में बदलाव होने की समस्या ठीक की गई है (#3084).
  • यूआई:
    • वीडियो चलाने की स्पीड दिखाने और उसमें बदलाव करने के लिए, media3-ui-compose में PlaybackSpeedControl कंपोज़ेबल जोड़ें.
    • वीडियो चलाने की स्पीड को कंट्रोल करने के लिए, PlaybackSpeedToggleButton Composable को media3-ui-compose-material3 में जोड़ें.
    • खिलाड़ी की प्रोग्रेस दिखाने और खींचने और टैप करने (#2288) का इस्तेमाल करके वीडियो में आगे-पीछे जाने के लिए, ProgressSlider में ProgressSlider Composable जोड़ें.media3-ui-compose-material3
    • PlayerControlView को ऐनिमेट करते समय, स्क्रीन से बाहर मौजूद बफ़र के बड़े हिस्से से बचें.
    • Player में कंपोज़ेबल media3-ui-compose-material3 जोड़ें, जो ContentFrame को टॉप, सेंटर और बॉटम में अलाइन किए गए पसंद के मुताबिक बनाए जा सकने वाले कंट्रोल के साथ जोड़ता है.
    • सुलभता सेवा से, वीडियो चलाने की जगह की जानकारी छिपाएं. इससे PlayerControlView दिखने पर, लगातार सूचना अपडेट होने से रोका जा सकेगा.
  • एचएलएस एक्सटेंशन:
    • एचएलएस इंटरस्टीशियल के साथ X-PLAYOUT-LIMIT का इस्तेमाल करने की सुविधा (#2484).
    • #EXT-X-DEFINE (#1854) के साथ QUERYPARAM एट्रिब्यूट का इस्तेमाल किया जा सकता है.
    • रेगुलर एक्सप्रेशन मैच करने वालों को कैश मेमोरी में सेव करके, एचएलएस प्लेलिस्ट पार्सिंग को ऑप्टिमाइज़ किया गया है (#3008).
    • ऑडियो रेंडिशन में ID3 (EMSG) मेटाडेटा ट्रैक को दिखाना (#3043).
    • अगर अलग-अलग जगहों से एक जैसी स्ट्रीम उपलब्ध हैं, तो लोड होने से जुड़ी गड़बड़ियां आने पर, जगह की जानकारी को फ़ॉलबैक करने की अनुमति दें (#1988).
    • एचएलएस इंटरस्टीशियल के लिए X-SNAP के व्यवहार को ठीक किया गया है, ताकि शुरू होने और फिर से शुरू होने की पोज़िशन का सही तरीके से हिसाब लगाया जा सके (#3013).
  • डैश एक्सटेंशन:
    • उस समस्या को ठीक किया गया है जिसकी वजह से, सेगमेंट के शुरू होने के समय के अलाइन न होने पर, ट्रैक के चलने में देरी होती थी या प्लेबैक की शुरुआत में सैंपल छूट जाते थे (#3057).
    • उस गड़बड़ी को ठीक किया गया है जिसमें इनबैंड ईएमएसजी v0 मेटाडेटा के टाइमस्टैंप सही तरीके से सेट नहीं होते थे (#3024).
  • आरटीएसपी एक्सटेंशन:
    • H.264 और H.265 फ़ॉर्मैट में स्ट्रीम करने से जुड़ी समस्या ठीक की गई है. इस समस्या की वजह से, एक ही ऐक्सेस यूनिट के ऐसे सैंपल गलत तरीके से पार्स हो जाते थे जो कई आरटीपी पैकेट में फैले होते थे. इस वजह से, वीडियो में विज़ुअल आर्टफ़ैक्ट और खराबी आ गई (#3121).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
    • MPEG-H डिकोडर एक्सटेंशन में, MPEG-H यूज़र इंटरफ़ेस (यूआई) मैनेजर के लिए सहायता जोड़ें (#3066).
  • कास्ट एक्सटेंशन:
    • कास्ट किए गए वीडियो के लिए ट्रैक चुनने की सुविधा लागू करने वाला RemoteCastPlayer.Builder#setTrackSelector तरीका जोड़ा गया.
  • हटाए गए सिंबल हटाएं:
    • ExperimentalFrameExtractor हटाएं. इसके बजाय, androidx.media3.inspector.frame.FrameExtractor का इस्तेमाल करें.
    • ChannelMixingMatrix.create() हटाएं. इसके बजाय, ChannelMixingMatrix.createForConstantGain() का इस्तेमाल करें.
    • androidx.media3.extractor.metadata.flac.VorbisComment हटाएं. इसके बजाय, androidx.media3.extractor.metadata.vorbis.VorbisComment का इस्तेमाल करें.
    • MediaSource.prepareSource(MediaSourceCaller, TransferListener) हटाएं. इसके बजाय, MediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId) का इस्तेमाल करें.

1.10.0-rc03

25 मार्च, 2026

1.10.0 स्टेबल वर्शन का इस्तेमाल करें.

1.10.0-rc02

16 मार्च, 2026

1.10.0 स्टेबल वर्शन का इस्तेमाल करें.

1.10.0-rc01

10 मार्च, 2026

1.10.0 स्टेबल वर्शन का इस्तेमाल करें.

1.10.0-beta01

25 फ़रवरी, 2026

1.10.0 स्टेबल वर्शन का इस्तेमाल करें.

1.10.0-alpha01

6 फ़रवरी, 2026

1.10.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.9.0

1.9.4

16 मई, 2026

वर्शन 1.9.4 में ये बदलाव शामिल हैं.

  • असर:
    • बिना किसी कॉन्टेक्स्ट के ट्रांज़िशन करते समय, GL_DRAW_BUFFER और GL_READ_BUFFER को साफ़ तौर पर सेट करें.

1.9.3

16 मार्च, 2026

वर्शन 1.9.3 में ये बदलाव शामिल हैं.

  • ऑडियो:
    • उस गड़बड़ी को ठीक किया गया है जिसमें कंप्रेस किए गए ऑफ़लोड मोड में बिना रुके चलने वाले ऑडियो की प्लेलिस्ट चलाने पर, ऑडियो अटक जाता था.

1.9.2

6 फ़रवरी, 2026

वर्शन 1.9.2 में ये बदलाव शामिल हैं.

  • ExoPlayer:
    • उस गड़बड़ी को ठीक किया गया है जिसमें ProgressiveMediaSource, प्लेयर को टाइमलाइन की पुरानी जानकारी भेजता था. साथ ही, कतार में जोड़े गए वीडियो के समय अपने-आप हट जाते थे (#3016).
  • सेशन:
    • उस समस्या को ठीक किया गया है जिसमें सिस्टम यूज़र इंटरफ़ेस (यूआई) बटन की प्लेसमेंट से जुड़ी समस्या को हल करने के लिए इस्तेमाल किए गए तरीके का असर, Android Auto या उन मैन्युफ़ैक्चरर जैसे अन्य यूज़र इंटरफ़ेस (यूआई) पर पड़ता है जिन्हें इस तरीके की ज़रूरत नहीं है (#3041).
  • कास्ट एक्सटेंशन:
    • कास्ट करने की सुविधा से लोकल प्लेबैक पर ट्रांसफ़र करने से जुड़ी गड़बड़ी को ठीक किया गया है.

1.9.1

26 जनवरी, 2026

वर्शन 1.9.1 में ये बदलाव शामिल हैं.

  • कॉमन लाइब्रेरी:
    • समय क्षेत्र के ऑफ़सेट में सिर्फ़ घंटों की जानकारी देने वाली तारीख और समय की स्ट्रिंग के लिए सहायता जोड़ी गई (#2929).
  • ExoPlayer:
    • ऑडियो शुरू होने के बाद ही, डाइनैमिक शेड्यूलिंग को doSomeWork इंटरवल को धीमा करने की अनुमति दें, ताकि वीडियो चलाने की शुरुआत में A/V सिंक बेहतर हो सके.
    • DefaultLoadErrorHandlingPolicy में मौजूद बग को ठीक किया गया है. इस बग की वजह से, FileNotFoundException और इसी तरह के अन्य अपवादों को कई बार फिर से आज़माया जाता था.
    • डाइनैमिक शेड्यूलिंग से जुड़ी गड़बड़ी को ठीक किया गया है. इसमें, doSomeWork के अगले शेड्यूल के लिए कैलकुलेट किए गए समय को, doSomeWork के मौजूदा इटरेशन के बीते हुए समय से गलती से कम कर दिया गया था. इस समस्या को ठीक करने से, सीपीयू के आइडल रहने का समय बढ़ जाता है और बिजली की बचत होती है.
    • हमने उस समस्या को ठीक किया है जिसमें फ़ॉलबैक एवीसी या एचईवीसी कोडेक का इस्तेमाल करने की कोशिश करते समय, Dolby Vision फ़ाइलों के कुछ प्लेबैक काम नहीं करते थे.
    • उस बग को ठीक किया गया है जिसमें प्लेलिस्ट से मौजूदा समय में चल रहे आइटम को हटाने पर, वीडियो चलना बंद होने के बाद भी लोडिंग जारी रहती थी (#2873).
    • एक ही आइटम पर बार-बार MediaItem का इस्तेमाल करने पर, MediaItem इंस्टेंस लीक होने से बचें (#2993).ExoPlayer.replaceMediaItem
    • आपातकालीन वेक लॉक रिलीज़ की वजह से होने वाले संभावित एएनआर को रोकें (#2979).
  • डेटा निकालने वाले टूल:
    • MP3: Parse LAME ReplayGain data (#2840).
  • ऑडियो:
    • ऑटोमोटिव से जुड़े मामलों में AC-4 डिकोडर की सुविधा का आकलन करते समय, AC4Profile22 और अन्य लेगसी प्रोफ़ाइलों के लिए सहायता को सही तरीके से हटाएं (#2609).
  • वीडियो:
    • जब कॉन्टेंट का फ़्रेम रेट बदलता है, तो एपीआई 30 से पहले के वर्शन वाले डिवाइसों पर वीडियो कोडेक हटा दिए जाते हैं, ताकि वीडियो रुक-रुककर न चले (#2941).
  • टेक्स्ट:
    • VobSub: कुछ ऐसे एसपीयू को सही तरीके से हैंडल करके, कुछ छूटे हुए सबटाइटल ठीक किए गए हैं जिनमें सिर्फ़ एक कंट्रोल सीक्वेंस होता है या जिनमें ज़रूरी जानकारी को कई कंट्रोल सीक्वेंस में बांटा जाता है (#2935).
  • IMA एक्सटेंशन:
    • बग ठीक किया गया: उस समस्या को ठीक किया गया है जिसमें विज्ञापन का एमआईएमई टाइप, IMA LOADED इवेंट में दिए गए एमआईएमई टाइप से मेल नहीं खाता था. अब इस फ़िक्स में, विज्ञापनों के पॉड इंडेक्स और विज्ञापन के क्रम का इस्तेमाल करके, विज्ञापन के MIME टाइप को मैप किया जाता है.
    • getAdsManager() और AdEvent.getAd() के नतीजे को ऐक्सेस करने से पहले, शून्य की जांच करें.
  • सेशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें किसी प्लैटफ़ॉर्म से कनेक्ट किए गए MediaController को रोकने पर, विज्ञापन चलाने के दौरान ऐप्लिकेशन क्रैश हो जाता था (#2948).
    • अलग-अलग क्लास में मौजूद extras Bundle इंस्टेंस में पुष्टि करने की अतिरिक्त सुविधाएं जोड़ें. इससे, अन्य प्रोसेस से भेजे गए गलत तरीके से बनाए गए Bundle इंस्टेंस से सुरक्षा की जा सकती है.
    • COMMAND_SEEK_NEXT या COMMAND_SEEK_BACK के लिए कमांड मौजूद न होने की वजह से, सिस्टम मीडिया सूचना (#2976) में रुकावट आ सकती है. इस समस्या को ठीक किया गया है.
    • सूचना आइकॉन के लिए बिटमैप स्केलिंग को मुख्य थ्रेड से हटा दिया गया है (#2829).
    • हमने उस गड़बड़ी को ठीक कर दिया है जिसमें लेगसी MediaMetadataCompat और MediaDescriptionCompat से कन्वर्ज़न करते समय, लेखक, राइटर, और संगीतकार की जानकारी को फ़ॉलबैक के तौर पर इस्तेमाल नहीं किया जा रहा था (#3018).
  • डाउनलोड:
    • SegmentDownloader की मदद से PriorityTooLowException को हैंडल करते समय, खत्म न होने वाले लूप की संभावित समस्याओं को ठीक किया गया. यह समस्या DASH, HLS, और SmoothStreaming के लिए होती है. सुरक्षित execute तरीके का इस्तेमाल करके, SegmentDownloader के कस्टम ओवरराइड को अपने टास्क को Supplier में रैप करना होगा, ताकि इसे फिर से बनाया जा सके (#2931).
  • एचएलएस एक्सटेंशन:
    • असेट की सूची वाले JSON दस्तावेज़ को Listener.onAssetListLoadCompleted कॉलबैक में पास करें. यह एक अस्थिर एपीआई में होने वाला बड़ा बदलाव है. इस कॉलबैक को लागू करने वाले ऐप्लिकेशन को JSONObject टाइप का एक और आर्ग्युमेंट जोड़ना होगा (#2950).
  • आरटीएसपी एक्सटेंशन:
    • टाइमस्टैंप वाले आरटीपी पैकेट को सही तरीके से हैंडल करें, ताकि वे रैप न हों (#2930).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
    • #2965 पहले वीडियो फ़्रेम को प्रोसेस करने से पहले, वीडियो में आगे-पीछे जाने पर होने वाली संभावित NullPointerException को ठीक किया गया.
  • कास्ट एक्सटेंशन:
    • उस बग को ठीक किया गया है जिसकी वजह से, प्लेलिस्ट बदलने पर RemoteCastPlayer टाइमलाइन सही तरीके से अपडेट नहीं हो रही थी.

1.9.0

17 दिसंबर, 2025

  • कॉमन लाइब्रेरी:
    • AndroidX की अन्य लाइब्रेरी के मुताबिक, minSdk को 23 पर अपडेट करें.
    • PlayerTransferState को जोड़ा गया है. इससे Player के अलग-अलग इंस्टेंस के बीच, प्लेबैक की स्थिति को ट्रांसफ़र करने में मदद मिलती है.
    • Player में void mute() और void unmute() तरीके जोड़ें. ये तरीके, Player के वॉल्यूम को शून्य पर सेट करने से पहले और बाद में, उसे सुरक्षित रखते हैं और फिर से चालू करते हैं.
    • ExoPlayer ने पहले जिन यूटिलिटी क्लास WakeLockManager, WifiLockManager, AudioFocusManager, AudioBecomingNoisyManager, और StuckPlayerDetector का इस्तेमाल किया था उन्हें पब्लिश किया गया है, ताकि अन्य लोग इनका दोबारा इस्तेमाल कर सकें (#1893).
    • जब डेलिगेट प्लेयर, लिसनर इंस्टेंस की तुलना करने के लिए रेफ़रंस इक्वलिटी का इस्तेमाल करता है, तब ForwardingPlayer लिसनर हैंडलिंग से जुड़ी समस्या ठीक की गई (#2675).
    • media3-common-ktx लाइब्रेरी में Player.listenTo सस्पेंड करने वाला एक्सटेंशन फ़ंक्शन जोड़ें. यह फ़ंक्शन, उस Player.Events के बारे में बताता है जिस पर कार्रवाई की जानी चाहिए.
    • BasePlayer.getBufferedPercentage में क्रैश होने की समस्या ठीक की गई है. यह समस्या, पूर्णांक ओवरफ़्लो की वजह से होती है. ऐसा तब होता है, जब बफ़र की गई रिपोर्ट की गई पोज़िशन, रिपोर्ट की गई अवधि से बहुत ज़्यादा होती है (#2750).
    • कस्टम सैंपल एमआईएमई टाइप को अनदेखा न करके और कंटेनर एमआईएमई टाइप से संभावित रूप से गलत ट्रैक टाइप का इस्तेमाल करने के लिए फ़ॉलबैक करके, TrackGroup ट्रैक टाइप की अपने-आप पहचान होने की समस्या ठीक की गई है (#2860).
  • ExoPlayer:
    • ऐसे प्लेयर का पता लगाने की सुविधा जोड़ें जो अटक गया है. अगर प्लेयर अटक जाता है, तो यह सुविधा StuckPlayerException प्लेयर से जुड़ी गड़बड़ी को ट्रिगर करती है. ऐसा इन मामलों में होता है. अगर ज़रूरी हो, तो हर डिफ़ॉल्ट टाइम आउट को ExoPlayer.Builder में कॉन्फ़िगर किया जा सकता है:
      • वीडियो चलाने की कोशिश करते समय, 10 मिनट तक STATE_BUFFERING होने के बाद भी बफ़रिंग की प्रोसेस पूरी नहीं हुई.
      • वीडियो चलाने की कोशिश करते समय, 10 सेकंड तक STATE_READY दिखने के बाद भी वीडियो नहीं चलता है.
      • आइटम के खत्म होने से पहले, STATE_READY के एक मिनट से ज़्यादा समय तक कोई गतिविधि न होने पर.
      • वीडियो चलाने की कोशिश करते समय, 10 मिनट तक वीडियो नहीं चलने की वजह दिखने पर.
    • बैकग्राउंड में वीडियो चलाने के दौरान बफ़रिंग की समस्याओं को ठीक करने के लिए, वेक लॉक हैंडलिंग की सुविधा को डिफ़ॉल्ट रूप से चालू करें. यह ExoPlayer.Builder.setWakeMode को C.WAKE_MODE_LOCAL पर सेट करने के बराबर है.
    • सुनने की सुविधा से जुड़ा लॉजिक जोड़ें, ताकि Context को पास किए गए ExoPlayer.Builder में बदलाव होने पर, वर्चुअल डिवाइस आईडी अपने-आप अपडेट हो जाए.
    • ExoPlayer.setVirtualDeviceId को जोड़ें, ताकि ExoPlayer.Builder को पास किए गए Context से मिले वर्चुअल डिवाइस आईडी को मैन्युअल तरीके से अपडेट किया जा सके.
    • पक्का करें कि रेंडरर, मौजूदा आइटम के खत्म होने से 10 सेकंड पहले, अगली प्लेलिस्ट आइटम से डेटा का इस्तेमाल न करें.
    • इन सेटिंग को अपडेट करने के लिए, ExoPlayer में setSeekBackIncrementMs, setSeekForwardIncrementMs, और setMaxSeekToPreviousPositionMs जोड़ें. ऐसा निर्माण के बाद किया जा सकता है (#2736).
    • DefaultPreloadManager में प्री-कैशिंग की सुविधा जोड़ी गई है. अब ऐप्लिकेशन, TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData) के ज़रिए DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs) या DefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs) को वापस भेज सकते हैं. इससे यह पता चलता है कि किसी मीडिया आइटम को पहले से कैश मेमोरी में सेव करना ज़रूरी है.
    • शॉर्टफ़ॉर्म वीडियो दिखाने वाले डेमो ऐप्लिकेशन में, DefaultPreloadManager की प्री-कैशिंग सुविधा का इस्तेमाल करें.
    • लोकल प्लेबैक के लिए DefaultLoadControl.Builder सेटर जोड़ें और DefaultLoadControl की डिफ़ॉल्ट वैल्यू में बदलाव करें, ताकि यह कई तरह की लोकल फ़ाइलों के साथ ठीक से काम कर सके.
    • उस बग को ठीक किया गया है जिसकी वजह से, खाली प्लेलिस्ट सेट करने पर प्लेयर STATE_READY या STATE_BUFFERING में रह सकता है.
    • प्रीलोड मैनेजर एपीआई को बेहतर बनाया गया है:
      • addMediaItems(List<MediaItem>, List<T>) और addMediaSources(List<MediaSource>, List<T>) जोड़ें. ये एक साथ कई मीडिया आइटम या मीडिया सोर्स जोड़ते हैं. इसके बाद, invalidate() को अपने-आप कॉल करते हैं.
      • removeMediaItems((List<MediaItem>) और removeMediaSources(List<MediaSource>) जोड़ें. इनसे मीडिया आइटम या मीडिया सोर्स को बैच में हटाया जा सकता है. साथ ही, यह पक्का करें कि हटाने के बाद, प्रीलोड मैनेजर इनमें से किसी भी आइटम को प्रीलोड करना शुरू न करे या प्रीलोड करना जारी न रखे.
      • DefaultPreloadManager.setCurrentPlayingIndex(int) को अपने-आप अमान्य होने की अनुमति दें. मौजूदा प्लेइंग इंडेक्स को अपडेट करने के बाद, ऐप्लिकेशन को अब invalidate() को साफ़ तौर पर कॉल करने की ज़रूरत नहीं है.
    • स्क्रबिंग मोड में, फ़ॉरवर्ड सीक के लिए कीफ़्रेम रीसेट करने की सुविधा जोड़ी गई है. ऐसा एक ही ग्रुप की तस्वीरों के लिए किया जा सकता है.
    • ऐप्लिकेशन के लिए DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int) जोड़ें, ताकि किसी खिलाड़ी के लिए टारगेट बफ़र बाइट की वैल्यू सेट की जा सके. इसके लिए, playerName को तय किया गया हो. DefaultLoadControl अब हर प्लेयर के लिए अलग-अलग फ़ैसले ले सकता है. ये फ़ैसले, उसे असाइन किए गए बाइट और टारगेट बफ़र बाइट के आधार पर लिए जाते हैं.
    • विज्ञापन ग्रुप में मौजूद हर विज्ञापन के लिए, स्किप करने की जानकारी देने के लिए AdPlaybackState.AdGroup में SkipInfo जोड़ें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें वीडियो खत्म होने के बाद विज्ञापन चलाते समय removeMediaItems(List) को कॉल करने पर क्रैश हो जाता था (#2746).
    • प्लेलिस्ट चलाने के दौरान वीडियो के रुक-रुककर चलने की समस्या को ठीक किया गया है. इस समस्या में, फ़्रेम को गलती से हमेशा आखिरी सैंपल के तौर पर सेट किया जाता था और रेंडर किया जाता था.
    • अगर प्लेयर, ऑडियो सेशन आईडी जनरेट नहीं कर पाता है, तो फिर से कोशिश करने का पाथ चालू करें (#2382, #2678).
    • DefaultPreloadManager में मौजूद सोर्स के लिए, कुल बफ़र बाइट को कंट्रोल करने की सुविधा जोड़ी गई है. इससे प्रीलोडिंग के लिए कुल बफ़र बाइट को मनमाने तरीके से बढ़ने से रोका जा सकता है. डिफ़ॉल्ट कंट्रोल लॉजिक का इस्तेमाल करने के लिए, ऐप्लिकेशन PlayerId.Preload.name ("preload") के playerName के लिए DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int) के ज़रिए प्रीलोडिंग के लिए टारगेट बफ़र बाइट सेट कर सकते हैं. साथ ही, DefaultPreloadManager.Builder.setLoadControl(LoadControl) के ज़रिए बनाए गए DefaultLoadControl को इंजेक्ट कर सकते हैं.
    • डिफ़ॉल्ट सेटिंग के साथ ShuffleOrder में cloneAndSet(int, int) जोड़ें (#2834).
    • सीखने की प्रोसेस पूरी होने या अपने-आप ट्रांज़िशन होने के बाद, विज्ञापन चलाने की सुविधा को स्किप करने पर, कॉन्टेंट फिर से शुरू होने का ऑफ़सेट जोड़ें (#2484).
    • ऑडियो और वीडियो ट्रैक के लिए, कोडेक पैरामीटर सेट करने और उन्हें मॉनिटर करने के लिए एपीआई जोड़ा गया है. यह सुविधा, MediaCodec पर आधारित रेंडरर के लिए लागू की गई है. इसके लिए, एपीआई 29 या इसके बाद के वर्शन की ज़रूरत होती है.
      • पैरामीटर लागू करने के लिए, ExoPlayer.setAudioCodecParameters() और ExoPlayer.setVideoCodecParameters() का इस्तेमाल करें.
      • बदलावों को सुनने के लिए, ExoPlayer.addAudioCodecParametersChangeListener() और ExoPlayer.addVideoCodecParametersChangeListener() का इस्तेमाल करें. वेंडर के हिसाब से कुंजियों को मॉनिटर करने के लिए, एपीआई 31 या उसके बाद के वर्शन की ज़रूरत होती है.
    • शून्य से अलग किसी पोज़िशन पर जाने के बाद, खाली मीडिया सोर्स सेट करने की वजह से होने वाली IllegalStateException समस्या को ठीक किया गया है. इसके बाद, प्लेयर को किसी ऐसे मीडिया सोर्स के साथ तैयार किया जाता है जिसमें कॉन्टेंट मौजूद हो.
    • स्क्रबिंग मोड में रहते हुए, दूसरे मीडिया आइटम पर जाने पर IllegalStateException की समस्या ठीक की गई.
    • NullPointerException में मौजूद संभावित DefaultPlaybackSessionManager को ठीक किया गया (#2885).
    • ज़रूरी शर्तें पूरी करने वाले वीडियो के लिए, वीडियो में आगे-पीछे जाने की सुविधा को बेहतर बनाने की सेटिंग चालू करें.
    • API 36 और इसके बाद के वर्शन पर, MediaCodec में एसिंक्रोनस डिक्रिप्शन की सुविधा फिर से चालू करें. इस प्लैटफ़ॉर्म एपीआई में टाइमआउट की समस्याओं को ठीक कर दिया गया है (#1641).
    • MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUs की डिफ़ॉल्ट वैल्यू को 15 मि॰से॰ पर सेट करें. साथ ही, ज़रूरी शर्तें पूरी करने वाले वीडियो के लिए, डिकोड करने से पहले वीडियो फ़्रेम को ज़्यादा असरदार तरीके से ड्रॉप करने की सुविधा चालू करें.
    • DefaultLoadControl में, मेमोरी के अपने-आप हिसाब लगाने की सुविधा के लिए, मेमोरी की ज़्यादा से ज़्यादा सीमा जोड़ें. यह बदलाव सिर्फ़ तब लागू होना चाहिए, जब बहुत ज़्यादा ट्रैक चुने गए हों (#2860).
    • उस गड़बड़ी को ठीक किया गया है जिसमें प्लेलिस्ट या दोहराने के मोड में चलाने के दौरान, आखिर के आस-पास स्क्रबर मोड में खोजने पर, अगले मीडिया आइटम पर रीडायरेक्ट हो जाता था.
  • CompositionPlayer:
    • @ExperimentalApi को नए @ExperimentalApi एनोटेशन के तहत पब्लिश करें, ताकि यह पता चल सके कि यह एक्सपेरिमेंट के लिए उपलब्ध है. हालांकि, इस पर अब भी काम चल रहा है.CompositionPlayer ऐसा हो सकता है कि आने वाले समय में, कुछ एपीआई में बड़े बदलाव किए जाएं. साथ ही, इस्तेमाल के कुछ मामलों में, जानी-पहचानी समस्याएं और सीमाएं भी हो सकती हैं. इनमें से कुछ के बारे में दस्तावेज़ में जानकारी नहीं दी गई है.
    • CompositionPlayer में, COMMAND_SET_AUDIO_ATTRIBUTES और ऑडियो फ़ोकस हैंडलिंग की सुविधा जोड़ी गई.
    • CompositionPlayer में, सेकंडरी सीक्वेंस की स्पीड बदलने की सुविधा जोड़ी गई है.
    • EditedMediaItem.removeVideo के साथ काम करने की सुविधा जोड़ी गई.
  • ट्रांसफ़ॉर्मर:
    • InAppMp4Muxer को डिफ़ॉल्ट मल्टीप्लेक्सर के तौर पर इस्तेमाल करें.
    • EditedMediaItem.Builder#setSpeed() को जोड़ा गया और Effects#createExperimentalSpeedChangingEffects() को बंद किया गया.
    • EditedMediaItemSequence में, forceAudioTrack और forceVideoTrack को trackTypes से बदलें.
  • ट्रैक के विकल्प:
    • अन्य विकल्पों के बारे में ज़्यादा जानकारी दिए बिना, किसी भी टेक्स्ट ट्रैक को चुनने के लिए TrackSelectionParameters.selectTextByDefault जोड़ें.
    • TrackSelectionParameters में preferredVideoLabels, preferredAudioLabels, और preferredTextLabels जोड़कर, किसी खास लेबल वाले ट्रैक के लिए प्राथमिकता तय करें. उदाहरण के लिए, HLS NAME टैग (#1666) से पढ़े गए ट्रैक.
  • डेटा निकालने वाले टूल:
    • FLAC: एन्कोड किए गए FLAC डेटा में नकली हेडर मिलने की संभावना को कम करने के लिए, हेडर का पता लगाने की सुविधा को बेहतर बनाया गया है. इससे डिकोडिंग से जुड़ी गड़बड़ियां (#558) कम होंगी.
    • MP3: MP3 फ़ाइलों की शुरुआत में मौजूद ID3 टैग के बीच (और पहले) गैप की अनुमति दें (#811, #5718).
    • MP3: सिंक बाइट के लिए, मौजूदा खोज सीमा से मेल खाने के लिए, स्निफ़िंग की सीमा को 128 केबी तक बढ़ाएं (#2713).
    • MP3: FLAG_ENABLE_INDEX_SEEKING को बदलकर, मेटाडेटा हेडर (जैसे कि Xing और VBRI) से जानकारी पाने को प्राथमिकता दें. अगर कोई अन्य जानकारी मौजूद नहीं है, तो इंडेक्स के आधार पर जानकारी पाने की सुविधा का इस्तेमाल करें. इससे, सीकिंग मेटाडेटा वाली फ़ाइलों की परफ़ॉर्मेंस बेहतर होती है (#2839).
    • MP3: अगर कोई सीकिंग मेटाडेटा (जैसे, Xing, VBRI) नहीं मिलता है, तो Mp3Extractor को डिफ़ॉल्ट रूप से स्थिर बिटरेट (सीबीआर) पर सेट करें. ऐसा तब भी करें, जब FLAG_ENABLE_INDEX_SEEKING सेट हो. यह MP3 स्पेसिफ़िकेशन के इतिहास पर आधारित है. इसमें CBR स्टैंडर्ड था और VBR के लिए, साफ़ तौर पर हेडर की ज़रूरत होती है. इससे, बिना मेटाडेटा वाली फ़ाइलों को तुरंत खोजा जा सकता है. हालांकि, इससे हेडर के बिना वीबीआर फ़ाइलों की संभावित सटीकता कम हो जाती है. अगर CBR की मान्यता को खोजा नहीं जा सकता है (उदाहरण के लिए, अज्ञात लंबाई की स्ट्रीम के लिए), तो अब इंडेक्स सीकिंग का इस्तेमाल फ़ॉलबैक के तौर पर किया जाता है (#2848).
    • MP4: एक्सट्रैक्टर से ट्रैक फ़ॉर्मैट निकालने से पहले, पहले सैंपल की लेयर वैल्यू देखकर audio/mpeg (MP3), audio/mpeg-L1, और audio/mpeg-L2 एमआईएमई टाइप के बीच अंतर करें (#2683).
    • MP4: 1 एमबी से बड़े stbl बॉक्स का मतलब है कि फ़ाइल को फ़्रैगमेंट नहीं किया जाना चाहिए. इससे बहुत बड़ी फ़ाइलों को स्निफ़ करने की क्षमता बेहतर होती है (#2650).
    • MP4: ©mvn (मूवमेंट का नाम) और ©mvi (मूवमेंट इंडेक्स) मेटाडेटा के लिए सहायता जोड़ी गई है. अब इन्हें Format.metadata में TextInformationFrame ऑब्जेक्ट के तौर पर दिखाया जाता है. इनके आईडी क्रमशः MVNM और MVIN हैं (#2754).
    • MP4: पूरी फ़ाइल को पार्स करने में गड़बड़ी होने के बजाय, stsd बॉक्स मौजूद न होने वाले ट्रैक को अनदेखा करें.
    • Matroska: DTS-HD का पता लगाने की सुविधा जोड़ी गई (#6225).
    • MatroskaExtractor में मौजूद उस समस्या को ठीक किया गया है जिसमें एक से ज़्यादा ट्रैक वाली फ़ाइलों के लिए, वीडियो में आगे-पीछे जाने की सुविधा ठीक से काम नहीं करती थी. अब क्यू पॉइंट, अपने-अपने ट्रैक से सही तरीके से जुड़े हुए हैं. इससे वीडियो के किसी भी हिस्से पर जाने की सुविधा मिलती है.
    • MPEG-TS: टाइमस्टैंप के बिना पीईएस पैकेट की वजह से होने वाली ReorderingBufferQueue से IllegalArgumentException को ठीक किया गया (#2764).
    • HEIC फ़ॉर्मैट वाली मोशन फ़ोटो को एक्सट्रैक्ट करने की सुविधा जोड़ी गई. HeifExtractor अब एम्बेड किए गए वीडियो और ऑडियो ट्रैक वाली HEIC फ़ाइलों को पार्स कर सकता है.
  • Inspector:
    • मीडिया की जांच करने वाले टूल के लिए, एक नया :media3-inspector मॉड्यूल जोड़ा गया है. इस मॉड्यूल में अब एक नया androidx.media3.inspector.MetadataRetriever शामिल है. यह मेटाडेटा और फ़्रेम निकालने, दोनों के लिए एक ही एपीआई उपलब्ध कराएगा. मौजूदा androidx.media3.exoplayer.MetadataRetriever अब काम नहीं करेगा. इसके बजाय, इस नए वर्शन का इस्तेमाल करें.
    • फ़्रेम निकालने के लिए, नया सार्वजनिक एपीआई androidx.media3.inspector.FrameExtractor लॉन्च किया गया. यह AutoCloseable क्लास, एचडीआर वीडियो, वीडियो इफ़ेक्ट, और कस्टम डिकोडर चुनने की सुविधा के साथ फ़्रेम निकालने का तरीका उपलब्ध कराती है. इसे किसी खास MediaItem के लिए, Builder के ज़रिए बनाया जाना चाहिए.
    • FrameExtractor: किसी मीडिया फ़ाइल से थंबनेल फ़्रेम निकालने के लिए, getThumbnail() जोड़ें. इसके लिए, किसी खास टाइमस्टैंप की ज़रूरत नहीं होती.
    • androidx.media3.inspector.MediaExtractorCompat जोड़ें. यह प्लैटफ़ॉर्म के android.media.MediaExtractor के लिए ड्रॉप-इन रिप्लेसमेंट है. इससे किसी मीडिया फ़ाइल से रॉ और एन्कोड किए गए मीडिया सैंपल निकाले जा सकते हैं. मौजूदा androidx.media3.exoplayer.MediaExtractorCompat को अब इस नई क्लास के पक्ष में बंद कर दिया गया है.
  • ऑडियो:
    • AudioProcessor इंस्टेंस को सीकिंग के बारे में बताएं.
    • कस्टम ऑडियो आउटपुट पाथ के लिए, DefaultAudioSink.Builder में नया AudioOutputProvider इंटरफ़ेस इंजेक्ट करने की अनुमति दें. डिफ़ॉल्ट रूप से, इसकी वैल्यू AudioTrackAudioOutputProvider होती है.
    • हैंडल GainProcessor में खोजता है.
    • ट्रैक फ़ॉर्मैट में AC-4 डिकोडर प्रोफ़ाइल और लेवल की क्षमताओं का इस्तेमाल करें. साथ ही, सहायता का आकलन करें (#2580).
    • प्लेबैक की शुरुआत में, राउटिंग में बदलाव के कॉलबैक को हैंडल करने की वजह से होने वाली संभावित देरी से बचें (#2646).
    • EAC3, EAC3-JOC, और AC-4 फ़ॉर्मैट के लिए कोडेक को फिर से इस्तेमाल करने की अनुमति दें (#1346).
    • Sonic में फ़्लोट पीसीएम सैंपल के लिए सहायता जोड़ी गई.
    • ToFloatPcmAudioProcessor में 16 बिट पीसीएम सैंपल के लिए सपोर्ट जोड़ा गया.
  • वीडियो:
    • अलग-अलग प्रोफ़ाइलों वाले Dolby-Vision कॉन्टेंट के लिए, कोडेक को फिर से इस्तेमाल करने की सुविधा बंद करें.
    • सुरक्षित कोडेक (#2856) के लिए, परफ़ॉर्मेंस पॉइंट की गलत रिपोर्टिंग से बचने के लिए, फिर से वर्कअराउंड चालू किया गया.
  • टेक्स्ट:
    • Dolby Vision कॉन्टेंट में CEA-6/708 सबटाइटल को पार्स करने की समस्या ठीक की गई है (#2775).
  • इमेज:
    • ScrubbingMode से जुड़ी उस समस्या को ठीक किया गया है जिसमें DASH थंबनेल ट्रैक को स्क्रैप करते समय प्लेयर अटक जाता था (#2815).
  • DRM:
    • MediaDrmCallback तरीकों के रिटर्न टाइप को byte[] से बदलकर नए MediaDrmCallback.Response टाइप में बदल दिया गया है, ताकि अतिरिक्त वैकल्पिक जानकारी दिखाई जा सके. यह सोर्स कोड में किया गया ऐसा बदलाव है जिससे कोड काम करना बंद कर सकता है. हालांकि, इस समस्या को आसानी से ठीक किया जा सकता है. इसके लिए, byte[] की पिछली वैल्यू को new Response के साथ रैप करके वापस भेजें.
    • AnalyticsListener.onDrmKeysLoaded (#1001) में, मुख्य अनुरोध की जानकारी जोड़ें. जैसे, यूआरएल और लेटेन्सी.
    • प्रावधान के अनुरोध का डेटा, यूआरएल पैरामीटर से POST बॉडी में ले जाएं.
  • असर:
    • Presentation को एक ही साइड की लंबाई के साथ बनाए जाने पर, अनसेट आउटपुट साइड को गोल करने के लिए Presentation.copyWithUnsetSideRoundedTo जोड़ें.
  • Muxers:
    • फ़्रेमवर्क MediaMuxer के लिए, ड्रॉप-इन रिप्लेसमेंट के तौर पर MediaMuxerCompat जोड़ा गया.
    • मोशन फ़ोटो बनाने की अनुमति देने के लिए, MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo() जोड़ें.
    • OPUS, VORBIS, VP8, और VP9 मीडिया स्ट्रीम को webm फ़ाइल फ़ॉर्मैट में मक्स करने की अनुमति देने के लिए, WebmMuxer जोड़ें.
  • IMA एक्सटेंशन:
    • कस्टम प्रॉगार्ड नियमों को हटा दिया गया है, ताकि ऐप्लिकेशन IMA Android संग्रह में रिलीज़ किए गए नियमों का इस्तेमाल कर सकें.
    • ImaServerSideAdInsertionUriBuilder.setNetworkCode जोड़ें. यह एक नया एपीआई है. इसकी मदद से, IMA SDK के लिए Google Ad Manager नेटवर्क कोड सेट किया जा सकता है. इससे Google Ad Manager की सेटिंग में बताए गए विज्ञापन आइडेंटिफ़ायर मैनेज किए जा सकते हैं. नेटवर्क कोड ज़रूरी नहीं हैं, लेकिन फ़ुल सर्विस स्ट्रीम के अनुरोधों के लिए इनका इस्तेमाल करने का सुझाव दिया जाता है. नेटवर्क कोड ढूंढने के लिए, यह लेख पढ़ें.
    • आईएमए की डिपेंडेंसी को 3.37.0 पर ले जाएं. इसके लिए, कोर लाइब्रेरी के डिसुगरिंग को चालू करना ज़रूरी है. यह सुविधा, निर्भरता वाले ऐप्लिकेशन के लिए भी चालू होनी चाहिए. IMA के config notes देखें. * एसएसएआई यूआरआई बिल्डर में, IMA डीएआई के कस्टम यूज़र इंटरफ़ेस (यूआई) के विकल्पों के लिए सहायता. सर्वर साइड विज्ञापन डालने की सुविधा के लिए, कस्टम यूज़र इंटरफ़ेस (यूआई) के विकल्पों में "स्किप किए जा सकने वाले विज्ञापन" और "इस विज्ञापन के बारे में जानकारी" रेंडर करने की सुविधा शामिल है. फ़िलहाल, यह सुविधा चुनिंदा पब्लिशर के लिए उपलब्ध है. इसके लिए, उन्हें अनुमति वाली सूची में शामिल होना होगा. इस बदलाव से, IMA SDK का वर्शन भी 3.38.0 (रिलीज़ नोट) पर अपग्रेड हो जाता है, ताकि कस्टम यूज़र इंटरफ़ेस (यूआई) के विकल्पों वाले एपीआई को ऐक्सेस किया जा सके.
    • उस समस्या को ठीक किया गया है जिसमें विज्ञापन के बाद दिखाए जाने वाले कॉन्टेंट को तैयार करने में हुई गड़बड़ी को, विज्ञापन चलाने में हुई गड़बड़ी के तौर पर गलत तरीके से रिपोर्ट किया जाता था (#2656).
  • सेशन:
    • MediaSession.Callback.onPlaybackResumption में नया पैरामीटर जोड़ें, ताकि यह पता चल सके कि कॉल सिर्फ़ जानकारी इकट्ठा करने के लिए किया गया है या वीडियो चलाने के लिए (#1764).
    • MediaSession.ControllerInfo.isTrusted को अपडेट करें, ताकि अपने ऐप्लिकेशन के कंट्रोलर को भी भरोसेमंद के तौर पर एलान किया जा सके (#2542).
    • सूचना अपडेट को मैन्युअल तरीके से ट्रिगर करने के लिए, MediaSessionService.triggerNotificationUpdate जोड़ें (#1833).
    • कस्टम कमांड के तरीकों में ProgressListener जोड़ें.
    • MediaLibrarySession.Builder.setLibraryErrorReplicationMode की डिफ़ॉल्ट वैल्यू को बदलकर, नॉन फ़ैटल करें.
    • Context पैरामीटर जोड़ें MediaButtonReceiver.onForegroundServiceStartNotAllowedException (#2625).
    • बाइंडर के ज़रिए वॉल्यूम कंट्रोल आईडी पाने के बजाय, प्लैटफ़ॉर्म PlaybackInfo से इसे पढ़ें. इससे यह पक्का होता है कि प्लेबैक टाइप और आवाज़ कम/ज़्यादा करने वाले कंट्रोल आईडी को एक साथ पढ़ा जाता है और वे एक-दूसरे से मेल खाते हैं.
    • उस बग को ठीक किया गया है जिसमें ACTION_UP मुख्य इवेंट को कस्टम हैंडलिंग के लिए कॉलबैक पर भेजने से पहले फ़िल्टर कर दिया जाता था. इससे, media1 और प्लैटफ़ॉर्म (#2637) के बीच समानता बनी रहती है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें getCurrentTimeline() को PlayerWrapper से कॉल किया जाता था. ऐसा तब भी होता था, जब कमांड उपलब्ध नहीं होती थी (#2665).
    • उस गड़बड़ी को ठीक किया गया है जिसमें मुख्य लूपर की मैसेज कतार में एक मैसेज छूट गया था. इसकी वजह से, सेवा बंद होने के बाद मेमोरी लीक हो गई थी (#2692).
    • MediaBrowser के साथ लेगसी सेशन ऐप्लिकेशन से कनेक्ट होने पर, कस्टम कमांड सिर्फ़ तब सेशन में भेजी जाती हैं, जब कस्टम ऐक्शन का विज्ञापन लेगसी सेशन के PlaybackStateCompat में कस्टम ऐक्शन के तौर पर किया गया हो. अन्य सभी कस्टम कार्रवाइयां, सेवा को भेजी जाती हैं.
    • onAudioSessionIdChanged को लागू किया गया है, ताकि मीडिया कंट्रोलर को सूचना दी जा सके कि सेशन ने ऑडियो सेशन आईडी सेट कर दिया है (#244).
    • उस बग को ठीक किया गया है जिसकी वजह से, onStartCommand() में Intent मीडिया कुंजी इवेंट के आने पर, KEYCODE_HEADSETHOOK प्लेयर शुरू नहीं हुआ. इस समस्या को ठीक कर दिया गया है. इसके लिए, 'KEYCODE_HEADSETHOOK' को KEYCODE_MEDIA_PLAY_PAUSE (#2816) की तरह हैंडल किया गया है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें सेशन और कंट्रोलर के बीच Surface के साइज़ की जानकारी नहीं दी जाती थी. इस वजह से, डेमो-सेशन में वीडियो इफ़ेक्ट लागू नहीं हो पाते थे. अगर कंट्रोलर का इस्तेमाल किया जा रहा है, तो यह एक बड़ा बदलाव हो सकता है. ऐसा तब होगा, जब आपका प्लेयर setVideoSurfaceHolder कॉल को हैंडल नहीं कर पाएगा.
    • String CharSequence मेटाडेटा वैल्यू के अलावा, अन्य वैल्यू के ट्रांसफ़र की समस्या ठीक की गई. जैसे, स्पैन-स्टाइल वाली स्ट्रिंग (#2853).
    • CommandButton.executeAction जोड़ें, ताकि कंट्रोलर आसानी से ज़रूरी कार्रवाई ट्रिगर कर सकें. साथ ही, कुछ प्लेयर और सेशन कमांड के लिए पैरामीटर तय करने की अनुमति दें, ताकि यह तय किया जा सके कि कौनसी कार्रवाई ट्रिगर करनी है.
    • CommandButton इंस्टेंस के लिए, पुराने सिस्टम के साथ काम करने की सुविधा जोड़ें. इसके लिए, Player.Command या गैर-कस्टम SessionCommand का इस्तेमाल करके, उनकी कार्रवाई तय करें. अब इन्हें प्लैटफ़ॉर्म मीडिया सेशन में सही तरीके से दिखाया जाता है. उदाहरण के लिए, सिस्टम यूज़र इंटरफ़ेस (यूआई) या Android Auto के लिए.
    • उस समस्या को ठीक किया गया है जिसमें किसी MediaController को प्लैटफ़ॉर्म मीडिया सेशन से कनेक्ट करने पर, एक ही Bitmap को कई बार कंप्रेस किया जाता था.
  • यूआई:
    • media3-ui-compose मॉड्यूल में ProgressStateWithTickInterval क्लास और उससे जुड़ा rememberProgressStateWithTickInterval कंपोज़ेबल जोड़ें. इस स्टेट होल्डर का इस्तेमाल demo-compose में किया जाता है, ताकि टेक्स्ट के तौर पर मौजूदा पोज़िशन और अवधि दिखाई जा सके.
    • ui-compose में MuteButtonState जोड़ें. इससे Player की आवाज़ म्यूट की जा सकेगी. इस स्टेट होल्डर का इस्तेमाल demo-compose में, म्यूट/अनम्यूट टॉगल बटन दिखाने के लिए किया जाता है.
    • ProgressStateWithTickCount क्लास और उनसे जुड़े rememberProgressStateWithTickCount कंपोज़ेबल को media3-ui-compose मॉड्यूल में जोड़ें. इस स्टेट होल्डर का इस्तेमाल demo-compose में किया जाता है, ताकि प्रोग्रेस को हॉरिज़ॉन्टल रीड-ओनली प्रोग्रेस बार के तौर पर दिखाया जा सके.
    • media3-ui-compose में ContentFrame कॉम्पोज़ेबल जोड़ें. यह PlayerSurface मैनेजमेंट को पक्षानुपात बदलने और शटर से कवर करने की सुविधा के साथ जोड़ता है.
    • API 34 प्लैटफ़ॉर्म में मौजूद एक ज्ञात बग को ठीक किया गया है. इस बग की वजह से, Compose AndroidView में SurfaceView का इस्तेमाल करते समय, वीडियो स्ट्रेच/क्रॉप हो जाते थे. इसलिए, ContentFrame और PlayerSurface कंपोज़ेबल पर SURFACE_TYPE_SURFACE_VIEW का असर पड़ता था (#1237, #2811).
    • एक नया media3-ui-compose-material3 मॉड्यूल बनाएं और उसमें Material3 थीम वाले कंपोज़ेबल (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton) जोड़ें.
    • टेक्स्ट के तौर पर प्लेयर की प्रोग्रेस दिखाने के लिए, media3-ui-compose-material3 में TimeText कंपोज़ेबल जोड़ें. इसे मौजूदा पोज़िशन, अवधि या बचा हुआ समय दिखाने के लिए कॉन्फ़िगर किया जा सकता है.
    • PlayerView में मीडिया रूट बटन जोड़ने की सुविधा जोड़ी गई.
    • आरटीएल टेक्स्ट में विराम चिह्न सही तरीके से दिखाने के लिए, BidiFormatter का इस्तेमाल करें उपशीर्षक (#11214).
  • एचएलएस एक्सटेंशन:
    • एचएलएस इंटरस्टीशियल स्किप एट्रिब्यूट पार्स करता है.
    • HLS प्लेलिस्ट और ऐसेट की सूची वाले दस्तावेज़ से, स्किप कंट्रोल एट्रिब्यूट को AdPlaybackState में मैप करें, ताकि उन्हें सार्वजनिक तौर पर ऐक्सेस किया जा सके.
    • उस बग को ठीक किया गया है जिसमें प्लेलिस्ट से EXT-X-PROGRAM-START-DATE टैग हटाने पर, प्लेलिस्ट के शुरू होने का समय हट जाता था. यह टैग, प्लेलिस्ट के शुरू होने का समय तय करता है (#2760).
    • प्लेलिस्ट (#2826) में किसी दी गई जगह का सेगमेंट इंडेक्स ढूंढने के लिए, बाइनरी सर्च का इस्तेमाल करें.
    • विज्ञापन और विज्ञापन ग्रुप को इंडेक्स के हिसाब से स्किप करने के लिए, HlsInterstitialsAdsLoader.skipCurrentAd() और skipCurrentAdGroup() और उनसे जुड़े तरीके जोड़ें.
    • विज्ञापन की अवधि की शुरुआत की जानकारी देने के लिए, HlsInterstitialsAdsLoader.Listener.onAdStarted जोड़ें (#2859).
    • ISO 8601 तारीख-समय की स्ट्रिंग में, तारीख/समय सेपरेटर के तौर पर स्पेस को स्वीकार करें.
    • बिना सेगमेंट वाले HlsMediaPlaylist के लिए, अगले चंक को फ़ेच करने की प्रोसेस को ठीक से हैंडल किया गया (#2821).
    • लाइव स्ट्रीम के लिए, वीडियो शुरू होने से पहले दिखने वाले विज्ञापनों की डिफ़ॉल्ट शुरुआती पोज़िशन का इस्तेमाल करें.
  • डैश एक्सटेंशन:
    • UnsupportedOperationException को ठीक किया गया है. यह समस्या, नॉन-हायरार्किकल data: यूआरआई मेनिफ़ेस्ट data: का इस्तेमाल करके DASH स्ट्रीम चलाने पर आती थी (#2688).
    • LiveConfiguration को DashMediaSource के MediaItem से मिली वैल्यू पर रीसेट करें. ऐसा तब करें, जब मीडिया आइटम रिलीज़ हो और जब उपयोगकर्ता उसे अपडेट करे (#2606).
    • मेनिफ़ेस्ट के गलत अपडेट की वजह से होने वाली क्रैश की समस्याओं को ठीक किया गया है. इन समस्याओं की शिकायत, प्लेयर से जुड़ी गड़बड़ियों के तौर पर नहीं की गई थी (#2805).
  • आरटीएसपी एक्सटेंशन:
    • H264 और H265 के लिए, फ़्रैगमेंट किए गए NAL यूनिट को प्रोसेस करते समय, RTP पैकेट के मौजूद न होने की गड़बड़ी को ठीक किया गया है (#2613).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
    • AV1 एक्सटेंशन: AV1 सॉफ़्टवेयर डिकोडर अब ज़्यादा परफ़ॉर्मेंस वाली dav1d लाइब्रेरी का इस्तेमाल करता है. यह डिकोडिंग की स्पीड को बेहतर बनाने के लिए, libgav1 के पिछले वर्शन की जगह लेता है.
    • FFmpeg एक्सटेंशन: कुछ FLAC फ़ाइलों को चलाने में आ रही समस्या को ठीक किया गया है. इसके लिए, यह पक्का किया गया है कि STREAMINFO ब्लॉक को सही तरीके से पार्स किया गया हो और डिकोडर को पास किया गया हो (#2887).
  • कास्ट एक्सटेंशन:
    • CastPlayer.Builder जोड़ें. इससे CastPlayer को लोकल और कास्ट, दोनों तरह से वीडियो चलाने की सुविधा मिलती है. अगर आपको सिर्फ़ कास्ट किए गए कॉन्टेंट को चलाने की सुविधा देने वाली CastPlayer की पुरानी सुविधा का इस्तेमाल करना है, तो RemoteCastPlayer का इस्तेमाल करें. पहले से मौजूद CastPlayer कंस्ट्रक्टर, पहले की तरह ही काम करते हैं. हालांकि, अब CastPlayer या RemoteCastPlayer बिल्डर का इस्तेमाल करने का सुझाव दिया जाता है.
    • DefaultMediaItemConverter में, नॉन-नल माइम टाइप लागू करना बंद करें.
    • जब DefaultCastOptionsProvider#toMediaQueueItem उपलब्ध हो, तब MediaItem.mediaMetadata.mediaType का इस्तेमाल करके, Cast MEDIA_TYPE का अनुमान लगाएं, ताकि उसे DefaultCastOptionsProvider#toMediaQueueItem में इस्तेमाल किया जा सके.
    • DefaultCastOptionsProvider में रिमोट से लोकल ट्रांसफ़र करने की सुविधा चालू करें.
    • सेशन के डेमो में Cast की सुविधा जोड़ी गई.
    • Composable UI पर मीडिया रूट बटन दिखाने की सुविधा जोड़ी गई.
    • कार्रवाई बार मेन्यू पर मीडिया रूट बटन दिखाने की सुविधा जोड़ी गई.
    • मीडिया रूट बटन को View UI के तौर पर दिखाने की सुविधा जोड़ी गई है.
  • टेस्ट यूटिलिटी:
    • FakeClock के अपने-आप आगे बढ़ने की सुविधा के लिए, समय का ज़्यादा से ज़्यादा अंतर जोड़ें. यह डिफ़ॉल्ट रूप से एक सेकंड पर सेट होता है. हालांकि, इसे FakeClock.Builder के ज़रिए कॉन्फ़िगर किया जा सकता है.
    • RobolectricUtil.runMainLooperUntil (और runLooperUntil) के लिए, मैसेज के बीच का ज़्यादा से ज़्यादा समय अंतर जोड़ें. यह डिफ़ॉल्ट रूप से एक सेकंड पर सेट होता है. हालांकि, इन तरीकों के नए ओवरलोड के ज़रिए इसे कॉन्फ़िगर किया जा सकता है.
    • CapturingRenderersFactory को test-utils से test-utils-robolectric में ट्रांसफ़र करें.
  • हटाए गए सिंबल हटाएं:
    • अब इस्तेमाल में नहीं आने वाले DefaultPreloadManager कंस्ट्रक्टर को हटाएं. इसके बजाय, DefaultPreloadManager.Builder का इस्तेमाल करें.
    • अब काम नहीं करने वाले EditedMediaItemSequence कंस्ट्रक्टर हटा दिए गए हैं. इसके बजाय, EditedMediaItemSequence.Builder का इस्तेमाल करें.
    • BitmapFactoryImageDecoder.BitmapDecoder हटाएं. इसके बजाय, ExternallyLoadedImageDecoder का इस्तेमाल करें.
    • बंद हो चुके ShadowMediaCodecConfig.forAllSupportedMimeTypes() को हटाएं. इसके बजाय, ShadowMediaCodecConfig.withAllDefaultSupportedCodecs() का इस्तेमाल करें.
    • बंद हो चुके ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes() को हटाएं. इसके बजाय, ShadowMediaCodecConfig.withNoDefaultSupportedCodecs() का इस्तेमाल करें.

1.9.0-rc01

1 दिसंबर, 2025

1.9.0 स्टेबल वर्शन का इस्तेमाल करें.

1.9.0-beta01

20 नवंबर, 2025

1.9.0 स्टेबल वर्शन का इस्तेमाल करें.

1.9.0-alpha01

22 अक्टूबर, 2025

1.9.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.8.0

1.8.1

21 मई, 2026

वर्शन 1.8.1 में ये बदलाव शामिल हैं.

  • असर:
    • बिना किसी कॉन्टेक्स्ट के ट्रांज़िशन करते समय, GL_DRAW_BUFFER और GL_READ_BUFFER को साफ़ तौर पर सेट करें.

वर्शन 1.8.0

30 जुलाई, 2025

वर्शन 1.8.0 में ये बदलाव शामिल हैं.

  • कॉमन लाइब्रेरी:
    • ForwardingSimpleBasePlayer में प्लेयर को बदलने की सुविधा जोड़ी गई.
  • ExoPlayer:
    • ExoPlayer इंटरफ़ेस में शफ़ल मोड के लिए गेटर जोड़ा गया (#2522).
    • अगर DefaultAudioSink को एक से ज़्यादा थ्रेड से ऐक्सेस किया जाता है, तो ज़्यादा साफ़ तौर पर अपवाद दिखाएं. अगर ऐसा प्लेयर के बाहर RendererCapabilities.getFormatSupport को कॉल करने की वजह से होता है, तो पक्का करें कि इस तरीके को ExoPlayer के प्लेबैक थ्रेड के तौर पर एक ही थ्रेड पर कॉल किया गया हो. इसके अलावा, प्लेबैक के लिए इस्तेमाल किए गए इंस्टेंस के बजाय किसी दूसरे इंस्टेंस का इस्तेमाल करें (#1191).
    • टीवी पर स्टीरियो के अलावा अन्य ऑडियो फ़ॉर्मैट को DefaultTrackSelector के साथ काम न करने वाले फ़ॉर्मैट के तौर पर मार्क करने वाली गड़बड़ी को ठीक किया गया है.
    • पक्का करें कि MediaCodec के DECODE_ONLY फ़्लैग का इस्तेमाल करते समय, आखिरी फ़्रेम सही तरीके से रेंडर हो रहा हो. यह फ़्लैग, स्क्रबर मोड में डिफ़ॉल्ट रूप से चालू होता है.
    • Context से ExoPlayer.Builder को पास किए गए वर्चुअल डिवाइस आईडी का इस्तेमाल करने की सुविधा जोड़ी गई.
    • स्क्रबिंग मोड में, डिफ़ॉल्ट रूप से डाइनैमिक शेड्यूलिंग की सुविधा चालू करें.
    • किसी आइटम के आखिर में जाने पर, सोर्स को बार-बार रीलोड करने से बचें.
    • स्क्रबिंग मोड में, डिफ़ॉल्ट रूप से MediaCodec.BUFFER_FLAG_DECODE_ONLY का इस्तेमाल करें.
    • जब PreloadMediaSource को ऐसे ExoPlayer से चलाया जाता है जिसकी प्लेबैक थ्रेड, प्रीलोड थ्रेड (#2495) से अलग होती है, तब IllegalStateException थ्रो करें.
    • डिफ़ॉल्ट तौर पर लागू करने की सुविधा के साथ, cloneAndMove को ShuffleMode में जोड़ें (#2226).
    • अगर render को कॉल करने की ज़रूरत नहीं है, तो Renderer.getMinDurationToProgressUs के डिफ़ॉल्ट व्यवहार को बदलकर बड़ी वैल्यू दिखाने पर सेट करें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें वीडियो को रोकने के बाद, वीडियो के आखिर में जाने पर आखिरी फ़्रेम दिखने में देरी होती थी. फ़िलहाल, बग ठीक करने की सुविधा सिर्फ़ तब काम करती है, जब ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled चालू हो.
    • ExoPlayer.setScrubbingModeEnabled(boolean) तरीका जोड़ें. इससे प्लेयर को बार-बार वीडियो को आगे-पीछे करने के लिए ऑप्टिमाइज़ किया जाता है. उदाहरण के लिए, जब कोई उपयोगकर्ता स्क्रबर बार को इधर-उधर खींचता है. ExoPlayer और ExoPlayer.Builder पर मौजूद setScrubbingModeParameters(..) की मदद से, स्क्रबर मोड के व्यवहार को अपनी पसंद के मुताबिक बनाया जा सकता है.
    • स्क्रबिंग मोड में, फ़्रैक्शनल सीक टॉलरेंस को पसंद के मुताबिक बनाने की अनुमति दें.
    • स्क्रबिंग मोड में कोडेक की ऑपरेटिंग रेट बढ़ाएं.
    • उस गड़बड़ी को ठीक किया गया है जिसमें AdsMediaSource के कॉन्टेंट में मौजूद गड़बड़ियों की जानकारी कभी नहीं दी जाती थी (#2337).
    • MergingMediaSource में मेमोरी लीक की समस्या ठीक की गई. उदाहरण के लिए, इसका इस्तेमाल तब किया जाता है, जब सबटाइटल साइडलोड किए जाते हैं (#2338).
    • CmcdConfiguration.Factory को null वापस लाने की अनुमति दें, ताकि कुछ मीडिया आइटम के लिए सीएमसीडी लॉगिंग बंद की जा सके (#2386).
    • इमेज के डिफ़ॉल्ट बफ़र साइज़ को 128 केबी (टेक्स्ट ट्रैक से कॉपी-पेस्ट करने की गड़बड़ी) से बढ़ाकर 26 एमबी कर दिया गया है. यह 50 एमपी अल्ट्रा एचडीआर इमेज के लिए काफ़ी है (#2417).
    • PreCacheHelper जोड़ा गया है. इससे ऐप्लिकेशन, किसी मीडिया को पहले से कैश मेमोरी में सेव कर सकते हैं. इसके लिए, उन्हें मीडिया के शुरू होने की जगह और अवधि तय करनी होगी.
    • DefaultPreloadManager में बताई गई पोज़िशन से प्रीलोडिंग की सुविधा जोड़ी गई.
  • ट्रांसफ़ॉर्मर:
    • CodecDbLite जोड़ें. इससे वीडियो एन्कोडिंग की सेटिंग को चिपसेट के हिसाब से ऑप्टिमाइज़ किया जा सकेगा.
    • CodecDB Lite की सेटिंग ऑप्टिमाइज़ करने की सुविधा चालू करने के लिए, setEnableCodecDbLite में setEnableCodecDbLite फ़्लैग जोड़ें.DefaultEncoderFactory डिफ़ॉल्ट रूप से, इस फ़्लैग की वैल्यू false पर सेट होती है.
    • अब addGap() की मदद से जोड़े गए शुरुआती गैप में साइलेंट ऑडियो भरने के लिए, EditedMediaItemSequence.Builder में experimentalSetForceAudioTrack(true) को साफ़ तौर पर सेट करना होगा. अगर क्रम के बीच में कोई अंतर है, तो इस फ़्लैग की ज़रूरत नहीं है.
    • Muxer इंटरफ़ेस को media3-transformer से media3-muxer पर ले जाएं.
    • मीडिया आइटम को इमेज के तौर पर इंपोर्ट करने के लिए, MediaItem.Builder().setImageDuration(long) सेटिंग को ज़रूरी बना दिया गया है.
    • Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean) जोड़ें. इसमें ट्रिम करने पर MP4 फ़ाइल की बदलाव सूची शामिल होती है. इससे खिलाड़ियों को यह निर्देश दिया जाता है कि वे ट्रिम करने की शुरुआती जगह से पहले वाले मुख्य फ़्रेम और ट्रिम करने की शुरुआती जगह के बीच के सैंपल को अनदेखा करें.
    • Kotlin और Jetpack Compose का इस्तेमाल करने के लिए, कंपोज़िशन डेमो ऐप्लिकेशन को अपडेट करें. साथ ही, सीक्वेंस को 2x2 या PiP लेआउट में व्यवस्थित करने के लिए, कस्टम VideoCompositorSettings जोड़ें.
  • डेटा निकालने वाले टूल:
    • फ़्रैगमेंट की गई MP4 फ़ाइलों से मेटाडेटा पार्स करें (#2084).
    • JPEG: ऐसी मोशन फ़ोटो के साथ काम करता है जिनमें शुरुआत में Exif सेगमेंट नहीं होता (#2552).
    • एक से ज़्यादा sidx ऐटम वाले फ़्रैगमेंट किए गए MP4 में, वीडियो को आगे-पीछे करने की सुविधा जोड़ी गई. इस सुविधा को FragmentedMp4Extractor पर FLAG_MERGE_FRAGMENTED_SIDX फ़्लैग का इस्तेमाल करके चालू किया जा सकता है (#9373).
    • FLAC फ़ाइलों में मौजूद खाली सीक टेबल को अनदेखा करें. इनमें वे टेबल भी शामिल हैं जिनमें सिर्फ़ प्लेसहोल्डर सीक पॉइंट मौजूद हैं. साथ ही, अगर फ़ाइल की अवधि पता है, तो बाइनरी सर्च सीकिंग पर वापस आएं (#2327).
    • H.265 एसईआई यूनिट के पार्सिंग की समस्या ठीक की गई है, ताकि पहचान में न आने वाले एसईआई टाइप को पूरी तरह से स्किप किया जा सके (#2456).
    • WavExtractor टाइप की फ़ाइल को पार्स करते समय, ऑडियो फ़ॉर्मैट के लिए हेडर एक्सटेंशन के SubFormat डेटा का इस्तेमाल करने के लिए, WavExtractor को अपडेट करें.WAVE_FORMAT_EXTENSIBLE
    • MP4: रॉ पीसीएम ऑडियो ट्रैक (64-बिट फ़्लोटिंग पॉइंट पीसीएम काम नहीं करता) तय करने वाले ipcm और fpcm बॉक्स के लिए सहायता जोड़ी गई.
    • MP4: यह tkhd ट्रांसफ़ॉर्मेशन मैट्रिक्स के रोटेशन वाले हिस्से को मैनेज करता है. यह मैट्रिक्स, वीडियो को घुमाता और दिखाता है. इससे यह पक्का होता है कि iPhone के फ़्रंट कैमरे से लिए गए वीडियो, सही तरीके से दिखें. हालांकि, ये वीडियो y-ऐक्सिस में गलत तरीके से दिखते हैं (#2012).
    • MP3: FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS) (#2194) की वजह से, कॉन्स्टेंट बिटरेट पर वापस आने पर, Xing, VBRI, और इसी तरह के वैरिएबल बिटरेट वाले मेटाडेटा से अवधि और डेटा साइज़ का इस्तेमाल करें.
  • ऑडियो:
    • उस गड़बड़ी को ठीक किया गया है जिसमें मीडिया के खत्म होने के ठीक पहले ऑडियो चलाने पर, AnalyticsListener.onAudioPositionAdvancing को कॉल नहीं किया जाता था.
    • ChannelMappingAudioProcessor और TrimmingAudioProcessor में, सभी लीनियर पीसीएम सैंपल फ़ॉर्मैट के लिए सहायता जोड़ी गई.
    • CompositionPlayer में ऑडियो गैप की सुविधा जोड़ी गई.
    • BaseAudioProcessor#reset() से BaseAudioProcessor#flush() को किए गए फ़र्ज़ी कॉल को हटाएं.
    • DefaultAudioMixer में, लगातार पावर अपमिक्सिंग/डाउनमिक्सिंग की अनुमति दें.
    • ChannelMappingAudioProcessor, TrimmingAudioProcessor, और ToFloatPcmAudioProcessor को सार्वजनिक करें (#2339).
    • DefaultAudioSink में अंडररन का पता लगाने के लिए, सबसे सही अनुमान लगाने के बजाय AudioTrackPositionTracker में AudioTrack#getUnderrunCount() का इस्तेमाल करें.
    • ऑडियो आउटपुट डिवाइस की वजह से, ऑडियो की पोज़िशन में अचानक बदलाव होने पर, ऑडियो टाइमस्टैंप को बेहतर तरीके से स्मूथ करने की सुविधा जोड़ी गई है.
    • उस बग को ठीक किया गया है जिसमें ब्लूटूथ डिवाइसों से कनेक्ट होने पर, वीडियो को रोकने के बाद फिर से शुरू करने पर, पहले 10 सेकंड के लिए ऑडियो/वीडियो सिंक नहीं होता था.
    • उस बग को ठीक किया गया है जिसकी वजह से AnalyticsListener.onAudioPositionAdvancing, ऑडियो के आगे बढ़ने का समय रिपोर्ट नहीं कर रहा था. हालांकि, यह पहली बार मेज़रमेंट का समय रिपोर्ट कर रहा था.
    • कुछ डिवाइसों पर स्टीरियो ऑडियो पर फ़ॉलबैक करने के बाद, मल्टीचैनल ऑडियो पर वापस आने की समस्या ठीक की गई (#2258).
  • वीडियो:
    • डिटैच किए गए डिसप्ले वाले डिवाइसों के लिए, "lenovo" और "motorola" डिवाइसों पर वर्कअराउंड की सुविधा उपलब्ध कराई गई है (#2059).
    • जब ऑडियो सैंपल, अनुरोध की गई जगह से शुरू नहीं होते हैं, तो वीडियो फ़्रेम को बेहतर तरीके से रिलीज़ करने की सुविधा को बेहतर बनाया गया है.
    • डिटैच किए गए डिसप्ले के काम न करने की समस्या को ठीक करने के लिए, "realme" डिवाइसों के लिए वर्कअराउंड उपलब्ध कराया गया (#2059).
    • सिर्फ़ डिकोड करने के लिए इनपुट बफ़र को लाइन में लगाते समय, MediaCodec.BUFFER_FLAG_DECODE_ONLY फ़्लैग शामिल करने के लिए, एक्सपेरिमेंट के तौर पर उपलब्ध ExoPlayer एपीआई जोड़ें. यह फ़्लैग, डिकोडर को सिर्फ़ डिकोड किए गए बफ़र को छोड़ने का सिग्नल देगा. इससे वीडियो को तेज़ी से आगे-पीछे किया जा सकेगा. इसे DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag की मदद से चालू करें. * सॉफ़्टवेयर वीडियो कोडेक के लिए, कोडेक की परफ़ॉर्मेंस की जांच को बेहतर बनाया गया है. इस वजह से, हो सकता है कि कुछ और ट्रैक को EXCEEDS_CAPABILITIES के तौर पर मार्क कर दिया जाए.
    • कुछ डिवाइसों पर, VP9 Widevine वीडियो चलाने से जुड़ी गड़बड़ियों को ठीक किया गया है (#2408).
  • टेक्स्ट:
    • MP4 फ़ाइलों में VobSub ट्रैक के लिए सहायता जोड़ी गई (#2510).
    • उपशीर्षक का कोई सेगमेंट शुरू में लोड नहीं होता है, लेकिन बाद में लोड हो जाता है. इसके बाद, उपशीर्षक के कई सेगमेंट खाली दिखते हैं. इस समस्या को ठीक किया गया है (#2517).
    • सबटाइटल चालू करने पर, प्रोसेस हो रहे क्यू को दिखाने के लिए, SSA और SubRip को ठीक किया गया (#2309).
    • उपशीर्षक में गड़बड़ी वाली स्ट्रीम से, उपशीर्षक ट्रैक खाली होने वाली लाइव स्ट्रीम पर स्विच करने के दौरान, वीडियो के रुकने की समस्या ठीक की गई है (#2328).
    • B-फ़्रेम (#2372) वाली H.262 स्ट्रीम चलाने पर, CEA-608 सबटाइटल के गड़बड़ होने की समस्या ठीक की गई.
    • Matroska फ़ाइलों में CodecId = S_TEXT/SSA के साथ SSA सबटाइटल के लिए सहायता जोड़ी गई. पहले, MatroskaExtractor सिर्फ़ CodecId = S_TEXT/ASS फ़ॉर्मैट के साथ काम करता था. इसका इस्तेमाल SubStation Alpha के 'ऐडवांस' (v4+) वैरिएंट को दिखाने के लिए किया जाता है. हालांकि, ExoPlayer के पार्सिंग लॉजिक, दोनों वैरिएंट के लिए एक जैसा होता है (#2384).
    • SubStation Alpha (SSA) सबटाइटल फ़ाइलों में layer प्रॉपर्टी के लिए सहायता जोड़ी गई है. इसका इस्तेमाल, एक साथ स्क्रीन पर एक से ज़्यादा क्यू दिखाए जाने पर, उनके z-ऑर्डर को तय करने के लिए किया जाता है (#2124).
  • मेटाडेटा:
    • MetadataRetriever और Timeline से मीडिया की अवधि वापस पाने की सुविधा जोड़ी गई है. साथ ही, इसे इंस्टेंस पर आधारित AutoCloseable एपीआई पर माइग्रेट किया गया है. Builder का इस्तेमाल करके, MediaItem के लिए एक इंस्टेंस बनाएं. इसके बाद, मेटाडेटा के लिए ListenableFuture पाने के लिए, retrieveTrackGroups(), retrieveTimeline(), और retrieveDurationUs() को कॉल करें. अब पुरानी स्टैटिक विधियों का इस्तेमाल नहीं किया जा सकता (#2462).
  • इमेज:
    • डिकोड किए गए बिटमैप को BitmapFactoryImageDecoder में डिसप्ले साइज़ तक सीमित करें, ताकि बहुत बड़ी (जैसे, 50 मेगापिक्सल) इमेज दिखाने की कोशिश करते समय, PlayerView से Canvas: trying to draw too large bitmap. के साथ ऐप्लिकेशन क्रैश न हो.
    • DefaultRenderersFactory.getImageDecoderFactory() के सिग्नेचर को बदलकर, Context पैरामीटर लें.
    • CompositionPlayer में इस्तेमाल किए गए ज़्यादा से ज़्यादा बिटमैप आउटपुट साइज़ को Transformer में पहले से इस्तेमाल किए गए साइज़ के साथ अलाइन करें. इसका मतलब है कि CompositionPlayer, बिटमैप को डिकोड करते समय डिसप्ले साइज़ को ध्यान में नहीं रखता है. हालांकि, ExoPlayer ऐसा करता है.
  • DRM:
    • OfflineLicenseHelper.newWidevineInstance को स्वीकार करने वाले MediaItem.DrmConfiguration का नया ओवरलोड जोड़ें, ताकि एचटीटीपी अनुरोध हेडर को सही तरीके से लागू किया जा सके (#2169).
  • असर:
    • ऐसा Presentation.createForShortSide(int) जोड़ें जो Presentation बनाता हो. इससे यह पक्का होता है कि सबसे छोटी साइड हमेशा दी गई वैल्यू से मेल खाती हो. भले ही, इनपुट स्क्रीन की दिशा कुछ भी हो.
  • Muxers:
    • उस गड़बड़ी को ठीक किया गया है जिसमें फ़्रैगमेंट किए गए MP4 फ़ाइल फ़ॉर्मैट में ऑडियो सैंपल के लिए सही सैंपल फ़्लैग सेट नहीं किए गए थे.
    • writeSampleData() एपीआई अब MediaCodec.BufferInfo के बजाय, मक्सर के लिए खास तौर पर बनाई गई BufferInfo क्लास का इस्तेमाल करता है.
    • Muxer.Factory#supportsWritingNegativeTimestampsInEditList जोड़ें, जिसकी डिफ़ॉल्ट वैल्यू false होती है.
  • IMA एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें एक विज्ञापन में लोड होने से जुड़ी गड़बड़ी की वजह से, गलती से दूसरे विज्ञापन ग्रुप को अमान्य कर दिया जाता था.
    • उस गड़बड़ी को ठीक किया गया है जिसमें वीओडी विंडो खत्म होने के बाद, विज्ञापन ग्रुप की वजह से वीडियो नहीं चल रहा था. जिन विज्ञापन ग्रुप के शुरू होने का समय, विंडो के बाद का है उन्हें अब MediaPeriodQueue में शामिल नहीं किया जाता (#2215).
  • सेशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें तीसरे पक्ष के ऐसे Media3 कंट्रोलर से किए गए कनेक्शन को अनदेखा किया जाता था जिनके पास खास अधिकार नहीं थे.
    • लेगसी MediaBrowserServiceCompat को कस्टम निर्देश भेजते समय, उपलब्ध निर्देशों की जांच करने की सुविधा हटा दी गई है. यह लेगसी ऐप्लिकेशन से कनेक्ट किए गए लेगसी कंट्रोलर/ब्राउज़र के व्यवहार के जैसा ही है.
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, प्लेयर में पहली बार कॉन्टेंट चलाने में हुई गड़बड़ी को, हमेशा बनी रहने वाली कस्टम अपवाद वाली गड़बड़ी के तौर पर गलत तरीके से माना जाता था. इससे ऐप्लिकेशन को ठीक होने से रोका जाता है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें सेशन के ज़रिए हैंडल नहीं किए गए कंट्रोलर में कुछ बदलावों की वजह से IllegalStateExceptions हो सकता है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें सेशन से मैनेज नहीं की जा रही कंट्रोलर कार्रवाइयों की वजह से, कंट्रोलर अमान्य स्थिति में चला जाता था.
    • StrictMode के असुरक्षित लॉन्च से जुड़े उल्लंघन की चेतावनी को ठीक किया गया है (#2330).
    • उस बग को ठीक किया गया है जिसमें किसी अन्य ऐप्लिकेशन थ्रेड से प्लेयर चलाने पर, मुख्य थ्रेड से setSessionExtras को कॉल करने पर IllegalStateException (#2265) की समस्या होती थी.
    • अगर किसी प्लेयर को मीडिया आइटम के साथ सेट अप किया गया है, लेकिन उन्हें तैयार या चलाया नहीं गया है, तो सूचना अपने-आप न दिखे (#2423https://github.com/androidx/media/issues/2423). इस व्यवहार को MediaSessionService.setShowNotificationForIdlePlayer की मदद से कॉन्फ़िगर किया जा सकता है.
    • सभी या चुने गए कंट्रोलर के लिए, कस्टम PlaybackException जोड़ें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें MediaController पर लाइव स्ट्रीम में आगे-पीछे करने से IllegalArgumentException हो सकती है.
    • लाइव स्ट्रीम के लिए, प्लैटफ़ॉर्म मीडिया कंट्रोलर के लिए, वापस चलाने की पोज़िशन और मौजूदा आइटम में खोजने की सुविधा को बंद करें. इससे Android Auto के यूज़र इंटरफ़ेस (और प्लैटफ़ॉर्म मीडिया सेशन से इस जानकारी का इस्तेमाल करने वाले अन्य कंट्रोलर) में पोज़िशन से जुड़ी गड़बड़ियों से बचा जा सकेगा (#1758).
    • उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी MediaBrowserServiceCompat से कनेक्ट किए गए MediaBrowser के getLibraryRoot में शून्य पास करने पर NullPointerException जनरेट होता था.
    • उस गड़बड़ी को ठीक किया गया है जिसमें कस्टम कार्रवाइयां, खोज के नतीजे या getItem अनुरोध भेजने पर, लेगसी सेशन ऐप्लिकेशन ClassNotFoundException के साथ क्रैश हो जाता था.
    • उस गड़बड़ी को ठीक किया गया है जिसमें MediaItem.LocalConfiguration.uri को प्लैटफ़ॉर्म सेशन के MediaMetadata पर शेयर किया गया था. अगर आपको जान-बूझकर कोई यूआरआई शेयर करना है, ताकि कंट्रोलर मीडिया का फिर से अनुरोध कर सकें, तो MediaItem.RequestMetadata.mediaUri सेट करें.
  • यूआई:
    • PlayerSurface से जुड़ी उस गड़बड़ी को ठीक किया गया है जिसमें बार-बार इस्तेमाल किए जा सकने वाले कॉम्पोनेंट, जैसे कि LazyColumn ठीक से काम नहीं कर रहे थे (#2493).
    • Compose में मौजूद एक बग को ठीक किया गया है. इस बग की वजह से, बटन की शुरुआती स्थितियां सेट करने और स्थिति में बदलाव (जैसे कि आइकॉन के आकार या चालू होने की स्थिति) देखने के बीच काफ़ी समय लग रहा था. अब ऑब्ज़र्वेशन पीरियड के बाहर प्लेयर में किए गए किसी भी बदलाव को चुना जाता है (#2313).
    • SeekBackButtonState और SeekForwardButtonState के लिए, media3-ui-compose मॉड्यूल में स्टेट होल्डर और कंपोज़ेबल जोड़े गए.
    • PlayerControlView में, ExoPlayer के स्क्रबर मोड की सुविधा जोड़ी गई. इस सुविधा को चालू करने पर, जब उपयोगकर्ता स्क्रबर बार को खींचना शुरू करता है, तो प्लेयर स्क्रबर मोड में चला जाता है. साथ ही, हर मूवमेंट के लिए player.seekTo कॉल जारी करता है. इसके बाद, जब स्क्रीन से टच हट जाता है, तो प्लेयर स्क्रबर मोड से बाहर निकल जाता है. इस इंटिग्रेशन को चालू करने के लिए, एक्सएमएल में time_bar_scrubbing_enabled = true या Java/Kotlin में setTimeBarScrubbingEnabled(boolean) तरीके का इस्तेमाल किया जा सकता है.
    • PlayerSurface को नल वैल्यू स्वीकार करने वाले Player आर्ग्युमेंट के तौर पर इस्तेमाल करें.
  • डाउनलोड:
    • प्रोग्रेसिव स्ट्रीम के लिए, कुछ हिस्सा डाउनलोड करने की सुविधा जोड़ी गई. ऐप्लिकेशन, DownloadHelper की मदद से प्रोग्रेसिव स्ट्रीम तैयार कर सकते हैं. साथ ही, हेल्पर से DownloadRequest का अनुरोध कर सकते हैं. इसके लिए, उन्हें समय के हिसाब से मीडिया के शुरू और खत्म होने की ऐसी पोज़िशन बतानी होगी जिसे डाउनलोड में शामिल किया जाना चाहिए. जवाब में मिले DownloadRequest में, बाइट की हल की गई रेंज होती है. इसकी मदद से, ProgressiveDownloader बनाया जा सकता है और उससे जुड़ा कॉन्टेंट डाउनलोड किया जा सकता है.
    • DownloadHelper.Factory जोड़ा गया है. इससे स्टैटिक DownloadHelper.forMediaItem() तरीकों को बदला जा सकता है.
    • SegmentDownloader लागू करने के लिए, Factory जोड़ें.
    • अडैप्टिव स्ट्रीम के लिए, कुछ हिस्सा डाउनलोड करने की सुविधा जोड़ी गई. ऐप्लिकेशन, DownloadHelper की मदद से अडैप्टिव स्ट्रीम तैयार कर सकते हैं. साथ ही, हेल्पर से DownloadHelper का अनुरोध कर सकते हैं. इसके लिए, उन्हें मीडिया के शुरू और खत्म होने की समयसीमा बतानी होगी, ताकि डाउनलोड में वह हिस्सा शामिल किया जा सके.DownloadRequest जवाब में मिले DownloadRequest में, समयसीमा की जानकारी होती है. इससे SegmentDownloader बनाया जा सकता है. साथ ही, इससे जुड़ा कॉन्टेंट डाउनलोड किया जा सकता है.
  • Cronet एक्सटेंशन:
    • कुकी को अपने-आप मैनेज करने की सुविधा जोड़ी गई है (#5975).
  • एचएलएस एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें बफ़र में कोई भी हिस्सा उपलब्ध न होने पर, HlsSampleStreamWrapper बफ़र में खोजने की कोशिश करता है #2598.
    • उस बग को ठीक किया गया है जिसमें कम समय में लोड होने वाले हिस्सों को लोड करने के बाद, ट्रैक का चुनाव बदल जाता था. साथ ही, प्रीलोड करने के सुझावों की वजह से वीडियो रुक जाता था या फ़्रीज़ हो जाता था (#2299).
    • जब सर्वर CAN-BLOCK-RELOAD=YES का पालन नहीं करता है, तब टारगेट अवधि के आधे समय तक इंतज़ार करके, बार-बार रीलोड होने से रोकें (#2317).
    • उस बग को ठीक किया गया है जिसकी वजह से, मिड रोल से पहले इंटरस्टीशियल स्ट्रीम शुरू करने पर वीडियो रुक जाता था. साथ ही, गलत विज्ञापन के लिए ऐसेट की सूची का रिज़ॉल्यूशन तय करने की कोशिश की जाती थी (#2558).
    • कोट की गई स्ट्रिंग एट्रिब्यूट वैल्यू में \f (फ़ॉर्म फ़ीड) को स्वीकार करने के लिए, प्लेलिस्ट पार्सिंग की समस्या ठीक की गई है (#2420).
    • एक ही आईडी वाले इंटरस्टीशियल अपडेट करने की सुविधा जोड़ी गई है (#2427).
    • उस गड़बड़ी को ठीक किया गया है जिसमें कभी-कभी लाइव स्ट्रीम के लोड होने के लिए सेगमेंट खत्म हो जाने के बाद, प्लेलिस्ट लोड होने से जुड़ी गड़बड़ियों की जानकारी नहीं मिलती है (#2401https://github.com/androidx/media/issues/2401).
    • सबटाइटल रेंडरिंग को NAME टैग के हिसाब से ग्रुप करें. ठीक उसी तरह जैसे ऑडियो रेंडरिंग को पहले से ही ग्रुप किया जाता है (#1666).
    • HlsInterstitialsAdsLoader के साथ X-ASSET-LIST और लाइव स्ट्रीम की सुविधा काम करती है.
  • डैश एक्सटेंशन:
    • उस समस्या को ठीक किया गया है जिसमें ट्रिक-प्ले अडैप्टेशन सेट को उसके मुख्य अडैप्टेशन सेट के साथ मर्ज कर दिया जाता है, ताकि अमान्य TrackGroup बनाया जा सके (#2148).
    • उस बग को ठीक किया गया है जिसकी वजह से, DASH की अवधि कम करने पर अपवाद दिख सकता है. ऐसा तब होता है, जब नई अवधि से ज़्यादा सैंपल को रेंडरिंग पाइपलाइन पहले ही पढ़ चुकी हो (#2440).
    • उस बग को ठीक किया गया है जिसमें सीएमसीडी क्वेरी पैरामीटर का इस्तेमाल करने पर, रीडायरेक्ट को फ़ॉलो नहीं किया जाता था (#2475).
  • आरटीएसपी एक्सटेंशन:
    • आरएफ़सी 7798#4.4.2 (#2413) के मुताबिक, H265 के लिए आरटीपी एग्रीगेशन पैकेट की सुविधा जोड़ी गई है.
    • HTTP 302 रिस्पॉन्स को प्रोसेस करते समय, जगह की जानकारी वाले यूआरआई का इस्तेमाल करने के लिए RtspClient को ठीक किया गया है (#2398).
    • SessionDescriptions के लिए पार्सिंग की सुविधा जोड़ी गई है. इनमें ऐसी लाइनें शामिल होती हैं जिनमें ट्रेलिंग व्हाइटस्पेस वर्ण होते हैं (#2357).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
    • उस गड़बड़ी को ठीक किया गया है जिसमें ऑडियो डिकोडर एक्सटेंशन के लिए DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange का कोई असर नहीं होता (#2258).
  • कास्ट एक्सटेंशन:
    • setVolume() और getVolume() के लिए सहायता जोड़ी गई है (#2279).
    • टाइमलाइन खाली होने पर, CastPlayer को STATE_BUFFERING में जाने से रोकें.
    • getDeviceVolume(), setDeviceVolume(), getDeviceMuted(), और setDeviceMuted() के लिए सहायता जोड़ी गई है (#2089).
  • टेस्ट यूटिलिटी:
    • खिलाड़ी को किसी तय पोज़िशन तक आगे बढ़ाने के लिए, TestPlayerRunHelper में advance(player).untilPositionAtLeast और untilMediaItemIndex जोड़ें. ज़्यादातर मामलों में, ये तरीके मौजूदा untilPosition और untilStartOfMediaItem तरीकों से ज़्यादा भरोसेमंद होते हैं.
    • FakeDownloader को test-utils-robolectric मॉड्यूल में ले जाएं, ताकि इसका इस्तेमाल अन्य टेस्ट में किया जा सके.
    • transformer.TestUtil.addAudioDecoders(String...), transformer.TestUtil.addAudioEncoders(String...), और transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...) को हटा दिया गया है. इसके बजाय, शैडो एनकोडर और डिकोडर को कॉन्फ़िगर करने के लिए, ShadowMediaCodecConfig का इस्तेमाल करें.
    • ShadowMediaCodecConfig ने कोडेक के जिन नामों की जानकारी दी है उनमें "exotest" प्रीफ़िक्स की जगह "media3" प्रीफ़िक्स का इस्तेमाल किया गया है.
  • हटाए गए सिंबल हटाएं:
    • बंद किए गए SegmentDownloader कंस्ट्रक्टर SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) और इसकी सबक्लास में मौजूद कंस्ट्रक्टर DashDownloader, HlsDownloader, और SsDownloader को हटा दिया गया है.
    • अब काम न करने वाले Player.hasNext(), Player.hasNextWindow() को हटाया गया. इसके बजाय, Player.hasNextMediaItem() का इस्तेमाल करें.
    • अब सेवा में नहीं रहे Player.next() को हटाया गया. इसके बजाय, Player.seekToNextMediaItem() का इस्तेमाल करें.
    • अब सेवा में नहीं रहे Player.seekToPreviousWindow() को हटाया गया. इसके बजाय, Player.seekToPreviousMediaItem() का इस्तेमाल करें.
    • अब काम न करने वाले Player.seekToNextWindow() को हटाया गया. इसके बजाय, Player.seekToNextMediaItem() का इस्तेमाल करें.
    • exoplayer मॉड्यूल में, बंद किए गए BaseAudioProcessor को हटाया गया. common मॉड्यूल में जाकर, BaseAudioProcessor का इस्तेमाल करें.
    • अब इस्तेमाल में नहीं है, इसलिए MediaCodecVideoRenderer कंस्ट्रक्टर MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider) को हटाएं.

वर्शन 1.8.0-rc02

24 जुलाई, 2025

1.8.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.8.0-rc01

16 जुलाई, 2025

1.8.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.8.0-beta01

2 जुलाई, 2025

1.8.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.8.0-alpha01

19 मई, 2025

1.8.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.7.0

वर्शन 1.7.1

16 मई, 2025

इस रिलीज़ में वही कोड है जो 1.6.1 में है. इसे इसलिए रिलीज़ किया जा रहा है, ताकि यह 1.7.0 से 'नया' रिलीज़ दिखे. 1.7.0, गलती से स्टेबल वर्शन के तौर पर टैग की गई ऐल्फ़ा रिलीज़ थी (नीचे देखें).

वर्शन 1.7.0

16 मई, 2025

यह रिलीज़ 1.7.0-alpha01 होनी चाहिए थी, लेकिन गलती से इसे maven.google.com पर 1.7.0 (यानी कि स्टेबल) के तौर पर टैग कर दिया गया था. कृपया इसका इस्तेमाल न करें. 1.6.1 पर बने रहें या 1.7.1 पर अपग्रेड करें. 1.7.1 में वही कोड है जो 1.6.1 में है.

वर्शन 1.6.0

1.6.1

14 अप्रैल, 2025

androidx.media3:media3-*:1.6.1 रिलीज़ हो गया है. वर्शन 1.6.1 में ये बदलाव शामिल हैं.

  • कॉमन लाइब्रेरी:
    • नई pitch वैल्यू के साथ PlaybackParameters को आसानी से कॉपी करने के लिए, PlaybackParameters.withPitch(float) तरीका जोड़ें (#2257).
  • ExoPlayer:
    • उस समस्या को ठीक किया गया है जिसमें अगले मीडिया आइटम को शुरू करते समय, रेंडरर से जुड़ी ऐसी गड़बड़ी होती है जिसे ठीक किया जा सकता है. इस वजह से, मीडिया आइटम का ट्रांज़िशन नहीं हो पाता (#2229).
    • उस समस्या को ठीक किया गया है जिसमें ProgressiveMediaPeriod, IllegalStateException दिखाता है. ऐसा तब होता है, जब PreloadMediaSource, getBufferedDurationUs() को कॉल करने की कोशिश करता है, जबकि getBufferedDurationUs() तैयार नहीं होता (#2315).
    • DASH, HLS, और SmoothStreaming के लिए, मेनिफ़ेस्ट अनुरोधों में CmcdData भेजने की समस्या ठीक की गई (#2253).
    • पक्का करें कि विज्ञापन ग्रुप हटाए जाने के बाद भी AdPlaybackState.withAdDurationsUs(long[][]) का इस्तेमाल किया जा सके. उपयोगकर्ता को अब भी हटाए गए विज्ञापन ग्रुप के लिए, अवधि का एक कलेक्शन पास करना होगा. यह कलेक्शन खाली या शून्य हो सकता है (#2267).
  • डेटा निकालने वाले टूल:
    • MP4: tkhd बॉक्स से alternate_group को पार्स करें और इसे हर ट्रैक के Format.metadata में Mp4AlternateGroupData एंट्री के तौर पर दिखाएं (#2242).
  • ऑडियो:
    • ऑफ़लोड करने से जुड़ी समस्या को ठीक किया गया है. इस समस्या में, छोटे वीडियो की प्लेलिस्ट चलाते समय वीडियो की पोज़िशन अटक जाती थी (#1920).
  • सेशन:
    • प्लैटफ़ॉर्म MediaSession के कॉलबैक के लिए एग्रीगेशन टाइमआउट को 500 से घटाकर 100 मिलीसेकंड कर दिया गया है. साथ ही, एक एक्सपेरिमेंटल सेटर जोड़ा गया है, ताकि ऐप्लिकेशन इस वैल्यू को कॉन्फ़िगर कर सकें.
    • उस समस्या को ठीक किया गया है जिसमें सूचनाएं खारिज करने के बाद भी फिर से दिखने लगती हैं (#2302).
    • उस गड़बड़ी को ठीक किया गया है जिसमें सेशन, एक आइटम वाली टाइमलाइन दिखाता था. ऐसा तब होता था, जब रैप किया गया प्लेयर खाली होता था. ऐसा तब होता है, जब रैप किए गए प्लेयर में COMMAND_GET_TIMELINE उपलब्ध नहीं होता है, जबकि COMMAND_GET_CURRENT_MEDIA_ITEM उपलब्ध होता है और रैप किया गया प्लेयर खाली होता है (#2320).
    • ऐसी गड़बड़ी को ठीक किया गया है जिसमें सेवा के साथ अन्य इंटरैक्शन के बाद, MediaSessionService.setMediaNotificationProvider को कॉल करने पर कोई जवाब नहीं मिलता है. जैसे, setForegroundServiceTimeoutMs (#2305).
  • यूआई:
    • ExoPlayer.setVideoEffects और CompositionPlayer के साथ काम करने के लिए, PlayerSurface को चालू करें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें Player को नए Player के साथ फिर से नहीं बनाया जा सकता.PlayerSurface
  • एचएलएस एक्सटेंशन:
    • एचएलएस मीडिया के लिए CmcdData में चंक की अवधि सेट न होने की समस्या को ठीक किया गया है. इसकी वजह से, एन्क्रिप्ट (सुरक्षित) किए गए मीडिया सेगमेंट को प्रोसेस करते समय पुष्टि करने में गड़बड़ी होती थी (#2312).
  • आरटीएसपी एक्सटेंशन:
    • टीसीपी का इस्तेमाल करने के लिए, आरटीएसपी सेशन को कॉन्फ़िगर करने के तरीके के तौर पर, आरटीएसपीटी स्कीम के साथ यूआरआई के लिए सहायता जोड़ी गई है (#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 की डिफ़ॉल्ट वैल्यू को घटाकर, क्रमशः 1000 और 2000 मि॰से॰ करें.
    • DeviceInfo और डिवाइस के वॉल्यूम को एसिंक्रोनस तरीके से शुरू करें. ऐसा तब करें, जब setDeviceVolumeControlEnabled का इस्तेमाल करके इसे चालू किया गया हो. ExoPlayer.Builder.build() के बाद, ये वैल्यू तुरंत उपलब्ध नहीं होती हैं. साथ ही, Player.Listener, onDeviceInfoChanged और onDeviceVolumeChanged के ज़रिए बदलावों के बारे में सूचना देता है.
    • प्लेयर बनाने के बाद, शुरुआती ऑडियो सेशन आईडी तुरंत उपलब्ध नहीं होता. अगर ज़रूरी हो, तो शुरुआती अपडेट सुनने के लिए AnalyticsListener.onAudioSessionIdChanged का इस्तेमाल किया जा सकता है.
    • वीडियो ट्रैक चुनते समय, भाषा का ध्यान रखें. डिफ़ॉल्ट रूप से, 'मुख्य' वीडियो ट्रैक चुनें. यह ट्रैक, चुने गए ऑडियो ट्रैक की भाषा से मेल खाता हो. हालांकि, ऐसा तब ही होगा, जब यह ट्रैक उपलब्ध हो. वीडियो के लिए, अश्लील भाषा से जुड़ी प्राथमिकताएं TrackSelectionParameters.Builder.setPreferredVideoLanguage(s) के साथ दिखाई जा सकती हैं.
    • selectedAudioLanguage पैरामीटर को DefaultTrackSelector.selectVideoTrack() तरीके में जोड़ा गया.
    • MediaSourceEventListener.onLoadStarted और उससे जुड़े MediaSourceEventListener.EventDispatcher तरीकों में retryCount पैरामीटर जोड़ा गया.
    • उस बग को ठीक किया गया है जिसकी वजह से, मल्टी-पीरियड डैश स्ट्रीम में प्लेलिस्ट आइटम या ऐसे पीरियड जिनमें कॉन्टेंट की अवधि, असल कॉन्टेंट से मेल नहीं खाती है, उनकी वजह से आइटम के आखिर में फ़्रेम फ़्रीज़ हो जाते थे (#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 API की मदद से चालू करें.
    • हमने एक्सपेरिमेंट के तौर पर ExoPlayer एपीआई जोड़ा है. इससे, उन डिकोडर इनपुट बफ़र को हटाया जा सकेगा जिन पर कोई निर्भर नहीं है.MediaCodecVideoRenderer इसे DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs की मदद से चालू करें. * उस समस्या को ठीक किया गया है जिसमें बिना किसी सरफेस वाला प्लेयर तुरंत तैयार हो जाता था. साथ ही, वह किसी भी लंबित फ़्रेम को बहुत धीरे-धीरे डिकोड करता था (#1973).
    • Xiaomi और OPPO डिवाइसों को डिटैच किए गए सर्फ़ेस मोड से बाहर रखें, ताकि स्क्रीन फ़्लिकर होने की समस्या से बचा जा सके (#2059).
  • टेक्स्ट:
    • VobSub सबटाइटल के लिए सहायता जोड़ी गई है (#8260).
    • MediaItem.Builder.setSubtitleConfigurations के साथ कॉन्फ़िगर की गई सभी सबटाइटल फ़ाइलों को तुरंत लोड करना बंद करें. इसके बजाय, अगर ट्रैक चुनने की सुविधा (#1721) से कोई फ़ाइल चुनी जाती है, तो सिर्फ़ उसे लोड करें.
    • TTML: style का इस्तेमाल करके, tts:origin और tts:extent को रेफ़र करने की सुविधा जोड़ी गई (#2953).
    • WebVTT और SubRip फ़ॉर्मैट में टाइमस्टैंप को सिर्फ़ तीन दशमलव स्थानों तक सीमित करें. पहले, हम दशमलव के बाद के अंकों की किसी भी संख्या को गलत तरीके से पार्स करते थे. हालांकि, हम हमेशा यह मानते थे कि वैल्यू मिलीसेकंड में है. इससे टाइमस्टैंप गलत हो जाते थे (#1997).
    • जब किसी प्लेलिस्ट में CEA-608 या CEA-708 कैप्शन वाले क्लिप किए गए आइटम मौजूद हों, तो वीडियो चलाने के दौरान होने वाली समस्या को ठीक किया गया है.
    • एसएसए फ़ाइल में ऐसे क्यू के लिए IllegalStateException ठीक किया गया है जिसकी अवधि शून्य है. इसका मतलब है कि शुरू और खत्म होने का समय एक जैसा है (#2052).
    • जब सबटाइटल को ऑडियो और वीडियो के साथ एक ही कंटेनर में मक्स किया जाता है, तब सबटाइटल पार्स करने से जुड़ी गड़बड़ियों को छिपाता है और उन्हें लॉग करता है (#2052).
    • CR लाइन एंडिंग (#2167) का इस्तेमाल करके, WebVTT फ़ाइलों में मल्टी-बाइट UTF-8 वर्णों को मैनेज करने की समस्या ठीक की गई.
  • DRM:
    • एपीआई < 27 वाले डिवाइसों पर ClearKey कॉन्टेंट चलाने के दौरान, MediaCodec$CryptoException: Operation not supported in this configuration गड़बड़ी ठीक की गई है (#1732).
  • असर:
    • OverlaySettings की सुविधा को StaticOverlaySettings में ले जाया गया. OverlaySettings को सबक्लास किया जा सकता है, ताकि डाइनैमिक ओवरले सेटिंग की अनुमति दी जा सके.
  • Muxers:
    • MuxerException को Muxer इंटरफ़ेस से हटा दिया गया है, ताकि पूरी तरह से क्वालिफ़ाइड नाम बहुत लंबा न हो.
    • Mp4Muxer.Builder और FragmentedMp4Muxer.Builder, दोनों में setSampleCopyEnabled() तरीके का नाम बदलकर setSampleCopyingEnabled() कर दिया गया है.
    • Mp4Muxer.addTrack() और FragmentedMp4Muxer.addTrack() अब TrackToken के बजाय int ट्रैक आईडी दिखाते हैं.
    • Mp4Muxer और FragmentedMp4Muxer अब Muxer इंटरफ़ेस लागू नहीं करते.
    • Mp4Muxer सैंपल बैचिंग और कॉपी करने की सुविधा को डिफ़ॉल्ट रूप से बंद करें.
    • FragmentedMp4Muxer में मौजूद उस बग को ठीक करो जिसकी वजह से, सिर्फ़ ऑडियो ट्रैक लिखने पर कई फ़्रैगमेंट बन जाते हैं.
  • सेशन:
    • जब वीडियो चलाने की सुविधा रुक जाती है, बंद हो जाती है या काम नहीं करती है, तो फ़ोरग्राउंड सेवा की स्थिति को 10 मिनट तक बनाए रखें. इससे उपयोगकर्ता, इस टाइमआउट के दौरान वीडियो चलाना फिर से शुरू कर सकते हैं. साथ ही, उन्हें अलग-अलग डिवाइसों पर फ़ोरग्राउंड सेवा से जुड़ी पाबंदियों का सामना नहीं करना पड़ता. ध्यान दें कि onTaskRemoved को बदलने से पहले, फ़ोरग्राउंड सेवा को रोकने के लिए अब सिर्फ़ player.pause() का इस्तेमाल नहीं किया जा सकता. इसके बजाय, MediaSessionService.pauseAllPlayersAndStopSelf() का इस्तेमाल करें.stopSelf()
    • वीडियो चलाने के दौरान कोई गड़बड़ी होने या वीडियो रुक जाने पर, सूचना को दिखता रहने दें. सूचना सिर्फ़ तब हटाई जाती है, जब प्लेलिस्ट से सभी गाने हटा दिए जाते हैं या प्लेयर को बंद कर दिया जाता है.
    • Android प्लैटफ़ॉर्म पर MediaSession की कार्रवाइयों ACTION_PLAY और ACTION_PAUSE को बेहतर तरीके से हैंडल किया गया है. इससे उपलब्ध कमांड के हिसाब से, इनमें से सिर्फ़ एक कार्रवाई सेट की जा सकती है. साथ ही, अगर इनमें से सिर्फ़ एक कार्रवाई सेट की गई है, तो उसे स्वीकार किया जा सकता है.
    • MediaButtonReceiver.shouldStartForegroundService में Context को पैरामीटर के तौर पर जोड़ा गया MediaButtonReceiver.shouldStartForegroundService (#1887).
    • उस बग को ठीक किया गया है जिसमें लेगसी सेशन से कनेक्ट किए गए MediaController पर Player तरीके को कॉल करने पर, अपडेट होने वाले बदलाव हट जाते थे.
    • MediaSession.setSessionActivity(PendingIntent) में null वैल्यू स्वीकार करने की सुविधा जोड़ें (#2109).
    • उस गड़बड़ी को ठीक किया गया है जिसमें प्लेलिस्ट खाली होने पर भी पुरानी सूचना दिखती रहती थी (#2211).
  • यूआई:
    • media3-ui-compose मॉड्यूल में स्टेट होल्डर और कंपोज़ेबल जोड़ें. ऐसा PlayerSurface, PresentationState, PlayPauseButtonState, NextButtonState, PreviousButtonState, RepeatButtonState, ShuffleButtonState, और PlaybackSpeedState के लिए करें.
  • डाउनलोड:
    • CacheWriter में मौजूद उस बग को ठीक किया गया है जिसकी वजह से, डेटा सोर्स खुले रहते हैं और कैश मेमोरी वाले एरिया लॉक हो जाते हैं. ऐसा तब होता है, जब डेटा सोर्स, IOException (#9760) के अलावा कोई दूसरा Exception दिखाता है.
  • एचएलएस एक्सटेंशन:
    • HlsInterstitialsAdsLoader का पहला वर्शन जोड़ें. विज्ञापन लोडर, एचएलएस मीडिया प्लेलिस्ट के एचएलएस इंटरस्टीशियल विज्ञापन पढ़ता है और उन्हें AdPlaybackState पर मैप करता है. यह 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 में प्लंब करें.
  • कास्ट एक्सटेंशन:
    • Google Play services इंस्टॉल किए गए, लेकिन बंद किए गए डिवाइसों पर, एपीआई 34 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन में FLAG_MUTABLE क्रैश होने की समस्या को ठीक करने के लिए, play-services-cast-framework डिपेंडेंसी को 21.5.0 पर अपडेट किया गया है (#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.Builder.setRemoveAudio() का इस्तेमाल करके, Transformer.start() को पास किए गए EditedMediaItem से ऑडियो हटाएं.
      • 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: अगर किसी फ़ाइल में मौजूद MP3 डेटा, VBRI फ़्रेम की विषय सूची में शामिल नहीं है, तो उसे जल्दी बंद न करें (#1904).
  • वीडियो:
    • MediaCodecAdapter की प्रोसेसिंग के दौरान, पिक्सल के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की MediaCodecAdapter वैल्यू इस्तेमाल करने की सुविधा को वापस लाया गया है (#1371).onOutputFormatChanged
  • टेक्स्ट:
    • ReplacingCuesResolver.discardCuesBeforeTimeUs में मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, timeUs पर चालू हुआ क्यू (पहले शुरू हुआ, लेकिन अभी खत्म नहीं हुआ) गलत तरीके से खारिज कर दिया गया था (#1939).
  • मेटाडेटा:
    • Vorbis टिप्पणियों से डिस्क/ट्रैक नंबर और शैली की जानकारी को MediaMetadata में एक्सट्रैक्ट करें (#1958).

वर्शन 1.5.0

27 नवंबर, 2024

androidx.media3:media3-*:1.5.0 रिलीज़ हो गया है. वर्शन 1.5.0 में ये बदलाव शामिल हैं.

  • कॉमन लाइब्रेरी:
    • ForwardingSimpleBasePlayer जोड़ें. इससे, छोटे-मोटे बदलावों के साथ किसी दूसरे प्लेयर पर फ़ॉरवर्ड किया जा सकेगा. साथ ही, यह पक्का किया जा सकेगा कि पूरी तरह से एक जैसा कॉन्टेंट हो और लिसनर को हैंडल किया जा सके (#1183).
    • SimpleBasePlayer.State.playlist को getPlaylist() तरीके से बदलें.
    • प्लेलिस्ट का स्ट्रक्चर बनाने के बजाय, SimpleBasePlayer.State.Builder.setPlaylist() के लिए ओवरराइड जोड़ें, ताकि सीधे तौर पर Timeline और मौजूदा Tracks और Metadata की जानकारी दी जा सके.
    • minSdk को 21 (Android Lollipop) पर सेट करें. यह अन्य सभी AndroidX लाइब्रेरी के साथ काम करती है.
    • androidx.media3:media3-common-ktx आर्टफ़ैक्ट जोड़ें. यह Common library के ऊपर बनाया गया है और Kotlin के लिए खास फ़ंक्शन उपलब्ध कराता है
    • media3-common-ktx लाइब्रेरी में Player.Events को सुनने के लिए, कोरूटीन को स्पिन करने के लिए Player.listen सस्पेंडिंग एक्सटेंशन फ़ंक्शन जोड़ें.
    • रनटाइम क्लास की पुष्टि करने में होने वाली गड़बड़ियों से बचने के लिए, मैन्युअल तरीके से बनाई गई इनर क्लास से @DoNotInline एनोटेशन हटाएं. R8 के नए वर्शन में, अब इस तरह के आउट-ऑफ़-लाइन कॉल अपने-आप बंद हो जाते हैं, ताकि रनटाइम में होने वाली गड़बड़ियों से बचा जा सके. इसलिए, अब मैन्युअल तरीके से आउट-ऑफ़-लाइनिंग करने की ज़रूरत नहीं है. लाइब्रेरी का इस्तेमाल करने वाले सभी Gradle उपयोगकर्ताओं को, Android Gradle प्लगिन के ऐसे वर्शन का इस्तेमाल करना होगा जो R8 के ऐसे वर्शन का इस्तेमाल करता हो जो ऐसा करता है. इसकी वजह compileSdk = 35 है. नॉन-Gradle बिल्ड सिस्टम का इस्तेमाल करने वाले उपयोगकर्ताओं को यह पक्का करना होगा कि R8 के बराबर की उनकी श्रिंकिंग/ऑब्फ़स्केटिंग प्रोसेस, रनटाइम क्लास की पुष्टि करने में होने वाली गड़बड़ियों से बचने के लिए, मिलती-जुलती ऑटोमैटिक आउट-ऑफ़-लाइनिंग प्रोसेस करती हो. यह बदलाव AndroidX की अन्य लाइब्रेरी में पहले ही किया जा चुका है.
  • ExoPlayer:
    • अब हर मीडिया आइटम के लिए MediaCodecRenderer.onProcessedStreamChange() को कॉल किया जा सकता है. पहले, पहले वाले के लिए इसे कॉल नहीं किया जाता था. इसे चालू करने के लिए, MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart() का इस्तेमाल करें.
    • PreloadMediaSource.PreloadControl.onPreloadError जोड़ें, ताकि PreloadMediaSource.PreloadControl लागू करने वाले लोग गड़बड़ी होने पर कार्रवाई कर सकें.
    • ऐप्लिकेशन में प्रीलोड इवेंट भेजने के लिए, BasePreloadManager.Listener जोड़ें.
    • एसएनटीपी क्लाइंट के टाइमआउट को बदलने और टाइमआउट होने पर अन्य पतों को फिर से आज़माने की अनुमति दें (#1540).
    • MediaCodecAdapter.Configuration.flags को हटा दिया गया है, क्योंकि यह फ़ील्ड हमेशा शून्य था.
    • इस कुकी से उपयोगकर्ता को Wear OS के एपीआई 35 या इसके बाद के वर्शन पर, पहले से मौजूद स्पीकर से प्लेबैक करने की सुविधा मिलती है. हालांकि, यह सुविधा सिर्फ़ उन डिवाइसों पर उपलब्ध होती है जिन पर यह काम करती है.
    • ऑडियो फ़ोकस मैनेज करने की सुविधा चालू होने तक, Context.getSystemService(Context.AUDIO_SERVICE) को कॉल ब्लॉक करने का अनुरोध न भेजें. इससे यह पक्का होता है कि अगर ऑडियो फ़ोकस हैंडलिंग की सुविधा चालू नहीं है, तो कॉल ब्लॉक नहीं किया जाएगा (#1616).
    • लोडिंग में गड़बड़ी होने पर, बफ़र किए गए कॉन्टेंट की अवधि के बावजूद, वीडियो चलाने की अनुमति दें (#1571).
    • AnalyticsListener.onRendererReadyChanged() जोड़ें, ताकि यह पता चल सके कि कब अलग-अलग रेंडरर, वीडियो चलाने की अनुमति देते हैं.
    • MediaCodec को एसिंक्रोनस मोड में चलाने पर, कभी-कभी MediaCodec.CryptoException को "अनपेक्षित रनटाइम गड़बड़ी" के तौर पर रिपोर्ट किया जाता है. इस समस्या को ठीक किया गया है. एसिंक्रोनस मोड, API 31 और इसके बाद के वर्शन पर डिफ़ॉल्ट रूप से काम करता है.
    • PreloadMediaSource.PreloadControl.onContinueLoadingRequested() के साथ, bufferedPositionUs के बजाय bufferedDurationUs पास करें. इसके अलावा, DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS को DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS में बदलता है. इसके बाद, ऐप्लिकेशन को डिफ़ॉल्ट शुरुआती पोज़िशन से एक खास अवधि को दिखाने वाली वैल्यू पास करनी होगी. इस अवधि के लिए, मीडिया सोर्स को इस IntDef के साथ प्रीलोड करना होगा, न कि किसी पोज़िशन के साथ.
    • ForwardingRenderer को लागू किया गया है. इससे सभी तरीके के कॉल, दूसरे रेंडरर (1703) पर फ़ॉरवर्ड किए जाते हैं.
    • प्लेलिस्ट में मौजूद अगले आइटम के लिए, प्लेलिस्ट प्रीलोड करने की सुविधा जोड़ें. ऐप्लिकेशन, ExoPlayer.setPreloadConfiguration(PreloadConfiguration) को कॉल करके, पेजों को पहले से लोड करने की सुविधा चालू कर सकते हैं. पहले से लोड करने की सुविधा डिफ़ॉल्ट रूप से बंद होती है. जब इस सुविधा के लिए ऑप्ट-इन किया जाता है, तब DefaultLoadControl प्रीलोडिंग को इस तरह से सीमित करता है कि वीडियो चलाने में कोई रुकावट न आए. यह सुविधा, वीडियो चलाने के लिए प्लेयर लोड न होने पर ही शुरू होती है और जारी रहती है. ऐप्लिकेशन, LoadControl.shouldContinuePreloading() को लागू करके इस व्यवहार को बदल सकते हैं. जैसे, DefaultLoadControl में इस तरीके को बदलते समय. अगर कोई ऐप्लिकेशन, LoadControl के कस्टम वर्शन का इस्तेमाल कर रहा है, तो LoadControl का डिफ़ॉल्ट वर्शन, प्रीलोडिंग की सुविधा बंद कर देता है.
    • सबक्लास लिसनर के इवेंट को चालू करने की अनुमति देने के लिए, MediaSourceEventListener.EventDispatcher.dispatchEvent() तरीके को जोड़ें (1736).
    • DefaultPreloadManager.Builder जोड़ें. यह DefaultPreloadManager और ExoPlayer इंस्टेंस बनाता है. इन इंस्टेंस में, कॉन्फ़िगरेशन एक जैसा होता है.
    • LoadControl.onTracksSelected() से Renderer[] पैरामीटर हटाएं, क्योंकि DefaultLoadControl लागू करने से ExoTrackSelection[] से स्ट्रीम टाइप वापस पाए जा सकते हैं.
    • DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) को बंद कर दिया गया है और इस तरीके को फ़ाइनल के तौर पर मार्क किया गया है, ताकि इसे बदला न जा सके. इसके बजाय, नए DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]) का इस्तेमाल किया जाना चाहिए.
    • MergingMediaSource में, सेकंडरी सोर्स से मिले MediaSourceEventListener इवेंट की रिपोर्ट करें. इससे साइडलोड किए गए सबटाइटल (MediaItem.LocalConfiguration.subtitleConfigurations की मदद से जोड़े गए सबटाइटल) के लिए, लोड स्टार्ट/गड़बड़ी/रद्द किया गया/पूरा हुआ इवेंट रिपोर्ट किए जाएंगे. ये AnalyticsListener से भेजे गए डुप्लीकेट लोड इवेंट के तौर पर दिख सकते हैं.
    • उपशीर्षक और मेटाडेटा से जुड़ी गड़बड़ियों की वजह से, वीडियो चलने में पूरी तरह से रुकावट आने से रोकें. इसके बजाय, समस्या वाले ट्रैक को बंद कर दिया जाता है और बाकी ट्रैक का प्लेबैक जारी रहता है (#1722).
      • नए सबटाइटल हैंडलिंग (एक्सट्रैक्शन के दौरान) में, पार्स करने से जुड़ी गड़बड़ियां (जैसे, अमान्य सबटाइटल डेटा) और लोड करने से जुड़ी गड़बड़ियां (जैसे, एचटीटीपी 404) onLoadError कॉलबैक के ज़रिए भेजी जाती हैं.
      • लेगसी सबटाइटल हैंडलिंग (रेंडरिंग के दौरान) में, सिर्फ़ लोड करने से जुड़ी गड़बड़ियों को onLoadError कॉलबैक के ज़रिए दिखाया जाता है. वहीं, पार्स करने से जुड़ी गड़बड़ियों को अनदेखा कर दिया जाता है. यह पहले से मौजूद व्यवहार है.
    • उस बग को ठीक किया गया है जिसकी वजह से, मल्टी-पीरियड डैश स्ट्रीम में प्लेलिस्ट आइटम या ऐसे पीरियड जिनमें कॉन्टेंट की अवधि, असल कॉन्टेंट से मेल नहीं खाती है, उनकी वजह से आइटम के आखिर में फ़्रेम फ़्रीज़ हो जाते थे (#1698).
    • SntpClient में एक सेटर जोड़ें, ताकि आखिरी अपडेट के बाद से गुज़रे हुए ज़्यादा से ज़्यादा समय को सेट किया जा सके. इसके बाद, क्लाइंट को फिर से शुरू किया जाता है (#1794).
  • ट्रांसफ़ॉर्मर:
    • SurfaceAssetLoader जोड़ें. यह Surface के ज़रिए, वीडियो डेटा को Transformer में भेजने की सुविधा देता है.
    • ImageAssetLoader, IllegalStateException दिखाने के बजाय, AssetLoader.onError के ज़रिए ऐसे इनपुट की शिकायत करता है जो काम नहीं करता.
    • इमेज एक्सपोर्ट करने के लिए, MediaItem.Builder.setImageDurationMs का इस्तेमाल करके इमेज की अवधि सेट करना ज़रूरी है.
    • ऑडियो के EditedMediaItems के क्रम में मौजूद अंतर के लिए, एक्सपोर्ट करने की सुविधा जोड़ी गई.
  • ट्रैक के विकल्प:
    • DefaultTrackSelector: जब अन्य फ़ैक्टर एक जैसे हों, तो चैनल आधारित ऑडियो के बजाय ऑब्जेक्ट आधारित ऑडियो को प्राथमिकता दें.
  • डेटा निकालने वाले टूल:
    • Mp4Extractor और FragmentedMp4Extractor को ऐसे H264 सैंपल की पहचान करने की अनुमति दें जिन्हें बाद के सैंपल में रेफ़रंस के तौर पर इस्तेमाल नहीं किया जाता.
    • AmrExtractor में, इंडेक्स के आधार पर वीडियो में आगे-पीछे जाने की सुविधा चालू करने का विकल्प जोड़ा गया.
    • मान्य फ़्रेम के बीच 128 केबी से ज़्यादा की MP3 फ़ाइलों को अमान्य के बजाय छोटा किया गया माना जाएगा. इसका मतलब है कि जिन फ़ाइलों के आखिर में MP3 फ़ॉर्मैट के अलावा किसी और फ़ॉर्मैट का डेटा होता है और जिनमें MP3 फ़ॉर्मैट के बाइट की लंबाई बताने वाला कोई अन्य मेटाडेटा नहीं होता है वे अब ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} (#1563) वाली गड़बड़ी के बजाय, MP3 फ़ॉर्मैट के डेटा के आखिर में बंद हो जाती हैं.
    • MP4 फ़ाइलों में बदलाव की सूचियां प्रोसेस करते समय, नॉन-कीफ़्रेम मीडिया की शुरुआती पोज़िशन के लिए, प्रीरोल सैंपल हैंडलिंग से जुड़ी समस्या ठीक की गई है (#1659).
    • mdhd में मौजूद Mp4Extractor और FragmentedMp4Extractor (#1531) में मीडिया की अवधि का इस्तेमाल करके, फ़्रेम रेट की बेहतर कैलकुलेशन की गई.
    • MP4 फ़ाइल की एडिट लिस्ट में, media_time की गलत स्केलिंग की समस्या ठीक की गई. मूवी के टाइमस्केल का इस्तेमाल करके, segment_duration को पहले ही सही तरीके से स्केल किया जा चुका था. हालांकि, अब ट्रैक के टाइमस्केल का इस्तेमाल करके, media_time को सही तरीके से स्केल किया गया है. ऐसा MP4 फ़ॉर्मैट के स्टैंडर्ड (#1792) के मुताबिक किया गया है.
    • MP4 फ़ाइल के लिए, endIndices की गिनती में, क्रम से बाहर के फ़्रेम को हैंडल किया गया. इसके लिए, editlist का इस्तेमाल किया गया (#1797).
    • MP4 फ़ाइलों के mdhd बॉक्स में मीडिया की अवधि पार्स करने की समस्या ठीक की गई है, ताकि -1 वैल्यू को हैंडल किया जा सके (#1819).
    • H.263 वीडियो के लिए, MP4 फ़ाइलों में h263 बॉक्स की पहचान करने की सुविधा जोड़ी गई है (#1821).
    • AC-4 Level-4 ISO बेस मीडिया फ़ाइल फ़ॉर्मैट के लिए सहायता जोड़ी गई (#1265).
  • DataSource:
    • HttpEngineDataSource को अपडेट किया गया है, ताकि इसका इस्तेमाल एपीआई लेवल 34 के बजाय S extension 7 से किया जा सके (#1262).
    • DataSourceContractTest: पुष्टि करें कि DataSource.getUri(), हल किया गया यूआरआई दिखाता है, जैसा कि दस्तावेज़ में बताया गया है. अगर यह अनुरोध किए गए यूआरआई से अलग है, तो टेस्ट में DataSourceContractTest.TestResource.Builder.setResolvedUri() वाले नए तरीके का इस्तेमाल करके यह जानकारी दी जा सकती है.
    • DataSourceContractTest: पुष्टि करें कि DataSource.getUri() और getResponseHeaders(), open() को कॉल करने पर 'नहीं मिला' रिसॉर्स की वजह से कॉल पूरा न होने के बाद और close() को कॉल करने से पहले, 'खुला है' वैल्यू दिखाते हैं.
      • DataSourceContractTest.getNotFoundResources() को बदलने की सुविधा की मदद से, टेस्ट सब-क्लास कई 'नहीं मिला' संसाधन उपलब्ध करा सकते हैं. साथ ही, वे उम्मीद के मुताबिक हेडर भी उपलब्ध करा सकते हैं. इससे, हेडर के साथ HTTP 404 और "सर्वर नहीं मिला" (कोई हेडर नहीं) के बीच अंतर किया जा सकता है.
  • ऑडियो:
    • अगर मीडिया में मौजूद है, तो कोडेक पर CTA-2075 के लाउडनेस मेटाडेटा को अपने-आप कॉन्फ़िगर करता है.
    • वीडियो में आगे-पीछे जाते समय, आवाज़ धीरे-धीरे कम होनी चाहिए.
    • सीखने के दौरान होने वाली पॉप की आवाज़ की समस्या ठीक की गई.
    • Sonic के टाइम-स्ट्रेचिंग/पिच-शिफ़्टिंग एल्गोरिदम के लिए, ट्रंकेशन की गड़बड़ी को ठीक किया गया.
    • SpeedChangingAudioProcessor में मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से आउटपुट फ़्रेम ड्रॉप हो जाते थे.
  • वीडियो:
    • MediaCodecVideoRenderer ऐसे सैंपल को डिकोड करने से बचता है जिन्हें न तो रेंडर किया जाता है और न ही अन्य सैंपल के रेफ़रंस के तौर पर इस्तेमाल किया जाता है.
    • एपीआई 35 और इसके बाद के वर्शन पर, MediaCodecAdapter को अब configure में null Surface मिल सकता है. साथ ही, अगर कोडेक इसका समर्थन करता है, तो पहले से सेट किए गए Surface को हटाने के लिए, नए तरीके detachOutputSurface को कॉल किया जा सकता है (MediaCodecInfo.detachedSurfaceSupported).
    • onOutputFormatChanged को प्रोसेस करते समय, अगर पिक्सल के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की वैल्यू दी गई हैं, तो MediaCodecAdapter उनका इस्तेमाल करें (#1371).
    • 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 टाइप असाइन करें.
  • इमेज:
    • Glide या Coil जैसी इमेज लोड करने वाली बाहरी लाइब्रेरी के साथ इंटिग्रेशन को आसान बनाने के लिए, ExternallyLoadedImageDecoder जोड़ें.
  • DataSource:
    • FileDescriptorDataSource जोड़ें. यह एक नया DataSource है, जिसका इस्तेमाल FileDescriptor से डेटा पढ़ने के लिए किया जा सकता है (#3757).
  • असर:
    • नाबालिग SurfaceTexture के लिए, 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, दोनों के लिए उपलब्ध हैं. ब्राउज़ करने की कस्टम कार्रवाइयां लागू करना लेख पढ़ें. * उस बग को ठीक किया गया है जिसकी वजह से, 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
    • PlayerView में setFullscreenButtonState जोड़ें, ताकि फ़ुलस्क्रीन बटन के आइकॉन को ज़रूरत के हिसाब से अपडेट किया जा सके. इसका मतलब है कि आइकॉन को क्लिक इंटरैक्शन के हिसाब से अपडेट नहीं किया जाएगा, बल्कि आउट-ऑफ़-बैंड तरीके से अपडेट किया जाएगा (#1590, #184).
    • उस बग को ठीक किया गया है जिसमें ऐप्लिकेशन के हिसाब से टेक्स्ट ट्रैक चुनने की सेटिंग मौजूद होने पर, टेक्स्ट चुनने के विकल्प में "कोई नहीं" विकल्प काम नहीं करता था.
  • DASH एक्सटेंशन:
    • सेगमेंट के बीच से शुरू होने वाली अवधियों के लिए सहायता जोड़ी गई (#1440).
  • स्मूद स्ट्रीमिंग एक्सटेंशन:
    • टेक्स्ट ट्रैक के साथ SmoothStreaming स्ट्रीम चलाने पर, Bad magic number for Bundle गड़बड़ी को ठीक किया गया है (#1779).
  • आरटीएसपी एक्सटेंशन:
    • उन यूआरएल के लिए उपयोगकर्ता की जानकारी हटाने की सुविधा ठीक की गई है जिनमें कोड में बदले गए @ वर्ण शामिल हैं (#1138).
    • हेडर एक्सटेंशन के साथ आरटीपी पैकेट पार्स करते समय क्रैश होने की समस्या ठीक की गई है (#1225).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
    • IAMF डिकोडर मॉड्यूल जोड़ें. यह libiamf नेटिव लाइब्रेरी का इस्तेमाल करके, IAMF ट्रैक वाली MP4 फ़ाइलों को चलाने की सुविधा देता है, ताकि ऑडियो को सिंथेसाइज़ किया जा सके.
      • इसमें स्टीरियो लेआउट के साथ-साथ, स्पेशल ऑडियो और 5.1 ऑडियो की सुविधा भी मिलती है. साथ ही, हेड ट्रैकिंग की सुविधा को चालू करने का विकल्प भी मिलता है. हालांकि, फ़िलहाल इसमें बाइनॉरल ऑडियो की सुविधा उपलब्ध नहीं है.
    • Android 15 पर, डिकोडर एक्सटेंशन के लिए 16 केबी पेज का इस्तेमाल करने की सुविधा जोड़ी गई है (#1685).
  • कास्ट एक्सटेंशन:
    • 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:
    • PreloadMediaSource में प्रीलोड कॉलबैक को एसिंक्रोनस तरीके से हैंडल किया गया (#1568).
    • लोडिंग में गड़बड़ी होने पर, बफ़र किए गए कॉन्टेंट की अवधि के बावजूद, वीडियो चलाने की अनुमति दें (#1571).
  • डेटा निकालने वाले टूल:
    • MP3: Searched too many bytes फ़्रेम में मौजूद लंबाई वाले फ़ील्ड के आधार पर, आखिर में मौजूद MP3 फ़ॉर्मैट के अलावा अन्य फ़ॉर्मैट के डेटा को सही तरीके से अनदेखा करके, Searched too many bytes गड़बड़ी ठीक करें (#1480).Info
  • टेक्स्ट:
    • टीटीएमएल: प्रतिशत 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) को पूरी तरह से लागू न करने की वजह से होती है.
  • असर:
    • GlObjectsProvider में release() तरीका जोड़ें.
  • सेशन:
    • KEYCODE_HEADSETHOOK पर दो बार टैप करने की सुविधा को 'अगले पर जाएं' कार्रवाई में बदल दिया गया है. इसके बारे में दस्तावेज़ में बताया गया है (#1493).
    • KEYCODE_HEADSETHOOK को 'चलाएं' कमांड के तौर पर हैंडल करें. साथ ही, यह तय करते समय कि इसे अनदेखा करना है या नहीं, MediaButtonReceiver को ध्यान में रखें, ताकि ForegroundServiceDidNotStartInTimeException (#1581) से बचा जा सके.
  • आरटीएसपी एक्सटेंशन:
    • एसडीपी पार्सिंग में, अमान्य मीडिया ब्यौरे को स्किप करें (#1087).

वर्शन 1.4.0

25 जुलाई, 2024

androidx.media3:media3-*:1.4.0 रिलीज़ हो गया है. वर्शन 1.4.0 में ये बदलाव शामिल हैं.

  • कॉमन लाइब्रेरी:
    • यह विकल्प, seek के उन कॉल को अनदेखा करने के बजाय, सुरक्षित BasePlayer.seekTo() और SimpleBasePlayer.handleSeek() तरीकों पर फ़ॉरवर्ड करता है जिनके बारे में यह माना जाता है कि वे कोई कार्रवाई नहीं करते. अगर इन तरीकों को किसी कस्टम प्लेयर में लागू किया जा रहा है, तो आपको mediaItemIndex == C.INDEX_UNSET की मदद से इन अतिरिक्त कॉल को मैनेज करना पड़ सकता है.
    • Java 8 के बेहतर डिसुगरिंग पर कंपाइल डिपेंडेंसी हटाएं (#1312).
    • पक्का करें कि इमेज के अलावा किसी अन्य MediaItem के लिए, MediaItem.Builder.setImageDurationMs() में दी गई अवधि को अनदेखा किया गया हो (जैसा कि दस्तावेज़ में बताया गया है).
    • Format.customData को जोड़कर, Format इंस्टेंस के बारे में ऐप्लिकेशन से मिली कस्टम जानकारी सेव करें.
  • ExoPlayer:
    • BasePreloadManager जोड़ें. यह rankingData में तय की गई प्राथमिकताओं के आधार पर, कई सोर्स के लिए प्रीलोडिंग को मैनेज करता है. इस क्लास को बढ़ाकर, अपनी पसंद के मुताबिक बनाया जा सकता है. Add 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 को प्रीलोड नहीं करना है.
    • 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).
    • उस बग को ठीक किया गया है जिसमें ओरिजनल अवधि को मेनिफ़ेस्ट से हटा दिए जाने के बाद, एक से ज़्यादा अवधि वाली DASH लाइव स्ट्रीम को फिर से तैयार करने पर, प्लेबैक STATE_ENDED पर चला जाता था.
    • PreloadMediaSource.PreloadControl में, onTimelineRefreshed() का नाम बदलकर onSourcePrepared() और onPrepared() का नाम बदलकर onTracksSelected() कर दें. साथ ही, DefaultPreloadManager.Stage में मौजूद IntDefs के नाम भी बदलें.
    • डाइनैमिक शेड्यूलिंग के लिए एक्सपेरिमेंट के तौर पर सहायता जोड़ी गई है. इससे, सीपीयू के वेक-अप साइकल के साथ काम को बेहतर तरीके से अलाइन किया जा सकेगा. साथ ही, रेंडरर के काम करने तक वेक-अप में देरी की जा सकेगी. ExoPlayer इंस्टेंस सेट अप करते समय, experimentalSetDynamicSchedulingEnabled() का इस्तेमाल करके इसे चालू किया जा सकता है.
    • Renderer.getDurationToProgressUs() जोड़ें. Renderer इस तरीके को लागू कर सकता है, ताकि ExoPlayer को वह अवधि वापस मिल सके जिसके लिए रेंडरर को प्रोग्रेस करने के लिए, वीडियो को आगे बढ़ाना होगा. अगर ExoPlayer को experimentalSetDynamicSchedulingEnabled() के साथ सेट किया जाता है, तो ExoPlayer अपने काम के टास्क को शेड्यूल करने का समय तय करते समय, इस तरीके को कॉल करेगा.
    • MediaCodecAdapter#OnBufferAvailableListener को जोड़ें, ताकि MediaCodecRenderer के इस्तेमाल के लिए इनपुट और आउटपुट बफ़र उपलब्ध होने पर सूचना मिल सके. इन कॉलबैक को पाने पर, MediaCodecRenderer, ExoPlayer को सिग्नल देगा. अगर ExoPlayer को experimentalSetDynamicSchedulingEnabled() के साथ सेट किया गया है, तो ExoPlayer अपने वर्क लूप को शेड्यूल करेगा, ताकि रेंडरर आगे बढ़ सकें.
    • अलग-अलग पैरामीटर के बजाय, LoadControl तरीकों के लिए डेटा क्लास का इस्तेमाल करें.
    • ExoPlayer.isReleased() को जोड़ें, ताकि यह पता लगाया जा सके कि Exoplayer.release() को कॉल किया गया है या नहीं.
    • ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() जोड़कर, उस ज़्यादा से ज़्यादा पोज़िशन को कॉन्फ़िगर करें जिसके लिए seekToPrevious() पिछले आइटम (#1425) पर जाता है.
    • ऑडियो फ़ोकस से जुड़ी कुछ गड़बड़ियों को ठीक किया गया है. जैसे, प्लेयर के रुकने पर फ़ोकस के पूरी तरह या कुछ समय के लिए हट जाने की जानकारी न देना (#1436).
    • एक्सट्रैक्टर की रिपोर्टिंग की वजह से होने वाली संभावित IndexOutOfBoundsException को ठीक किया गया. एक्सट्रैक्टर, तैयारी के शुरुआती चरण के बाद अतिरिक्त ट्रैक रिपोर्ट करते हैं (#1476).
    • Effects में ExoPlayer.setVideoEffect() को, रेंडरर ऑफ़सेट हटाकर टाइमस्टैंप मिलेंगे (#1098).
    • खिलाड़ी की गड़बड़ी को ठीक किया गया है. यह गड़बड़ी, किसी दूसरी प्लेलिस्ट आइटम को पढ़ते समय हुई थी (#1483).IllegalArgumentException
  • ट्रांसफ़ॉर्मर:
    • audioConversionProcess और videoConversionProcess को ExportResult में जोड़ें. इससे पता चलेगा कि आउटपुट फ़ाइल में मौजूद ट्रैक कैसे बनाए गए थे.
    • H.264 लेवल की जांच के लिए, ट्रिम ऑप्टिमाइज़ेशन की शर्तों में ढील दी गई है.
    • किसी क्रम में एसडीआर और एचडीआर इनपुट मीडिया के बीच स्विच करने की सुविधा जोड़ी गई है.
    • कंपोज़िशन-लेवल पर ऑडियो इफ़ेक्ट के लिए सहायता जोड़ी गई है.
    • अल्ट्रा एचडीआर इमेज को एचडीआर वीडियो में ट्रांसकोड करने की सुविधा जोड़ी गई.
    • उस समस्या को ठीक किया गया है जिसमें रीसेट करने और फिर से इस्तेमाल करने के बाद, DefaultAudioMixer सही बाइट आउटपुट नहीं देता है.
    • डिकोडर की गड़बड़ी को ठीक किया गया है. इस गड़बड़ी में, पीसीएम इनपुट को हैंडल करते समय ऑडियो चैनलों की संख्या को स्टीरियो पर सीमित कर दिया गया था.
    • ExoPlayerAssetLoader में ट्रैक चुनते समय, ऑडियो चैनल की संख्या से जुड़ी पाबंदियों को अनदेखा करें. ये पाबंदियां सिर्फ़ वीडियो चलाने पर लागू होती हैं.
    • androidx.media3.transformer.Muxer इंटरफ़ेस को androidx.media3.muxer.Muxer से बदलें और androidx.media3.transformer.Muxer को हटाएं.
    • कॉन्टेंट यूआरआई स्कीम से HEIC इमेज लोड करने की समस्या ठीक की गई. (#1373).
    • एवी सिंक को बेहतर बनाने के लिए, AudioGraphInput में जाकर ऑडियो ट्रैक की अवधि में बदलाव करें.
    • ExportResult.processedInputs फ़ील्ड हटाएं. अगर आपको इस फ़ील्ड का इस्तेमाल कोडेक की जानकारी के लिए करना है, तो इसके बजाय DefaultDecoderFactory.listener का इस्तेमाल करें. कोडेक से जुड़ी समस्या होने पर, कोडेक की जानकारी ExportException.codecInfo में उपलब्ध होगी.
  • डेटा निकालने वाले टूल:
    • MPEG-TS: बदलाव को आगे बढ़ाएं. साथ ही, यह पक्का करें कि आखिरी फ़्रेम को रेंडर किया गया हो. इसके लिए, स्ट्रीम की आखिरी ऐक्सेस यूनिट को सैंपल क्यू में पास करें (#7909). सिर्फ़ आई-फ़्रेम वाली एचएलएस स्ट्रीम(#1150) और H.262 एचएलएस स्ट्रीम (#1126) में आने वाली समस्याओं को ठीक किया गया है.
    • MP3: Info फ़्रेम से मिले डेटा साइज़ को, स्ट्रीम से मिले डेटा साइज़ (जैसे, फ़ाइल का साइज़ या एचटीटीपी Content-Length हेडर) की तुलना में प्राथमिकता दें. इससे, लगातार बिटरेट पर सीकिंग की कैलकुलेशन से, न चलने वाले ट्रेलर डेटा (जैसे कि एल्बम का आर्टवर्क) को बाहर रखने में मदद मिलती है. इससे सीकिंग ज़्यादा सटीक हो जाती है (#1376).
    • MP3: अगर Info फ़्रेम मौजूद है, तो फ़्रेम की संख्या और अन्य डेटा का इस्तेमाल करें. इससे, लगातार बिटरेट बनाए रखने के लिए औसत बिटरेट का हिसाब लगाया जा सकता है. इसके बजाय, Info फ़्रेम के बाद वाले फ़्रेम के बिटरेट से एक्सट्रैपलेट करें. यह बिटरेट, आर्टिफ़िशियल तौर पर छोटा हो सकता है. उदाहरण के लिए, PCUT फ़्रेम (#1376).
    • AVI कंटेनर में, PCM ऑडियो फ़ॉर्मैट एक्सट्रैक्ट करने से जुड़ी समस्या ठीक की गई.
  • ऑडियो:
    • पासथ्रू प्लेबैक के लिए, DTS:X Profile 2 एन्कोडिंग एट्रिब्यूट से जुड़ी समस्या ठीक की गई है (#1299).
    • ऑफ़लोड किए गए कॉन्टेंट को चलाने के लिए, AudioTrack.stop() को कॉल करने से पहले DefaultAudioSink में स्ट्रीम पूरी होने के लिए ट्रैकिंग फ़ील्ड को रीसेट करें, ताकि AudioTrack.StreamEventCallback#onPresentationEnded यह सही तरीके से पहचान सके कि सभी लंबित डेटा को कब चलाया गया है.
    • SilenceSkippingAudioProcessor में मौजूद गड़बड़ी को ठीक किया गया है. अलग-अलग ऑडियो फ़ॉर्मैट (उदाहरण के लिए, स्टीरियो से मोनो) के बीच ट्रांज़िशन होने पर, प्रोसेसर एक अपवाद (#1352) दिखा सकता है.
    • MediaCodecAudioRenderer.getDurationToProgressUs() लागू करें, ताकि ExoPlayer अपने मुख्य वर्क लूप को डाइनैमिक तरीके से शेड्यूल कर सके. इससे MediaCodecAudioRenderer को प्रोग्रेस करने में मदद मिलेगी.
  • वीडियो:
    • उस समस्या को ठीक किया गया है जिसमें वीडियो चलाते समय डिवाइस बदलने पर, Listener.onRenderedFirstFrame() बहुत जल्दी दिखने लगता था.
    • Dolby Vision के लिए डिकोडर फ़ॉलबैक लॉजिक को ठीक किया गया है, ताकि ज़रूरत पड़ने पर AV1 के साथ काम करने वाले डिकोडर का इस्तेमाल किया जा सके (#1389).
    • कोडेक से जुड़ी उस समस्या को ठीक किया गया है जो वीडियो रेंडरर को वीडियो के बीच में चालू करने की वजह से हो सकती है.
  • टेक्स्ट:
    • उस समस्या को ठीक किया गया है जिसमें सीक की गई जगह से पहले शुरू होने वाले सबटाइटल स्किप हो जाते थे. यह समस्या सिर्फ़ Media3 1.4.0-alpha01 में आई है.
    • डिफ़ॉल्ट रूप से सबटाइटल पार्स करने के तरीके में बदलाव करें, ताकि यह रेंडरिंग के बजाय एक्सट्रैक्शन के दौरान हो. एक्सट्रैक्शन और रेंडरिंग के बीच के अंतर को समझने के लिए, ExoPlayer के आर्किटेक्चर का डायग्राम देखें.
      • दोनों MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) और TextRenderer.experimentalSetLegacyDecodingEnabled(true) पर कॉल करके, इस बदलाव को बदला जा सकता है. इन कॉम्पोनेंट को ExoPlayer इंस्टेंस में जोड़ने का तरीका जानने के लिए, कस्टम बनाने से जुड़े दस्तावेज़ देखें. इन तरीकों और लेगसी सबटाइटल डिकोडिंग के लिए उपलब्ध सभी सुविधाओं को आने वाले समय में हटा दिया जाएगा.
      • जिन ऐप्लिकेशन में कस्टम SubtitleDecoder लागू किए गए हैं उन्हें SubtitleParser लागू करने के लिए, उन्हें अपडेट करना होगा. साथ ही, SubtitleDecoderFactory के बजाय SubtitleParser.Factory लागू करना होगा.
    • PGS: रंग के इंडेक्स के तौर पर 0 को हल करने के लिए, रन-लेंथ डिकोडिंग को ठीक करें. ऐसा करने से, रंग की लिटरल वैल्यू (#1367) का इस्तेमाल नहीं किया जाएगा.
    • CEA-708: rowLock वैल्यू को अनदेखा करें. CEA-708-E S-2023 स्पेसिफ़िकेशन के मुताबिक, rowLock और columnLock, दोनों को सही माना जाना चाहिए. भले ही, स्ट्रीम में मौजूद वैल्यू कुछ भी हों. columnLock की सुविधा लागू नहीं की गई है. इसलिए, इसे हमेशा गलत माना जाता है.
      • यह बदलाव, मूल रूप से 1.3.0-alpha01 रिलीज़ की जानकारी में शामिल किया गया था. हालांकि, 1.3.0-rc01 रिलीज़ होने से पहले, गलती से इस बदलाव को पहले जैसा कर दिया गया था. अब इस समस्या को ठीक कर दिया गया है. इसलिए, बदलाव फिर से दिख रहा है.
    • CEA-708: ExoPlayer के 'सेट पेन लोकेशन' कमांड को हैंडल करने के तरीके की वजह से, नई लाइनें डुप्लीकेट होने से बचें (#1315).
    • जब WebVTT सबटाइटल के सैंपल में कोई क्यू शामिल नहीं होता है, तब IllegalArgumentException से IllegalArgumentException ठीक किया गया है. उदाहरण के लिए, DASH स्ट्रीम के हिस्से के तौर पर (#1516).LegacySubtitleUtil
  • मेटाडेटा:
    • MP4 को ID3 सॉर्ट टैग से मैप करने की समस्या ठीक की गई. पहले, MP4 टैग 'एल्बम सॉर्ट' (soal), 'कलाकार सॉर्ट' (soar), और 'एल्बम कलाकार सॉर्ट' (soaa) को TSO2, TSOA, और TSOP ID3 टैग (#1302) पर गलत तरीके से मैप किया गया था.
    • जब वैल्यू एक बाइट से ज़्यादा लंबी हो, तब MP4 (/iTunes) के संख्यात्मक gnre (शैली) और tmpo (टेंपो) टैग को पढ़ने की समस्या ठीक की गई.
    • आईडी3 TCON फ़्रेम को MediaMetadata.genre में फैलाएं (#1305).
  • इमेज:
    • स्क्वेयर नहीं होने वाली DASH थंबनेल ग्रिड के लिए सहायता जोड़ी गई है (#1300).
    • API 34 और इसके बाद के वर्शन के लिए, AVIF फ़ॉर्मैट का इस्तेमाल करने की सुविधा जोड़ी गई.
    • पहले से सेट किए गए ImageOutput को हटाने के लिए, ExoPlayer.setImageOutput() के पैरामीटर के तौर पर null का इस्तेमाल करने की अनुमति दें.
  • DataSource:
    • android.resource://package/id रॉ रिसोर्स यूआरआई के लिए सहायता लागू करें, जहां package मौजूदा ऐप्लिकेशन के पैकेज से अलग है. पहले, इस तरीके के काम करने के बारे में कोई दस्तावेज़ मौजूद नहीं था. हालांकि, यह नाम के बजाय किसी दूसरे पैकेज में मौजूद संसाधनों को ऐक्सेस करने का ज़्यादा असरदार तरीका है.
    • url कंस्ट्रक्टर में url की वैल्यू मौजूद है या नहीं, इसकी जांच करें.DataSpec इस पैरामीटर को पहले ही गैर-शून्य के तौर पर एनोटेट किया जा चुका है.
    • ByteArrayDataSource को open() के दौरान यूआरआई को बाइट ऐरे में बदलने की अनुमति दें. इसके बजाय, कंस्ट्रक्शन के दौरान इसे हार्ड-कोड किया गया था (#1405).
  • DRM:
    • यह कुकी, DefaultDrmSessionManagerProvider पर LoadErrorHandlingPolicy सेट करने की अनुमति देती है (#1271).
  • असर:
    • SpeedChangeEffect में, एक ही EditedMediaItem या Composition के अंदर, रफ़्तार में कई बदलावों के लिए सहायता जोड़ी गई है.
    • अल्ट्रा एचडीआर बिटमैप इनपुट से, HLG और PQ आउटपुट के लिए सहायता.
    • EGL_GL_COLORSPACE_BT2020_HLG_EXT के लिए सहायता जोड़ी गई है. इससे ExoPlayer.setVideoEffect और Transformer के DebugSurfaceView में, एचएलजी सर्फ़ेस आउटपुट बेहतर होता है.
    • ओवरले मैट्रिक्स के लागू करने के तरीके को अपडेट करें, ताकि यह दस्तावेज़ के मुताबिक हो. इसके लिए, setOverlayFrameAnchor() में लागू की गई x और y वैल्यू को बदलें. अगर OverlaySettings.Builder.setOverlayFrameAnchor() का इस्तेमाल किया जा रहा है, तो x और y की वैल्यू को -1 से गुणा करके, उन्हें फ़्लिप करें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें TimestampWrapper के साथ ExoPlayer#setVideoEffects का इस्तेमाल करने पर, TimestampWrapper क्रैश हो जाता था (#821).
    • एसडीआर वीडियो के लिए, डिफ़ॉल्ट एसडीआर कलर वर्किंग स्पेस को लीनियर कलर से बदलकर इलेक्ट्रिकल बीटी 709 एसडीआर वीडियो करें. साथ ही, ओरिजनल कलरस्पेस को बनाए रखने के लिए तीसरा विकल्प भी दें.
    • EditedMediaItemSequences के लिए, z-ऑर्डर तय न करने की अनुमति दी गई है (#1055).
    • एचडीआर कॉन्टेंट के अलग-अलग हिस्सों में, ल्यूमिनेंस की एक जैसी रेंज बनाए रखता है (एचएलजी रेंज का इस्तेमाल करता है).
    • एचडीआर कॉन्टेंट पर अल्ट्रा एचडीआर (बिटमैप) ओवरले के लिए सपोर्ट जोड़ा गया है.
    • एपीआई 26 से पहले, SeparableConvolution इफ़ेक्ट इस्तेमाल करने की अनुमति दें.
    • इस्तेमाल नहीं किए गए OverlaySettings.useHdr हटाएं, क्योंकि ओवरले और फ़्रेम की डाइनैमिक रेंज एक जैसी होनी चाहिए.
    • TextOverlay के लिए, एचडीआर की सुविधा जोड़ी गई. OverlaySettings.Builder.setHdrLuminanceMultiplier() की मदद से, टेक्स्ट ओवरले की चमक को अडजस्ट किया जा सकता है.
  • IMA एक्सटेंशन:
    • Promote API को स्टेबल वर्शन में प्रमोट करें. यह एपीआई, ऐप्लिकेशन के लिए DAI विज्ञापन स्ट्रीम चलाने के लिए ज़रूरी है.
    • replaceAdTagParameters(Map <String, String>) को ImaServerSideAdInsertionMediaSource.AdLoader में जोड़ें. इससे विज्ञापन टैग पैरामीटर को रनटाइम में बदलने की अनुमति मिलती है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें विज्ञापन चलाने के दौरान प्लेयर में गड़बड़ी होने पर, VideoAdPlayer.VideoAdPlayerCallback.onError() को कॉल नहीं किया जाता था (#1334).
    • data:// विज्ञापन टैग यूआरआई का इस्तेमाल करते समय, NullPointerException को ठीक करने के लिए, IMA SDK का वर्शन 3.33.0 पर अपग्रेड किया गया (#700).
  • सेशन:
    • CommandButton.enabled की डिफ़ॉल्ट वैल्यू को true में बदलें. साथ ही, यह पक्का करें कि कंट्रोलर के लिए वैल्यू को 'गलत है' पर सेट किया जा सकता हो. भले ही, उससे जुड़ा निर्देश उपलब्ध हो.
    • CommandButton के लिए आइकॉन कॉन्स्टेंट जोड़ें. इनका इस्तेमाल कस्टम आइकॉन रिसॉर्स के बजाय किया जाना चाहिए.
    • MediaSessionService.isPlaybackOngoing() को जोड़ें, ताकि ऐप्लिकेशन यह क्वेरी कर सकें कि onTaskRemoved() में सेवा को बंद करने की ज़रूरत है या नहीं (#1219).
    • MediaSessionService.pauseAllPlayersAndStopSelf() जोड़ें. इससे सभी सेशन के प्लेबैक को आसानी से रोका जा सकता है. साथ ही, MediaSessionService के लाइफ़साइकल को खत्म करने के लिए stopSelf() को कॉल किया जा सकता है.
    • MediaSessionService.onTaskRemoved(Intent) को बदलकर, सुरक्षित डिफ़ॉल्ट सेटिंग लागू करें. इससे, अगर वीडियो चल रहा है, तो सेवा फ़ोरग्राउंड में चलती रहेगी. अगर वीडियो नहीं चल रहा है, तो सेवा बंद हो जाएगी.
    • लाइव स्ट्रीम के लिए मीडिया सूचना में सीकबार को छिपाएं. इसके लिए, प्लैटफ़ॉर्म सेशन के मेटाडेटा में अवधि सेट न करें (#1256).
    • MediaMetadata को MediaDescriptionCompat के साथ अलाइन करें, ताकि मेटाडेटा प्रॉपर्टी चुनते समय उसी पसंदीदा क्रम और लॉजिक का इस्तेमाल किया जा सके जैसा कि media1 में किया गया था.
    • MediaSession.sendError() जोड़ें. इससे Media3 कंट्रोलर को ऐसी गड़बड़ियां भेजी जा सकती हैं जिनसे कोई गंभीर समस्या नहीं होती. सूचना कंट्रोलर (MediaSession.getMediaNotificationControllerInfo() देखें) का इस्तेमाल करते समय, कस्टम गड़बड़ी का इस्तेमाल प्लैटफ़ॉर्म सेशन के PlaybackState को गड़बड़ी की स्थिति में अपडेट करने के लिए किया जाता है. इसमें गड़बड़ी की जानकारी दी जाती है (#543).
    • MediaSession.Callback.onPlayerInteractionFinished() जोड़ें, ताकि सेशन को यह सूचना दी जा सके कि किसी कंट्रोलर से प्लेयर के साथ इंटरैक्शन की एक सीरीज़ खत्म हो गई है.
    • गड़बड़ी के बारे में ज़्यादा जानकारी देने के लिए, गड़बड़ी के कोड के बजाय SessionError जोड़ें और इसका इस्तेमाल SessionResult और LibraryResult में करें. साथ ही, अगर हो सके, तो गड़बड़ी को ठीक करने का तरीका भी बताएं.
    • Media3 कंट्रोलर टेस्ट ऐप्लिकेशन के लिए कोड पब्लिश करें. इसका इस्तेमाल, मीडिया सेशन पब्लिश करने वाले ऐप्लिकेशन के साथ इंटरैक्शन की जांच करने के लिए किया जा सकता है.
    • media3 के MediaSession[Builder].setSessionExtras() को पास किए गए एक्स्ट्रा को media1 कंट्रोलर के PlaybackStateCompat.getExtras() में ट्रांसफ़र करें.
    • इस कुकी का इस्तेमाल, प्लैटफ़ॉर्म सेशन में नुकसान पहुंचाने वाली और नुकसान न पहुंचाने वाली गड़बड़ियों को मैप करने के लिए किया जाता है. PlaybackException को PlaybackStateCompat की गंभीर गड़बड़ी वाली स्थिति पर मैप किया गया है. MediaSession.sendError(ControllerInfo, SessionError) के साथ मीडिया सूचना कंट्रोलर को भेजा गया SessionError, PlaybackStateCompat में एक नुकसान न पहुंचाने वाली गड़बड़ी के तौर पर मैप किया जाता है. इसका मतलब है कि गड़बड़ी का कोड और मैसेज सेट किया गया है, लेकिन प्लैटफ़ॉर्म सेशन की स्थिति STATE_ERROR से अलग रहती है.
    • इस कुकी का इस्तेमाल, हर कंट्रोलर के लिए सेशन ऐक्टिविटी सेट करने के लिए किया जाता है, ताकि ग्लोबल सेशन ऐक्टिविटी को बदला जा सके. कनेक्शन के समय, कंट्रोलर के लिए सेशन गतिविधि को तय किया जा सकता है. इसके लिए, ConnectionResult के साथ AcceptedResultBuilder.setSessionActivivty(PendingIntent) बनाएं. कनेक्ट होने के बाद, सेशन की गतिविधि को MediaSession.setSessionActivity(ControllerInfo, PendingIntent) से अपडेट किया जा सकता है.
    • MediaLibrarySession.Callback पर कॉल करने के दौरान होने वाली गड़बड़ियों को बेहतर तरीके से दोहराया जा सकता है. गड़बड़ी की जानकारी को दोहराने की सुविधा को अब कॉन्फ़िगर किया जा सकता है. इसके लिए, MediaLibrarySession.Builder.setLibraryErrorReplicationMode() का इस्तेमाल करके, गड़बड़ी का टाइप चुनें या गड़बड़ी की जानकारी को दोहराने की सुविधा से ऑप्ट-आउट करें. यह सुविधा डिफ़ॉल्ट रूप से चालू होती है.
  • यूआई:
    • PlayerView को ExoPlayer से कनेक्ट करने पर, इमेज डिसप्ले करने की सुविधा जोड़ी गई (#1144).
    • PlayerControlView में मौजूद अलग-अलग आइकॉन को पसंद के मुताबिक बनाने के लिए, xml एट्रिब्यूट जोड़ें. इससे हर PlayerControlView इंस्टेंस के लिए अलग-अलग ड्रॉएबल इस्तेमाल किए जा सकेंगे. ऐसा ग्लोबल ओवरराइड (#1200) के बजाय किया जाएगा.PlayerView
    • API 34 पर Compose AndroidView के अंदर SurfaceView का इस्तेमाल करते समय, प्लैटफ़ॉर्म के एक बग को ठीक किया गया है. इस बग की वजह से, वीडियो स्ट्रेच हो जाता था या कट जाता था (#1237).
  • डाउनलोड:
    • पक्का करें कि DownloadHelper, रिलीज़ नहीं किए गए Renderer इंस्टेंस को लीक न करे. इससे ऐप्लिकेशन क्रैश हो सकता है और IllegalStateException: Too many receivers, total of 1000, registered for pid (#1224) गड़बड़ी दिख सकती है.
  • Cronet एक्सटेंशन:
    • CronetDataSource में SocketTimeoutException ठीक करें. Cronet के कुछ वर्शन में, कॉलबैक से मिला अनुरोध हमेशा एक जैसा नहीं होता. इस वजह से, कॉल बैक पूरा नहीं होता है और अनुरोध का समय खत्म हो जाता है (https://issuetracker.google.com/328442628).
  • एचएलएस एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें डिसकंटिन्यूटी का इंतज़ार कर रहे ईएमएसजी सैंपल को HlsSampleStreamWrapper में गलत ऑफ़सेट के साथ डेलिगेट किया गया था. इससे IndexOutOfBoundsException या IllegalArgumentException (#1002) की समस्या आ रही थी.
    • उस गड़बड़ी को ठीक किया गया है जिसमें एलएल-एचएलएस स्ट्रीम के लिए, मुख्य प्लेलिस्ट के अलावा अन्य प्लेलिस्ट बार-बार रीलोड होती रहती हैं (#1240).
    • उस बग को ठीक किया गया है जिसकी वजह से, HLS के लिए सीएमसीडी चालू करने पर, Source Error और IllegalArgumentException गड़बड़ियां होती थीं.
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से लाइव कॉन्टेंट चलाने के दौरान, मुख्य प्लेलिस्ट के अलावा अन्य प्लेलिस्ट रीफ़्रेश नहीं होती थीं (#1240).
    • उस बग को ठीक किया गया है जिसमें एचएलएस लाइव स्ट्रीम के लिए सीएमसीडी चालू करने पर ArrayIndexOutOfBoundsException की समस्या आ रही थी (#1395).
  • DASH एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें एक से ज़्यादा अवधि वाली लाइव स्ट्रीम को फिर से तैयार करने पर, IndexOutOfBoundsException (#1329) गड़बड़ी दिख सकती है.
    • dashif:Laurlलाइसेंस वाले यूआरएल (#1345) के लिए सहायता जोड़ी गई.
  • कास्ट एक्सटेंशन:
    • उस बग को ठीक किया गया है जिसकी वजह से, 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 के नेगेटिव प्रज़ेंटेशन टाइमस्टैंप के साथ काम न करने की वजह से हुई गड़बड़ी को ठीक करने का तरीका जोड़ा गया.
  • ट्रैक के विकल्प:
    • DefaultTrackSelector: कम या अनसेट फ़्रेम रेट वाले वीडियो ट्रैक के बजाय, 'सही' फ़्रेम रेट (>=10fps) वाले वीडियो ट्रैक को प्राथमिकता दें. इससे यह पक्का होता है कि प्लेयर, मोशन फ़ोटो से निकाले गए MP4 में 'असली' वीडियो ट्रैक को चुनता है. इनमें दो HEVC ट्रैक हो सकते हैं. इनमें से एक ट्रैक का रिज़ॉल्यूशन ज़्यादा होता है, लेकिन उसमें फ़्रेम की संख्या बहुत कम होती है (#1051).
  • डेटा निकालने वाले टूल:
    • WAV फ़ाइलों से, अजीब साइज़ वाले चंक पढ़ते समय पैडिंग को स्किप न करने की समस्या को ठीक किया गया है (#1117).
    • MP3: Format.averageBitrate को मेटाडेटा फ़्रेम से भरें. जैसे, XING और VBRI.
    • MPEG-TS: उस बदलाव को पहले जैसा करें जिसका मकसद यह पक्का करना था कि स्ट्रीम की आखिरी ऐक्सेस यूनिट को सैंपल क्यू में भेजकर, आखिरी फ़्रेम रेंडर किया जाए (#7909). ऐसा इसलिए हुआ है, क्योंकि इस बदलाव की वजह से, सिर्फ़ आई-फ़्रेम वाली HLS स्ट्रीम (#1150) और H.262 HLS स्ट्रीम (#1126) में नई समस्याएं आ रही हैं.
  • ऑडियो:
    • अगर ऑडियो ट्रैक, ऑफ़लोड मोड में शुरू नहीं हो पाता है, तो ऑफ़लोड की सुविधा बंद करके रेंडरर को ठीक करने की अनुमति दें.
  • वीडियो:
    • Galaxy Tab S7 FE, Chromecast with Google TV, और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को ठीक करने का तरीका जोड़ा गया है. इस समस्या की वजह से, 60fps H265 स्ट्रीम को काम न करने वाली स्ट्रीम के तौर पर मार्क किया जाता है
    • एक ऐसा तरीका जोड़ा गया है जिससे टनलिंग के दौरान पहला फ़्रेम हमेशा रेंडर होता है. भले ही, डिवाइस एपीआई की ज़रूरत के मुताबिक ऐसा अपने-आप न करता हो (#1169). (#966).
    • उस समस्या को ठीक किया गया है जिसमें एचडीआर कलर की जानकारी को हैंडल करने की वजह से कोडेक ठीक से काम नहीं करता था. साथ ही, एसडीआर वीडियो ट्रैक के लिए अडैप्टिव फ़ॉर्मैट स्विच को रोकता था (#1158).
  • टेक्स्ट:
    • WebVTT: एक के बाद एक आने वाले क्यू से, CuesWithTiming के फ़र्ज़ी अतिरिक्त इंस्टेंस बनने से रोकें WebvttParser.parse (#1177).
  • DRM:
    • Android 14 वाले कुछ डिवाइसों पर, ResourceBusyException या NotProvisionedException के बजाय MediaDrm फ़्रेमवर्क से जनरेट होने वाली NoSuchMethodError को ठीक किया गया है (#1145).
  • असर:
    • कलर स्पेस बदलकर, PQ से एसडीआर टोन-मैपिंग को बेहतर बनाया गया है.
  • सेशन:
    • उस समस्या को ठीक किया गया है जिसमें कंट्रोलर के मौजूदा आइटम को बदलने पर, मौजूदा पोज़िशन वापस आ जाती है (#951).
    • उस समस्या को ठीक किया गया है जिसमें सिर्फ़ गैर-शून्य extras वाले MediaMetadata को मीडिया कंट्रोलर और सेशन के बीच ट्रांसमिट नहीं किया जाता है (#1176).
  • यूआई:
    • अगर Locale डिसप्ले नेम की पहचान नहीं कर पाता है, तो ऑडियो ट्रैक की भाषा का नाम शामिल करने के लिए फ़ॉलबैक करें (#988).
  • DASH एक्सटेंशन:
    • मेनिफ़ेस्ट से सभी Label एलिमेंट को Format.labels में पॉप्युलेट करें (#1054).
  • आरटीएसपी एक्सटेंशन:
    • एसडीपी पार्सिंग में, सेशन की जानकारी के खाली मान (i-टैग) छोड़ें (#1087).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
    • MIDI एक्सटेंशन को डिफ़ॉल्ट रूप से, लोकल डिपेंडेंसी के तौर पर बंद करें. ऐसा इसलिए, क्योंकि इसे कॉन्फ़िगर करने के लिए, एक अतिरिक्त Maven रिपॉज़िटरी की ज़रूरत होती है. जिन उपयोगकर्ताओं को लोकल डिपेंडेंसी से इस मॉड्यूल की ज़रूरत है वे इसे फिर से चालू कर सकते हैं.

वर्शन 1.3.0

6 मार्च, 2024

androidx.media3:media3-*:1.3.0 रिलीज़ हो गया है. वर्शन 1.3.0 में ये बदलाव शामिल हैं.

  • कॉमन लाइब्रेरी:
    • android.resource://package/[type/]name raw resource यूआरआई के लिए सहायता लागू करें, जहां package, मौजूदा ऐप्लिकेशन के पैकेज से अलग हो. इस सुविधा के काम करने के बारे में हमेशा से दस्तावेज़ में बताया गया है. हालांकि, इसे अब तक सही तरीके से लागू नहीं किया गया था.
    • ऐप्लिकेशन कोड से सेट किए गए MIME टाइप या मीडिया से पढ़े गए MIME टाइप को पूरी तरह से छोटे अक्षरों में बदलें.
    • AdPlaybackState में, सिंगल Uri के बजाय पूरे MediaItem के साथ विज्ञापन तय करें.
    • minSdk को 19 (Android KitKat) पर सेट करें. यह AndroidX की अन्य सभी लाइब्रेरी के साथ काम करता है. साथ ही, AndroidX की डिपेंडेंसी के नए वर्शन पर अपग्रेड करने के लिए, यह ज़रूरी है.
    • जब artworkUri और artworkData में से कम से कम एक की वैल्यू मौजूद हो, तब MediaMetadata.Builder.populate(MediaMetadata) में दोनों एट्रिब्यूट की वैल्यू भरें (#964).
  • ExoPlayer:
    • PreloadMediaSource और PreloadMediaPeriod जोड़ें. इससे ऐप्लिकेशन, कॉन्टेंट मीडिया सोर्स को किसी खास शुरुआती पोज़िशन पर प्रीलोड कर सकते हैं. ऐसा, कॉन्टेंट चलाने से पहले किया जाता है. PreloadMediaSource, कॉन्टेंट मीडिया सोर्स को Timeline पाने के लिए तैयार करता है. साथ ही, दी गई शुरुआती पोज़िशन पर अवधि को तैयार और कैश करता है. इसके अलावा, यह अवधि के लिए ट्रैक चुनता है और मीडिया डेटा लोड करता है. ऐप्लिकेशन, PreloadMediaSource.PreloadControl को लागू करके प्रीलोडिंग की प्रोसेस को कंट्रोल करते हैं. साथ ही, प्रीलोड किए गए सोर्स को प्लेयर पर सेट करते हैं, ताकि उसे चलाया जा सके.
    • ExoPlayer.setImageOutput जोड़ें, ताकि ऐप्लिकेशन ImageRenderer.ImageOutput सेट कर सकें.
    • DefaultRenderersFactory अब डिफ़ॉल्ट रूप से प्लेयर को ImageRenderer उपलब्ध कराता है. इसमें ImageOutput और ImageDecoder.Factory.DEFAULT की वैल्यू शून्य होती है.
    • साइलेंट मोड को स्किप करने पर, Player.Listener.onPositionDiscontinuity इवेंट को ट्रिगर करें (#765).
    • एक्सट्रैक्शन के दौरान सबटाइटल पार्स करने की सुविधा को एक्सपेरिमेंट के तौर पर जोड़ा गया है. MediaSource.Factory.experimentalParseSubtitlesDuringExtraction() का इस्तेमाल करके, इस सुविधा को चालू किया जा सकता है.
    • PreloadMediaSource की मदद से, अडैप्टिव मीडिया सोर्स के लिए सहायता जोड़ी गई.
    • HttpEngine API का इस्तेमाल करके, HttpDataSource को HttpEngineDataSource के तौर पर लागू करें.
    • सबक्लासिंग CompositeSequenceableLoader को रोकें. इस कॉम्पोनेंट को पहले एक्सटेंड किया जा सकता था, लेकिन इसे कभी भी लाइब्रेरी में सबक्लास नहीं किया गया. डेकोरेटर पैटर्न का इस्तेमाल करके किसी इंस्टेंस को रैप करके और कस्टम CompositeSequenceableLoaderFactory लागू करके, पसंद के मुताबिक बनाया जा सकता है.
    • उस समस्या को ठीक किया गया है जिसमें एक ही समय को दोहराने पर, इस आइटम का मेटाडेटा मिट जाता था (#1007).
    • experimentalSetSubtitleParserFactory और DefaultHlsExtractorFactory पर मौजूद experimentalSetSubtitleParserFactory तरीकों का नाम बदलकर setSubtitleParserFactory कर दिया गया है. साथ ही, null को पास करने की अनुमति नहीं है.BundledChunkExtractor.Factory पार्सिंग के तरीके को कंट्रोल करने के लिए, experimentalParseSubtitlesDuringExtraction(boolean) के नए तरीकों का इस्तेमाल करें.
    • डेटा निकालने के दौरान इस्तेमाल किए गए SubtitleParser.Factory को पसंद के मुताबिक बनाने की सुविधा जोड़ी गई. इसके लिए, MediaSource.Factory.setSubtitleParserFactory() का इस्तेमाल करें.
    • MergingMediaSource से जनरेट किए गए सभी Format.id फ़ील्ड में सोर्स प्रीफ़िक्स जोड़ें. इससे यह पता लगाने में मदद मिलती है कि किस सोर्स ने Format (#883) बनाया है.
    • कस्टम Common Media Client Data (CMCD) के मुख्य नामों की पुष्टि करने के लिए इस्तेमाल किए गए रेगुलर एक्सप्रेशन को ठीक किया गया है. इसके लिए, रेगुलर एक्सप्रेशन में बदलाव करके, सिर्फ़ हाइफ़न की जांच करने की सुविधा जोड़ी गई है (#1028).
    • सीएमसीडी क्वेरी पैरामीटर की डबल-कोडिंग बंद की गई (#1075).
  • ट्रांसफ़ॉर्मर:
    • H.265/HEVC SEF फ़ॉर्मैट में स्लो मोशन वाले वीडियो को फ़्लैट करने की सुविधा जोड़ी गई है.
    • ट्रांसमक्सिंग की स्पीड बढ़ाएं. खास तौर पर, 'वीडियो हटाएं' बदलावों के लिए.
    • एपीआई जोड़ें, ताकि आउटपुट फ़ाइल वीडियो फ़्रेम से शुरू हो. इससे, ट्रिम करने की कार्रवाइयों का आउटपुट, प्लेयर के उन वर्शन के साथ ज़्यादा बेहतर तरीके से काम कर सकता है जो वीडियो के पहले फ़्रेम को तब तक नहीं दिखाते, जब तक उसका प्रज़ेंटेशन टाइमस्टैंप (#829) नहीं आ जाता.
    • एकल ऐसेट MP4 ट्रिम ऑपरेशन को ऑप्टिमाइज़ करने की सुविधा जोड़ी गई.
    • यह पक्का करने के लिए कि वीडियो फ़्रेम में आउटपुट फ़ाइल का पहला टाइमस्टैंप हो, सहायता जोड़ी गई. iOS पर आधारित प्लेयर में, आउटपुट फ़ाइलों की शुरुआत में दिखने वाले ब्लैक फ़्रेम की समस्या ठीक की गई (#829).
  • ट्रैक के विकल्प:
    • इमेज ट्रैक चुनने की सुविधा चालू करने के लिए, DefaultTrackSelector.selectImageTrack जोड़ें.
    • अगर इमेज ट्रैक और वीडियो ट्रैक, दोनों उपलब्ध हैं, तो इमेज ट्रैक को चुनना है या नहीं, यह तय करने के लिए TrackSelectionParameters.isPrioritizeImageOverVideoEnabled जोड़ें. डिफ़ॉल्ट वैल्यू false होती है. इसका मतलब है कि वीडियो ट्रैक को चुनने को प्राथमिकता दी जाती है.
  • डेटा निकालने वाले टूल:
    • MP4 एक्सट्रैक्टर में AV1C पार्सिंग की सुविधा जोड़ी गई है, ताकि ColorInfo.colorSpace, ColorInfo.colorTransfer, और ColorInfo.colorRange वैल्यू (#692) वापस पाई जा सकें.
    • MP3: Info हेडर वाली फ़ाइलों के लिए, स्थिर बिटरेट (सीबीआर) का इस्तेमाल करें. यह Xing हेडर के सीबीआर के बराबर होता है. इससे पहले, हम Info हेडर से seek table का इस्तेमाल करते थे. हालांकि, इससे वीडियो के किसी भी हिस्से पर जाने की सुविधा कम सटीक होती है. ऐसा तब होता है, जब हम इसे अनदेखा करते हैं और यह मान लेते हैं कि फ़ाइल CBR है.
    • MPEG2-TS: DTS, DTS-LBR, और DTS:X Profile2 के लिए सहायता जोड़ी गई (#275).
    • टीएस डिस्क्रिप्टर से ऑडियो टाइप एक्सट्रैक्ट किए जाते हैं और उन्हें भूमिका के फ़्लैग पर मैप किया जाता है. इससे उपयोगकर्ता, ऑडियो ट्रैक के बारे में बेहतर जानकारी पाकर उन्हें चुन पाते हैं (#973).
  • ऑडियो:
    • आवाज़ न होने वाले हिस्सों को स्किप करने वाले एल्गोरिदम को बेहतर बनाया गया है. इससे वॉल्यूम में अचानक बदलाव नहीं होता. साथ ही, आवाज़ न होने वाले हिस्सों की अवधि को कम किया गया है और उन्हें ज़्यादा नैचुरल बनाया गया है (#7423).
    • आवाज़ बंद करने की सुविधा को स्किप करने की रिपोर्ट ज़्यादा सटीक तरीके से भेजें (#1035).
  • वीडियो:
    • MediaCodecVideoRenderer कंस्ट्रक्टर को बदलें. यह VideoFrameProcessor.Factory आर्ग्युमेंट लेता है. इसे ऐसे कंस्ट्रक्टर से बदलें जो VideoSinkProvider आर्ग्युमेंट लेता है. जिन ऐप्लिकेशन को कस्टम VideoFrameProcessor.Factory इंजेक्ट करना है वे कस्टम VideoFrameProcessor.Factory का इस्तेमाल करने वाले CompositingVideoSinkProvider को इंस्टैंशिएट कर सकते हैं. साथ ही, वीडियो सिंक प्रोवाइडर को MediaCodecVideoRenderer पास कर सकते हैं.
  • टेक्स्ट:
    • बिटमैप के सीरियल बनाने की प्रोसेस से जुड़ी गड़बड़ी को ठीक किया गया है, ताकि Tried to marshall a Parcel that contained Binder objects गड़बड़ी को ठीक किया जा सके. यह गड़बड़ी, DefaultExtractorsFactory.setTextTrackTranscodingEnabled का इस्तेमाल करते समय होती है (#836).
    • CEA-708: rowLock वैल्यू को अनदेखा करें. CEA-708-E S-2023 स्पेसिफ़िकेशन के मुताबिक, rowLock और columnLock, दोनों को सही माना जाना चाहिए. भले ही, स्ट्रीम में मौजूद वैल्यू कुछ भी हों. columnLock की सुविधा लागू नहीं की गई है. इसलिए, इसे हमेशा गलत माना जाता है.
  • इमेज:
    • DASH थंबनेल के लिए सहायता जोड़ी गई. ग्रिड इमेज को काट-छांट दिया जाता है और अलग-अलग थंबनेल, वीडियो में उनके दिखने के समय के आस-पास दिखाए जाते हैं.ImageOutput
  • DRM:
    • DRM कॉन्टेंट में, बिना एन्क्रिप्ट (सुरक्षित) किए गए 'क्लियर लीड' सैंपल को डिफ़ॉल्ट रूप से तुरंत चलाएं. भले ही, बाद में एन्क्रिप्ट (सुरक्षित) किए गए सैंपल के लिए कुंजियां अभी तैयार न हुई हों. ऐसा हो सकता है कि वीडियो चलाने के दौरान, एन्क्रिप्ट (सुरक्षित) किए गए सैंपल तक पहुंचने पर, वीडियो रुक जाए. हालांकि, पहले ऐसा नहीं होता था. इस सुविधा को बंद करने के लिए, MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey या DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys का इस्तेमाल करें.
      • IMA एक्सटेंशन:
    • उस समस्या को ठीक किया गया है जिसमें सही फ़ाइल एक्सटेंशन के बिना DASH और HLS विज्ञापनों को नहीं चलाया जा सकता था.
  • सेशन:
    • टीवी ऐप्लिकेशन के लिए, दो बार क्लिक करने की सुविधा बंद करें (#962).
    • उस समस्या को ठीक किया गया है जिसमें सिर्फ़ नॉन-नल एक्स्ट्रा के साथ MediaItem.RequestMetadata को मीडिया कंट्रोलर और सेशन के बीच ट्रांसमिट नहीं किया जाता है.
    • MediaLibrarySession.Builder में ऐसा कंस्ट्रक्टर जोड़ें जो MediaLibraryService के बजाय सिर्फ़ Context लेता हो.
  • एचएलएस एक्सटेंशन:
    • HlsMediaPeriod को पैकेज-प्राइवेट विज़िबिलिटी पर सेट करें. इस टाइप पर, HLS पैकेज के बाहर से सीधे तौर पर निर्भर नहीं रहना चाहिए.
    • Resolve seeks to beginning of a segment more efficiently (#1031).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
    • एमआईडीआई डिकोडर: SysEx इवेंट मैसेज अनदेखा करें (#710).
  • टेस्ट यूटिलिटी:
    • TestPlayerRunHelper.playUntilPosition में वीडियो चलने की सुविधा को न रोकें. इस टेस्ट में, वीडियो को चालू रखा जाता है. हालांकि, जब तक टेस्ट में दावे और अन्य कार्रवाइयां नहीं जोड़ी जातीं, तब तक वीडियो की प्रोग्रेस को रोक दिया जाता है.
  • डेमो ऐप्लिकेशन:
    • शॉर्ट वीडियो के इस्तेमाल के उदाहरण के साथ PreloadMediaSource के इस्तेमाल का डेमो देने के लिए, शॉर्ट वीडियो का डेमो मॉड्यूल जोड़ें.

वर्शन 1.3.0-rc01

22 फ़रवरी, 2024

1.3.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.3.0-beta01

7 फ़रवरी, 2024

1.3.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.3.0-alpha01

15 जनवरी, 2024

1.3.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.2.0

वर्शन 1.2.1

9 जनवरी, 2024

  • ExoPlayer:
    • उस समस्या को ठीक किया गया है जिसमें LiveConfiguration.min/maxOffset रेंज से बाहर मैन्युअल तरीके से खोज करने पर, ऑफ़सेट वापस min/maxOffset पर अडजस्ट होता रहता था.
    • OPUS और VORBIS के चैनल लेआउट से जुड़ी समस्या ठीक की गई है. यह समस्या 3, 5, 6, 7, और 8 चैनलों के लिए थी (#8396).
    • उस समस्या को ठीक किया गया है जिसमें लाइव स्ट्रीम में शून्य पर सीक करने के बाद ट्रैक चुनने पर, स्ट्रीम गलत तरीके से अपनी डिफ़ॉल्ट पोज़िशन से शुरू हो जाती थी (#9347).
    • उस समस्या को ठीक किया गया है जिसमें CmcdData.Factory के नए इंस्टेंस को, चंक सोर्स से bufferedDurationUs के लिए नेगेटिव वैल्यू मिल रही थीं. इस वजह से, IllegalArgumentException (#888) की समस्या आ रही थी.
  • ट्रांसफ़ॉर्मर:
    • इस समस्या को ठीक किया गया है. इसमें, ज़्यादा ऑपरेटिंग रेट सेट करने की वजह से, कॉन्फ़िगरेशन के समय एनकोडर काम नहीं करता था.
  • डेटा निकालने वाले टूल:
    • JPEG फ़ॉर्मैट में मौजूद मोशन फ़ोटो में, सेकंडरी (चलाए न जा सकने वाले) HEVC ट्रैक को ROLE_FLAG_ALTERNATE के तौर पर मार्क करें. इससे, ज़्यादा रिज़ॉल्यूशन होने की वजह से, उन्हें अपने-आप चलने से रोका जा सकेगा.
    • टीएस H264 स्ट्रीम के लिए, गलत कीफ़्रेम का पता लगाने की समस्या ठीक की गई है (#864).
    • 47,721 सेकंड से ज़्यादा लंबी टीएस स्ट्रीम की अवधि के अनुमान को ठीक किया गया है (#855).
  • ऑडियो:
    • SilenceSkippingAudioProcessor को कई बार कॉल किए जाने पर, ईओएस को हैंडल करने से जुड़ी समस्या ठीक की गई (#712).
  • वीडियो:
    • Galaxy Tab S7 FE, Chromecast with Google TV, और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया है. इस समस्या की वजह से, 60fps AVC स्ट्रीम को 'काम नहीं करता' के तौर पर मार्क किया जाता है (#693).
  • मेटाडेटा:
    • उस बग को ठीक किया गया है जिसमें MediaMetadata सिर्फ़ उन Vorbis टिप्पणियों से भरा जाता था जिनमें बड़े अक्षरों वाले कुंजियों का इस्तेमाल किया गया था (#876).
    • बहुत बड़े ID3 फ़्रेम को पार्स करते समय OutOfMemoryError को पकड़ता है. इसका मतलब है कि टैग की जानकारी के बिना भी ऑडियो चलाया जा सकता है. ऐसा तब होता है, जब ऑडियो पूरी तरह से नहीं चल पाता.
  • DRM:
    • एपीआई 33 और इसके बाद के वर्शन के लिए, फ़र्ज़ी ClearKey https://default.url लाइसेंस यूआरएल से जुड़ी समस्या को ठीक करने के तरीके को बेहतर बनाया गया है. इससे पहले, यह तरीका सिर्फ़ एपीआई 33 पर लागू होता था (#837).
    • जब प्लेयर से जुड़े किसी सर्फ़ेस के बिना, एन्क्रिप्ट (सुरक्षित) किए गए कॉन्टेंट से साफ़ कॉन्टेंट पर स्विच किया जाता है, तब ERROR_DRM_SESSION_NOT_OPENED को ठीक करें. यह गड़बड़ी, साफ़ तौर पर दिखने वाले कॉन्टेंट को चलाने के लिए, सुरक्षित डिकोडर का गलत तरीके से इस्तेमाल करने की वजह से हुई है.
  • सेशन:
    • कस्टम कुंजियों और वैल्यू को MediaMetadataCompat में MediaMetadata.extras और MediaMetadata.extras में MediaMetadataCompat (#756, #802) रखें.
    • लेगसी कंट्रोलर के लिए, ब्रॉडकास्ट करने की सुविधा से जुड़ी समस्या ठीक की गई है (#644).notifyChildrenChanged
    • हमने एक गड़बड़ी को ठीक किया है. इस गड़बड़ी की वजह से, सूचना के लिए बंद किए गए setWhen टाइमर के लिए नेगेटिव समय सेट करने पर, कुछ डिवाइसों पर ऐप्लिकेशन क्रैश हो जाता था (#903).
    • IllegalStateException को ठीक किया गया है. यह समस्या तब होती है, जब पहली सूचना अपडेट करने का अनुरोध किया जाता है और मीडिया सूचना कंट्रोलर कनेक्ट नहीं होता है (#917).
  • यूआई:
    • उस समस्या को ठीक किया गया है जिसमें BottomSheetDialogFragment में मटीरियल डिज़ाइन का इस्तेमाल करने पर, फ़ॉरवर्ड और रिवाइंड बटन नहीं दिखते थे (#511).
    • उस समस्या को ठीक किया गया है जिसमें PlayerControlView के फ़ास्ट फ़ॉरवर्ड बटन में मौजूद नंबर गलत तरीके से अलाइन किए गए थे (#547).
  • डैश एक्सटेंशन:
    • DASH मेनिफ़ेस्ट में Dolby के लिए, चैनल की संख्या के तौर पर "f800" को 5 के तौर पर पार्स करें (#688).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
    • एमआईडीआई: उस समस्या को ठीक किया गया है जिसमें आगे बढ़ने पर, प्रोग्राम बदलने वाले इवेंट स्किप हो जाते थे (#704).
    • FFmpeg 6.0 पर माइग्रेट करें और NDK के साथ काम करने वाले वर्शन को r26b (#707, #867) पर अपडेट करें.
  • कास्ट एक्सटेंशन:
    • Timeline बनाने की प्रोसेस को बेहतर बनाया गया है, ताकि कास्ट डिवाइस पर मीडिया लोड न होने पर ऐप्लिकेशन क्रैश न हो (#708).

वर्शन 1.2.0

15 नवंबर, 2023

  • कॉमन लाइब्रेरी:
    • Log.Logger इंटरफ़ेस में मौजूद तरीकों में @Nullable Throwable पैरामीटर जोड़ें. इन तरीकों के लिए message पैरामीटर में अब Log.{d,i,w,e}() तरीकों को पास किए गए Throwable के बारे में कोई जानकारी नहीं होती है. इसलिए, अगर चाहें, तो लागू करने वाले लोगों को यह जानकारी मैन्युअल तरीके से जोड़नी होगी. इसके लिए, Logger.appendThrowableString(String, Throwable) का इस्तेमाल किया जा सकता है.
    • Kotlin के साथ काम करने से जुड़ी समस्या को ठीक किया गया है. इसमें, नल वैल्यू स्वीकार करने वाले सामान्य टाइप पैरामीटर और नल वैल्यू स्वीकार करने वाले ऐरे एलिमेंट टाइप को नल वैल्यू स्वीकार करने वाले टाइप के तौर पर नहीं पहचाना जाता है. उदाहरण के लिए, TrackSelectorResult और SimpleDecoder, सामान लौटाने के तरीके के पैरामीटर हैं (#6792).
    • Util.shouldShowPlayButton में डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) और सूचना के व्यवहार में बदलाव करें, ताकि ऑडियो फ़ोकस के अस्थायी तौर पर बंद होने की वजह से, कॉन्टेंट के चलने पर "चलाएं" बटन दिखे. PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) या MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213) का इस्तेमाल करके, लेगसी वर्शन के व्यवहार को बनाए रखा जा सकता है.
    • https://issuetracker.google.com/251172715 को ठीक करने के लिए, androidx.annotation:annotation-experimental को 1.3.1 पर अपग्रेड करें.
    • ExoPlayer.setAudioAttributes को Player इंटरफ़ेस पर ले जाएं.
  • ExoPlayer:
    • AC4 स्ट्रीम में सीकिंग से जुड़ी समस्याओं को ठीक किया गया है. ये समस्याएं, सिर्फ़ डिकोड किए जाने वाले सैंपल की सही पहचान न होने की वजह से होती हैं (#11000).
    • ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput के ज़रिए इस सुविधा को चालू करने पर, ऐसे ऑडियो आउटपुट डिवाइसों पर वीडियो चलाने की सुविधा बंद कर दी जाएगी जो वीडियो चलाने के लिए सही नहीं हैं. जैसे, Wear OS डिवाइसों पर मौजूद बिल्ट-इन स्पीकर. अगर ऑडियो चलाने के लिए कोई सही आउटपुट उपलब्ध नहीं है या ऑडियो चलाने के दौरान सभी सही आउटपुट डिसकनेक्ट हो जाते हैं, तो ऑडियो चलाने की सुविधा बंद होने की वजह को Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT के तौर पर अपडेट किया जाएगा. सही आउटपुट कनेक्ट होने पर, जवाब न दिखने की वजह हट जाएगी.
    • Player.replaceMediaItem(s) के ज़रिए MediaItem अपडेट स्वीकार करने के लिए, MediaSource.canUpdateMediaItem और MediaSource.updateMediaItem जोड़ें.
    • Player.replaceMediaItem(s) के ज़रिए लाइब्रेरी से मिली सभी MediaSource क्लास के लिए, MediaItem अपडेट करने की अनुमति दें (#33, #9978).
    • MimeTypes.TEXT_EXOPLAYER_CUES का नाम बदलकर MimeTypes.APPLICATION_MEDIA3_CUES करें.
    • PngExtractor जोड़ें. यह पूरी PNG फ़ाइल को TrackOutput में एक सैंपल के तौर पर भेजता और पढ़ता है.
    • SequenceableLoader.continueLoading(long) इंटरफ़ेस में SequenceableLoader.continueLoading(long) तरीके को बेहतर बनाया गया है, ताकि SequenceableLoader.continueLoading(LoadingInfo loadingInfo).SequenceableLoader 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).
    • MediaPeriodId में MediaPeriodId पैरामीटर जोड़ें.CompositeMediaSource.getMediaTimeForChildMediaTime
    • ClippingMediaSource (और अवधि/विंडो के समय के ऑफ़सेट वाले अन्य सोर्स) के लिए सहायता ConcatenatingMediaSource2 (#11226) में.
    • BaseRenderer.onStreamChanged() को बदलकर MediaPeriodId भी पाएं.
  • ट्रांसफ़ॉर्मर:
    • इमेज इनपुट के लिए, EXIF रोटेशन डेटा को पार्स करता है.
    • TransformationRequest.HdrMode एनोटेशन टाइप और उससे जुड़े कॉन्स्टेंट हटाएं. इसके बजाय, Composition.HdrMode और इससे जुड़े कॉन्स्टेंट का इस्तेमाल करें.
    • रोटेशन से जुड़ी समस्याओं को ठीक करने के लिए, OverlaySettings को आसान बनाएं.
    • SampleConsumer.queueInputBitmap के frameRate और durationUs पैरामीटर को TimestampIterator में बदल दिया गया है.
  • ट्रैक के विकल्प:
    • DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness जोड़ें, ताकि नॉन-सीमलेस अडैप्टेशन की अनुमति दी जा सके या उसे अस्वीकार किया जा सके. डिफ़ॉल्ट सेटिंग में, true का मौजूदा तरीका ही लागू रहेगा.
  • डेटा निकालने वाले टूल:
    • MPEG-TS: पक्का करें कि स्ट्रीम की आखिरी ऐक्सेस यूनिट को सैंपल क्यू (#7909) में पास करके, आखिरी फ़्रेम रेंडर किया गया हो.
    • rotationDegrees तय करते समय, टाइपिंग की गलती को ठीक करें. projectionPosePitch को projectionPoseRoll (#461) में बदला गया.
    • इस अनुमान को हटा दिया गया है कि Extractor इंस्टेंस की सीधे तौर पर instanceof की मदद से जांच की जा सकती है. अगर आपको किसी Extractor की लागू करने से जुड़ी जानकारी का रनटाइम ऐक्सेस चाहिए, तो आपको सबसे पहले Extractor.getUnderlyingInstance को कॉल करना होगा.
    • BmpExtractor जोड़ें.
    • WebpExtractor जोड़ें.
    • HeifExtractor जोड़ें.
    • Mp4Extractor में, QuickTime classic के साथ काम करने की सुविधा जोड़ी गई.
  • ऑडियो:
    • MP4 और Matroska में 24/32-बिट बिग-एंडियन पीसीएम के लिए सहायता जोड़ी गई है. साथ ही, MP4 में lpcm के लिए पीसीएम एन्कोडिंग पार्स की गई है.
    • MP4 फ़ाइल से Vorbis ऑडियो निकालने की सुविधा जोड़ी गई.
    • AudioSink.getFormatOffloadSupport(Format) जोड़ें. यह AudioSink.getFormatOffloadSupport(Format) के ज़रिए, फ़ॉर्मैट के लिए सिंक की ओर से ऑफ़लोडिंग की सुविधा के लेवल को वापस लाता है.DefaultAudioOffloadSupportProvider यह AudioOffloadSupport की नई वैल्यू दिखाता है, जिसमें isFormatSupported, isGaplessSupported, और isSpeedChangeSupported शामिल हैं.
    • AudioSink.setOffloadMode() जोड़ें, जिसकी मदद से ऑडियो सिंक पर ऑफलोड कॉन्फ़िगरेशन कॉन्फ़िगर किया जाता है. डिफ़ॉल्ट वैल्यू AudioSink.OFFLOAD_MODE_DISABLED है.
    • TrackSelectionParameters में setAudioOffloadPreference के ज़रिए, ऑफ़लोड करने की सुविधा चालू की जा सकती है. अगर सेट की गई प्राथमिकता के मुताबिक, ऑडियो ऑफलोड की सुविधा चालू करनी है, डिवाइस पर उस फ़ॉर्मैट के लिए ऑडियो ऑफलोड की सुविधा काम करती है, और ट्रैक के तौर पर सिर्फ़ एक ऑडियो ट्रैक चुना गया है, तो ऑडियो ऑफलोड की सुविधा चालू हो जाएगी.
    • अगर audioOffloadModePreference को AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED पर सेट किया जाता है, तो DefaultTrackSelector सिर्फ़ एक ऑडियो ट्रैक चुनेगा. ऐसा सिर्फ़ तब होगा, जब उस ट्रैक का फ़ॉर्मैट, ऑफ़लोडिंग की सुविधा के साथ काम करता हो. अगर ऑफलोड किए गए वीडियो में कोई भी ऑडियो ट्रैक काम नहीं करता है, तो कोई भी ट्रैक नहीं चुना जाएगा.
    • ट्रैक ट्रांज़िशन के बाद, प्लेबैक की पोज़िशन से जुड़ी समस्या की वजह से, एपीआई लेवल 33 से पहले के वर्शन पर, ऑफ़लोड के लिए बिना रुकावट के चलने की सुविधा बंद कर दी गई है.
    • DefaultRenderersFactory.buildAudioSink मेथड के सिग्नेचर से enableOffload पैरामीटर हटाएं.
    • DefaultAudioSink.Builder.setOffloadMode को हटाएं.
    • intdef वैल्यू DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED हटाएं.
    • ऑफ़लोड किए गए कॉन्टेंट को चलाने के दौरान, Opus gapless मेटाडेटा के लिए सहायता जोड़ी गई.
    • पहली बार लिखने के दौरान गड़बड़ी होने पर, ऑफ़लोड करने की सुविधा बंद करके रेंडरर को वापस लाने की अनुमति दें (#627).
    • सिर्फ़-ऑडियो वाले ऑफ़लोड किए गए कॉन्टेंट को चलाने के लिए, ऑफ़लोड करने की शेड्यूलिंग की सुविधा डिफ़ॉल्ट रूप से चालू करें.
    • ExoPlayer.experimentalSetOffloadSchedulingEnabled और AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged को मिटाएं.
    • onExperimentalSleepingForOffloadChanged का नाम बदलकर onSleepingForOffloadChanged और onExperimentalOffloadedPlayback का नाम बदलकर onOffloadedPlayback कर दिया गया है.
    • ऑडियो ऑफ़लोड मोड से जुड़े TrackSelectionParameters इंटरफ़ेस और परिभाषाओं को इनर AudioOffloadPreferences क्लास में ले जाएं.
    • AnalyticsListener, AudioRendererEventListener, और AudioSink.Listener में onAudioTrackInitialized और onAudioTrackReleased कॉलबैक जोड़ें.
    • DTS Express में ऑडियो बफ़र अंडरफ़्लो की समस्या ठीक की गई है (#650).
    • उस गड़बड़ी को ठीक किया गया है जिसमें E-AC3-JOC के लिए, क्षमता की जांच करने पर IllegalArgumentException (#677) दिखता है.
  • वीडियो:
    • MediaCodecVideoRenderer को कस्टम VideoFrameProcessor.Factory इस्तेमाल करने की अनुमति दें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें ऑडियो स्ट्रीम के नेगेटिव टाइमस्टैंप से शुरू होने पर, पहला फ़्रेम रेंडर नहीं किया जा सकता था (#291).
  • टेक्स्ट:
    • ExoplayerCuesDecoder हटाएं. sampleMimeType = application/x-media3-cues वाले टेक्स्ट ट्रैक को अब सीधे तौर पर TextRenderer मैनेज करता है. इसके लिए, SubtitleDecoder इंस्टेंस की ज़रूरत नहीं होती.
  • मेटाडेटा:
    • MetadataDecoder.decode को अब "decode-only" सैंपल के लिए कॉल नहीं किया जाएगा, क्योंकि लागू करने पर, यह हमेशा शून्य वैल्यू दिखाता है.
  • असर:
    • टाइमस्टैंप के हिसाब से, VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) बिटमैप इनपुट को कतार में जोड़ता है.
    • VideoFrameProcessor.registerInputStream() को नॉन-ब्लॉकिंग में बदलें. ऐप्लिकेशन में VideoFrameProcessor.Listener#onInputStreamRegistered() लागू होना चाहिए.
    • VideoFrameProcessor.queueInputBitmap के frameRate और durationUs पैरामीटर को TimestampIterator में बदल दिया गया है.
  • IMA एक्सटेंशन:
    • उस बग को ठीक किया गया है जिसकी वजह से, प्लेलिस्ट में पहले आइटम के तौर पर शामिल नहीं की गई मल्टी-पीरियड डैश लाइव स्ट्रीम में अपवाद (#571) दिख सकता है.
    • AdsLoader.destroy() को कॉल करने से पहले, StreamManager को रिलीज़ करें
    • IMA SDK का वर्शन 3.31.0 पर अपडेट किया गया.
  • सेशन:
    • DefaultMediaNotificationProvider में सूचनाओं की फ़ोरग्राउंड सेवा के व्यवहार को FOREGROUND_SERVICE_IMMEDIATE पर सेट करें (#167).
    • Samsung डिवाइसों पर, बंद किए गए एपीआई से जुड़ी समस्याओं से बचने के लिए, सिर्फ़ android.media.session.MediaSession.setMediaButtonBroadcastReceiver() का इस्तेमाल करें. यह एपीआई 31 से ऊपर के वर्शन के लिए उपलब्ध है (#167).
    • मीडिया सूचना कंट्रोलर का इस्तेमाल प्रॉक्सी के तौर पर करें, ताकि उपलब्ध कमांड सेट की जा सकें. साथ ही, सूचना और प्लैटफ़ॉर्म सेशन को भरने के लिए इस्तेमाल किया गया कस्टम लेआउट सेट किया जा सके.
    • मीडिया बटन से जुड़े उन इवेंट को Media3 में MediaSessionService.onStartCommand() के ज़रिए मैनेज किया जाता है जो प्लैटफ़ॉर्म सेशन पर रूट होने के बजाय Media3 को मिलते हैं. इससे, कॉल करने वाले व्यक्ति के कंट्रोलर को हमेशा मीडिया सूचना कंट्रोलर के तौर पर सेट किया जाता है. साथ ही, ऐप्लिकेशन, सूचना से आने वाले कॉल को आसानी से पहचान सकते हैं. ऐसा सभी एपीआई लेवल पर एक ही तरीके से किया जाता है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी MediaSessionCompat से कनेक्ट होने पर, MediaController.getCurrentPosition() आगे नहीं बढ़ रहा था.
    • आसानी के लिए MediaLibrarySession.getSubscribedControllers(mediaId) जोड़ें.
    • MediaLibrarySession.Callback.onSubscribe() को बदलकर, उस पैरंट आईडी की उपलब्धता की पुष्टि करें जिसके लिए कंट्रोलर ने सदस्यता ली है. अगर सदस्यता स्वीकार कर ली जाती है, तो notifyChildrenChanged() को तुरंत कॉल किया जाता है, ताकि ब्राउज़र को इसकी सूचना दी जा सके (#561).
    • Automotive OS के लिए सेशन डेमो मॉड्यूल जोड़ें और Android Auto के लिए सेशन डेमो चालू करें.
    • मीडिया सूचना कंट्रोलर के लिए COMMAND_GET_TIMELINE उपलब्ध न होने पर, फ़्रेमवर्क सेशन की कतार सेट न करें. Android Auto को क्लाइंट कंट्रोलर के तौर पर इस्तेमाल किया जा रहा है. यह फ़्रेमवर्क सेशन से डेटा पढ़ता है. इससे Android Auto के यूज़र इंटरफ़ेस (यूआई) में queue बटन नहीं दिखता (#339).
    • डिफ़ॉल्ट रूप से SimpleBitmapLoader के बजाय DataSourceBitmapLoader का इस्तेमाल करें (#271, #327).
    • MediaSession.Callback.onMediaButtonEvent(Intent) जोड़ें, ताकि ऐप्लिकेशन मीडिया बटन के इवेंट हैंडलिंग के डिफ़ॉल्ट तरीके को बदल सकें.
  • यूआई:
    • Wear OS डिवाइसों के लिए Player.Listener लागू करें.इससे Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT की वजह से होने वाले प्लेबैक को रोका जा सकेगा. इसके लिए, सिस्टम डायलॉग लॉन्च किया जाएगा, ताकि उपयोगकर्ता ऑडियो आउटपुट (जैसे, ब्लूटूथ हेडफ़ोन) को कनेक्ट कर सके. अगर कॉन्फ़िगर किए गए टाइम आउट (डिफ़ॉल्ट रूप से पांच मिनट) के अंदर कोई सही डिवाइस कनेक्ट होता है, तो सुनने वाले व्यक्ति के डिवाइस पर संगीत अपने-आप चलने लगेगा.
  • डाउनलोड:
    • Android 14 के साथ काम करने के लिए, DownloadService के लिए "डेटा सिंक" फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इस सेवा का इस्तेमाल करते समय, ऐप्लिकेशन को मेनिफ़ेस्ट में dataSync को foregroundServiceType के तौर पर जोड़ना होगा. साथ ही, FOREGROUND_SERVICE_DATA_SYNC अनुमति (#11239) जोड़नी होगी.
  • एचएलएस एक्सटेंशन:
    • एचएलएस लाइव प्लेलिस्ट को रीफ़्रेश करने के लिए, आखिरी बार लोड होने के समय के बजाय, आखिरी बार लोड होने के शुरू होने के समय के आधार पर अंतराल की गणना की जाती है (#663).
  • डैश एक्सटेंशन:
    • सेगमेंट टेंप्लेट यूआरएल में, एक से ज़्यादा बार एक ही DASH आइडेंटिफ़ायर का इस्तेमाल करने की अनुमति देता है.
    • एक्सट्रैक्शन के दौरान सबटाइटल पार्स करने की सुविधा को एक्सपेरिमेंट के तौर पर जोड़ा गया है. इसमें ओवरलैप होने वाले सबटाइटल को मर्ज करने की सुविधा बेहतर तरीके से काम करती है. साथ ही, सबटाइटल सेगमेंट के बीच ट्रांज़िशन करते समय होने वाली फ़्लिकरिंग की समस्या को ठीक किया जाता है. DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288) का इस्तेमाल करके, इस सुविधा को चालू किया जा सकता है.
  • आरटीएसपी एक्सटेंशन:
    • रेस कंडीशन की समस्या ठीक की गई है. इससे टीसीपी पर वापस आने पर IndexOutOfBoundsException की समस्या हो सकती थी या कुछ मामलों में वीडियो रुक सकता था.
    • RtspMediaPeriod (#577) की लोडिंग की स्थिति वापस लाते समय, आरटीएसपी सेटअप में स्थिति की जांच करें.
    • Options रिस्पॉन्स के सार्वजनिक हेडर में, कस्टम आरटीएसपी अनुरोध के तरीकों को अनदेखा करें (#613).
    • RTSP सेटअप रिस्पॉन्स के टाइम आउट की वैल्यू का इस्तेमाल, RTSP Options के कीप-अलाइव अनुरोध भेजने के समय अंतराल में करें (#662).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
    • एमआईडीआई डीकोडर मॉड्यूल रिलीज़ किया गया है. यह Jsyn लाइब्रेरी का इस्तेमाल करके, स्टैंडर्ड एमआईडीआई फ़ाइलों को चलाने की सुविधा देता है. इससे ऑडियो को सिंथेसाइज़ किया जा सकता है.
    • DecoderOutputBuffer.shouldBeSkipped जोड़कर, उन आउटपुट बफ़र को सीधे तौर पर मार्क करें जिन्हें दिखाने की ज़रूरत नहीं है. इसे C.BUFFER_FLAG_DECODE_ONLY के बजाय इस्तेमाल करने का सुझाव दिया जाता है. C.BUFFER_FLAG_DECODE_ONLY को बंद कर दिया जाएगा.
    • Decoder.setOutputStartTimeUs और SimpleDecoder.isAtLeastOutputStartTimeUs को जोड़ें, ताकि डिकोडर, शुरू होने के समय से पहले सिर्फ़ डिकोड किए गए सैंपल छोड़ सकें. इसे Buffer.isDecodeOnly के बजाय इस्तेमाल करना चाहिए, क्योंकि Buffer.isDecodeOnly को बंद कर दिया जाएगा.
    • एमआईडीआई डिकोडर आर्टफ़ैक्ट को Maven रिपॉज़िटरी में पब्लिश करने से जुड़ी गड़बड़ी को ठीक किया गया है. आर्टफ़ैक्ट का नाम बदलकर media3-exoplayer-midi कर दिया गया है #734.
  • लीन्बैक एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, किसी प्लैटफ़ॉर्म को बंद करने पर Leanback कोड में ArithmeticException आ सकता था (#617).
  • टेस्ट यूटिलिटी:
    • 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 से उपलब्ध ट्रैक टाइप को फ़िल्टर किया जा सके.
    • अब अडेप्टिव स्ट्रीमिंग फ़ॉर्मैट DASH, HLS, और SmoothStreaming के आउटगोइंग अनुरोधों में, कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) शामिल किया जा सकता है. इन फ़ील्ड को शामिल किया गया है: br, bl, cid, rtp, और sid (#8699). एपीआई स्ट्रक्चर और एपीआई के तरीके:
      • सीएमसीडी लॉगिंग डिफ़ॉल्ट रूप से बंद होती है. इसे चालू करने के लिए, MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) का इस्तेमाल करें.
      • डिफ़ॉल्ट रूप से सभी कुंजियां चालू होती हैं. लॉग की गई कुंजियों को फ़िल्टर करने के लिए, CmcdConfiguration.RequestConfig.isKeyAllowed(String key) को बदलें.
      • कस्टम कुंजी लॉगिंग की सुविधा चालू करने के लिए, CmcdConfiguration.RequestConfig.getCustomData() को ओवरराइड करें.
    • मुख्य डेमो के मेनिफ़ेस्ट में एक और कार्रवाई जोड़ी गई है, ताकि कस्टम *.exolist.json फ़ाइल के साथ डेमो ऐप्लिकेशन को आसानी से शुरू किया जा सके (#439).
    • वीडियो चलाने के दौरान ExoPlayer.setVideoEffects() का इस्तेमाल करने के लिए, ExoPlayer.setVideoEffects() जोड़ें.Effect
    • 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) के बीच अलग-अलग व्यवहार की समस्या ठीक की गई.
  • ट्रांसफ़ॉर्मर:
    • 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 नया ट्रैक चुनने की सुविधा ट्रिगर होगी.
  • डेटा निकालने वाले टूल:
    • Ogg: लंबी अवधि वाली फ़ाइलों में ढूंढते समय आने वाली गड़बड़ी को ठीक किया गया है (#391).
    • FMP4: उस समस्या को ठीक किया गया है जिसमें TimestampAdjuster, emsg ऐटम (#356) से मेटाडेटा के सैंपल टाइम के साथ गलत टाइमस्टैंप ऑफ़सेट शुरू करता है.
  • ऑडियो:
    • उस गड़बड़ी को ठीक किया गया है जिसमें टनलिंग चालू होने पर, कुछ वीडियो नहीं चलते थे.साथ ही, AudioProcessors चालू थे. उदाहरण के लिए, बिना किसी रुकावट के वीडियो ट्रिम करने की सुविधा (#10847).
    • सीधे तौर पर चलाए जाने वाले वीडियो (ऑफ़लोड) में, ओग पैकेट में ओपस फ़्रेम को शामिल करें.
    • स्लीप मोड के दौरान, ऑफ़लोड शेड्यूल करने की सुविधा की मदद से मौजूदा जगह का अनुमान लगाएं.
    • खिलाड़ी के लाइफ़साइकल के आखिर में, संसाधनों को रिलीज़ करने के लिए Renderer.release() और AudioSink.release() जोड़ें.
    • DefaultAudioSink में ऑडियो से जुड़ी सुविधाओं में होने वाले बदलावों के बारे में सूचनाएं पाएं. DefaultAudioSink के कंस्ट्रक्टर में ज़रूरी पैरामीटर context जोड़ें. इससे DefaultAudioSink, AudioCapabilitiesReceiver के लिसनर के तौर पर रजिस्टर हो जाएगा. साथ ही, क्षमता में बदलाव होने पर, audioCapabilities प्रॉपर्टी को अपडेट कर देगा.
    • onAudioCapabilitiesChanged इंटरफ़ेस में नए इवेंट और RendererCapabilities.Listener नए इंटरफ़ेस के ज़रिए, ऑडियो की सुविधाओं में हुए बदलावों को लागू करें. इससे onRendererCapabilitiesChanged इवेंट ट्रिगर होते हैं.AudioSink.Listener
    • ऑडियो चैनलों पर स्केलिंग/मिक्सिंग लागू करने के लिए, ChannelMixingAudioProcessor जोड़ा गया.
    • ऑडियो की सुविधाओं में बदलाव होने के बाद, बाईपास मोड चालू होने पर ऑडियो डिकोडर को बंद करने के लिए, DecoderDiscardReasons में नई पूर्णांक वैल्यू DISCARD_REASON_AUDIO_BYPASS_POSSIBLE जोड़ें.
    • DTS Express और DTS:X के लिए, सीधे तौर पर प्लेबैक की सुविधा जोड़ी गई है (#335).
  • वीडियो:
    • रेंडरर बंद होने पर, MediaCodecVideoRenderer को 0 चौड़ाई और ऊंचाई वाला VideoSize रिपोर्ट करने के लिए कहें. Player.Listener.onVideoSizeChanged में बदलाव होने पर, Player.Listener.onVideoSizeChanged को कॉल किया जाता है.Player.getVideoSize() इस बदलाव के बाद, MediaCodecVideoRenderer के साथ ExoPlayer के वीडियो का साइज़ 0 होता है. ऐसा तब होता है, जब MediaCodecVideoRenderer वीडियो के साथ काम नहीं करता या वीडियो ट्रैक का साइज़ अब तक तय नहीं किया गया है.Player.getCurrentTracks
  • DRM:
    • DefaultDrmSession पर, सिर्फ़ इंटरनल इस्तेमाल के लिए उपलब्ध कई तरीकों की विज़िबिलिटी कम करें. इन तरीकों को DRM पैकेज के बाहर से कॉल नहीं किया जाना चाहिए:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • एक नई मक्सर लाइब्रेरी जोड़ी गई है. इसका इस्तेमाल MP4 कंटेनर फ़ाइल बनाने के लिए किया जा सकता है.
  • IMA एक्सटेंशन:
    • डीएआई के लिए, एक से ज़्यादा अवधि वाली लाइव डीएएसएच स्ट्रीम चालू करें. कृपया ध्यान दें कि फ़िलहाल, लाइव स्ट्रीम में आगे-पीछे करने की सुविधा काम नहीं करती (#10912).
    • उस बग को ठीक किया गया है जिसकी वजह से लाइव स्ट्रीम में नया विज्ञापन ग्रुप डाला जाता था. ऐसा इसलिए होता था, क्योंकि लगातार टाइमलाइन में कॉन्टेंट की कैलकुलेट की गई पोज़िशन में थोड़ा अंतर होता था.
  • सेशन:
    • MediaSession.getControllerForCurrentRequest हेल्पर मेथड जोड़ें, ताकि उस कंट्रोलर के बारे में जानकारी मिल सके जो फ़िलहाल Player मेथड को कॉल कर रहा है.
    • androidx.media3.session.MediaButtonReceiver को जोड़ें, ताकि ऐप्लिकेशन, मीडिया बटन के इवेंट के साथ कॉन्टेंट को फिर से चलाने की सुविधा लागू कर सकें. ये इवेंट, ब्लूटूथ हेडसेट (#167) जैसे डिवाइसों से भेजे जाते हैं.
    • MediaSession.Callback.onAddMediaItems में डिफ़ॉल्ट सेटिंग लागू करें, ताकि अनुरोध किए गए MediaItems को Player में पास किया जा सके. ऐसा तब किया जा सकता है, जब उनमें LocalConfiguration (जैसे, यूआरआई) मौजूद हो (#282).
    • Android 12 और इससे पहले के वर्शन के लिए, मीडिया सूचना के कॉम्पैक्ट व्यू में डिफ़ॉल्ट रूप से "पिछले पर जाएं" और "अगले पर जाएं" कमांड बटन जोड़ें (#410).
    • MediaSession.Callback.onAddMediaItems में डिफ़ॉल्ट सेटिंग लागू करने की सुविधा जोड़ी गई है, ताकि अनुरोध किए गए MediaItems को Player में पास किया जा सके. ऐसा तब किया जा सकेगा, जब उनमें LocalConfiguration (जैसे, यूआरआई) मौजूद हो (#282).
    • Android 12 और इससे पहले के वर्शन के लिए, मीडिया सूचना के कॉम्पैक्ट व्यू में डिफ़ॉल्ट रूप से "पिछले पर जाएं" और "अगले पर जाएं" कमांड बटन जोड़ें (#410).
  • यूआई:
    • प्ले/रोकें बटन के साथ कस्टम यूज़र इंटरफ़ेस (यूआई) एलिमेंट लिखने के लिए, Util के shouldShowPlayButton और handlePlayPauseButtonAction तरीके जोड़ें.
  • आरटीएसपी एक्सटेंशन:
    • अगर Describe Response SDP मैसेज में MPEG4-LATM के लिए profile-level-id वैल्यू मौजूद नहीं है, तो डिफ़ॉल्ट वैल्यू का इस्तेमाल करें (#302).
    • अगर DESCRIBE रिस्पॉन्स हेडर में मौजूद है, तो RTSP सेशन से रिलेटिव पाथ रिज़ॉल्यूशन के लिए बेस यूआरआई का इस्तेमाल करें (#11160).
  • डैश एक्सटेंशन:
    • एक से ज़्यादा समयावधि वाली DASH स्ट्रीम के लिए, MediaLoadData.startTimeMs और MediaLoadData.endTimeMs से मीडिया टाइम ऑफ़सेट हटाएं.
    • उस गड़बड़ी को ठीक किया गया है जिसमें एक से ज़्यादा अवधि वाले लाइव डैश मीडिया सोर्स को फिर से तैयार करने पर, IndexOutOfBoundsException (#10838) गड़बड़ी होती थी.
  • एचएलएस एक्सटेंशन:
    • 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 पैरामीटर देने का विकल्प शामिल होता है.
    • Format क्लास को इंस्टैंशिएट करने के लिए इस्तेमाल किए गए, काम न करने वाले तरीके createVideoSampleFormat, createAudioSampleFormat, createContainerFormat, और createSampleFormat हटाएं. इसके बजाय, Format के इंस्टेंस बनाने के लिए Format.Builder का इस्तेमाल करें.
    • इस्तेमाल नहीं किए जा रहे तरीकों copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate और copyWithVideoSize को हटाएं. इसके बजाय, Format.buildUpon() और सेटर तरीकों का इस्तेमाल करें.
    • इस्तेमाल बंद किए जा चुके ExoPlayer.retry() को हटाएं. इसके बजाय, prepare() का इस्तेमाल करें.
    • बंद किए गए ज़ीरो-आर्ग DefaultTrackSelector कंस्ट्रक्टर को हटाएं. इसके बजाय, DefaultTrackSelector(Context) का इस्तेमाल करें.
    • इस्तेमाल बंद किए गए OfflineLicenseHelper कंस्ट्रक्टर को हटाएं. इसके बजाय, OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) का इस्तेमाल करें.
    • इस्तेमाल बंद किए गए DownloadManager कंस्ट्रक्टर को हटाएं. इसके बजाय, DownloadManager लेने वाले कंस्ट्रक्टर का इस्तेमाल करें.Executor
    • इस्तेमाल बंद किए जा चुके Cue कंस्ट्रक्टर हटाएं. इसके बजाय, Cue.Builder का इस्तेमाल करें.
    • इस्तेमाल बंद किए गए OfflineLicenseHelper कंस्ट्रक्टर को हटाएं. इसके बजाय, OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) का इस्तेमाल करें.
    • अब इस्तेमाल में नहीं आने वाले चार AnalyticsListener तरीकों को हटाएं:
      • onDecoderEnabled के बजाय, onAudioEnabled और/या onVideoEnabled का इस्तेमाल करें.
      • onDecoderInitialized के बजाय, onAudioDecoderInitialized और/या onVideoDecoderInitialized का इस्तेमाल करें.
      • onDecoderInputFormatChanged के बजाय, onAudioInputFormatChanged और/या onVideoInputFormatChanged का इस्तेमाल करें.
      • onDecoderDisabled के बजाय, onAudioDisabled और/या onVideoDisabled का इस्तेमाल करें.
    • हटाए गए Player.Listener.onSeekProcessed और AnalyticsListener.onSeekProcessed को हटाएं. इसके बजाय, DISCONTINUITY_REASON_SEEK के साथ onPositionDiscontinuity का इस्तेमाल करें.
    • ExoPlayer.setHandleWakeLock(boolean) हटाएं और इसके बजाय setWakeMode(int) का इस्तेमाल करें.
    • बहिष्कृत किए गए DefaultLoadControl.Builder.createDefaultLoadControl() को हटाएं. इसके बजाय, build() का इस्तेमाल करें.
    • इस्तेमाल बंद किए जा चुके MediaItem.PlaybackProperties को हटाएं. इसके बजाय, MediaItem.LocalConfiguration का इस्तेमाल करें. MediaItem.playbackProperties एट्रिब्यूट की वैल्यू के तौर पर दिया गया फ़ील्ड अब MediaItem.LocalConfiguration टाइप का है.

वर्शन 1.1.0-rc01

21 जून, 2023

1.1.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.1.0-beta01

7 जून, 2023

1.1.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.1.0-alpha01

10 मई, 2023

1.1.0 स्टेबल वर्शन का इस्तेमाल करें.

वर्शन 1.0.0

वर्शन 1.0.2

18 मई, 2023

androidx.media3:media3-*:1.0.2 रिलीज़ हो गया है. वर्शन 1.0.2 में ये बदलाव शामिल हैं.

यह रिलीज़, ExoPlayer 2.18.7 रिलीज़ से जुड़ी है.

1.0.1 रिलीज़ के बाद से, इस रिलीज़ में ये बदलाव किए गए हैं:

  • कोर लाइब्रेरी:
    • Buffer.isLastSample() एट्रिब्यूट जोड़ें. इससे पता चलता है कि Buffer में फ़्लैग C.BUFFER_FLAG_LAST_SAMPLE शामिल है या नहीं.
    • उस समस्या को ठीक किया गया है जिसमें फ़्रेम वाले आखिरी सैंपल को 'स्ट्रीम खत्म' सैंपल पढ़े बिना डीक्यू करने पर, आखिरी फ़्रेम रेंडर नहीं होता था. (#11079).
  • डेटा निकालने वाले टूल:
    • MPEG-TS फ़ाइलों में H.265 SPS को पार्स करने की समस्या ठीक की गई है. इसके लिए, RTSP और MP4 एक्सट्रैक्टर के लिए पहले से इस्तेमाल किए जा रहे पार्सिंग लॉजिक का फिर से इस्तेमाल किया गया है (#303).
  • टेक्स्ट:
    • एसएसए: अगर UTF-16 फ़ाइलें बाइट ऑर्डर मार्क (#319) से शुरू होती हैं, तो उनके लिए सहायता जोड़ें.
  • सेशन:
    • उस समस्या को ठीक किया गया है जिसमें MediaController, लेगसी MediaSessionCompat से कनेक्ट होने पर उपलब्ध कमांड अपडेट नहीं करता है. लेगसी 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 सेटअप, RTSP Error 461 UnsupportedTransport (#11069) के साथ काम नहीं करता है, तो टीसीपी के साथ फिर से कोशिश करें.

वर्शन 1.0.0

22 मार्च, 2023

androidx.media3:media3-*:1.0.0 रिलीज़ हो गया है. वर्शन 1.0.0 में ये बदलाव शामिल हैं.

यह रिलीज़, ExoPlayer 2.18.5 रिलीज़ से जुड़ी है.

1.0.0-rc02 के बाद से कोई बदलाव नहीं हुआ है.

वर्शन 1.0.0-rc02

2 मार्च, 2023

androidx.media3:media3-*:1.0.0-rc02 रिलीज़ हो गया है. वर्शन 1.0.0-rc02 में ये बदलाव शामिल हैं.

यह रिलीज़, ExoPlayer 2.18.4 रिलीज़ से जुड़ी है.

  • कोर लाइब्रेरी:
    • एपीआई 33 पर नेटवर्क टाइप का पता लगाने की सुविधा से जुड़ी समस्या ठीक की गई है (#10970).
    • ExoPlayer.isTunnelingEnabled को कॉल करते समय NullPointerException की समस्या ठीक की गई (#10977).
  • डाउनलोड:
    • SegmentDownloader और सबक्लास में, मर्ज किए जाने वाले दो सेगमेंट के शुरू होने के समय के बीच के अंतर को कॉन्फ़िगर करने की सुविधा जोड़ें (#248).
  • ऑडियो:
    • Samsung डिवाइसों पर, बिना रुके MP3 चलाने की सुविधा से जुड़ी समस्या ठीक की गई है (#8594).
    • उस बग को ठीक किया गया है जिसमें ऑडियो बंद करने के तुरंत बाद सेट की गई स्पीड, स्पीड में किए गए पिछले बदलाव से बदल जाती थी (#10882).
  • वीडियो:
    • HEVC HDR10 फ़ॉर्मैट को HEVCProfileMain10 के बजाय HEVCProfileMain10HDR10 पर मैप करें.
    • Chromecast with Google TV और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को ठीक करने के लिए, वर्कअराउंड जोड़ा गया है. इस समस्या की वजह से, 60fps AVC स्ट्रीम को काम न करने वाली स्ट्रीम के तौर पर मार्क किया जाता है (#10898).
    • स्क्रीन रीफ़्रेश रेट से बहुत ज़्यादा फ़्रेम रेट वाले मीडिया को चलाने पर, फ़्रेम रिलीज़ करने से जुड़ी परफ़ॉर्मेंस की समस्याओं को ठीक किया गया है.
  • कास्ट करें:
    • मीडिया आइटम के बीच ट्रांज़िशन करते समय, कुछ समय के लिए दिखने वाली STATE_IDLE को ठीक किया गया है (#245).
  • RTSP:
    • अमान्य RTSP Describe रिस्पॉन्स मैसेज को पार्स करने के दौरान, IllegalArgumentException को पकड़ा गया (#10971).
  • सेशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें सूचना में मौजूद 'चलाएं/रोकें' बटन, प्लेयर की स्थिति के साथ अपडेट नहीं होता है (#192).
  • IMA एक्सटेंशन:
    • उस बग को ठीक किया गया है जिसकी वजह से, बिना किसी विज्ञापन वाली डीएआई स्ट्रीम शुरू नहीं हो पाती थीं. ऐसा इसलिए होता था, क्योंकि पहला (और बिना विज्ञापन वाली स्ट्रीम के मामले में सिर्फ़) LOADED इवेंट नहीं मिला था.

वर्शन 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).
  • ऑडियो:
    • कंप्रेस किए गए ऑडियो फ़ॉर्मैट के बिटरेट का इस्तेमाल करके, डायरेक्ट प्लेबैक (पासथ्रू) में AudioTrack के लिए बफ़र के कम से कम साइज़ का हिसाब लगाएं.
  • टेक्स्ट:
    • अगर किसी सबटाइटल फ़ाइल में कोई क्यू नहीं है, तो Subtitle.getEventTime को अमान्य (नेगेटिव) इंडेक्स पास करने की समस्या को ठीक करें.TextRenderer
    • SubRip: अगर UTF-16 फ़ाइलें बाइट ऑर्डर मार्क से शुरू होती हैं, तो उनके लिए सहायता जोड़ी गई है.
  • मेटाडेटा:
    • ID3 फ़्रेम से, शून्य से अलग की गई कई वैल्यू पार्स करता है. ऐसा ID3 v2.4 की अनुमति के मुताबिक किया जाता है.
    • मेटाडेटा में बताए गए कॉन्टेंट या फ़ोल्डर के टाइप को दिखाने के लिए, MediaMetadata.mediaType जोड़ें.
    • MediaMetadata.isBrowsable को MediaMetadata.folderType के बदले में जोड़ें. अगले रिलीज़ में, फ़ोल्डर टाइप काम नहीं करेगा.
  • डैश:
    • इमेज अडैप्टेशन सेट के लिए पूरी पार्सिंग की सुविधा जोड़ी गई है. इसमें टाइल की संख्या भी शामिल है (#3752).
  • यूआई:
    • डिप्रेकेट किए गए PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) को ठीक करें, ताकि दिखने की सेटिंग में हुए बदलावों को रजिस्टर किए गए लिसनर (#229) को भेजा जा सके.
    • दाईं से बाईं ओर (आरटीएल) लेआउट का इस्तेमाल करते समय, PlayerView में सेंटर प्लेयर कंट्रोल के क्रम को ठीक किया गया है (#227).
  • सेशन:
    • कस्टम प्लेयर के लिए Player इंटरफ़ेस लागू करने में मदद पाने के लिए, ऐब्स्ट्रैक्ट SimpleBasePlayer जोड़ें.
    • प्लैटफ़ॉर्म सेशन टोकन को Media3 में बदलने के लिए हेल्पर मेथड जोड़ें SessionToken (#171).
    • प्लैटफ़ॉर्म मीडिया सेशन (#219) के अपडेट को ट्रिगर करने के लिए, onMediaMetadataChanged का इस्तेमाल करें.
    • मीडिया सेशन को getMediaButtons() के आर्ग्युमेंट के तौर पर जोड़ें. साथ ही, DefaultMediaNotificationProvider के लिए अपरिवर्तनीय सूचियों का इस्तेमाल करें, ताकि जानकारी साफ़ तौर पर दी जा सके (#216).
    • onSetMediaItems कॉलबैक लिसनर जोड़ा गया है, ताकि MediaItem सूची, शुरुआती इंडेक्स, और पोज़िशन में बदलाव किया जा सके या उन्हें सेट किया जा सके. ऐसा, प्लेयर पर सेट करने से पहले सेशन के हिसाब से किया जा सकता है (#156).
    • नॉन-ब्लूटूथ मीडिया बटन इवेंट के लिए, दो बार टैप करने की सुविधा को बंद किया गया (#233).
    • लेगसी सेशन की संदिग्ध स्थिति में QueueTimeline को ज़्यादा मज़बूत बनाएं (#241).
  • मेटाडेटा:
    • ID3 फ़्रेम से, शून्य से अलग की गई कई वैल्यू पार्स करता है. ऐसा ID3 v2.4 की अनुमति के मुताबिक किया जाता है.
    • मेटाडेटा में बताए गए कॉन्टेंट या फ़ोल्डर के टाइप को दिखाने के लिए, MediaMetadata.mediaType जोड़ें.
    • MediaMetadata.isBrowsable को MediaMetadata.folderType के बदले में जोड़ें. अगले रिलीज़ में, फ़ोल्डर टाइप काम नहीं करेगा.
  • कास्ट एक्सटेंशन:
    • Cast SDK के वर्शन को 21.2.0 पर अपग्रेड किया गया है.
  • IMA एक्सटेंशन:
    • थ्रेडिंग से जुड़ी समस्याओं से बचने के लिए, ऐप्लिकेशन थ्रेड पर ImaServerSideAdInsertionMediaSource के प्लेयर लिसनर को हटाएं.
    • टीवी डिवाइसों पर स्किप बटन को फ़ोकस करने का अनुरोध करने के लिए, ImaServerSideAdInsertionMediaSource.AdsLoader.Builder में focusSkipButtonWhenAvailable प्रॉपर्टी जोड़ें. साथ ही, इसे डिफ़ॉल्ट रूप से सही पर सेट करें.
    • प्रोग्राम के हिसाब से, स्किप बटन पर फ़ोकस करने का अनुरोध करने के लिए, ImaServerSideAdInsertionMediaSource.AdsLoader में focusSkipButton() तरीका जोड़ें.
    • IMA SDK टूल का वर्शन 3.29.0 पर अपडेट किया गया.
  • डेमो ऐप्लिकेशन:
    • रनटाइम के दौरान, डाउनलोड की सूचनाओं के लिए सूचना की अनुमति का अनुरोध करें (#10884).

वर्शन 1.0.0-beta03

22 नवंबर, 2022

androidx.media3:media3-*:1.0.0-beta03 रिलीज़ हो गया है. वर्शन 1.0.0-beta03 में ये बदलाव शामिल हैं.

यह रिलीज़, ExoPlayer 2.18.2 रिलीज़ से जुड़ी है.

  • कोर लाइब्रेरी:
    • यह देखने के लिए कि फ़िलहाल चुने गए ट्रैक के लिए टनलिंग की सुविधा चालू है या नहीं, ExoPlayer.isTunnelingEnabled जोड़ें (#2518).
    • किसी एक MediaSource को रैप करने की प्रोसेस को आसान बनाने के लिए, WrappingMediaSource जोड़ें (#7279).
    • वीडियो चलाने के लिए ज़रूरी मेमोरी उपलब्ध न होने की वजह से, वीडियो अटकने से पहले बैक बफ़र को खारिज करें.
    • ऑफलोड की सुविधा चालू होने पर, Tracing "doSomeWork" ब्लॉक बंद करें.
    • PlaybackStatsListener में तेज़ी से खोज करने पर, सेशन ट्रैकिंग से जुड़ी समस्या ठीक की गई है #180.
    • एक आइटम वाली प्लेलिस्ट में seekToNext या seekToPrevious को कॉल करते समय, onMediaItemTransition कॉलबैक भेजने की सुविधा काम नहीं करती (#10667).
    • Player.getSurfaceSize जोड़ें. इससे उस जगह का साइज़ पता चलता है जहां वीडियो रेंडर किया गया है.
    • उस बग को ठीक किया गया है जिसकी वजह से, प्लेयर रिलीज़ के दौरान लिसनर हटाने पर IllegalStateException (#10758) हो सकता है.
  • बनाएं:
    • कंपाइलेशन से जुड़ी गड़बड़ियों से बचने के लिए, कम से कम compileSdkVersion लागू करें (#10684).
    • किसी दूसरे ग्रैडल बिल्ड में शामिल होने पर, पब्लिशिंग ब्लॉक करने से बचें.
  • ट्रैक चुनने की सुविधा:
    • अगर डिसप्ले पर Dolby Vision काम नहीं करता है, तो Dolby Vision के बजाय अन्य ट्रैक को प्राथमिकता दें. (#8944).
  • डाउनलोड:
    • ProgressiveDownloader में संभावित इनफ़ाइनाइट लूप की समस्या ठीक की गई. यह समस्या, एक ही PriorityTaskManager को एक साथ डाउनलोड और चलाने की वजह से हुई थी (#10570).
    • डाउनलोड होने की सूचना तुरंत दिखें (#183).
    • एक साथ कई फ़ाइलें डाउनलोड करने की सुविधा को बंद कर दिया गया है, ताकि ज़्यादा थ्रेड न बन पाएं (#10458).
  • वीडियो:
    • अगर डिसप्ले पर Dolby Vision काम नहीं करता है, तो इसके लिए कोई दूसरा डिकोडर इस्तेमाल करें. (#9794).
  • ऑडियो:
    • एक साथ कई खिलाड़ियों को रिलीज़ करते समय, OutOfMemory गड़बड़ियों से बचने के लिए, AudioTrack इंस्टेंस रिलीज़ करने के लिए SingleThreadExecutor का इस्तेमाल करें (#10057).
    • यह कुकी, AudioTrack के ऑफ़लोड स्टेटस के लिए AudioOffloadListener.onExperimentalOffloadedPlayback जोड़ती है. (#134).
    • AudioTrackBufferSizeProvider को सार्वजनिक इंटरफ़ेस बनाओ.
    • #135 पसंदीदा ऑडियो आउटपुट डिवाइस सेट करने के लिए, ExoPlayer.setPreferredAudioDevice जोड़ें.
    • androidx.media3.exoplayer.audio.AudioProcessor का नाम बदलकर androidx.media3.common.audio.AudioProcessor करें.
    • Android के सभी वर्शन पर, 8-चैनल और 12-चैनल वाले ऑडियो को 7.1 और 7.1.4 चैनल मास्क पर मैप किया गया है (#10701).
  • मेटाडेटा:
    • 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 बिल्डर, सूचना आईडी, सूचना चैनल आईडी, और सूचना चैनल का नाम कॉन्फ़िगर कर सकता है. इनका इस्तेमाल सेवा देने वाली कंपनी करती है. साथ ही, सूचनाओं के छोटे आइकॉन को सेट करने के लिए, method DefaultMediaNotificationProvider.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:
    • H263 के फ़्रैगमेंट किए गए पैकेट को हैंडल करने की सुविधा जोड़ी गई है (#119).
    • MP4A-LATM के लिए सहायता जोड़ें (#162).
  • आईएमए:
    • विज्ञापन की जानकारी लोड करने के लिए टाइम आउट जोड़ें, ताकि उन मामलों को हैंडल किया जा सके जहां IMA SDK, विज्ञापन लोड करने में अटक जाता है (#10510).
    • कॉन्टेंट के आखिर में जाने पर, वीडियो के बीच में दिखने वाले विज्ञापनों को स्किप करने से रोकें (#10685).
    • सर्वर-साइड पर डाले गए विज्ञापनों वाली लाइव स्ट्रीम के लिए, विंडो की अवधि का सही हिसाब लगाया जाता है. उदाहरण के लिए, IMA DAI (#10764).
  • FFmpeg एक्सटेंशन:
    • NDK 23.1.7779620 और इसके बाद के वर्शन के साथ FFmpeg लाइब्रेरी लिंक करने के लिए, नए फ़्लैग जोड़े गए (#9933).
  • AV1 एक्सटेंशन:
    • CMake के वर्शन को अपडेट करें, ताकि Android Studio के नए वर्शन के साथ काम न करने से जुड़ी समस्याओं से बचा जा सके (#9933).
  • कास्ट एक्सटेंशन:
    • getDeviceInfo() को लागू करें, ताकि MediaController (#142) की मदद से वीडियो चलाने की सुविधा को कंट्रोल करते समय, CastPlayer की पहचान की जा सके.
  • ट्रांसफ़ॉर्मर:
    • आउटपुट सैंपल जनरेट करने में ज़्यादा समय लगने का पता लगाने के लिए, muxer वॉचडॉग टाइमर जोड़ें.
  • हटाए गए सिंबल हटाएं:
    • Transformer.Builder.setOutputMimeType(String) हटाएं. यह सुविधा हटा दी गई है. डिफ़ॉल्ट मक्सर का इस्तेमाल करने पर, MIME टाइप हमेशा MP4 होगा.

वर्शन 1.0.0-beta02

21 जुलाई, 2022

androidx.media3:media3-*:1.0.0-beta02 रिलीज़ हो गया है. वर्शन 1.0.0-beta02 में ये बदलाव शामिल हैं.

यह रिलीज़, ExoPlayer 2.18.1 रिलीज़ से जुड़ी है.

  • कोर लाइब्रेरी:
    • पक्का करें कि ShuffleOrder को ExoPlayer.setShuffleOrder से बदलने पर, Player.Listener#onTimelineChanged को reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889) पर कॉल किया जा रहा हो.
    • प्रोग्रेसिव मीडिया के लिए, बफ़र की गई पोज़िशन में सिर्फ़ चुने गए ट्रैक शामिल करें (#10361).
    • ExoPlayer के सभी लॉग आउटपुट के लिए, कस्टम लॉगर की अनुमति दें (#9752).
    • DefaultMediaSourceFactory में setDataSourceFactory को लागू करने की समस्या ठीक की गई है. कुछ मामलों में यह काम नहीं कर रहा था (#116).
  • डेटा निकालने वाले टूल:
    • H265 के शॉर्ट टर्म रेफ़रंस पिक्चर सेट की पार्सिंग से जुड़ी समस्या ठीक की गई है (#10316).
    • esds बॉक्स से बिटरेट पार्स करने की समस्या ठीक की गई है (#10381).
  • डैश:
    • मेनिफ़ेस्ट से ClearKey लाइसेंस का यूआरएल पार्स करें (#10246).
  • यूआई:
    • पक्का करें कि TalkBack, वीडियो चलाने की स्पीड के लिए चुने गए विकल्प के बारे में बताए. यह विकल्प, वीडियो चलाने से जुड़े कंट्रोल मेन्यू में मौजूद होता है (#10298).
  • RTSP:
    • VP8 के फ़्रैगमेंट किए गए पैकेट को हैंडल करने की सुविधा जोड़ी गई है (#110).
  • लीन्बैक एक्सटेंशन:
    • LeanbackAdapter में playWhenReady में हुए बदलावों के बारे में सुनें (10420).
  • कास्ट करें:
    • MediaItem का इस्तेमाल करें, जिसे प्लेलिस्ट के तरीकों में CastTimeline (#25, #8212) में Window.mediaItem के तौर पर पास किया गया है.
    • CastPlayer (#25) के साथ Player.getMetadata() और Listener.onMediaMetadataChanged() का इस्तेमाल किया जा सकता है.

वर्शन 1.0.0-beta01

16 जून, 2022

androidx.media3:media3-*:1.0.0-beta01 रिलीज़ हो गया है. वर्शन 1.0.0-beta01 में ये बदलाव शामिल हैं.

यह ExoPlayer 2.18.0 के रिलीज़ वर्शन से मेल खाता है.

  • कोर लाइब्रेरी:
    • MediaMetricsManager के ज़रिए, Android प्लैटफ़ॉर्म के डाइग्नोस्टिक्स की सुविधा चालू करें. ExoPlayer, प्लैटफ़ॉर्म को वीडियो चलाने से जुड़े इवेंट और परफ़ॉर्मेंस डेटा भेजेगा. इससे डिवाइस पर सिस्टम की परफ़ॉर्मेंस और डीबग करने की जानकारी मिलती है. इस डेटा को Google भी इकट्ठा कर सकता है. ऐसा तब होता है, जब डिवाइस का इस्तेमाल करने वाला व्यक्ति, इस्तेमाल और गड़बड़ी की जानकारी शेयर करने की सुविधा चालू करता है. ऐप्लिकेशन, ExoPlayer.Builder.setUsePlatformDiagnostics(false) की मदद से ExoPlayer के लिए, प्लैटफ़ॉर्म के डाइग्नोस्टिक्स में योगदान देने से ऑप्ट-आउट कर सकते हैं.
    • उस बग को ठीक किया गया है जिसकी वजह से, MergingMediaSource का इस्तेमाल करते समय ट्रैक बहुत बार रीसेट हो जाते थे. उदाहरण के लिए, सबटाइटल साइड-लोड करते समय और वीडियो चलाने के दौरान चुने गए सबटाइटल को बदलते समय (#10248).
    • API 29 और 30 पर 5G-NSA नेटवर्क टाइप का पता लगाना बंद करें. इन प्लेबैक के लिए, 4G नेटवर्क का इस्तेमाल किया जाएगा.
    • null को MediaSource.Factory.setDrmSessionManagerProvider और MediaSource.Factory.setLoadErrorHandlingPolicy में पास करने की अनुमति नहीं है. ज़रूरत पड़ने पर, DefaultDrmSessionManagerProvider और DefaultLoadErrorHandlingPolicy के इंस्टेंस को साफ़ तौर पर पास किया जा सकता है.
    • MediaItem.RequestMetadata जोड़ें, ताकि मीडिया चलाने के लिए ज़रूरी मेटाडेटा दिखाया जा सके. ऐसा तब किया जाता है, जब सटीक LocalConfiguration की जानकारी न हो. MediaMetadata.mediaUrl को भी हटा दें, क्योंकि अब यह RequestMetadata में शामिल है.
    • Player.Command.COMMAND_SET_MEDIA_ITEM जोड़ें, ताकि खिलाड़ी किसी एक आइटम को सेट करने की अनुमति दे सकें.
  • ट्रैक चुनने की सुविधा:
    • TrackSelectionOverrides क्लास को TrackSelectionParameters में बदलें. साथ ही, TrackSelectionOverride को टॉप लेवल की क्लास के तौर पर प्रमोट करें.
    • TracksInfo का नाम बदलकर Tracks और TracksInfo.TrackGroupInfo का नाम बदलकर Tracks.Group कर दो. Player.getCurrentTracksInfo और Player.Listener.onTracksInfoChanged का नाम बदलकर Player.getCurrentTracks और Player.Listener.onTracksChanged कर दिया गया है. इसमें Player.Listener.onTracksChanged तरीके के नाम को 'अन-डेप्रिकेट' करना शामिल है. हालांकि, इसमें पैरामीटर के टाइप अलग-अलग होते हैं.
    • डिप्रेकेट किए गए DefaultTrackSelector.ParametersBuilder के बजाय, DefaultTrackSelector.Parameters.Builder को वापस लाने के लिए, DefaultTrackSelector.buildUponParameters और DefaultTrackSelector.Parameters.buildUpon को बदलें.
    • जो डिफ़ॉल्ट रूप से चालू होती है, उसे जोड़ें DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities इस सुविधा के चालू होने पर, DefaultTrackSelector उन ऑडियो ट्रैक को प्राथमिकता देगा जिनमें चैनलों की संख्या, डिवाइस की आउटपुट क्षमताओं से ज़्यादा नहीं होती. हैंडहेल्ड डिवाइसों पर, DefaultTrackSelector मल्टीचैनल ऑडियो फ़ॉर्मैट के बजाय स्टीरियो/मोनो को प्राथमिकता देगा. हालांकि, ऐसा तब तक होगा, जब तक मल्टीचैनल फ़ॉर्मैट को स्पेशलाइज़ (Android 12L+) नहीं किया जा सकता या वह डॉल्बी सराउंड साउंड फ़ॉर्मैट नहीं है. इसके अलावा, जिन डिवाइसों पर ऑडियो स्पैटियलाइज़ेशन की सुविधा काम करती है उन पर DefaultTrackSelector, स्पैटियलाइज़र प्रॉपर्टी में होने वाले बदलावों पर नज़र रखेगा. साथ ही, इन बदलावों के आधार पर नए ट्रैक को चुनेगा. जिन डिवाइसों में television यूज़र इंटरफ़ेस (यूआई) मोड होता है उन्हें इन पाबंदियों से बाहर रखा जाता है. साथ ही, सबसे ज़्यादा चैनल वाले फ़ॉर्मैट को प्राथमिकता दी जाएगी. इस सुविधा को चालू करने के लिए, DefaultTrackSelector इंस्टेंस को Context के साथ बनाया जाना चाहिए.
  • वीडियो:
    • DummySurface का नाम बदलकर PlaceholderSurface करें.
    • MediaCodecVideoRenderer.getCodecMaxInputSize में AV1 फ़ॉर्मैट के साथ काम करने की सुविधा जोड़ी गई.
  • ऑडियो:
    • LG AC3 ऑडियो डिकोडर, नॉन-स्टैंडर्ड एमआईएमई टाइप के विज्ञापन के लिए इस्तेमाल किया जाता है.
    • एपीआई < 21 पर एआरटी की पुष्टि करने में लगने वाले समय को कम करने के लिए, AudioAttributes.getAudioAttributesV21() के रिटर्न टाइप को android.media.AudioAttributes से बदलकर, नई AudioAttributesV21 रैपर क्लास करें.
    • जब फ़ॉर्मैट ऑडियो चैनल की संख्या सेट नहीं होती है, तो प्लैटफ़ॉर्म (एपीआई 29+) से क्वेरी करें या ऑडियो पासथ्रू के लिए ऑडियो एन्कोडिंग चैनल की संख्या मान लें. ऐसा एचएलएस चंकलेस तैयारी (10204) के साथ होता है.
    • अगर डिकोडर, 12 चैनल वाला पीसीएम ऑडियो आउटपुट करता है, तो चैनल मास्क के साथ AudioTrack को कॉन्फ़िगर करें AudioFormat.CHANNEL_OUT_7POINT1POINT4 (#10322.
  • डीआरएम
    • पक्का करें कि फ़ॉर्मैट बदलने के तुरंत बाद, डीआरएम सेशन हमेशा सही तरीके से अपडेट हो (10274).
  • टेक्स्ट:
    • Player.getCurrentCues() को बदलकर CueGroup कर दें, ताकि List<Cue> के बजाय CueGroup दिखे.
    • एसएसए: OutlineColour स्टाइल सेटिंग के साथ काम करता है, जब BorderStyle == 3 (जैसे, OutlineColour से क्यू का बैकग्राउंड सेट होता है) (#8435).
    • CEA-708: डेटा को कई सर्विस ब्लॉक में पार्स करता है और उन ब्लॉक को अनदेखा करता है जो फ़िलहाल चुने गए सर्विस नंबर से जुड़े नहीं हैं.
    • RawCcExtractor को हटाया गया है. इसका इस्तेमाल सिर्फ़ Google के अंदर सबटाइटल फ़ॉर्मैट को मैनेज करने के लिए किया जाता था.
  • डेटा निकालने वाले टूल:
    • AVI फ़ॉर्मैट के लिए सहायता जोड़ी गई (#2092).
    • Matroska: Opus ट्रैक के लिए DiscardPadding पार्स करें.
    • MP4: esds बॉक्स से बिटरेट पार्स करें.
    • Ogg: डुप्लीकेट Opus आईडी और टिप्पणी हेडर की अनुमति दें (#10038).
  • यूआई:
    • 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:
    • विज्ञापन के पोलिंग रेट को हर 100 मिलीसेकंड से घटाकर हर 200 मिलीसेकंड करें, ताकि यह Media Rating Council (MRC) के सुझावों के मुताबिक हो.
  • FFmpeg एक्सटेंशन:
    • CMake के वर्शन को 3.21.0+ पर अपडेट करें, ताकि CMake में मौजूद बग की वजह से AndroidStudio के gradle सिंक में होने वाली गड़बड़ी से बचा जा सके (#9933).
  • हटाए गए सिंबल हटाएं:
    • 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 में डुप्लीकेट TrackGroups को अनुमति न दें. TrackGroup कंस्ट्रक्टर में id सेट करके, TrackGroup को हमेशा अलग किया जा सकता है. इससे, ऐक्टिव ट्रैक ओवरराइड की सुविधा चालू होने पर, ऐप्लिकेशन को बैकग्राउंड में ले जाने के बाद फिर से चलाने पर होने वाली क्रैश की समस्या ठीक हो जाती है (#9718).
    • AdaptiveTrackSelection में लॉजिक में बदलाव करें, ताकि नेटवर्क का बैंडविड्थ ज़्यादा होने पर क्वालिटी को बेहतर किया जा सके. भले ही, वीडियो लाइव स्ट्रीम के बहुत करीब हो (#9784).
  • वीडियो:
    • अगर ज़रूरत हो, तो Dolby Vision के लिए डिकोडर फ़ॉलबैक लॉजिक को ठीक करें, ताकि H264/H265 डिकोडर का इस्तेमाल किया जा सके.
  • ऑडियो:
    • Dolby Atmos (E-AC3-JOC) के लिए डिकोडर फ़ॉलबैक लॉजिक को ठीक किया गया है, ताकि ज़रूरत पड़ने पर काम करने वाले E-AC3 डिकोडर का इस्तेमाल किया जा सके.
    • AudioCapabilities एपीआई में बदलाव करके, null के बजाय AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES को साफ़ तौर पर पास करने की ज़रूरत होगी.
    • DefaultAudioSink में AudioTrackBufferSizeProvider को इंजेक्ट करके, AudioTrack के बफ़र साइज़ के कैलकुलेशन को पसंद के मुताबिक बनाने की अनुमति देता है. (#8891).
    • अगर अनुरोध किए गए बफ़र का साइज़ 1 एमबी से ज़्यादा था, तो AudioTrack को फिर से बनाने की कोशिश करें. (#9712).
  • डेटा निकालने वाले टूल:
    • WAV: RF64 स्ट्रीम के लिए सहायता जोड़ी गई (#9543).
    • H.265 SPS NAL यूनिट को गलत तरीके से पार्स करने की समस्या ठीक की गई है (#9719).
    • Ogg Opus और Ogg Vorbis फ़ाइलों में, Vorbis Comments (इसमें METADATA_BLOCK_PICTURE भी शामिल है) को पार्स करता है.
  • टेक्स्ट:
    • एक 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).
  • यूआई:
    • कुछ थीम (#9765) का इस्तेमाल करते समय, StyledPlayerView रिवाइंड और फ़ास्टफ़ॉरवर्ड बटन में मौजूद नंबरों के रंग को ठीक किया गया.
    • वीडियो चलाने की स्पीड से जुड़ी स्ट्रिंग का सही तरीके से अनुवाद करना (#9811).
  • डैश:
    • पार्स की गई ज़रूरी और अलग से दी गई प्रॉपर्टी को Representation (#9579) में जोड़ें.
    • forced-subtitle ट्रैक की भूमिका के लिए सहायता उपलब्ध है (#9727).
    • main ट्रैक की भूमिका को C.SELECTION_FLAG_DEFAULT के तौर पर समझना बंद करें.
    • उन मेनिफ़ेस्ट के लिए बेस यूआरएल को बाहर रखने की लॉजिक से जुड़ी समस्या ठीक की गई है जिनमें डीवीबी नेमस्पेस (#9856) के बारे में नहीं बताया गया है.
    • मिलते-जुलते MPD.Location यूआरएल के लिए सहायता जोड़ी गई (#9939).
  • HLS:
    • सिर्फ़ ऑडियो वाले एचएलएस स्ट्रीम के लिए, Format.label एट्रिब्यूट की वैल्यू सही तरीके से भरें (#9608).
    • स्टार्ट अप टाइम को बेहतर बनाने के लिए, डिफ़ॉल्ट रूप से बिना चंक वाली तैयारी का इस्तेमाल करें. अगर आपके रेंडिशन में, मक्स किए गए ऐसे क्लोज़्ड कैप्शन ट्रैक शामिल हैं जिन्हें मास्टर प्लेलिस्ट में नहीं बताया गया है, तो आपको उन्हें मास्टर प्लेलिस्ट में जोड़ना चाहिए, ताकि वे चलाने के लिए उपलब्ध हो सकें. इसके अलावा, HlsMediaSource.Factory.setAllowChunklessPreparation(false) की मदद से, बिना चंक वाली तैयारी की सुविधा बंद की जा सकती है.
    • एचएलएस में, की-फ़्रेम के हिसाब से सटीक सीकिंग की सुविधा जोड़ी गई है (#2882).
  • RTSP:
    • किसी भी सर्वर कनेक्शन के लिए इस्तेमाल किए गए SocketFactory को बदलने के लिए, क्लाइंट एपीआई उपलब्ध कराएं (#9606).
    • अगर दोनों मौजूद हैं, तो BASIC के बजाय DIGEST पुष्टि करने के तरीके को प्राथमिकता दें (#9800).
    • जब आरटीएसपी ट्रैक की टाइमिंग उपलब्ध न हो, तब उसे हैंडल करें (#9775).
    • अमान्य RTP-Info हेडर वैल्यू को अनदेखा करें (#9619).
  • ट्रांसफ़ॉर्मर:
    • एपीआई के ज़रूरी वर्शन को 21 पर बढ़ाएं.
    • TransformationException का इस्तेमाल अब ट्रांसफ़ॉर्मेशन के दौरान होने वाली गड़बड़ियों के बारे में बताने के लिए किया जाता है.
    • ट्रांसफ़ॉर्मेशन के विकल्प तय करने के लिए, TransformationRequest जोड़ा गया.
    • एक से ज़्यादा श्रोताओं को रजिस्टर करने की अनुमति दें.
    • कोडेक आउटपुट को आंशिक रूप से पढ़ने पर, ट्रांसफ़ॉर्मर के रुकने की समस्या ठीक की गई.
    • मक्सर को रिलीज़ करते समय, Transformer.getProgress में संभावित NPE को ठीक करें.
    • ट्रांसफ़ॉर्मेशन लागू करने के लिए, एक डेमो ऐप्लिकेशन जोड़ें.
  • MediaSession एक्सटेंशन:
    • डिफ़ॉल्ट रूप से, MediaSessionConnector अब बंद होने पर प्लेलिस्ट को मिटा देता है. जिन ऐप्लिकेशन को प्लेलिस्ट बनाए रखनी है वे कनेक्टर पर setClearMediaItemsOnStop(false) कॉल कर सकते हैं.
  • कास्ट एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से CastPlayer, onIsPlayingChanged को सही तरीके से कॉल नहीं कर पा रहा था (#9792).
    • DefaultMediaItemConverter (#9663) की मदद से, ऑडियो मेटाडेटा और आर्टवर्क को सपोर्ट किया जा सकता है.
  • FFmpeg एक्सटेंशन:
    • build_ffmpeg.sh को GNU के बजाय LLVM के बिन यूटिलिटी पर निर्भर बनाएं (#9933).
  • Android 12 के साथ काम करता है या नहीं:
    • कास्ट एक्सटेंशन को com.google.android.gms:play-services-cast-framework:20.1.0 पर निर्भर रहने के लिए अपग्रेड करें. play-services-cast-framework के पुराने वर्शन, Android 12 को टारगेट करने वाले ऐप्लिकेशन के साथ काम नहीं करते. साथ ही, PendingIntent बनाते समय IllegalArgumentException की वजह से क्रैश हो जाएंगे (#9528).
  • हटाए गए सिंबल हटाएं:
    • Player.EventListener हटाएं. इसके बजाय, Player.Listener का इस्तेमाल करें.
    • MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory, और MediaSourceFactory#setDrmUserAgent को हटाएं. इसके बजाय, MediaSourceFactory#setDrmSessionManagerProvider का इस्तेमाल करें.
    • MediaSourceFactory#setStreamKeys हटाएं. इसके बजाय, MediaItem.Builder#setStreamKeys का इस्तेमाल करें.
    • MediaSourceFactory#createMediaSource(Uri) हटाएं. इसके बजाय, MediaSourceFactory#createMediaSource(MediaItem) का इस्तेमाल करें.
    • DashMediaSource, HlsMediaSource, और SsMediaSource से setTag को हटाएं. इसके बजाय, MediaItem.Builder#setTag का इस्तेमाल करें.
    • DashMediaSource#setLivePresentationDelayMs(long, boolean) हटाएं. मेनिफ़ेस्ट को बदलने के लिए, MediaItem.Builder#setLiveConfiguration और MediaItem.LiveConfiguration.Builder#setTargetOffsetMs का इस्तेमाल करें. इसके अलावा, फ़ॉलबैक वैल्यू देने के लिए DashMediaSource#setFallbackTargetLiveOffsetMs का इस्तेमाल करें.
    • (Simple)ExoPlayer.setThrowsWhenUsingWrongThread हटाएं. थ्रेड पर पाबंदी लगाने की सुविधा से ऑप्ट-आउट नहीं किया जा सकता.
    • ActionFile और ActionFileUpgradeUtil हटाएं. लेगसी ऐक्शन फ़ाइलों को DefaultDownloadIndex में मर्ज करने के लिए, ExoPlayer 2.16.1 या इससे पहले के वर्शन का इस्तेमाल करें.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 मॉड्यूल उपलब्ध है. इससे प्लेयर और मीडिया सेशन के बीच सीधे तौर पर इंटिग्रेशन होता है. इसके लिए, अडैप्टर/कनेक्टर क्लास का इस्तेमाल करने की ज़रूरत नहीं होती.