Media3

मीडिया के इस्तेमाल के उदाहरणों के लिए सहायता लाइब्रेरी.
नया अपडेट स्टेबल रिलीज़ रिलीज़ कैंडिडेट बीटा रिलीज़ ऐल्फ़ा वर्शन
16 जुलाई, 2025 1.7.1 1.8.0-rc01 - -

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

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

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

Groovy

dependencies {
    def media3_version = "1.6.1"

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

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

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

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

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

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

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

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

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

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

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

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

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

Kotlin

dependencies {
    val media3_version = "1.6.1"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

वर्शन 1.8.0

वर्शन 1.8.0-rc01

16 जुलाई, 2025

वर्शन 1.8.0-rc01 में ये कमिट शामिल हैं.

  • ExoPlayer:
    • उस गड़बड़ी को ठीक किया गया है जिसमें टीवी पर नॉन-स्टीरियो ऑडियो फ़ॉर्मैट को DefaultTrackSelector के साथ काम न करने वाले फ़ॉर्मैट के तौर पर मार्क किया जा सकता है.
    • MediaCodec के DECODE_ONLY फ़्लैग का इस्तेमाल करते समय, पक्का करें कि आखिरी फ़्रेम सही तरीके से रेंडर हो. यह फ़्लैग, स्क्रबर मोड में डिफ़ॉल्ट रूप से चालू होता है.
  • एक्सट्रैक्टर:
    • फ़्रैगमेंट की गई MP4 फ़ाइलों से मेटाडेटा पार्स किया गया (#2084).
    • JPEG: ऐसी मोशन फ़ोटो के साथ काम करता है जिनमें शुरुआत में Exif सेगमेंट नहीं होता (#2552).
  • वीडियो:
    • डिटैच किए गए डिसप्ले की समस्या को ठीक करने के लिए, "lenovo" और "motorola" डिवाइसों के लिए वर्कअराउंड उपलब्ध कराया गया है (#2059).
  • टेक्स्ट:
    • MP4 फ़ाइलों में VobSub ट्रैक के लिए सहायता जोड़ी गई (#2510).
  • DRM:
    • OfflineLicenseHelper.newWidevineInstance को स्वीकार करने वाले MediaItem.DrmConfiguration का नया ओवरलोड जोड़ें, ताकि एचटीटीपी अनुरोध हेडर को सही तरीके से लागू किया जा सके (#2169).
  • सेशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें सेशन के ज़रिए हैंडल नहीं किए गए कंट्रोलर में कुछ बदलावों की वजह से IllegalStateExceptions हो सकता है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें सेशन से मैनेज नहीं की जा रही कंट्रोलर कार्रवाइयों की वजह से, कंट्रोलर अमान्य स्थिति में चला जाता था.
    • StrictMode के असुरक्षित लॉन्च से जुड़े उल्लंघन की चेतावनी को ठीक किया गया है (#2330).
  • यूआई:
    • PlayerSurface के अंदर, बार-बार इस्तेमाल किए जा सकने वाले कॉम्पोनेंट जैसे कि LazyColumn के ठीक से काम न करने की गड़बड़ी को ठीक किया गया है (#2493).
  • एचएलएस एक्सटेंशन:
    • उस बग को ठीक किया गया है जिसमें कम समय में लोड होने वाले हिस्सों को लोड करने के बाद, ट्रैक का चुनाव बदल जाता था. साथ ही, प्रीलोड करने के सुझावों की वजह से वीडियो रुक जाता था या फ़्रीज़ हो जाता था (#2299).
    • अगर सर्वर, CAN-BLOCK-RELOAD=YES का पालन नहीं करता है, तो टारगेट अवधि के आधे समय तक इंतज़ार करके, बार-बार रीलोड होने से रोकें (#2317).
    • उस बग को ठीक किया गया है जिसकी वजह से, इंटरस्टीशियल स्ट्रीम शुरू करने पर वीडियो रुक जाता था. ऐसा तब होता था, जब मिड रोल से पहले और गलत विज्ञापन के लिए ऐसेट की सूची को ठीक करने की कोशिश की जाती थी (#2558).
  • डैश एक्सटेंशन:
    • उस समस्या को ठीक किया गया है जिसमें ट्रिक-प्ले अडैप्टेशन सेट को उसके मुख्य अडैप्टेशन सेट के साथ मर्ज कर दिया जाता है. इससे अमान्य TrackGroup (#2148) बन जाता है.
  • आरटीएसपी एक्सटेंशन:
    • आरएफ़सी 7798#4.4.2 (#2413) के मुताबिक, H265 के लिए आरटीपी एग्रीगेशन पैकेट की सुविधा जोड़ी गई है.

वर्शन 1.8.0-beta01

2 जुलाई, 2025

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

  • कॉमन लाइब्रेरी:
    • ForwardingSimpleBasePlayer में प्लेयर को बदलने की सुविधा जोड़ी गई.
  • ExoPlayer:
    • Context से ExoPlayer.Builder को पास किए गए वर्चुअल डिवाइस आईडी का इस्तेमाल करने की सुविधा जोड़ी गई.
    • स्क्रबिंग मोड में, डाइनैमिक शेड्यूलिंग की सुविधा को डिफ़ॉल्ट रूप से चालू करें.
    • किसी आइटम के आखिर तक पहुंचने के लिए, सोर्स को बार-बार रीलोड करने से बचें.
    • स्क्रबिंग मोड में, डिफ़ॉल्ट रूप से MediaCodec.BUFFER_FLAG_DECODE_ONLY का इस्तेमाल करें.
    • जब PreloadMediaSource को किसी ऐसे ExoPlayer से चलाया जाता है जिसका प्लेबैक थ्रेड, प्रीलोड थ्रेड (#2495) से अलग होता है, तब IllegalStateException थ्रो करें.
    • डिफ़ॉल्ट तौर पर लागू करने की सुविधा के साथ, ShuffleMode में cloneAndMove जोड़ें (#2226).
    • Renderer.getMinDurationToProgressUs के डिफ़ॉल्ट व्यवहार को बदलकर, ऐसी बड़ी वैल्यू दिखाएं जिसके लिए render को कॉल करने की ज़रूरत न हो.
    • उस गड़बड़ी को ठीक किया गया है जिसमें वीडियो को रोकने के बाद, वीडियो के आखिर में जाने पर आखिरी फ़्रेम दिखने में देरी होती थी. फ़िलहाल, बग ठीक करने की सुविधा सिर्फ़ तब काम करती है, जब ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled चालू हो.
  • ट्रांसफ़ॉर्मर:
    • CodecDbLite जोड़ें. इससे वीडियो एन्कोडिंग की सेटिंग को चिपसेट के हिसाब से ऑप्टिमाइज़ किया जा सकेगा.
    • CodecDB Lite की सेटिंग ऑप्टिमाइज़ करने की सुविधा चालू करने के लिए, setEnableCodecDbLite में setEnableCodecDbLite फ़्लैग जोड़ें.DefaultEncoderFactory डिफ़ॉल्ट रूप से, इस फ़्लैग को गलत पर सेट किया जाता है.
  • एक्सट्रैक्टर:
    • एक से ज़्यादा sidx ऐटम वाले फ़्रैगमेंटेड MP4 में ढूंढने की सुविधा जोड़ी गई. इस सुविधा को FragmentedMp4Extractor पर FLAG_MERGE_FRAGMENTED_SIDX फ़्लैग का इस्तेमाल करके चालू किया जा सकता है (#9373).
    • FLAC फ़ाइलों में मौजूद खाली सीक टेबल को अनदेखा करें. इनमें वे टेबल भी शामिल हैं जिनमें सिर्फ़ प्लेसहोल्डर सीक पॉइंट मौजूद हैं. अगर फ़ाइल की अवधि पता है, तो बाइनरी सर्च सीकिंग पर वापस जाएं (#2327).
    • H.265 एसईआई यूनिट को पार्स करने की सुविधा को ठीक किया गया है, ताकि पहचाने न जा सकने वाले एसईआई टाइप को पूरी तरह से स्किप किया जा सके (#2456).
    • WavExtractor टाइप की फ़ाइल को पार्स करते समय, ऑडियो फ़ॉर्मैट के लिए हेडर एक्सटेंशन के SubFormat डेटा का इस्तेमाल करने के लिए, WavExtractor को अपडेट करें.WAVE_FORMAT_EXTENSIBLE
    • MP4: रॉ पीसीएम ऑडियो ट्रैक (64-बिट फ़्लोटिंग पॉइंट पीसीएम काम नहीं करता) तय करने वाले ipcm और fpcm बॉक्स के लिए सहायता जोड़ी गई.
    • MP4: tkhd ट्रांसफ़ॉर्मेशन मैट्रिक्स के रोटेशन वाले हिस्से को मैनेज करता है. ये मैट्रिक्स, वीडियो को घुमाते और दिखाते हैं. इससे यह पक्का होता है कि iPhone के फ़्रंट कैमरे से लिए गए वीडियो सही तरीके से दिखें. हालांकि, ये वीडियो y-ऐक्सिस में गलत तरीके से दिखते हैं (#2012).
  • ऑडियो:
    • ChannelMappingAudioProcessor और TrimmingAudioProcessor में, सभी लीनियर पीसीएम सैंपल फ़ॉर्मैट के लिए सहायता जोड़ी गई.
    • CompositionPlayer में ऑडियो गैप की सुविधा जोड़ी गई.
    • BaseAudioProcessor#reset() से BaseAudioProcessor#flush() को किए गए फ़र्ज़ी कॉल को हटाएं.
  • वीडियो:
    • जब ऑडियो सैंपल, अनुरोध की गई जगह से शुरू नहीं होते हैं, तो वीडियो फ़्रेम को स्टार्टअप पर बेहतर तरीके से रिलीज़ करने की सुविधा को बेहतर बनाया गया है.
    • "realme" डिवाइसों के लिए, डिसकनेक्ट किए गए डिसप्ले को फिर से कनेक्ट करने की सुविधा को बेहतर बनाया गया है (#2059).
  • टेक्स्ट:
    • जब उपशीर्षक का कोई सेगमेंट शुरू में लोड नहीं होता है और बाद में लोड हो जाता है, तो वीडियो रुकने की समस्या ठीक की गई है. इसके बाद, उपशीर्षक के कई सेगमेंट खाली दिखते हैं (#2517).
  • मेटाडेटा:
    • मीडिया की अवधि और Timeline को MetadataRetriever से वापस पाने की सुविधा जोड़ी गई है. साथ ही, इसे इंस्टेंस पर आधारित AutoCloseable एपीआई पर माइग्रेट कर दिया गया है. Builder का इस्तेमाल करके, MediaItem के लिए एक इंस्टेंस बनाएं. इसके बाद, मेटाडेटा के लिए ListenableFuture पाने के लिए, retrieveTrackGroups(), retrieveTimeline(), और retrieveDurationUs() को कॉल करें. अब स्टैटिक तरीकों का इस्तेमाल नहीं किया जा सकता (#2462).
  • इमेज:
    • डिकोड किए गए बिटमैप को BitmapFactoryImageDecoder में डिसप्ले साइज़ तक सीमित करें, ताकि बहुत बड़ी (जैसे, 50 मेगापिक्सल) इमेज दिखाने की कोशिश करते समय, PlayerView से Canvas: trying to draw too large bitmap. के साथ ऐप्लिकेशन क्रैश न हो.
    • DefaultRenderersFactory.getImageDecoderFactory() के सिग्नेचर को बदलकर, Context पैरामीटर लें.
    • CompositionPlayer में इस्तेमाल किए गए ज़्यादा से ज़्यादा बिटमैप आउटपुट साइज़ को Transformer में पहले से इस्तेमाल किए गए साइज़ के साथ अलाइन करें. इसका मतलब है कि CompositionPlayer, बिटमैप को डिकोड करते समय डिसप्ले साइज़ को ध्यान में नहीं रखता है. हालांकि, ExoPlayer ऐसा करता है.
  • Muxers:
    • उस गड़बड़ी को ठीक किया गया है जिसमें फ़्रैगमेंट किए गए MP4 में ऑडियो सैंपल के लिए सही सैंपल फ़्लैग सेट नहीं किए गए थे.
  • सेशन:
    • उस बग को ठीक किया गया है जिसमें किसी अन्य ऐप्लिकेशन थ्रेड से प्लेयर चलाने पर, मुख्य थ्रेड से setSessionExtras को कॉल करने पर IllegalStateException (#2265) होता था.
    • अगर किसी प्लेयर को मीडिया आइटम के साथ सेट अप किया गया है, लेकिन उन्हें तैयार या चलाया नहीं गया है, तो सूचना अपने-आप न दिखाएं (#2423https://github.com/androidx/media/issues/2423). इस सुविधा को MediaSessionService.setShowNotificationForIdlePlayer के ज़रिए कॉन्फ़िगर किया जा सकता है.
    • सभी या चुने गए कंट्रोलर के लिए, कस्टम PlaybackException जोड़ें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें MediaController पर लाइव स्ट्रीम में आगे-पीछे करने से IllegalArgumentException हो सकती है.
    • लाइव स्ट्रीम के लिए, प्लैटफ़ॉर्म मीडिया कंट्रोलर के लिए, वीडियो चलाने की पोज़िशन और मौजूदा आइटम में आगे-पीछे करने की सुविधा को बंद करें. इससे Android Auto के यूज़र इंटरफ़ेस (यूआई) और प्लैटफ़ॉर्म मीडिया सेशन से इस जानकारी का इस्तेमाल करने वाले अन्य कंट्रोलर में, पोज़िशन से जुड़ी गड़बड़ियां नहीं होंगी (#1758).
  • Cronet एक्सटेंशन:
    • कुकी को अपने-आप मैनेज करने की सुविधा जोड़ी गई है (#5975).
  • एचएलएस एक्सटेंशन:
    • कोट की गई स्ट्रिंग एट्रिब्यूट वैल्यू में \f (फ़ॉर्म फ़ीड) को स्वीकार करने के लिए, प्लेलिस्ट पार्सिंग की समस्या ठीक की गई है (#2420).
    • एक ही आईडी वाले इंटरस्टीशियल को अपडेट करने की सुविधा जोड़ी गई है (#2427).
    • उस गड़बड़ी को ठीक किया गया है जिसमें कभी-कभी लाइव स्ट्रीम के लोड होने के लिए सेगमेंट खत्म हो जाने के बाद, प्लेलिस्ट लोड होने से जुड़ी गड़बड़ियों की जानकारी नहीं मिलती है (#2401https://github.com/androidx/media/issues/2401).
    • सबटाइटल रेंडिशन को NAME टैग के हिसाब से ग्रुप करें. ठीक उसी तरह जैसे ऑडियो रेंडिशन पहले से ही ग्रुप किए जाते हैं (#1666).
  • डैश एक्सटेंशन:
    • उस बग को ठीक किया गया है जिसकी वजह से, DASH की अवधि कम करने पर अपवाद मिल सकता है. ऐसा तब होता है, जब नई अवधि से ज़्यादा सैंपल को रेंडरिंग पाइपलाइन पहले ही पढ़ चुकी हो (#2440).
    • उस बग को ठीक किया गया है जिसमें सीएमसीडी क्वेरी पैरामीटर का इस्तेमाल करने पर, रीडायरेक्ट को फ़ॉलो नहीं किया जाता था (#2475).
  • आरटीएसपी एक्सटेंशन:
    • RtspClient को ठीक किया गया है, ताकि HTTP 302 रिस्पॉन्स (#2398) को प्रोसेस करते समय, जगह की जानकारी वाले यूआरआई का इस्तेमाल किया जा सके.
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
    • उस गड़बड़ी को ठीक किया गया है जिसमें ऑडियो डिकोडर एक्सटेंशन के लिए DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange का कोई असर नहीं होता (#2258).
  • कास्ट एक्सटेंशन:
    • setVolume() और getVolume() के लिए सहायता जोड़ी गई है (#2279).
    • टाइमलाइन खाली होने पर, CastPlayer को STATE_BUFFERING में जाने से रोकता है.
  • टेस्ट यूटिलिटी:
    • खिलाड़ी को किसी तय की गई पोज़िशन तक आगे बढ़ाने के लिए, TestPlayerRunHelper में advance(player).untilPositionAtLeast और untilMediaItemIndex जोड़ें. ज़्यादातर मामलों में, ये तरीके मौजूदा untilPosition और untilStartOfMediaItem तरीकों से ज़्यादा भरोसेमंद होते हैं.
    • FakeDownloader को test-utils-robolectric मॉड्यूल में ले जाएं, ताकि इसका इस्तेमाल अन्य टेस्ट में किया जा सके.

वर्शन 1.8.0-alpha01

19 मई, 2025

androidx.media3:media3-*:1.8.0-alpha01 रिलीज़ हो गया है. वर्शन 1.8.0-alpha01 में ये कमिट शामिल हैं.

  • ExoPlayer:
    • ExoPlayer.setScrubbingModeEnabled(boolean) तरीका जोड़ें. इससे प्लेयर को बार-बार वीडियो को आगे-पीछे करने के लिए ऑप्टिमाइज़ किया जाता है. उदाहरण के लिए, जब कोई उपयोगकर्ता स्क्रबर बार को इधर-उधर खींचता है. ExoPlayer और ExoPlayer.Builder पर setScrubbingModeParameters(..) की मदद से, स्क्रबर मोड के व्यवहार को अपनी पसंद के मुताबिक बनाया जा सकता है.
    • स्क्रबिंग मोड में, फ़्रैक्शनल सीक टॉलरेंस को पसंद के मुताबिक बनाने की अनुमति दें.
    • स्क्रबिंग मोड में कोडेक की ऑपरेटिंग रेट बढ़ाएं.
    • उस गड़बड़ी को ठीक किया गया है जिसमें AdsMediaSource के कॉन्टेंट में मौजूद गड़बड़ियों की रिपोर्ट कभी नहीं की जाती थी (#2337).
    • MergingMediaSource में मेमोरी लीक की समस्या ठीक की गई. उदाहरण के लिए, इसका इस्तेमाल तब किया जाता है, जब सबटाइटल साइडलोड किए जाते हैं (#2338).
    • CmcdConfiguration.Factory को null वापस लाने की अनुमति दें, ताकि कुछ मीडिया आइटम के लिए CMCD लॉगिंग को बंद किया जा सके (#2386).
    • इमेज के डिफ़ॉल्ट बफ़र साइज़ को 128 केबी (टेक्स्ट ट्रैक से कॉपी-पेस्ट करने की वजह से हुई गड़बड़ी) से बढ़ाकर 26 एमबी करें. यह 50 मेगापिक्सल की अल्ट्रा एचडीआर इमेज के लिए काफ़ी है (#2417).
    • PreCacheHelper जोड़ा गया है. इससे ऐप्लिकेशन, किसी मीडिया को पहले से कैश मेमोरी में सेव कर सकते हैं. इसके लिए, उन्हें मीडिया के शुरू होने की जगह और अवधि बतानी होगी.
  • ट्रांसफ़ॉर्मर:
    • अब addGap() की मदद से जोड़े गए शुरुआती गैप में साइलेंट ऑडियो भरने के लिए, EditedMediaItemSequence.Builder में experimentalSetForceAudioTrack(true) को साफ़ तौर पर सेट करना होगा. अगर गैप, क्रम के बीच में है, तो इस फ़्लैग की ज़रूरत नहीं है.
    • Muxer इंटरफ़ेस को media3-transformer से media3-muxer पर ले जाएं.
    • मीडिया आइटम को इमेज के तौर पर इंपोर्ट करने के लिए, MediaItem.Builder().setImageDuration(long) सेटिंग को ज़रूरी बनाएं.
    • Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean) जोड़ें. इसमें ट्रिम करने पर MP4 फ़ाइल में बदलाव करने की सूची शामिल होती है. इससे खिलाड़ियों को यह निर्देश दिया जाता है कि वे ट्रिम करने की शुरुआत से पहले वाले मुख्य फ़्रेम और ट्रिम करने की शुरुआत के बीच के सैंपल को अनदेखा करें.
    • कंपोज़िशन डेमो ऐप्लिकेशन को Kotlin और Jetpack Compose का इस्तेमाल करने के लिए अपडेट करें. साथ ही, सीक्वेंस को 2x2 या PiP लेआउट में व्यवस्थित करने के लिए, कस्टम VideoCompositorSettings जोड़ें.
  • एक्सट्रैक्टर:
    • MP3: FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS) (#2194) की वजह से, स्थिर बिटरेट पर वापस आने पर, Xing, VBRI, और इसी तरह के वैरिएबल बिटरेट वाले मेटाडेटा की अवधि और डेटा साइज़ का इस्तेमाल करें.
  • ऑडियो:
    • DefaultAudioMixer में, लगातार पावर अपमिक्सिंग/डाउनमिक्सिंग की अनुमति दें.
    • ChannelMappingAudioProcessor, TrimmingAudioProcessor, और ToFloatPcmAudioProcessor को सार्वजनिक करें (#2339).
    • बेस्ट-एफ़र्ट अनुमान के बजाय, DefaultAudioSink में अंडररन का पता लगाने के लिए, AudioTrackPositionTracker में AudioTrack#getUnderrunCount() का इस्तेमाल करें.
    • ऑडियो आउटपुट डिवाइस की जगह में अचानक बदलाव होने की वजह से, ऑडियो टाइमस्टैंप को स्मूथ करने की सुविधा को बेहतर बनाया गया है.
    • उस बग को ठीक किया गया है जिसमें ब्लूटूथ डिवाइसों से कनेक्ट होने पर, वीडियो को रोकने के बाद फिर से चलाने पर, पहले 10 सेकंड के लिए ऑडियो/वीडियो सिंक नहीं होता था.
    • उस बग को ठीक किया गया है जिसकी वजह से AnalyticsListener.onAudioPositionAdvancing, ऑडियो के आगे बढ़ने का समय रिपोर्ट नहीं कर रहा था. हालांकि, यह पहली बार मेज़रमेंट का समय रिपोर्ट कर रहा था.
  • वीडियो:
    • सिर्फ़ डिकोड करने के लिए इनपुट बफ़र को लाइन में लगाते समय, ExoPlayer फ़्लैग शामिल करने के लिए, एक्सपेरिमेंटल ExoPlayer एपीआई जोड़ा गया.MediaCodec.BUFFER_FLAG_DECODE_ONLY यह फ़्लैग, डिकोडर को सिर्फ़ डिकोड किए गए बफ़र को छोड़ने का सिग्नल देगा. इससे वीडियो को तेज़ी से आगे-पीछे किया जा सकेगा. DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag की मदद से इसे चालू करें.
    • सॉफ़्टवेयर वीडियो कोडेक के लिए, कोडेक की परफ़ॉर्मेंस की जांच को बेहतर बनाना. इस वजह से, कुछ और ट्रैक को EXCEEDS_CAPABILITIES के तौर पर मार्क किया जा सकता है.
    • कुछ डिवाइसों पर, VP9 Widevine वीडियो चलाने से जुड़ी गड़बड़ियों को ठीक किया गया है (#2408).
  • टेक्स्ट:
    • सबटाइटल चालू करने पर, प्रोग्रेस में मौजूद क्यू दिखाने के लिए, SSA और SubRip को ठीक किया गया (#2309).
    • उपशीर्षक में गड़बड़ी वाली स्ट्रीम से, उपशीर्षक ट्रैक के बिना लाइव स्ट्रीम पर स्विच करने के दौरान वीडियो के रुकने की समस्या ठीक की गई है (#2328).
    • B-फ़्रेम (#2372) वाली H.262 स्ट्रीम चलाने पर, CEA-608 सबटाइटल के गड़बड़ होने की समस्या ठीक की गई.
    • Matroska फ़ाइलों में CodecId = S_TEXT/SSA के साथ SSA सबटाइटल के लिए सहायता जोड़ी गई. पहले, MatroskaExtractor सिर्फ़ CodecId = S_TEXT/ASS फ़ॉर्मैट के साथ काम करता था. इसका इस्तेमाल SubStation Alpha के 'ऐडवांस' (v4+) वैरिएंट को दिखाने के लिए किया जाता है. हालांकि, ExoPlayer के पार्सिंग लॉजिक, दोनों वैरिएंट के लिए एक जैसा है (#2384).
    • SubStation Alpha (SSA) सबटाइटल फ़ाइलों में layer प्रॉपर्टी के लिए सहायता जोड़ी गई है. इसका इस्तेमाल, एक ही समय में स्क्रीन पर एक से ज़्यादा क्यू दिखाए जाने पर, उनके z-ऑर्डर को तय करने के लिए किया जाता है (#2124).
  • असर:
    • Presentation.createForShortSide(int) जोड़ें, जो Presentation बनाता है. इससे यह पक्का होता है कि सबसे छोटी साइड हमेशा दी गई वैल्यू से मेल खाती है, भले ही इनपुट ओरिएंटेशन कुछ भी हो.
  • Muxers:
    • writeSampleData() एपीआई अब MediaCodec.BufferInfo के बजाय, मल्टीप्लेक्सिंग करने वाले खास BufferInfo क्लास का इस्तेमाल करता है.
    • Muxer.Factory#supportsWritingNegativeTimestampsInEditList जोड़ें, जो डिफ़ॉल्ट रूप से गलत पर सेट होता है.
  • IMA एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें एक विज्ञापन में लोड होने से जुड़ी गड़बड़ी की वजह से, गलती से दूसरा विज्ञापन ग्रुप अमान्य हो सकता है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें वीओडी विंडो खत्म होने के बाद, विज्ञापन ग्रुप की वजह से वीडियो नहीं चल रहा था. विज्ञापन ग्रुप के शुरू होने का समय, विंडो के बाद होने पर उन्हें अब MediaPeriodQueue में शामिल नहीं किया जाता (#2215).
  • सेशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी MediaBrowserServiceCompat से कनेक्ट किए गए MediaBrowser के getLibraryRoot में null पास करने पर NullPointerException जनरेट होता था.
    • उस गड़बड़ी को ठीक किया गया है जिसमें कस्टम ऐक्शन, खोज के नतीजे या getItem अनुरोध भेजने पर, लेगसी सेशन ऐप्लिकेशन ClassNotFoundException के साथ क्रैश हो जाता था.
    • उस गड़बड़ी को ठीक किया गया है जिसमें MediaItem.LocalConfiguration.uri को प्लैटफ़ॉर्म सेशन के MediaMetadata पर शेयर किया गया था. अगर आपको जान-बूझकर कोई यूआरआई शेयर करना है, ताकि कंट्रोलर मीडिया के लिए फिर से अनुरोध कर सकें, तो MediaItem.RequestMetadata.mediaUri सेट करें.
  • यूआई:
    • Compose में मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, बटन की शुरुआती स्थितियां सेट करने और स्थिति में बदलाव (जैसे कि आइकॉन के आकार या चालू होने की स्थिति) देखने के बीच अंतर होता था. अब ऑब्ज़र्वेशन पीरियड के बाहर प्लेयर में किए गए किसी भी बदलाव को चुना जाता है (#2313).
    • SeekBackButtonState और SeekForwardButtonState के लिए, media3-ui-compose मॉड्यूल में स्टेट होल्डर और कंपोज़ेबल जोड़ें.
    • PlayerControlView में, ExoPlayer के स्क्रबर मोड के काम करने की सुविधा जोड़ी गई. इस सुविधा को चालू करने पर, जब उपयोगकर्ता स्क्रबर बार को खींचना शुरू करता है, तो प्लेयर स्क्रबर मोड में चला जाता है. साथ ही, हर मूवमेंट के लिए player.seekTo कॉल करता है. इसके बाद, जब स्क्रीन से टच हट जाता है, तो प्लेयर स्क्रबर मोड से बाहर निकल जाता है. इस इंटिग्रेशन को चालू करने के लिए, एक्सएमएल में time_bar_scrubbing_enabled = true या Java/Kotlin में setTimeBarScrubbingEnabled(boolean) तरीके का इस्तेमाल किया जा सकता है.
    • PlayerSurface को नल वैल्यू स्वीकार करने वाले Player आर्ग्युमेंट के तौर पर इस्तेमाल करें.
  • डाउनलोड:
    • प्रोग्रेसिव स्ट्रीम के लिए, आंशिक डाउनलोड की सुविधा जोड़ी गई. ऐप्लिकेशन, DownloadHelper की मदद से प्रोग्रेसिव स्ट्रीम तैयार कर सकते हैं. साथ ही, हेल्पर से DownloadHelper का अनुरोध कर सकते हैं. इसके लिए, उन्हें समय के हिसाब से मीडिया के शुरू और खत्म होने की ऐसी पोज़िशन बतानी होगी जिसे डाउनलोड में शामिल किया जाना चाहिए.DownloadRequest जवाब में मिले DownloadRequest में, बाइट रेंज की जानकारी होती है. इसकी मदद से, ProgressiveDownloader बनाया जा सकता है. साथ ही, इससे जुड़ा कॉन्टेंट डाउनलोड किया जा सकता है.
    • DownloadHelper.Factory जोड़ें, जिसकी मदद से स्टैटिक DownloadHelper.forMediaItem() तरीकों को बदला जाता है.
    • SegmentDownloader लागू करने के लिए, Factory जोड़ें.
    • अडैप्टिव स्ट्रीम के लिए, कुछ हद तक डाउनलोड करने की सुविधा जोड़ी गई है. ऐप्लिकेशन, DownloadHelper की मदद से अडैप्टिव स्ट्रीम तैयार कर सकते हैं. साथ ही, हेल्पर से DownloadHelper का अनुरोध कर सकते हैं. इसके लिए, उन्हें मीडिया के शुरू और खत्म होने की समयसीमा बतानी होगी, ताकि डाउनलोड में वह हिस्सा शामिल किया जा सके.DownloadRequest जवाब में मिली DownloadRequest में, समयसीमा की जानकारी होती है. इससे SegmentDownloader बनाया जा सकता है और उसके हिसाब से कॉन्टेंट डाउनलोड किया जा सकता है.
  • एचएलएस एक्सटेंशन:
    • HlsInterstitialsAdsLoader के साथ X-ASSET-LIST और लाइव स्ट्रीम के लिए सहायता.
  • आरटीएसपी एक्सटेंशन:
    • SessionDescriptions के लिए पार्सिंग की सुविधा जोड़ी गई है. इनमें ऐसी लाइनें शामिल होती हैं जिनमें ट्रेलिंग व्हाइटस्पेस वर्ण होते हैं (#2357).
  • कास्ट एक्सटेंशन:
    • getDeviceVolume(), setDeviceVolume(), getDeviceMuted(), और setDeviceMuted() के लिए सहायता जोड़ी गई है (#2089).
  • टेस्ट यूटिलिटी:
    • transformer.TestUtil.addAudioDecoders(String...), transformer.TestUtil.addAudioEncoders(String...), और transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...) को हटा दिया गया है. इसके बजाय, शैडो एनकोडर और डिकोडर को कॉन्फ़िगर करने के लिए, ShadowMediaCodecConfig का इस्तेमाल करें.
    • ShadowMediaCodecConfig की ओर से रिपोर्ट किए गए कोडेक के नामों में, "exotest" प्रीफ़िक्स को "media3" से बदल दिया गया है.
  • बंद किए गए सिंबल हटाएं:
    • अब इस्तेमाल में नहीं है SegmentDownloader कंस्ट्रक्टर SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) और इसकी सबक्लास में मौजूद कंस्ट्रक्टर DashDownloader, HlsDownloader, और SsDownloader को हटा दिया गया है.
    • अब काम न करने वाले Player.hasNext(), Player.hasNextWindow() को हटाया गया. इसके बजाय, Player.hasNextMediaItem() का इस्तेमाल करें.
    • अब काम न करने वाले Player.next() को हटाया गया. इसके बजाय, Player.seekToNextMediaItem() का इस्तेमाल करें.
    • अब काम न करने वाले Player.seekToPreviousWindow() को हटाया गया. इसके बजाय, Player.seekToPreviousMediaItem() का इस्तेमाल करें.
    • अब काम न करने वाले Player.seekToNextWindow() को हटाया गया. इसके बजाय, Player.seekToNextMediaItem() का इस्तेमाल करें.
    • exoplayer मॉड्यूल में, बंद किए गए BaseAudioProcessor को हटाया गया. common मॉड्यूल में जाकर, BaseAudioProcessor का इस्तेमाल करें.
    • अब इस्तेमाल में नहीं है, ऐसे MediaCodecVideoRenderer कंस्ट्रक्टर MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider) को हटाएं.

वर्शन 1.7.0

वर्शन 1.7.1

16 मई, 2025

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

वर्शन 1.7.0

16 मई, 2025

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

वर्शन 1.6.0

1.6.1

14 अप्रैल, 2025

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

  • कॉमन लाइब्रेरी:
    • PlaybackParameters.withPitch(float) को आसानी से कॉपी करने के लिए, PlaybackParameters.withPitch(float) तरीका जोड़ें. इसमें नई pitch वैल्यू शामिल है (#2257).PlaybackParameters
  • ExoPlayer:
    • उस समस्या को ठीक किया गया है जिसकी वजह से, अगले मीडिया आइटम को शुरू करते समय रेंडरर से जुड़ी ऐसी गड़बड़ी होती थी जिसे ठीक किया जा सकता था. इस वजह से, मीडिया आइटम का ट्रांज़िशन पूरा नहीं हो पाता था (#2229).
    • उस समस्या को ठीक किया गया है जिसमें ProgressiveMediaPeriod, IllegalStateException दिखाता है. ऐसा तब होता है, जब PreloadMediaSource, getBufferedDurationUs() को तैयार होने से पहले कॉल करने की कोशिश करता है (#2315).
    • DASH, HLS, और SmoothStreaming के लिए मेनिफ़ेस्ट अनुरोधों में CmcdData भेजने की समस्या ठीक की गई (#2253).
    • पक्का करें कि विज्ञापन ग्रुप हटाने के बाद भी AdPlaybackState.withAdDurationsUs(long[][]) का इस्तेमाल किया जा सके. उपयोगकर्ता को अब भी हटाए गए विज्ञापन ग्रुप के लिए, अवधि का एक कलेक्शन पास करना होगा. यह कलेक्शन खाली या शून्य हो सकता है (#2267).
  • एक्सट्रैक्टर:
    • MP4: tkhd बॉक्स से alternate_group को पार्स करें और इसे हर ट्रैक के Format.metadata में Mp4AlternateGroupData एंट्री के तौर पर दिखाएं (#2242).
  • ऑडियो:
    • ऑफ़लोड करने से जुड़ी समस्या को ठीक किया गया है. इस समस्या में, छोटे वीडियो की प्लेलिस्ट चलाते समय वीडियो की पोज़िशन अटक जाती थी (#1920).
  • सेशन:
    • प्लैटफ़ॉर्म MediaSession के लिए एग्रीगेशन टाइमआउट को 500 से 100 मिलीसेकंड तक कम किया गया है. साथ ही, एक्सपेरिमेंटल सेटर जोड़ा गया है, ताकि ऐप्लिकेशन इस वैल्यू को कॉन्फ़िगर कर सकें.
    • उस समस्या को ठीक किया गया है जिसमें सूचनाएं खारिज करने के बाद फिर से दिखने लगती हैं (#2302).
    • उस गड़बड़ी को ठीक किया गया है जिसमें सेशन, एक आइटम वाली टाइमलाइन दिखाता था. ऐसा तब होता था, जब रैप किया गया प्लेयर खाली होता था. ऐसा तब होता है, जब रैप्ड प्लेयर में COMMAND_GET_TIMELINE उपलब्ध नहीं होता है, जबकि COMMAND_GET_CURRENT_MEDIA_ITEM उपलब्ध होता है और रैप्ड प्लेयर खाली होता है (#2320).
    • ऐसी गड़बड़ी को ठीक किया गया है जिसमें MediaSessionService.setMediaNotificationProvider को कॉल करने पर, सेवा के साथ अन्य इंटरैक्शन के बाद इसे चुपचाप अनदेखा कर दिया जाता है. जैसे, setForegroundServiceTimeoutMs (#2305).
  • यूआई:
    • ExoPlayer.setVideoEffects और CompositionPlayer के साथ काम करने के लिए, PlayerSurface को चालू करें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें Player के साथ नई PlayerSurface को फिर से कंपोज़ नहीं किया जा सकता.
  • एचएलएस एक्सटेंशन:
    • एचएलएस मीडिया के लिए, CmcdData में चंक की अवधि सेट न होने की समस्या को ठीक किया गया है. इसकी वजह से, एन्क्रिप्ट (सुरक्षित) किए गए मीडिया सेगमेंट को प्रोसेस करते समय पुष्टि नहीं हो पाती थी (#2312).
  • आरटीएसपी एक्सटेंशन:
    • टीसीपी का इस्तेमाल करने के लिए, RTSP सेशन को कॉन्फ़िगर करने के तरीके के तौर पर, RTSPT स्कीम के साथ यूआरआई के लिए सहायता जोड़ी गई है (#1484).
  • कास्ट एक्सटेंशन:
    • प्लेलिस्ट के मेटाडेटा के लिए सहायता जोड़ी गई है (#2235).

1.6.0

26 मार्च, 2025

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

  • कॉमन लाइब्रेरी:
    • androidx.media में मौजूद मिलती-जुलती क्लास को बदलने के लिए, AudioManagerCompat और AudioFocusRequestCompat जोड़ें.
    • Kotlin को 1.9.20 से 2.0.20 पर अपग्रेड करें और Compose Compiler Gradle प्लगिन का इस्तेमाल करें. KotlinX Coroutines लाइब्रेरी को 1.8.1 से 1.9.0 पर अपग्रेड करें.
    • Format.toBundle(boolean excludeMetadata) तरीके को हटाएं. इसके बजाय, Format.toBundle() का इस्तेमाल करें.
    • SimpleBasePlayer में मौजूद गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से, setPlaylist के बाद State में null MediaMetadata के साथ नया currentMediaItemIndex सेट करने पर, मेटाडेटा का फिर से आकलन नहीं होता है (#1940).
    • SimpleBasePlayer.State ऐक्सेस को सुरक्षित से सार्वजनिक में बदलें, ताकि अन्य क्लास में अपडेट को आसानी से मैनेज किया जा सके (#2128).
  • ExoPlayer:
    • MediaExtractorCompat जोड़ें. यह एक नई क्लास है, जो प्लैटफ़ॉर्म MediaExtractor के जैसी सुविधाएं देती है.
    • MediaCodecVideoRenderer का इस्तेमाल करके वीडियो चलाने के लिए, एक्सपेरिमेंट के तौर पर 'ExoPlayer' को पहले से चालू रखने की सुविधा जोड़ी गई है. ExoPlayer को सेकंडरी MediaCodecVideoRenderer देने के लिए, experimentalSetEnableMediaCodecVideoRendererPrewarming के ज़रिए DefaultRenderersFactory को कॉन्फ़िगर किया जा सकता है. अगर यह सुविधा चालू है, तो ExoPlayer लगातार मीडिया आइटम के वीडियो को पहले से प्रोसेस करता है, ताकि मीडिया आइटम के ट्रांज़िशन में लगने वाले समय को कम किया जा सके.
    • DefaultLoadControl में bufferForPlaybackMs और bufferForPlaybackAfterRebufferMs की डिफ़ॉल्ट वैल्यू को घटाकर, क्रमशः 1,000 और 2,000 मि॰से॰ करें.
    • DeviceInfo और डिवाइस की आवाज़ को एसिंक्रोनस तरीके से शुरू करें. ऐसा तब करें, जब setDeviceVolumeControlEnabled का इस्तेमाल करके इसे चालू किया गया हो. ExoPlayer.Builder.build() के बाद ये वैल्यू तुरंत उपलब्ध नहीं होती हैं. साथ ही, Player.Listener, onDeviceInfoChanged और onDeviceVolumeChanged के ज़रिए बदलावों की सूचना देता है.
    • प्लेयर बनाने के बाद, शुरुआती ऑडियो सेशन आईडी तुरंत उपलब्ध नहीं होता. अगर ज़रूरी हो, तो शुरुआती अपडेट सुनने के लिए AnalyticsListener.onAudioSessionIdChanged का इस्तेमाल किया जा सकता है.
    • वीडियो ट्रैक चुनते समय, भाषा का ध्यान रखें. डिफ़ॉल्ट रूप से, ऐसा 'मुख्य' वीडियो ट्रैक चुनें जो चुने गए ऑडियो ट्रैक की भाषा से मेल खाता हो. हालांकि, ऐसा तब ही किया जाता है, जब वह ट्रैक उपलब्ध हो. वीडियो की भाषा से जुड़ी प्राथमिकताओं को TrackSelectionParameters.Builder.setPreferredVideoLanguage(s) के साथ दिखाया जा सकता है.
    • selectedAudioLanguage पैरामीटर को DefaultTrackSelector.selectVideoTrack() तरीके में जोड़ें.
    • MediaSourceEventListener.onLoadStarted और उससे जुड़े MediaSourceEventListener.EventDispatcher तरीकों में retryCount पैरामीटर जोड़ें.
    • उस बग को ठीक किया गया है जिसकी वजह से, एक से ज़्यादा अवधि वाली DASH स्ट्रीम में प्लेलिस्ट आइटम या अवधि की अवधि, असल कॉन्टेंट से मेल नहीं खाती थी. इस वजह से, आइटम के आखिर में फ़्रेम फ़्रीज़ हो जाते थे (#1698).
    • BasePreloadManager.Listener को टॉप-लेवल PreloadManagerListener पर ले जाएं.
    • RenderersFactory.createSecondaryRenderer को लागू करके, प्री-वार्मिंग के लिए सेकंडरी रेंडरर उपलब्ध कराए जा सकते हैं. प्री-वार्मिंग की सुविधा चालू होने पर, मीडिया आइटम को चलाने के दौरान तेज़ी से ट्रांज़िशन होता है.
    • DASH, HLS, और SmoothStreaming जैसे अडैप्टिव स्ट्रीमिंग फ़ॉर्मैट में मेनिफ़ेस्ट के अनुरोधों के लिए, CmcdData भेजने की सुविधा चालू की गई (#1951).
    • उस कोडेक का MediaCodecInfo दें जिसे MediaCodecRenderer.onReadyToInitializeCodec में शुरू किया जाएगा (#1963).
    • विज्ञापन ग्रुप जोड़कर, AdPlaybackStates को बढ़ाने की अनुमति देने के लिए, AdsMediaSource में बदलाव करें. अमान्य बदलावों का पता चलता है और एक अपवाद दिखता है.
    • उस समस्या को ठीक किया गया है जिसमें वीडियो के बीच में दिखने वाले विज्ञापन के बाद, कॉन्टेंट मीडिया पर स्विच करते समय, डिकोड किए गए अतिरिक्त फ़्रेम तेज़ी से दिख सकते हैं.
    • DefaultRenderersFactory में दो MetadataRenderer इंस्टेंस जोड़ें, ताकि ऐप्लिकेशन डिफ़ॉल्ट रूप से मेटाडेटा की दो अलग-अलग स्कीमें पा सकें.
    • फिर से आकलन करें कि जब वीडियो चलाने की सुविधा रोकी जाती है, तब क्या किसी चंक को लोड करने की प्रोसेस को रद्द कर देना चाहिए (#1785).
    • ClippingMediaSource के लिए, ऐसे मीडिया में क्लिप बनाने की सुविधा जोड़ी गई है जिसे आगे-पीछे नहीं किया जा सकता.
    • प्री-वार्मिंग के साथ सीक करने पर, मीडिया आइटम के ट्रांज़िशन को ब्लॉक करने वाली गड़बड़ी को ठीक किया गया.
    • उस गड़बड़ी को ठीक किया गया है जिसमें ExoPlayer.isLoading(), STATE_IDLE या STATE_ENDED में बदलने के बाद भी true के तौर पर दिखता है (#2133).
    • LoadControl.Parameter में lastRebufferRealtimeMs जोड़ें (#2113).
  • ट्रांसफ़ॉर्मर:
    • पुराने सिस्टम के साथ काम करने वाले फ़ॉर्मैट में ट्रांसमक्सिंग की सुविधा जोड़ी गई.
    • Dolby Vision (प्रोफ़ाइल 8) फ़ॉर्मैट के लिए, ट्रांसकोडिंग और ट्रांसमक्सिंग की सुविधा जोड़ी गई.
    • Format का इस्तेमाल करने के लिए, VideoFrameProcessor.registerInputStream और VideoFrameProcessor.Listener.onInputStreamRegistered के पैरामीटर अपडेट करें.
    • DefaultEncoderFactory का इस्तेमाल करते समय, एचडीआर स्टैटिक मेटाडेटा जनरेट करें.
    • MediaMetricsManager का इस्तेमाल करके, Android प्लैटफ़ॉर्म की गड़बड़ी की पहचान करने की सुविधा चालू करें. ट्रांसफ़ॉर्मर, बदलाव करने वाले इवेंट और परफ़ॉर्मेंस डेटा को प्लैटफ़ॉर्म पर भेजता है. इससे डिवाइस पर सिस्टम की परफ़ॉर्मेंस और डीबग करने से जुड़ी जानकारी मिलती है. इस डेटा को Google भी इकट्ठा कर सकता है. हालांकि, ऐसा तब ही किया जाता है, जब डिवाइस के उपयोगकर्ता ने इस्तेमाल और परफ़ॉर्मेंस से जुड़ा डेटा शेयर करने की सुविधा चालू की हो. ऐप्लिकेशन, Transformer.Builder.setUsePlatformDiagnostics(false) की मदद से Transformer के प्लैटफ़ॉर्म डाइग्नोस्टिक्स में योगदान देने से ऑप्ट-आउट कर सकते हैं.
    • InAppMuxer को InAppMp4Muxer और InAppFragmentedMp4Muxer में बांटो. InAppMp4Muxer का इस्तेमाल करके, पूरी MP4 फ़ाइल बनाई जाती है. वहीं, InAppFragmentedMp4Muxer का इस्तेमाल करके, फ़्रैगमेंट की गई MP4 फ़ाइल बनाई जाती है.
    • Muxer इंटरफ़ेस को media3-muxer से media3-transformer पर ले जाएं.
    • MediaProjectionAssetLoader जोड़ें. यह स्क्रीन रिकॉर्डिंग के लिए MediaProjection से मीडिया उपलब्ध कराता है. साथ ही, Transformer डेमो ऐप्लिकेशन में स्क्रीन रिकॉर्डिंग की सुविधा जोड़ें.
    • Codec इंटरफ़ेस में #getInputFormat() जोड़ें.
    • जब हो सके, तब DefaultVideoFrameProcessor और DefaultVideoCompositor में कॉल करने वाले व्यक्ति को GlObjectsProvider रिलीज़ करने की ज़िम्मेदारी दें.
  • एक्सट्रैक्टर:
    • AVI: लगातार बिटरेट वाले कंप्रेस किए गए ऑडियो वाली फ़ाइलों को हैंडल करने की समस्या ठीक की गई. इनमें स्ट्रीम हेडर, चंक की संख्या के बजाय बाइट की संख्या सेव करता है.
    • एक या दो बाइट (चार के बजाय) में दिखाई गई लंबाई वाली NAL यूनिट को हैंडल करने की समस्या ठीक की गई.
    • जब बदलाव की सूची, ऐसे फ़्रेम से शुरू होती है जो सिंक नहीं होता और उससे पहले कोई सिंक फ़्रेम नहीं होता, तब MP4 फ़ाइल में बदलाव की सूचियों में मौजूद ArrayIndexOutOfBoundsException ठीक किया गया (#2062).
    • उस समस्या को ठीक किया गया है जिसमें कुछ डिवाइसों पर टीएस स्ट्रीम अटक जाती हैं (#2069).
    • FLAC: 32-बिट FLAC फ़ाइलों के लिए सहायता जोड़ी गई. इससे पहले, ये IllegalStateException: Playback stuck buffering and not loading के साथ नहीं चल पाते थे (#2197).
  • ऑडियो:
    • प्लेबैक फिर से शुरू होने पर, onAudioPositionAdvancing को कॉल किया जाएगा. इससे पहले, प्लेबैक रुकने पर इसे कॉल किया जाता था.
    • डिफ़ॉल्ट पैरामीटर के साथ SpeedChangingAudioProcessor कॉन्फ़िगर होने पर, SonicAudioProcessor को बायपास न करें.
    • Sonic#getOutputSize() में अंडरफ़्लो की समस्या को ठीक किया गया है. इससे DefaultAudioSink के रुकने की समस्या हो सकती थी.
    • MediaCodecAudioRenderer.getDurationToProgressUs() और DecoderAudioRenderer.getDurationToProgressUs() को ठीक करें, ताकि दिए गए समय को सही तरीके से रीसेट किया जा सके.
    • androidx.media3.common.audio.SonicAudioProcessor को फ़ाइनल बनाएं.
    • ChannelMappingAudioProcessor और TrimmingAudioProcessor में फ़्लोट पीसीएम के लिए सहायता जोड़ी गई.
  • वीडियो:
    • MediaCodecVideoRenderer.shouldUsePlaceholderSurface को बदलकर सुरक्षित करें, ताकि ऐप्लिकेशन, प्लेसहोल्डर सर्फ़ेस (#1905) के इस्तेमाल को ब्लॉक करने के लिए ओवरराइड कर सकें.
    • सीकिंग की प्रोसेस को तेज़ करने के लिए, एक्सपेरिमेंट के तौर पर ExoPlayer AV1 सैंपल डिपेंडेंसी पार्सिंग की सुविधा जोड़ी गई. इसे नए DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies एपीआई की मदद से चालू करें.
    • ऐसे ExoPlayerडिकोडर इनपुट बफ़र को हटाने के लिए, एक्सपेरिमेंट के तौर पर ExoPlayer API जोड़ें जिन पर निर्भर नहीं रहा जाता.MediaCodecVideoRenderer DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs की मदद से इसे चालू करें.
    • उस समस्या को ठीक किया गया है जिसमें बिना किसी डिसप्ले के प्लेयर तुरंत तैयार हो जाता था और किसी भी लंबित फ़्रेम को डिकोड करने में बहुत समय लगता था (#1973).
    • Xiaomi और OPPO डिवाइसों को डिटैच किए गए सर्फ़ेस मोड से बाहर रखें, ताकि स्क्रीन फ़्लिकर न हो (#2059).
  • टेक्स्ट:
    • VobSub सबटाइटल के लिए सहायता जोड़ी गई (#8260).
    • MediaItem.Builder.setSubtitleConfigurations के साथ कॉन्फ़िगर की गई सभी सबटाइटल फ़ाइलों को तुरंत लोड करना बंद करें. इसके बजाय, सिर्फ़ एक फ़ाइल लोड करें. ऐसा तब करें, जब ट्रैक चुनने की सुविधा (#1721) के ज़रिए फ़ाइल चुनी गई हो.
    • TTML: style का इस्तेमाल करके, tts:origin और tts:extent को रेफ़र करने की सुविधा जोड़ी गई (#2953).
    • WebVTT और SubRip फ़ाइलों के टाइमस्टैंप में, दशमलव के बाद सिर्फ़ तीन अंक होने चाहिए. इससे पहले, हम दशमलव के बाद के किसी भी अंक को गलत तरीके से पार्स करते थे. हालांकि, हम हमेशा यह मानते थे कि वैल्यू मिलीसेकंड में है. इससे टाइमस्टैंप गलत हो जाते थे (#1997).
    • जब किसी प्लेलिस्ट में CEA-608 या CEA-708 कैप्शन वाले क्लिप किए गए आइटम मौजूद होते हैं, तो वीडियो रुकने की समस्या को ठीक किया गया है.
    • एसएसए फ़ाइल में ऐसे क्यू के लिए IllegalStateException ठीक किया गया है जिनकी अवधि शून्य है. इसका मतलब है कि शुरू और खत्म होने का समय एक जैसा है (#2052).
    • जब सबटाइटल को ऑडियो और वीडियो के साथ एक ही कंटेनर में मक्स किया जाता है, तब सबटाइटल पार्स करने से जुड़ी गड़बड़ियों को छिपाता है और उन्हें लॉग करता है (#2052).
    • WebVTT फ़ाइलों में, CR लाइन के आखिर में इस्तेमाल करके, मल्टी-बाइट UTF-8 वर्णों को मैनेज करने की समस्या ठीक की गई है (#2167).
  • DRM:
    • एपीआई < 27 वाले डिवाइसों पर ClearKey कॉन्टेंट चलाने के दौरान, MediaCodec$CryptoException: Operation not supported in this configuration गड़बड़ी ठीक की गई (#1732).
  • असर:
    • OverlaySettings की सुविधा को StaticOverlaySettings में ले जाया गया. OverlaySettings को सबक्लास किया जा सकता है, ताकि डाइनैमिक ओवरले सेटिंग की अनुमति दी जा सके.
  • Muxers:
    • MuxerException को Muxer इंटरफ़ेस से हटा दिया गया है, ताकि पूरी तरह क्वालिफ़ाइड नाम बहुत लंबा न हो.
    • Mp4Muxer.Builder और FragmentedMp4Muxer.Builder, दोनों में setSampleCopyEnabled() तरीके का नाम बदलकर setSampleCopyingEnabled() कर दिया गया है.
    • Mp4Muxer.addTrack() और FragmentedMp4Muxer.addTrack() अब TrackToken के बजाय int ट्रैक आईडी दिखाते हैं.
    • Mp4Muxer और FragmentedMp4Muxer अब Muxer इंटरफ़ेस लागू नहीं करते.
    • Mp4Muxer सैंपल बैचिंग और कॉपी करने की सुविधा को डिफ़ॉल्ट रूप से बंद करें.
    • FragmentedMp4Muxer में मौजूद उस बग को ठीक करें जिसकी वजह से, सिर्फ़ ऑडियो ट्रैक लिखने पर कई फ़्रैगमेंट बन जाते हैं.
  • सेशन:
    • जब वीडियो चलाने की सुविधा रुक जाती है, बंद हो जाती है या काम नहीं करती है, तो फ़ोरग्राउंड सेवा की स्थिति को 10 मिनट तक बनाए रखें. इससे उपयोगकर्ता, इस टाइमआउट के दौरान वीडियो चलाना फिर से शुरू कर सकते हैं. साथ ही, उन्हें अलग-अलग डिवाइसों पर फ़ोरग्राउंड सेवा से जुड़ी पाबंदियों का सामना नहीं करना पड़ता. ध्यान दें कि onTaskRemoved को बदलने से पहले, फ़ोरग्राउंड सेवा को रोकने के लिए अब सिर्फ़ player.pause() को कॉल करने का इस्तेमाल नहीं किया जा सकता. इसके बजाय, MediaSessionService.pauseAllPlayersAndStopSelf() का इस्तेमाल करें.stopSelf()
    • वीडियो चलाने के दौरान कोई गड़बड़ी होने या वीडियो रुक जाने पर, सूचना को दिखता रहने दें. सूचना सिर्फ़ तब हटाई जाती है, जब प्लेलिस्ट से सभी गाने हटा दिए जाते हैं या प्लेयर को रिलीज़ कर दिया जाता है.
    • Android प्लैटफ़ॉर्म पर MediaSession की कार्रवाइयों ACTION_PLAY और ACTION_PAUSE को बेहतर तरीके से हैंडल किया गया है. इससे उपलब्ध कमांड के हिसाब से, इनमें से सिर्फ़ एक कार्रवाई सेट की जा सकती है. साथ ही, अगर इनमें से सिर्फ़ एक कार्रवाई सेट की गई है, तो उसे स्वीकार किया जा सकता है.
    • Context को MediaButtonReceiver.shouldStartForegroundService में पैरामीटर के तौर पर जोड़ें (#1887).
    • उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी सेशन से कनेक्ट किए गए MediaController पर Player तरीके को कॉल करने पर, अपडेट होने वाले बदलाव हट जाते थे.
    • MediaSession.setSessionActivity(PendingIntent) में null वैल्यू स्वीकार करने की सुविधा जोड़ें (#2109).
    • उस गड़बड़ी को ठीक किया गया है जिसमें प्लेलिस्ट खाली होने पर भी पुरानी सूचना दिखती रहती थी (#2211).
  • यूआई:
    • media3-ui-compose मॉड्यूल में स्टेट होल्डर और कंपोज़ेबल जोड़ें. ऐसा PlayerSurface, PresentationState, PlayPauseButtonState, NextButtonState, PreviousButtonState, RepeatButtonState, ShuffleButtonState, और PlaybackSpeedState के लिए करें.
  • डाउनलोड:
    • CacheWriter में मौजूद उस बग को ठीक किया गया है जिसकी वजह से, डेटा सोर्स खुले रहते हैं और कैश मेमोरी वाले एरिया लॉक हो जाते हैं. ऐसा तब होता है, जब डेटा सोर्स, IOException (#9760) के अलावा कोई अन्य Exception दिखाता है.
  • एचएलएस एक्सटेंशन:
    • HlsInterstitialsAdsLoader का पहला वर्शन जोड़ें. विज्ञापन लोडर, एचएलएस मीडिया प्लेलिस्ट के एचएलएस इंटरस्टीशियल विज्ञापन पढ़ता है और उन्हें AdPlaybackState पर मैप करता है. यह AdsMediaSource को पास किया जाता है. इस शुरुआती वर्शन में, सिर्फ़ X-ASSET-URI एट्रिब्यूट वाली HLS VOD स्ट्रीम काम करती हैं.
    • HlsInterstitialsAdsLoader.AdsMediaSourceFactory जोड़ें. ऐप्लिकेशन इसका इस्तेमाल करके, AdsMediaSource इंस्टेंस बना सकते हैं. ये इंस्टेंस, HlsInterstitialsAdsLoader का इस्तेमाल आसान और सुरक्षित तरीके से करते हैं.
    • Dolby Vision फ़ॉर्मैट (#1785) का पता लगाने के लिए, HLS प्लेलिस्ट से SUPPLEMENTAL-CODECS टैग पार्स करें.
    • एचएलएस स्ट्रीम में पोज़िशन सिंक करने के लिए, शर्त को आसान बनाया गया है (#2209).
  • डैश एक्सटेंशन:
    • DASH के लिए AC-4 Level-4 फ़ॉर्मैट का सपोर्ट जोड़ा गया (#1898).
    • एक से ज़्यादा अवधि वाली लाइव स्ट्रीम में विज्ञापन दिखाने के लिए, अपडेट का अंतराल तय करते समय आने वाली समस्या को ठीक किया गया है (#1698).
    • Dolby Vision फ़ॉर्मैट का पता लगाने के लिए, DASH मेनिफ़ेस्ट से scte214:supplementalCodecs एट्रिब्यूट को पार्स किया गया (#1785).
    • लाइव स्ट्रीम में, अवधि के ट्रांज़िशन को बेहतर तरीके से हैंडल करना. ऐसा तब होता है, जब अवधि में मीडिया सैंपल, अवधि की तय की गई अवधि से ज़्यादा होते हैं (#1698).
    • उस समस्या को ठीक किया गया है जिसमें adaptation-set-switching के तौर पर मार्क किए गए अडैप्टेशन सेट, अलग-अलग भाषाओं या भूमिका के फ़्लैग के साथ मर्ज हो जाते हैं (#2222).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
    • MPEG-H डिकोडर मॉड्यूल जोड़ें. यह मॉड्यूल, MPEG-H ऑडियो को डिकोड करने के लिए, MPEG-H डिकोडर का इस्तेमाल करता है (#1826).
  • एमआईडीआई एक्सटेंशन:
    • कस्टम AudioSink और AudioRendererEventListener इंस्टेंस को MidiRenderer में प्लंब करें.
  • कास्ट एक्सटेंशन:
    • play-services-cast-framework की डिपेंडेंसी को 21.5.0 पर अपग्रेड करें, ताकि Google Play services इंस्टॉल किए गए लेकिन बंद किए गए डिवाइसों पर, API 34 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन में FLAG_MUTABLE क्रैश होने की समस्या को ठीक किया जा सके (#2178).
  • डेमो ऐप्लिकेशन:
    • अतिरिक्त बटन जोड़कर demo-compose की सुविधाओं को बढ़ाएं. साथ ही, स्केलिंग और शटर की सुविधा के साथ PlayerSurface इंटिग्रेशन को बेहतर बनाएं.
  • बंद किए गए सिंबल हटाएं:
    • अब इस्तेमाल में नहीं रही AudioMixer.create() विधि को हटाएं. इसके बजाय, DefaultAudioMixer.Factory().create() का इस्तेमाल करें.
    • नीचे दी गई, अब इस्तेमाल नहीं की जा सकने वाली Transformer.Builder विधियों को हटाएं:
      • setTransformationRequest() के बजाय, setAudioMimeType(), setVideoMimeType(), और setHdrMode() का इस्तेमाल करें.
      • setAudioProcessors(), ऑडियो प्रोसेसर को EditedMediaItem.Builder.setEffects() में सेट करें. इसके बाद, इसे Transformer.start() को पास करें.
      • setVideoEffects(), EditedMediaItem.Builder.setEffects() में वीडियो इफ़ेक्ट सेट करें, और इसे Transformer.start() को पास करें.
      • setRemoveAudio(), EditedMediaItem को पास किए गए ऑडियो को हटाने के लिए, Transformer.start() के बजाय EditedMediaItem.Builder.setRemoveAudio() का इस्तेमाल करें.
      • setRemoveVideo(), EditedMediaItem.Builder.setRemoveVideo() का इस्तेमाल करें. इससे वीडियो को Transformer.start() को पास किए गए EditedMediaItem से हटाया जा सकेगा.
      • setFlattenForSlowMotion(), Transformer.start() को पास किए गए EditedMediaItem को फ़्लैट करने के लिए, EditedMediaItem.Builder.setFlattenForSlowMotion() का इस्तेमाल करें.
      • setListener() के बजाय, addListener(), removeListener() या removeAllListeners() का इस्तेमाल करें.
    • नीचे दी गई, अब इस्तेमाल नहीं की जा सकने वाली Transformer.Listener विधियों को हटाएं:
      • onTransformationCompleted(MediaItem), इसके बजाय onCompleted(Composition, ExportResult) का इस्तेमाल करें.
      • onTransformationCompleted(MediaItem, TransformationResult), इसके बजाय onCompleted(Composition, ExportResult) का इस्तेमाल करें.
      • onTransformationError(MediaItem, Exception), इसके बजाय onError(Composition, ExportResult, ExportException) का इस्तेमाल करें.
      • onTransformationError(MediaItem, TransformationException), इसके बजाय onError(Composition, ExportResult, ExportException) का इस्तेमाल करें.
      • onTransformationError(MediaItem, TransformationResult, TransformationException) के बजाय, onError(Composition, ExportResult, ExportException) का इस्तेमाल करें.
      • onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest) के बजाय, onFallbackApplied(Composition, TransformationRequest, TransformationRequest) का इस्तेमाल करें.
    • अब इस्तेमाल में नहीं है, ऐसी TransformationResult क्लास हटाएं. इसके बजाय, ExportResult का इस्तेमाल करें.
    • अब इस्तेमाल में नहीं है, ऐसी TransformationException क्लास हटाएं. इसके बजाय, ExportException का इस्तेमाल करें.
    • बंद हो चुके Transformer.PROGRESS_STATE_NO_TRANSFORMATION को हटाएं. इसके बजाय, Transformer.PROGRESS_STATE_NOT_STARTED का इस्तेमाल करें.
    • बंद हो चुके Transformer.setListener() को हटाएं. इसके बजाय, Transformer.addListener(), Transformer.removeListener() या Transformer.removeAllListeners() का इस्तेमाल करें.
    • बंद हो चुके Transformer.startTransformation() को हटाएं. इसके बजाय, Transformer.start(MediaItem, String) का इस्तेमाल करें.
    • बंद हो चुके SingleFrameGlShaderProgram को हटाएं. इसके बजाय, BaseGlShaderProgram का इस्तेमाल करें.
    • Transformer.flattenForSlowMotion को हटाएं. इसके बजाय, EditedMediaItem.flattenForSlowMotion का इस्तेमाल करें.
    • ExoPlayer.VideoComponent, ExoPlayer.AudioComponent, ExoPlayer.TextComponent, और ExoPlayer.DeviceComponent को हटाया गया.
    • androidx.media3.exoplayer.audio.SonicAudioProcessor को हटा दिया गया है.
    • इन पुरानी DownloadHelper विधियों को हटाया गया:
      • कंस्ट्रक्टर DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]) के बजाय, DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList) का इस्तेमाल करें.
      • getRendererCapabilities(RenderersFactory) के बराबर फ़ंक्शनलिटी पाने के लिए, RenderersFactory के साथ DefaultRendererCapabilitiesList बनाकर, DefaultRendererCapabilitiesList.getRendererCapabilities() को कॉल किया जा सकता है.
    • PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat) तरीका हटा दिया गया है. इसके बजाय, PlayerNotificationManager.setMediaSessionToken(MediaSession.Token) का इस्तेमाल करें और (MediaSession.Token) compatToken.getToken() में पास करें.

1.6.0-rc02

19 मार्च, 2025

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

1.6.0-rc01

12 मार्च, 2025

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

1.6.0-beta01

26 फ़रवरी, 2025

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

वर्शन 1.6.0-alpha03

6 फ़रवरी, 2025

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

वर्शन 1.6.0-alpha02

30 जनवरी, 2025

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

वर्शन 1.6.0-alpha01

20 दिसंबर, 2024

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

संस्‍करण 1.5

संस्‍करण 1.5.1

19 दिसंबर, 2024

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

  • ExoPlayer:
    • MediaCodec में एसिंक्रोनस डिक्रिप्शन के इस्तेमाल को बंद करें, ताकि इस प्लैटफ़ॉर्म एपीआई (#1641) के साथ कोडेक के टाइमआउट से जुड़ी समस्याओं को ठीक किया जा सके.
  • एक्सट्रैक्टर:
    • MP3: अगर VBRI फ़्रेम की विषय सूची में, फ़ाइल में मौजूद MP3 का पूरा डेटा शामिल नहीं है, तो ऑडियो को बीच में न रोकें (#1904).
  • वीडियो:
    • onOutputFormatChanged को प्रोसेस करते समय, MediaCodecAdapter के लिए दिए गए पिक्सल के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की वैल्यू का इस्तेमाल करने की सुविधा को वापस लाया गया है (#1371).
  • टेक्स्ट:
    • 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() तरीके से बदलें.
    • प्लेलिस्ट का स्ट्रक्चर बनाने के बजाय, Timeline और मौजूदा Tracks और Metadata को सीधे तौर पर बताने के लिए, SimpleBasePlayer.State.Builder.setPlaylist() के लिए ओवरराइड जोड़ें.
    • minSdk को 21 (Android Lollipop) पर सेट करें. यह AndroidX की अन्य सभी लाइब्रेरी के साथ काम करती है.
    • androidx.media3:media3-common-ktx आर्टफ़ैक्ट जोड़ें. यह कॉमन लाइब्रेरी के ऊपर बनाया गया है और Kotlin के लिए खास फ़ंक्शन उपलब्ध कराता है
    • media3-common-ktx लाइब्रेरी में Player.Events को सुनने के लिए, कोरूटीन को स्पिन करने के लिए Player.listen सस्पेंडिंग एक्सटेंशन फ़ंक्शन जोड़ें.
    • मैन्युअल तरीके से आउट-ऑफ़-लाइन की गई इनर क्लास से @DoNotInline एनोटेशन हटाएं. इन्हें रनटाइम क्लास की पुष्टि से जुड़ी गड़बड़ियों से बचने के लिए डिज़ाइन किया गया है. R8 के नए वर्शन में, इस तरह के आउट-ऑफ़-लाइन कॉल अपने-आप हो जाते हैं, ताकि रनटाइम में होने वाली गड़बड़ियों से बचा जा सके. इसलिए, अब मैन्युअल तरीके से आउट-ऑफ़-लाइनिंग करने की ज़रूरत नहीं है. लाइब्रेरी का इस्तेमाल करने वाले सभी Gradle उपयोगकर्ताओं के पास, Android Gradle प्लगिन का ऐसा वर्शन होना चाहिए जो R8 के ऐसे वर्शन का इस्तेमाल करता हो जो ऐसा करता है. ऐसा compileSdk = 35 की वजह से है. जिन उपयोगकर्ताओं के पास Gradle के अलावा कोई और बिल्ड सिस्टम है उन्हें यह पक्का करना होगा कि R8 के बराबर की उनकी श्रिंकिंग/ऑब्फ़स्केटिंग प्रोसेस, अपने-आप आउट-ऑफ़-लाइनिंग की प्रोसेस करती हो. ऐसा करने से, रनटाइम क्लास की पुष्टि करने में होने वाली गड़बड़ियों से बचा जा सकेगा. यह बदलाव AndroidX की अन्य लाइब्रेरी में पहले ही किया जा चुका है.
  • ExoPlayer:
    • अब MediaCodecRenderer.onProcessedStreamChange() को हर मीडिया आइटम के लिए कॉल किया जा सकता है. पहले, पहले वाले के लिए ऐसा नहीं कहा जाता था. इसे चालू करने के लिए, MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart() का इस्तेमाल करें.
    • PreloadMediaSource.PreloadControl.onPreloadError को जोड़ें, ताकि PreloadMediaSource.PreloadControl लागू करने पर गड़बड़ी होने पर कार्रवाइयां की जा सकें.
    • ऐप्लिकेशन में प्रीलोड इवेंट को लागू करने के लिए, BasePreloadManager.Listener जोड़ें.
    • एसएनटीपी क्लाइंट के टाइमआउट को बदलने और टाइमआउट होने पर अन्य पतों को फिर से आज़माने की अनुमति दें (#1540).
    • MediaCodecAdapter.Configuration.flags को हटा दिया गया है, क्योंकि यह फ़ील्ड हमेशा शून्य था.
    • इस कुकी से उपयोगकर्ता को Wear OS API 35+ पर, प्लेबैक के लिए पहले से मौजूद स्पीकर चुनने की अनुमति मिलती है. हालांकि, ऐसा सिर्फ़ तब किया जा सकता है, जब डिवाइस इस सुविधा के साथ काम करता हो.
    • ऑडियो फ़ोकस मैनेज करने की सुविधा चालू होने तक, Context.getSystemService(Context.AUDIO_SERVICE) को कॉल ब्लॉक करने का अनुरोध न भेजें. इससे यह पक्का होता है कि अगर ऑडियो फ़ोकस हैंडलिंग की सुविधा चालू नहीं है, तो कॉल ब्लॉक नहीं किया जाएगा (#1616).
    • लोडिंग में गड़बड़ी होने पर, बफ़र किए गए कॉन्टेंट की अवधि के बावजूद वीडियो चलाने की अनुमति दें (#1571).
    • AnalyticsListener.onRendererReadyChanged() जोड़कर यह सिग्नल दें कि कब अलग-अलग रेंडरर पर वीडियो चलाने की सुविधा उपलब्ध है.
    • MediaCodec को एसिंक्रोनस मोड (API 31 और इसके बाद के वर्शन पर डिफ़ॉल्ट व्यवहार) में चलाने पर, MediaCodec.CryptoException को कभी-कभी "रनटाइम में अचानक हुई गड़बड़ी" के तौर पर रिपोर्ट किए जाने की समस्या ठीक की गई.
    • PreloadMediaSource.PreloadControl.onContinueLoadingRequested() के साथ bufferedPositionUs के बजाय bufferedDurationUs पास करें. इसके अलावा, DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS को DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS में बदलता है. इसके बाद, ऐप्लिकेशन को डिफ़ॉल्ट शुरुआती पोज़िशन से किसी खास अवधि को दिखाने वाली वैल्यू पास करनी होती है. इस अवधि के लिए, मीडिया सोर्स को इस IntDef के साथ प्रीलोड करना होता है, न कि किसी पोज़िशन के साथ.
    • ForwardingRenderer को लागू करें. इससे, सभी तरीके के कॉल को दूसरे रेंडरर (1703) पर फ़ॉरवर्ड किया जा सकेगा.
    • प्लेलिस्ट में मौजूद अगले आइटम के लिए, प्लेलिस्ट प्रीलोडिंग की सुविधा चालू करें. ऐप्लिकेशन, ExoPlayer.setPreloadConfiguration(PreloadConfiguration) को कॉल करके, पेजों को पहले से लोड करने की सुविधा चालू कर सकते हैं. डिफ़ॉल्ट रूप से, पहले से लोड करने की सुविधा बंद होती है. ऑप्ट-इन करने पर, DefaultLoadControl प्रीलोडिंग को इस तरह से सीमित करता है कि वीडियो चलाने में कोई रुकावट न आए. यह सिर्फ़ तब शुरू और जारी होती है, जब प्लेयर वीडियो चलाने के लिए लोड नहीं हो रहा होता. ऐप्लिकेशन, LoadControl.shouldContinuePreloading() को लागू करके इस व्यवहार को बदल सकते हैं. जैसे, DefaultLoadControl में इस तरीके को बदलते समय. LoadControl का डिफ़ॉल्ट तौर पर लागू होने वाला वर्शन, प्रीलोडिंग की सुविधा को बंद कर देता है. ऐसा तब होता है, जब कोई ऐप्लिकेशन LoadControl के कस्टम वर्शन का इस्तेमाल कर रहा हो.
    • सबक्लास लिसनर के इवेंट को चालू करने की अनुमति देने के लिए, MediaSourceEventListener.EventDispatcher.dispatchEvent() तरीका जोड़ा गया (1736).
    • DefaultPreloadManager.Builder जोड़ें. यह DefaultPreloadManager और ExoPlayer इंस्टेंस बनाता है. साथ ही, इनमें एक जैसे कॉन्फ़िगरेशन शेयर करता है.
    • LoadControl.onTracksSelected() से Renderer[] पैरामीटर हटाएं, क्योंकि DefaultLoadControl लागू करने पर ExoTrackSelection[] से स्ट्रीम टाइप वापस पाए जा सकते हैं.
    • DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) को सेवा से बाहर कर दिया गया है और तरीके को फ़ाइनल के तौर पर मार्क किया गया है, ताकि इसे बदला न जा सके. इसके बजाय, नए DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]) का इस्तेमाल किया जाना चाहिए.
    • MergingMediaSource में, सेकंडरी सोर्स से मिले MediaSourceEventListener इवेंट की रिपोर्ट करें. इससे साइडलोड किए गए सबटाइटल (MediaItem.LocalConfiguration.subtitleConfigurations की मदद से जोड़े गए सबटाइटल) के लिए, loadstart/error/cancelled/completed इवेंट रिपोर्ट किए जाएंगे. ये इवेंट, AnalyticsListener से भेजे गए डुप्लीकेट लोड इवेंट के तौर पर दिख सकते हैं.
    • उपशीर्षक और मेटाडेटा से जुड़ी गड़बड़ियों की वजह से, वीडियो चलने में पूरी तरह से रुकावट आने से रोकें. इसके बजाय, समस्या वाले ट्रैक को बंद कर दिया जाता है और बाकी ट्रैक चलते रहते हैं (#1722).
      • नए सबटाइटल हैंडलिंग (एक्सट्रैक्शन के दौरान) में, पार्स करने से जुड़ी गड़बड़ियां (जैसे, अमान्य सबटाइटल डेटा) और लोड करने से जुड़ी गड़बड़ियां (जैसे, एचटीटीपी 404) onLoadError कॉलबैक के ज़रिए भेजी जाती हैं.
      • लेगसी सबटाइटल हैंडलिंग (रेंडरिंग के दौरान) में, सिर्फ़ लोड से जुड़ी गड़बड़ियों को onLoadError कॉलबैक के ज़रिए दिखाया जाता है. वहीं, पार्स करने से जुड़ी गड़बड़ियों को अनदेखा कर दिया जाता है. यह पहले से मौजूद व्यवहार है.
    • उस बग को ठीक किया गया है जिसकी वजह से, एक से ज़्यादा अवधि वाली DASH स्ट्रीम में प्लेलिस्ट आइटम या अवधि की अवधि, असल कॉन्टेंट से मेल नहीं खाती थी. इस वजह से, आइटम के आखिर में फ़्रेम फ़्रीज़ हो जाते थे (#1698).
    • SntpClient में एक सेटर जोड़ें, ताकि आखिरी अपडेट के बाद से गुज़रे हुए ज़्यादा से ज़्यादा समय को सेट किया जा सके. इसके बाद, क्लाइंट को फिर से शुरू किया जाता है (#1794).
  • ट्रांसफ़ॉर्मर:
    • SurfaceAssetLoader जोड़ें. यह Surface के ज़रिए, वीडियो डेटा को Transformer में कतार में लगाने की सुविधा देता है.
    • ImageAssetLoader, IllegalStateException दिखाने के बजाय, AssetLoader.onError के ज़रिए ऐसे इनपुट की रिपोर्ट करता है जो काम नहीं करता.
    • इमेज एक्सपोर्ट करने के लिए, MediaItem.Builder.setImageDurationMs का इस्तेमाल करके इमेज की अवधि सेट करना ज़रूरी है.
    • ऑडियो के EditedMediaItems के क्रम में मौजूद अंतर के लिए, एक्सपोर्ट करने की सुविधा जोड़ी गई.
  • ट्रैक के विकल्प:
    • DefaultTrackSelector: जब अन्य फ़ैक्टर एक जैसे हों, तो चैनल आधारित ऑडियो के बजाय ऑब्जेक्ट आधारित ऑडियो को प्राथमिकता दें.
  • एक्सट्रैक्टर:
    • Mp4Extractor और FragmentedMp4Extractor को ऐसे H264 सैंपल की पहचान करने की अनुमति दें जिनका इस्तेमाल बाद के सैंपल में रेफ़रंस के तौर पर नहीं किया जाता.
    • AmrExtractor में इंडेक्स के हिसाब से ढूंढने की सुविधा चालू करने का विकल्प जोड़ा गया.
    • मान्य फ़्रेम के बीच 128 केबी से ज़्यादा की MP3 फ़ाइलों को अमान्य के बजाय छोटा किया गया माना जाएगा. इसका मतलब है कि जिन फ़ाइलों में आखिर में MP3 फ़ॉर्मैट के अलावा किसी और फ़ॉर्मैट का डेटा होता है और जिनमें MP3 फ़ॉर्मैट के बाइट की लंबाई बताने वाला कोई अन्य मेटाडेटा नहीं होता है वे अब ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} (#1563) गड़बड़ी दिखाने के बजाय, MP3 फ़ॉर्मैट के डेटा के आखिर में बंद हो जाती हैं.
    • MP4 फ़ाइलों में बदलाव की सूचियां प्रोसेस करते समय, नॉन-कीफ़्रेम मीडिया की शुरुआती पोज़िशन के लिए, प्रीरोल सैंपल हैंडलिंग से जुड़ी समस्या ठीक की गई है (#1659).
    • mdhd बॉक्स में Mp4Extractor और FragmentedMp4Extractor (#1531) से मीडिया की अवधि का इस्तेमाल करके, फ़्रेम रेट की बेहतर कैलकुलेशन की गई.
    • MP4 फ़ाइल की एडिट की गई सूचियों में, media_time की गलत स्केलिंग की समस्या ठीक की गई. मूवी के टाइमस्केल का इस्तेमाल करके, segment_duration को पहले ही सही तरीके से स्केल किया जा चुका था. अब ट्रैक के टाइमस्केल का इस्तेमाल करके, media_time को सही तरीके से स्केल किया गया है. ऐसा MP4 फ़ॉर्मैट के स्टैंडर्ड (#1792) के मुताबिक किया गया है.
    • एडिट लिस्ट (#1797) वाले MP4 के लिए, endIndices की गिनती में क्रम से बाहर के फ़्रेम को हैंडल किया गया.
    • MP4 फ़ाइलों के mdhd बॉक्स में मीडिया की अवधि पार्स करने की समस्या ठीक की गई है, ताकि -1 वैल्यू को हैंडल किया जा सके (#1819).
    • H.263 वीडियो के लिए, MP4 फ़ाइलों में h263 बॉक्स की पहचान करने की सुविधा जोड़ी गई है (#1821).
    • AC-4 Level-4 ISO बेस मीडिया फ़ाइल फ़ॉर्मैट के लिए सहायता जोड़ी गई (#1265).
  • DataSource:
    • HttpEngineDataSource को अपडेट किया गया है, ताकि इसका इस्तेमाल एपीआई लेवल 34 के बजाय S extension 7 से किया जा सके (#1262).
    • DataSourceContractTest: पुष्टि करें कि DataSource.getUri(), हल किया गया यूआरआई दिखाता है, जैसा कि दस्तावेज़ में बताया गया है. अगर यह अनुरोध किए गए यूआरआई से अलग है, तो टेस्ट इस बात की जानकारी नए DataSourceContractTest.TestResource.Builder.setResolvedUri() तरीके का इस्तेमाल करके दे सकते हैं.
    • DataSourceContractTest: पुष्टि करें कि open() को कॉल करने पर, DataSource.getUri() और getResponseHeaders() 'open' वैल्यू दिखाते हैं. ऐसा तब होता है, जब 'नहीं मिला' रिसॉर्स की वजह से कॉल पूरा नहीं हो पाता है. साथ ही, यह पुष्टि करें कि close() को कॉल करने से पहले भी DataSource.getUri() और getResponseHeaders() 'open' वैल्यू दिखाते हैं.
      • DataSourceContractTest.getNotFoundResources() को बदलने की सुविधा की मदद से, टेस्ट सब-क्लास कई 'नहीं मिला' संसाधन उपलब्ध करा सकती हैं. साथ ही, वे ज़रूरी हेडर भी उपलब्ध करा सकती हैं. इससे, हेडर के साथ HTTP 404 और "सर्वर नहीं मिला" (कोई हेडर नहीं) के बीच अंतर किया जा सकता है.
  • ऑडियो:
    • अगर मीडिया में मौजूद है, तो कोडेक पर CTA-2075 के लाउडनेस मेटाडेटा को अपने-आप कॉन्फ़िगर करता है.
    • वीडियो में आगे-पीछे जाते समय, आवाज़ धीरे-धीरे कम होनी चाहिए.
    • सीख के दौरान होने वाली पॉप की आवाज़ों को ठीक किया गया.
    • Sonic के टाइम-स्ट्रेचिंग/पिच-शिफ़्टिंग एल्गोरिदम के लिए, ट्रंकेशन की गड़बड़ी को ठीक किया गया.
    • SpeedChangingAudioProcessor में मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से आउटपुट फ़्रेम ड्रॉप हो जाते थे.
  • वीडियो:
    • MediaCodecVideoRenderer ऐसे सैंपल को डिकोड करने से बचता है जिन्हें न तो रेंडर किया जाता है और न ही अन्य सैंपल के रेफ़रंस के तौर पर इस्तेमाल किया जाता है.
    • एपीआई 35 और इसके बाद के वर्शन पर, MediaCodecAdapter को अब null Surface, configure में मिल सकता है. साथ ही, अगर कोडेक इसका समर्थन करता है, तो पहले से सेट किए गए Surface को हटाने के लिए, नए तरीके detachOutputSurface को कॉल किया जा सकता है (MediaCodecInfo.detachedSurfaceSupported).
    • onOutputFormatChanged को प्रोसेस करते समय, अगर पिक्सल के आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) की वैल्यू दी गई हैं, तो उनका इस्तेमाल करें (#1371).MediaCodecAdapter
    • Galaxy Tab S7 FE पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया है. इस समस्या की वजह से, 60fps वाली सुरक्षित H264 स्ट्रीम को काम न करने वाली स्ट्रीम के तौर पर मार्क किया जाता है (#1619).
    • उन कोडेक के लिए समाधान जोड़ा गया है जो स्ट्रीम के खत्म होने का सिग्नल नहीं देते हैं और आखिरी सैंपल के बाद रुक जाते हैं.
  • टेक्स्ट:
    • कस्टम VoiceSpan जोड़ें और उसे WebVTT वॉइस स्पैन के लिए भरें (#1632).
    • पक्का करें कि एचएलएस में WebVTT, बहुत बड़े सबटाइटल टाइमस्टैंप के साथ काम करता हो. ये टाइमस्टैंप, माइक्रोसेकंड के तौर पर दिखाए जाने पर 64-बिट long से ज़्यादा हो जाते हैं और 90,000 MPEG टाइमबेस से गुणा किए जाते हैं. साथ ही, यह भी पक्का करें कि ये टाइमस्टैंप दिख रहे हों (#1763).
    • Dolby Vision कॉन्टेंट में CEA-608 सबटाइटल की सुविधा जोड़ी गई है (#1820).
    • CEA-608 सबटाइटल चालू होने पर, DASH मल्टी-पीरियड स्ट्रीम में वीडियो रुकने की समस्या ठीक की गई (#1863).
  • मेटाडेटा:
    • जिन ट्रैक में icy या vnd.dvb.ait कॉन्टेंट मौजूद है उन्हें C.TRACK_TYPE_METADATA टाइप असाइन करें.
  • इमेज:
    • Glide या Coil जैसी इमेज लोड करने वाली बाहरी लाइब्रेरी के साथ इंटिग्रेशन को आसान बनाने के लिए, ExternallyLoadedImageDecoder जोड़ें.
  • DataSource:
    • FileDescriptorDataSource जोड़ें. यह एक नया DataSource है, जिसका इस्तेमाल FileDescriptor से डेटा पढ़ने के लिए किया जा सकता है (#3757).
  • असर:
    • स्केलिंग से जुड़ी सामान्य समस्या SurfaceTexture को ठीक करने के लिए, DefaultVideoFrameProcessor वर्कअराउंड जोड़ा गया. SurfaceTexture में थोड़ी सी स्केलिंग शामिल हो सकती है, जिससे क्रॉप किए गए बफ़र के किनारे के चारों ओर मौजूद 1-टेक्सल बॉर्डर कट जाता है. अब इसे इस तरह से मैनेज किया जाता है कि आउटपुट, अनुमानित आउटपुट के ज़्यादा करीब हो.
    • स्पीड बढ़ाओ DefaultVideoFrameProcessor.queueInputBitmap(). इस वजह से, Transformer की मदद से इमेज को वीडियो में एक्सपोर्ट करने की प्रोसेस तेज़ हो जाती है.
  • IMA एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से प्लेलिस्ट मिटाने पर, ArrayIndexOutOfBoundsException में ImaServerSideAdInsertionMediaSource हो सकता है.
    • उस बग को ठीक किया गया है जिसकी वजह से, सर्वर साइड से डाली गई ऐसी डीएआई स्ट्रीम जिनमें प्रीरोल नहीं होता है, आखिरी मिडरोल के बाद चलाने पर ArrayIndexOutOfBoundsException हो सकता है (#1741).
  • सेशन:
    • MediaButtonReceiver.shouldStartForegroundService(Intent) को जोड़ें, ताकि ऐप्लिकेशन इस तरीके को बदलकर, वीडियो चलाने की सुविधा को फिर से शुरू करने के लिए आने वाले प्ले कमांड को बंद कर सकें. डिफ़ॉल्ट रूप से, यह सेवा हमेशा चालू रहती है. साथ ही, सिस्टम के ForegroundServiceDidNotStartInTimeException (#1528) की वजह से सेवा क्रैश होने पर ही, इसे बंद किया जा सकता है.
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, लेगसी सेवा से कनेक्ट होने पर, MediaBrowser से भेजी गई कस्टम कमांड, MediaBrowserServiceCompat के बजाय MediaSessionCompat.Callback को भेजी जाती थीं. इस वजह से, MediaBrowser को लेगसी सेवा से भेजी गई असल वैल्यू (#1474) नहीं मिल पाई.
    • मीडिया बटन के इंटेंट (#1730) के लिए ब्रॉडकास्ट रिसीवर सेट करते समय, कुछ मैन्युफ़ैक्चरर के डिवाइसों से थ्रो किए गए IllegalArgumentException को हैंडल किया गया.
    • मीडिया आइटम के लिए कमांड बटन जोड़ें. इससे Media3 API को Custom browse actions के लिए जोड़ा जाता है. यह MediaBrowserCompat के साथ लेगसी लाइब्रेरी के साथ काम करता है. ध्यान दें कि Media3 के कमांड बटन, मीडिया आइटम के लिए MediaBrowser और MediaController, दोनों के लिए उपलब्ध हैं. AAOS की कस्टम ब्राउज़ कार्रवाइयां देखें.
    • उस बग को ठीक किया गया है जिसकी वजह से, Media3 कंट्रोलर कभी-कभी सेशन ऐप्लिकेशन को play() का अनुरोध करने के बाद, फ़ोरग्राउंड सेवा शुरू करने की अनुमति नहीं दे पाता था.
    • CommandButton.Builder.setIconUri को सिर्फ़ कॉन्टेंट यूआरआई स्वीकार करने तक सीमित करें.
    • Media3 ब्राउज़र के कनेक्शन के सुझावों को शुरुआती MediaBrowserCompat में पास करें, ताकि लेगसी MediaBrowserCompat से कनेक्ट किया जा सके. यह सेवा, onGetRoot() को किए गए पहले कॉल के साथ रूट हिंट के तौर पर पास किए गए कनेक्शन हिंट पा सकती है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी ब्राउज़र सेवा से कनेक्ट किए गए MediaBrowser को, ब्राउज़र के MediaBrowser की सदस्यता लेने के बाद, सेवा से भेजी गई गड़बड़ी का मैसेज नहीं मिलता था.parentid
    • इंटरऑपरेबिलिटी के व्यवहार को बेहतर बनाया गया है, ताकि लेगसी MediaBrowserService से कनेक्ट किया गया Media3 ब्राउज़र, माता-पिता की सदस्यता लेते समय parentId के बच्चों से दो बार अनुरोध न करे.
  • यूआई:
    • एक्सएमएल पर आधारित शेयर किए गए ट्रांज़िशन से जुड़ी समस्याओं की वजह से, स्ट्रेच/क्रॉप किए गए वीडियो को PlayerView-in-Compose-AndroidView वर्कअराउंड में ऑप्ट-इन करें. PlayerView का इस्तेमाल करने वाले ऐप्लिकेशन को, ऑप्ट-इन करने के लिए AndroidView कॉल करना होगा (#1237, #1594).PlayerView.setEnableComposeSurfaceSyncWorkaround
    • setFullscreenButtonState को PlayerView में जोड़ें, ताकि फ़ुलस्क्रीन बटन के आइकॉन को ज़रूरत के हिसाब से अपडेट किया जा सके. इसका मतलब है कि आइकॉन को क्लिक इंटरैक्शन के हिसाब से अपडेट नहीं किया जाएगा, बल्कि आउट-ऑफ़-बैंड तरीके से अपडेट किया जाएगा (#1590, #184).
    • उस बग को ठीक किया गया है जिसमें ऐप्लिकेशन के हिसाब से टेक्स्ट ट्रैक चुनने की सेटिंग मौजूद होने पर, टेक्स्ट चुनने के विकल्प में "कोई नहीं" विकल्प काम नहीं करता था.
  • डैश एक्सटेंशन:
    • सेगमेंट के बीच से शुरू होने वाली अवधियों के लिए सहायता जोड़ी गई है (#1440).
  • स्मूद स्ट्रीमिंग एक्सटेंशन:
    • टेक्स्ट ट्रैक के साथ SmoothStreaming स्ट्रीम चलाने पर, Bad magic number for Bundle गड़बड़ी को ठीक किया गया है (#1779).
  • आरटीएसपी एक्सटेंशन:
    • उन यूआरएल के लिए उपयोगकर्ता की जानकारी हटाने की सुविधा को ठीक किया गया है जिनमें कोड में बदले गए @ वर्ण शामिल हैं (#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 गड़बड़ी को ठीक करने के लिए, Info फ़्रेम (#1480) में मौजूद लंबाई वाले फ़ील्ड के आधार पर, आखिर में मौजूद MP3 फ़ॉर्मैट के अलावा अन्य फ़ॉर्मैट के डेटा को सही तरीके से अनदेखा करें.
  • टेक्स्ट:
    • टीटीएमएल: प्रतिशत tts:fontSize वैल्यू को हैंडल करने की समस्या ठीक की गई है, ताकि यह पक्का किया जा सके कि वे प्रतिशत tts:fontSize वैल्यू वाले पैरंट नोड से सही तरीके से इनहेरिट की गई हैं.
    • IndexOutOfBoundsException में LegacySubtitleUtil को ठीक किया गया है. इसकी वजह यह है कि अनुरोध किए गए आउटपुट के शुरू होने का समय, Subtitle में मौजूद इवेंट के आखिरी समय से ज़्यादा या उसके बराबर होने पर, उसे गलत तरीके से हैंडल किया जा रहा था (#1516).
  • DRM:
    • API 31 या इसके बाद के वर्शन वाले डिवाइसों पर, L1 Widevine कॉन्टेंट चलाने के दौरान android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE गड़बड़ी को ठीक किया गया. यह गड़बड़ी, फ़्रेमवर्क MediaDrm.requiresSecureDecoder तरीके (#1603) को पूरी तरह से लागू न करने की वजह से होती है.
  • असर:
    • GlObjectsProvider में release() तरीका जोड़ें.
  • सेशन:
    • KEYCODE_HEADSETHOOK पर दो बार टैप करने की सुविधा को 'अगले पर जाएं' कार्रवाई में बदलें. इसके बारे में दस्तावेज़ में बताया गया है (#1493).
    • KEYCODE_HEADSETHOOK को MediaButtonReceiver में 'चलाएं' कमांड के तौर पर हैंडल करें. ऐसा तब करें, जब आपको यह तय करना हो कि ForegroundServiceDidNotStartInTimeException (#1581) से बचने के लिए, इसे अनदेखा करना है या नहीं.
  • आरटीएसपी एक्सटेंशन:
    • एसडीपी पार्सिंग में, मीडिया के अमान्य ब्यौरे छोड़ें (#1087).

वर्शन 1.4.0

25 जुलाई, 2024

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

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

वर्शन 1.3.0

6 मार्च, 2024

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

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

वर्शन 1.3.0-rc01

22 फ़रवरी, 2024

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

वर्शन 1.3.0-beta01

7 फ़रवरी, 2024

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

वर्शन 1.3.0-alpha01

15 जनवरी, 2024

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

वर्शन 1.2.0

वर्शन 1.2.1

9 जनवरी, 2024

  • ExoPlayer:
    • उस समस्या को ठीक किया गया है जिसमें LiveConfiguration.min/maxOffset रेंज से बाहर मैन्युअल तरीके से खोज करने पर, ऑफ़सेट को वापस min/maxOffset पर अडजस्ट किया जाता था.
    • OPUS और VORBIS के चैनल लेआउट से जुड़ी समस्या ठीक की गई है. यह समस्या 3, 5, 6, 7, और 8 चैनलों के लिए थी (#8396).
    • उस समस्या को ठीक किया गया है जिसमें लाइव स्ट्रीम में शून्य पर सीक करने के बाद, ट्रैक चुनने पर स्ट्रीम गलत तरीके से अपनी डिफ़ॉल्ट जगह से शुरू हो जाती थी (#9347).
    • उस समस्या को ठीक किया गया है जिसमें CmcdData.Factory के नए इंस्टेंस को, चंक सोर्स से bufferedDurationUs के लिए नेगेटिव वैल्यू मिल रही थीं. इस वजह से, IllegalArgumentException (#888) की समस्या आ रही थी.
  • ट्रांसफ़ॉर्मर:
    • इस समस्या को ठीक किया गया है. इसमें, ज़्यादा ऑपरेटिंग रेट सेट करने की वजह से, कॉन्फ़िगरेशन के समय एनकोडर काम नहीं करता था.
  • एक्सट्रैक्टर:
    • JPEG मोशन फ़ोटो में मौजूद सेकंडरी (जिन्हें चलाया नहीं जा सकता) HEVC ट्रैक को ROLE_FLAG_ALTERNATE के तौर पर मार्क करें. ऐसा इसलिए, ताकि ज़्यादा रिज़ॉल्यूशन होने की वजह से, उन्हें अपने-आप न चुना जाए.
    • TS H264 स्ट्रीम के लिए, गलत कीफ़्रेम का पता लगाने की समस्या ठीक की गई है (#864).
    • 47,721 सेकंड से ज़्यादा लंबी टीएस स्ट्रीम की अवधि का अनुमान लगाने से जुड़ी समस्या ठीक की गई है (#855).
  • ऑडियो:
    • #712: SilenceSkippingAudioProcessor को कई बार कॉल किए जाने पर, EOS को हैंडल करने से जुड़ी समस्या ठीक की गई.
  • वीडियो:
    • 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) में रखें.
    • लेगसी कंट्रोलर के लिए, ब्रॉडकास्ट करने की सुविधा से जुड़ी समस्या ठीक की गई notifyChildrenChanged (#644).
    • हमने एक गड़बड़ी को ठीक किया है. इस गड़बड़ी की वजह से, सूचना के लिए बंद किए गए setWhen टाइमर के लिए नेगेटिव समय सेट करने पर, कुछ डिवाइसों पर ऐप्लिकेशन क्रैश हो जाता था (#903).
    • IllegalStateException को ठीक किया गया है. यह समस्या तब होती है, जब पहली सूचना अपडेट करने का अनुरोध किया जाता है और मीडिया सूचना कंट्रोलर कनेक्ट नहीं होता है (#917).
  • यूआई:
    • उस समस्या को ठीक किया गया है जिसमें BottomSheetDialogFragment में Material Design का इस्तेमाल करने पर, आगे और पीछे करने वाले बटन नहीं दिखते थे (#511).
    • उस समस्या को ठीक किया गया है जिसकी वजह से, PlayerControlView के फ़ास्ट फ़ॉरवर्ड बटन में मौजूद नंबर गलत तरीके से अलाइन हो रहे थे (#547).
  • डैश एक्सटेंशन:
    • DASH मेनिफ़ेस्ट में Dolby के लिए, "f800" को पांच चैनलों की संख्या के तौर पर पार्स करें (#688).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
    • एमआईडीआई: उस समस्या को ठीक किया गया है जिसमें आगे बढ़ने पर, प्रोग्राम बदलने वाले इवेंट स्किप हो जाते थे (#704).
    • FFmpeg 6.0 पर माइग्रेट करें और NDK के साथ काम करने वाले वर्शन को r26b (#707, #867) पर अपडेट करें.
  • कास्ट एक्सटेंशन:
    • कास्ट किए जा रहे डिवाइस पर मीडिया लोड न होने पर, ऐप्लिकेशन क्रैश न हो, इसके लिए Timeline बनाने की प्रोसेस को सुरक्षित किया गया है (#708).

वर्शन 1.2.0

15 नवंबर, 2023

  • कॉमन लाइब्रेरी:
    • @Nullable Throwable इंटरफ़ेस में मौजूद तरीकों में @Nullable Throwable पैरामीटर जोड़ें.Log.Logger इन तरीकों के लिए message पैरामीटर में अब Log.{d,i,w,e}() तरीकों को पास किए गए Throwable के बारे में कोई जानकारी नहीं होती. इसलिए, अगर चाहें, तो लागू करने वाले लोगों को यह जानकारी मैन्युअल तरीके से जोड़नी होगी. इसके लिए, Logger.appendThrowableString(String, Throwable) का इस्तेमाल किया जा सकता है.
    • Kotlin के साथ काम करने से जुड़ी समस्या को ठीक किया गया है. इस समस्या में, नल वैल्यू स्वीकार करने वाले सामान्य टाइप पैरामीटर और नल वैल्यू स्वीकार करने वाले ऐरे एलिमेंट टाइप को नल वैल्यू स्वीकार करने वाले टाइप के तौर पर नहीं पहचाना जाता था. उदाहरण के लिए, TrackSelectorResult और SimpleDecoder मेथड पैरामीटर (#6792).
    • Util.shouldShowPlayButton में डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) और सूचना के व्यवहार में बदलाव करें, ताकि कुछ समय के लिए ऑडियो फ़ोकस बंद होने की वजह से, कॉन्टेंट चलाने की सुविधा बंद होने पर "चलाएं" बटन दिखे. PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) या MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213) का इस्तेमाल करके, लेगसी वर्शन के व्यवहार को बनाए रखा जा सकता है.
    • https://issuetracker.google.com/251172715 को ठीक करने के लिए, androidx.annotation:annotation-experimental को 1.3.1 पर अपग्रेड करें.
    • ExoPlayer.setAudioAttributes को Player इंटरफ़ेस पर ले जाएं.
  • ExoPlayer:
    • AC4 स्ट्रीम में सीकिंग से जुड़ी समस्याओं को ठीक किया गया है. ये समस्याएं, सिर्फ़ डिकोड किए जाने वाले सैंपल की सही पहचान न होने की वजह से होती हैं (#11000).
    • इस सुविधा को ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput के ज़रिए चालू करने पर, ऐसे ऑडियो आउटपुट डिवाइसों पर कॉन्टेंट चलाने की सुविधा बंद कर दी जाएगी जो कॉन्टेंट चलाने के लिए सही नहीं हैं. जैसे, Wear OS डिवाइसों पर मौजूद बिल्ट-इन स्पीकर. अगर ऑडियो आउटपुट उपलब्ध नहीं होने पर या प्लेबैक के दौरान सभी ऑडियो आउटपुट डिसकनेक्ट हो जाने पर, वीडियो चलाने की कोशिश की जाती है, तो प्लेबैक बंद होने की वजह को Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT के तौर पर अपडेट किया जाएगा. सही आउटपुट कनेक्ट होने पर, नतीजे न दिखने की वजह हट जाएगी.
    • Player.replaceMediaItem(s) के ज़रिए, MediaItem अपडेट स्वीकार करने के लिए, MediaSource.canUpdateMediaItem और MediaSource.updateMediaItem जोड़ें.
    • Player.replaceMediaItem(s) के ज़रिए लाइब्रेरी से मिली सभी MediaSource क्लास के लिए, MediaItem अपडेट करने की अनुमति दें (#33, #9978).
    • MimeTypes.TEXT_EXOPLAYER_CUES का नाम बदलकर MimeTypes.APPLICATION_MEDIA3_CUES करें.
    • PngExtractor जोड़ें. यह पूरी PNG फ़ाइल को TrackOutput में एक सैंपल के तौर पर भेजता है और उसे पढ़ता है.
    • SequenceableLoader इंटरफ़ेस में SequenceableLoader.continueLoading(long) तरीके को बेहतर बनाया गया है, ताकि SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo में playbackPositionUs के अलावा, playbackSpeed और lastRebufferRealtimeMs जैसे अन्य पैरामीटर भी शामिल हैं.
    • ChunkSource इंटरफ़ेस में ChunkSource.getNextChunk(long, long, List, ChunkHolder) तरीके को बेहतर बनाया गया है, ताकि ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) लॉगिंग में ये फ़ील्ड जोड़े गए हैं: बफ़र स्टार्वेशन (bs), डेडलाइन (dl), प्लेबैक रेट (pr), और स्टार्टअप (su) (#8699).
    • ColorInfo (#491) में ल्यूमा और क्रोमा बिटडेप्थ जोड़ें.
    • कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) लॉगिंग में अतिरिक्त फ़ील्ड जोड़े गए हैं: अगला ऑब्जेक्ट अनुरोध (nor) और अगली रेंज का अनुरोध (nrr) (#8699).
    • क्वेरी पैरामीटर (#553) का इस्तेमाल करके, Common Media Client Data (CMCD) डेटा ट्रांसमिट करने की सुविधा जोड़ें.
    • ExperimentalBandwidthMeter में ConcurrentModificationException ठीक करें (#612).
    • CompositeMediaSource.getMediaTimeForChildMediaTime में MediaPeriodId पैरामीटर जोड़ें.
    • ClippingMediaSource और अवधि/विंडो के समय के ऑफ़सेट वाले अन्य सोर्स, ConcatenatingMediaSource2 में काम करते हैं ConcatenatingMediaSource2 (#11226).
    • BaseRenderer.onStreamChanged() को बदलकर MediaPeriodId करें, ताकि आपको MediaPeriodId आर्ग्युमेंट भी मिल सके.
  • ट्रांसफ़ॉर्मर:
    • इमेज इनपुट के लिए, EXIF रोटेशन डेटा को पार्स करता है.
    • TransformationRequest.HdrMode एनोटेशन टाइप और उससे जुड़े कॉन्स्टेंट हटाएं. इसके बजाय, Composition.HdrMode और इससे जुड़े कॉन्स्टेंट का इस्तेमाल करें.
    • रोटेशन से जुड़ी समस्याओं को ठीक करने के लिए, OverlaySettings को आसान बनाएं.
    • SampleConsumer.queueInputBitmap के frameRate और durationUs पैरामीटर को TimestampIterator में बदल दिया गया है.
  • ट्रैक के विकल्प:
    • DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness जोड़ें, ताकि बिना रुकावट के वीडियो चलाने की सुविधा को साफ़ तौर पर चालू या बंद किया जा सके. डिफ़ॉल्ट सेटिंग में कोई बदलाव नहीं होगा और यह true पर सेट रहेगी.
  • एक्सट्रैक्टर:
    • MPEG-TS: पक्का करें कि स्ट्रीम की आखिरी ऐक्सेस यूनिट को सैंपल क्यू (#7909) में पास करके, आखिरी फ़्रेम रेंडर किया गया हो.
    • rotationDegrees तय करते समय, टाइपिंग की गलती को ठीक करें. projectionPosePitch को projectionPoseRoll (#461) में बदल दिया गया है.
    • यह मानकर न चलें कि Extractor इंस्टेंस की सीधे तौर पर instanceof से जांच की जा सकती है. अगर आपको किसी Extractor की लागू करने से जुड़ी जानकारी का रनटाइम ऐक्सेस चाहिए, तो आपको सबसे पहले Extractor.getUnderlyingInstance को कॉल करना होगा.
    • BmpExtractor जोड़ें.
    • WebpExtractor जोड़ें.
    • HeifExtractor जोड़ें.
    • Mp4Extractor में QuickTime classic के काम करने की सुविधा जोड़ें.
  • ऑडियो:
    • MP4 और Matroska में 24/32-बिट बिग-एंडियन पीसीएम के लिए सहायता जोड़ी गई. साथ ही, MP4 में lpcm के लिए पीसीएम एन्कोडिंग पार्स की गई.
    • MP4 फ़ाइल से Vorbis ऑडियो निकालने की सुविधा जोड़ी गई.
    • AudioSink.getFormatOffloadSupport(Format) जोड़ें, जो AudioSink.getFormatOffloadSupport(Format) के ज़रिए फ़ॉर्मैट के लिए, सिंक के ऑफ़लोडिंग सपोर्ट का लेवल वापस लाता है.DefaultAudioOffloadSupportProvider यह AudioOffloadSupport की नई वैल्यू दिखाता है, जिसमें isFormatSupported, isGaplessSupported, और isSpeedChangeSupported शामिल हैं.
    • AudioSink.setOffloadMode() जोड़ें, जिसकी मदद से ऑडियो सिंक पर ऑफलोड कॉन्फ़िगरेशन को कॉन्फ़िगर किया जाता है. डिफ़ॉल्ट वैल्यू AudioSink.OFFLOAD_MODE_DISABLED है.
    • TrackSelectionParameters में setAudioOffloadPreference के ज़रिए, ऑफ़लोड करने की सुविधा चालू की जा सकती है. अगर सेट की गई प्राथमिकता के हिसाब से सुविधा चालू है, डिवाइस पर फ़ॉर्मैट के लिए ऑफ़लोडिंग की सुविधा काम करती है, और ट्रैक का चुनाव एक ऑडियो ट्रैक के तौर पर किया गया है, तो ऑडियो ऑफ़लोडिंग की सुविधा चालू हो जाएगी.
    • अगर audioOffloadModePreference को AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED पर सेट किया जाता है, तो DefaultTrackSelector सिर्फ़ एक ऑडियो ट्रैक चुनेगा. ऐसा सिर्फ़ तब होगा, जब उस ट्रैक का फ़ॉर्मैट, ऑफ़लोडिंग की सुविधा के साथ काम करता हो. अगर ऑफलोड किए गए वीडियो में कोई भी ऑडियो ट्रैक काम नहीं करता है, तो कोई भी ट्रैक नहीं चुना जाएगा.
    • ट्रैक ट्रांज़िशन के बाद, चलाने की स्थिति से जुड़ी समस्या की वजह से, एपीआई लेवल 33 से पहले के वर्शन पर, ऑफ़लोड के लिए बिना रुकावट के चलने की सुविधा बंद की गई.
    • DefaultRenderersFactory.buildAudioSink मेथड के सिग्नेचर से enableOffload पैरामीटर हटाएं.
    • DefaultAudioSink.Builder.setOffloadMode को हटाएं.
    • intdef वैल्यू हटाएं DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • ऑफ़लोड किए गए कॉन्टेंट को चलाने के दौरान, Opus gapless मेटाडेटा के लिए सहायता जोड़ी गई.
    • पहली बार लिखने के दौरान, अगर ऑफ़लोड करने की प्रोसेस पूरी नहीं होती है, तो रेंडरर को वापस लाने की अनुमति दें (#627).
    • सिर्फ़-ऑडियो वाले मोड में ऑफ़लोड किए गए कॉन्टेंट को चलाने के लिए, ऑफ़लोड करने की सुविधा को डिफ़ॉल्ट रूप से चालू करें.
    • ExoPlayer.experimentalSetOffloadSchedulingEnabled और AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged को मिटाएं.
    • onExperimentalSleepingForOffloadChanged का नाम बदलकर onSleepingForOffloadChanged और onExperimentalOffloadedPlayback का नाम बदलकर onOffloadedPlayback कर दिया गया है.
    • ऑडियो ऑफ़लोड मोड से जुड़े TrackSelectionParameters इंटरफ़ेस और परिभाषाओं को इनर AudioOffloadPreferences क्लास में ले जाएं.
    • AnalyticsListener, AudioRendererEventListener, और AudioSink.Listener में onAudioTrackInitialized और onAudioTrackReleased कॉलबैक जोड़ें.
    • DTS Express में ऑडियो बफ़र अंडरफ़्लो की समस्या ठीक की गई है (#650).
    • उस गड़बड़ी को ठीक किया गया है जिसमें E-AC3-JOC के लिए, क्षमता की जांच करने पर IllegalArgumentException (#677) दिखता है.
  • वीडियो:
    • MediaCodecVideoRenderer को कस्टम VideoFrameProcessor.Factory इस्तेमाल करने की अनुमति दें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें ऑडियो स्ट्रीम के नेगेटिव टाइमस्टैंप से शुरू होने पर, पहला फ़्रेम रेंडर नहीं किया जा सकता था (#291).
  • टेक्स्ट:
    • ExoplayerCuesDecoder को हटाएं. sampleMimeType = application/x-media3-cues वाले टेक्स्ट ट्रैक को अब सीधे तौर पर TextRenderer मैनेज करता है. इसके लिए, SubtitleDecoder इंस्टेंस की ज़रूरत नहीं होती.
  • मेटाडेटा:
    • MetadataDecoder.decode को अब "सिर्फ़ डिकोड करने वाले" सैंपल के लिए कॉल नहीं किया जाएगा, क्योंकि लागू करने पर यह हमेशा शून्य वैल्यू दिखाता है.
  • असर:
    • टाइमस्टैंप के हिसाब से, VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) बिटमैप इनपुट को कतार में जोड़ता है.
    • VideoFrameProcessor.registerInputStream() को नॉन-ब्लॉकिंग में बदलें. ऐप्लिकेशन में VideoFrameProcessor.Listener#onInputStreamRegistered() लागू होना चाहिए.
    • VideoFrameProcessor.queueInputBitmap के frameRate और durationUs पैरामीटर को TimestampIterator में बदल दिया गया है.
  • IMA एक्सटेंशन:
    • उस बग को ठीक किया गया है जिसकी वजह से, प्लेलिस्ट में पहले आइटम के तौर पर शामिल न की गई मल्टी-पीरियड डैश लाइव स्ट्रीम में अपवाद (#571) दिख सकता है.
    • AdsLoader.destroy() को कॉल करने से पहले StreamManager को रिलीज़ करें
    • IMA SDK के वर्शन को 3.31.0 पर अपग्रेड किया गया.
  • सेशन:
    • सूचनाओं की फ़ोरग्राउंड सेवा के व्यवहार को DefaultMediaNotificationProvider में FOREGROUND_SERVICE_IMMEDIATE पर सेट करें (#167).
    • Samsung डिवाइसों पर, बंद किए गए एपीआई से जुड़ी समस्याओं से बचने के लिए, सिर्फ़ android.media.session.MediaSession.setMediaButtonBroadcastReceiver() एपीआई 31 से ऊपर के वर्शन का इस्तेमाल करें (#167).
    • मीडिया सूचना कंट्रोलर का इस्तेमाल प्रॉक्सी के तौर पर किया जाता है. इससे उपलब्ध कमांड और कस्टम लेआउट सेट किए जाते हैं. इनका इस्तेमाल सूचना और प्लैटफ़ॉर्म सेशन को पॉप्युलेट करने के लिए किया जाता है.
    • मीडिया बटन के उन इवेंट को Media3 में MediaSessionService.onStartCommand() के ज़रिए मिले हैं उन्हें प्लैटफ़ॉर्म सेशन पर रूट करने और वापस Media3 पर भेजने के बजाय, Media3 में ही बदलें. इससे, कॉल करने वाले व्यक्ति के कंट्रोलर को हमेशा मीडिया सूचना कंट्रोलर के तौर पर सेट किया जाता है. साथ ही, ऐप्लिकेशन, सूचना से आने वाले कॉल को सभी एपीआई लेवल पर आसानी से पहचान सकते हैं.
    • उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी MediaSessionCompat से कनेक्ट होने पर, MediaController.getCurrentPosition() आगे नहीं बढ़ रहा था.
    • आसानी के लिए MediaLibrarySession.getSubscribedControllers(mediaId) जोड़ें.
    • MediaLibrarySession.Callback.onSubscribe() को बदलकर, उस पैरंट आईडी की उपलब्धता की पुष्टि करें जिसके लिए कंट्रोलर ने सदस्यता ली है. अगर सदस्यता स्वीकार कर ली जाती है, तो notifyChildrenChanged() को तुरंत कॉल किया जाता है, ताकि ब्राउज़र को इसकी सूचना दी जा सके (#561).
    • Automotive OS के लिए सेशन डेमो मॉड्यूल जोड़ें और Android Auto के लिए सेशन डेमो चालू करें.
    • मीडिया सूचना कंट्रोलर के लिए COMMAND_GET_TIMELINE उपलब्ध न होने पर, फ़्रेमवर्क सेशन की कतार सेट न करें. Android Auto को क्लाइंट कंट्रोलर के तौर पर इस्तेमाल करने पर, फ़्रेमवर्क सेशन से डेटा पढ़ा जाता है. इससे Android Auto के यूज़र इंटरफ़ेस (यूआई) में queue बटन नहीं दिखता (#339).
    • डिफ़ॉल्ट रूप से SimpleBitmapLoader के बजाय DataSourceBitmapLoader का इस्तेमाल करें (#271, #327).
    • MediaSession.Callback.onMediaButtonEvent(Intent) जोड़ें. इससे ऐप्लिकेशन को मीडिया बटन के इवेंट हैंडलिंग के डिफ़ॉल्ट तरीके को बदलने की अनुमति मिलती है.
  • यूआई:
    • Wear OS डिवाइसों के लिए Player.Listener लागू करें.इससे Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT की वजह से होने वाले प्लेबैक को रोका जा सकेगा. इसके लिए, सिस्टम डायलॉग लॉन्च किया जाएगा, ताकि उपयोगकर्ता ऑडियो आउटपुट (जैसे, ब्लूटूथ हेडफ़ोन) को कनेक्ट कर सके. अगर कॉन्फ़िगर किए गए टाइम आउट (डिफ़ॉल्ट रूप से पांच मिनट) के अंदर कोई सही डिवाइस कनेक्ट होता है, तो सुनने वाले व्यक्ति के डिवाइस पर अपने-आप ऑडियो चलना शुरू हो जाएगा.
  • डाउनलोड:
    • Android 14 के साथ काम करने के लिए, DownloadService के लिए "डेटा सिंक" फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इस सेवा का इस्तेमाल करते समय, ऐप्लिकेशन को मेनिफ़ेस्ट में dataSync को foregroundServiceType के तौर पर जोड़ना होगा. साथ ही, FOREGROUND_SERVICE_DATA_SYNC अनुमति (#11239) जोड़नी होगी.
  • एचएलएस एक्सटेंशन:
    • एचएलएस लाइव प्लेलिस्ट को रीफ़्रेश करने के लिए, आखिरी बार लोड होने के समय के बजाय, आखिरी बार लोड होने के शुरू होने के समय के आधार पर तय किए गए इंटरवल का इस्तेमाल किया जाता है (#663).
  • डैश एक्सटेंशन:
    • सेगमेंट टेंप्लेट यूआरएल में, एक से ज़्यादा बार एक ही DASH आइडेंटिफ़ायर का इस्तेमाल करने की अनुमति दें.
    • डेटा निकालने के दौरान सबटाइटल पार्स करने की सुविधा को एक्सपेरिमेंट के तौर पर जोड़ा गया है. इसमें ओवरलैप होने वाले सबटाइटल को मर्ज करने की सुविधा बेहतर तरीके से काम करती है. साथ ही, सबटाइटल सेगमेंट के बीच ट्रांज़िशन करते समय होने वाली फ़्लिकरिंग की समस्या को ठीक किया जाता है. DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288) का इस्तेमाल करके, इस सुविधा को चालू किया जा सकता है.
  • आरटीएसपी एक्सटेंशन:
    • रेस कंडीशन की समस्या ठीक की गई है. इससे टीसीपी पर वापस आने पर IndexOutOfBoundsException की समस्या हो सकती थी या कुछ मामलों में वीडियो रुक सकता था.
    • RtspMediaPeriod (#577) के लोडिंग स्टेटस को वापस लाते समय, आरटीएसपी सेटअप में स्थिति की जांच करें.
    • Options रिस्पॉन्स के सार्वजनिक हेडर में, कस्टम आरटीएसपी अनुरोध के तरीकों को अनदेखा करें (#613).
    • RTSP Setup Response timeout value का इस्तेमाल, RTSP Options के Keep-alive अनुरोध भेजने के समय अंतराल में करें (#662).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
    • एमआईडीआई डीकोडर मॉड्यूल रिलीज़ किया गया है. यह ऑडियो को सिंथेसाइज़ करने के लिए, Jsyn लाइब्रेरी का इस्तेमाल करके स्टैंडर्ड एमआईडीआई फ़ाइलों को चलाने की सुविधा देता है.
    • उन आउटपुट बफ़र को सीधे तौर पर मार्क करने के लिए DecoderOutputBuffer.shouldBeSkipped जोड़ें जिन्हें दिखाने की ज़रूरत नहीं है. इसे C.BUFFER_FLAG_DECODE_ONLY के बजाय इस्तेमाल करने का सुझाव दिया जाता है. C.BUFFER_FLAG_DECODE_ONLY को बंद कर दिया जाएगा.
    • Decoder.setOutputStartTimeUs और SimpleDecoder.isAtLeastOutputStartTimeUs जोड़ें, ताकि डिकोडर, शुरू होने के समय से पहले सिर्फ़ डिकोड किए गए सैंपल छोड़ सकें. इसे Buffer.isDecodeOnly के बजाय इस्तेमाल करना चाहिए, क्योंकि यह सुविधा बंद हो जाएगी.
    • Maven रिपॉज़िटरी में एमआईडीआई डिकोडर आर्टफ़ैक्ट पब्लिश करने से जुड़ी गड़बड़ी ठीक की गई. आर्टफ़ैक्ट का नाम बदलकर media3-exoplayer-midi कर दिया गया है #734.
  • लीन्बैक एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, किसी प्लैटफ़ॉर्म को बंद करने पर Leanback कोड में ArithmeticException आ सकता था (#617).
  • टेस्ट यूटिलिटी:
    • TestExoPlayerBuilder और FakeClock को Espresso यूज़र इंटरफ़ेस (यूआई) टेस्ट और Compose यूज़र इंटरफ़ेस (यूआई) टेस्ट के साथ काम करने लायक बनाएं. इस अपडेट में, उस गड़बड़ी को ठीक किया गया है जिसमें Espresso या Compose व्यू इंटरैक्शन के दौरान, वीडियो अपने-आप आगे बढ़ जाता था.
  • बंद किए गए सिंबल हटाएं:
    • TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) और TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean) हटाएं. इसके बजाय, Composition.Builder.setHdrMode(int) का इस्तेमाल करें और Composition को Transformer.start(Composition, String) पर पास करें.
    • अब काम न करने वाले DownloadNotificationHelper.buildProgressNotification तरीके को हटाएं. इसके बजाय, ऐसे तरीके का इस्तेमाल करें जो अब भी काम करता है और जिसमें notMetRequirements पैरामीटर का इस्तेमाल किया जाता है.

वर्शन 1.2.0-rc01

1 नवंबर, 2023

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

वर्शन 1.2.0-beta01

19 अक्टूबर, 2023

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

वर्शन 1.2.0-alpha02

29 सितंबर, 2023

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

वर्शन 1.2.0-alpha01

17 अगस्त, 2023

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

वर्शन 1.1.0

वर्शन 1.1.1

16 अगस्त, 2023

  • कॉमन लाइब्रेरी:
    • सभी मॉड्यूल से, गलती से जोड़ी गई multidex डिपेंडेंसी को हटाएं (#499).
  • ExoPlayer:
    • PlaybackStatsListener में मौजूद उस समस्या को ठीक किया गया है जिसमें प्लेलिस्ट साफ़ करने के बाद, फ़र्ज़ी PlaybackStats बन जाते थे.
    • कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) लॉगिंग में ये फ़ील्ड जोड़े गए हैं: स्ट्रीमिंग फ़ॉर्मैट (sf), स्ट्रीम टाइप (st), वर्शन (v), टॉप बिटरेट (tb), ऑब्जेक्ट की अवधि (d), मेज़र किया गया थ्रूपुट (mtp), और ऑब्जेक्ट टाइप (ot) (#8699).
  • ऑडियो:
    • एक गड़बड़ी को ठीक किया गया है. इसमें बहुत छोटी फ़ाइलें चलाने पर, Player.getState() कभी भी STATE_ENDED में नहीं बदलता था (#538).
  • ऑडियो ऑफ़लोडिंग:
    • RFC 7845 के मुताबिक, बिटस्ट्रीम में Ogg ID हेडर और Comment हेडर पेजों को पहले जोड़ें, ताकि Opus को ऑफ़लोड करके चलाया जा सके.
  • वीडियो:
    • H.265/HEVC: एसपीएस शॉर्ट और लॉन्ग टर्म रेफ़रंस फ़ोटो की जानकारी को पार्स करने से जुड़ी समस्या ठीक की गई.
  • टेक्स्ट:
    • CEA-608: क्यू के छोटे होने के लॉजिक में बदलाव किया गया है, ताकि सिर्फ़ दिखने वाले टेक्स्ट को ध्यान में रखा जा सके. पहले, इंडेंट और टैब ऑफ़सेट को तब शामिल किया जाता था, जब क्यू की लंबाई को 32 वर्णों तक सीमित किया जाता था. हालांकि, तकनीकी तौर पर यह स्पेसिफ़िकेशन के हिसाब से सही था (#11019).
  • IMA एक्सटेंशन:
    • IMA SDK टूल का वर्शन 3.30.3 पर अपडेट किया गया.
  • सेशन:
    • कंट्रोलर की स्थिति में कस्टम लेआउट जोड़ें और इसे ऐक्सेस करने के लिए, गेटर उपलब्ध कराएं. कस्टम लेआउट में बदलाव होने पर, MediaController.Listener.onCustomLayoutChanged को कॉल किया जाता है. जिन ऐप्लिकेशन को अलग-अलग Media3 कंट्रोलर को अलग-अलग कस्टम लेआउट भेजने हैं वे MediaSession.Callback.onConnect में ऐसा कर सकते हैं. इसके लिए, उन्हें MediaSession.Callback.onConnect का इस्तेमाल करना होगा, ताकि यह पक्का किया जा सके कि कनेक्शन पूरा होने पर कंट्रोलर के लिए कस्टम लेआउट उपलब्ध हो.AcceptedResultBuilder
    • उन मामलों को ठीक किया गया है जहां MediaLibraryServiceLegacyStub ने Result को ऐसी गड़बड़ी भेजी थी जो इस सुविधा के साथ काम नहीं करती थी. इससे UnsupportedOperationException (#78) गड़बड़ी हुई थी.
    • PlayerWrapper के VolumeProviderCompat बनाने के तरीके को ठीक किया गया है. इसके लिए, लेगसी कमांड (COMMAND_ADJUST_DEVICE_VOLUME और COMMAND_SET_DEVICE_VOLUME) और नई कमांड (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS और COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS), दोनों के ज़रिए volumeControlType तय किया गया है (#554).

वर्शन 1.1.0

5 जुलाई, 2023

  • कॉमन लाइब्रेरी:
    • अनुपयुक्त ऑडियो रूट के लिए, ऑडियो को बंद करने की वजह जोड़ें और तैयार होने पर उसे चलाएं ऑडियो को बहुत देर तक बंद रखने की वजह बदलें. (#15).
    • प्लेयर में निर्देश जोड़ना:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • Player में ओवरलोड किए गए ऐसे तरीके जोड़ें जिनसे उपयोगकर्ता वॉल्यूम फ़्लैग तय कर सकें:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • DeviceInfo के लिए Builder जोड़ें और मौजूदा कंस्ट्रक्टर को बंद करें.
    • रिमोट प्लेबैक के लिए, राउटिंग कंट्रोलर का आईडी तय करने के लिए DeviceInfo.routingControllerId जोड़ें.
    • एक ही जगह पर आइटम जोड़ने और हटाने के लिए, Player.replaceMediaItem(s) को शॉर्टकट के तौर पर जोड़ें (#8046).
  • ExoPlayer:
    • ExoPlayer को डिवाइस के वॉल्यूम कंट्रोल करने के तरीकों को सिर्फ़ तब कंट्रोल करने की अनुमति दें, जब आपने साफ़ तौर पर ऑप्ट इन किया हो. ExoPlayer.Builder.setDeviceVolumeControlEnabled का इस्तेमाल करके, इन चीज़ों का ऐक्सेस पाएं:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) और setDeviceVolume(int, int)
      • increaseDeviceVolume(int) और increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) और decreaseDeviceVolume(int, int)
    • FilteringMediaSource जोड़ें, ताकि MediaSource से उपलब्ध ट्रैक टाइप को फ़िल्टर किया जा सके.
    • डैश, एचएलएस, और स्मूथस्ट्रीमिंग के अडेप्टिव स्ट्रीमिंग फ़ॉर्मैट के आउटगोइंग अनुरोधों में, कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) को शामिल करने की सुविधा जोड़ी गई है. इन फ़ील्ड को शामिल किया गया है: br, bl, cid, rtp, और sid (#8699). एपीआई स्ट्रक्चर और एपीआई के तरीके:
      • सीएमसीडी लॉगिंग डिफ़ॉल्ट रूप से बंद होती है. इसे चालू करने के लिए, MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) का इस्तेमाल करें.
      • डिफ़ॉल्ट रूप से सभी कुकी चालू होती हैं. लॉग की जाने वाली कुकी को फ़िल्टर करने के लिए, CmcdConfiguration.RequestConfig.isKeyAllowed(String key) को बदलें.
      • कस्टम कुंजी लॉगिंग की सुविधा चालू करने के लिए, CmcdConfiguration.RequestConfig.getCustomData() को ओवरराइड करें.
    • मुख्य डेमो के मेनिफ़ेस्ट में एक और कार्रवाई जोड़ी गई है, ताकि कस्टम *.exolist.json फ़ाइल के साथ डेमो ऐप्लिकेशन को आसानी से शुरू किया जा सके (#439).
    • वीडियो चलाने के दौरान Effect का इस्तेमाल करने के लिए, ExoPlayer.setVideoEffects() जोड़ें.
    • sourceId को int के बजाय long के तौर पर सेव करने के लिए, SampleQueue अपडेट करें. इससे सार्वजनिक तरीकों SampleQueue.sourceId और SampleQueue.peekSourceId के सिग्नेचर बदल जाते हैं.
    • LoadControl तरीकों shouldStartPlayback और onTracksSelected में ऐसे पैरामीटर जोड़ें जिनकी मदद से, इन तरीकों को काम के MediaPeriod से जोड़ा जा सके.
    • ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) के सिग्नेचर में बदलाव करें. इसके लिए, टाइमलाइन पैरामीटर जोड़ें. इसमें ऐसे पीरियड शामिल हों जिनके यूआईडी को मैप में कुंजियों के तौर पर इस्तेमाल किया गया हो. यह मल्टी-पीरियड लाइव स्ट्रीम के साथ एक साथ होने वाली समस्याओं से बचने के लिए ज़रूरी है.
    • EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) और BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs) का इस्तेमाल बंद करें. इसके बजाय, mediaTimeOffsetUs के बिना वाले तरीकों के वैरिएंट को कॉल किया जा सकता है. ध्यान दें कि बंद किए गए वैरिएंट के लिए भी, ऑफ़सेट को अब डिसपैचर से भेजे गए MediaLoadData ऑब्जेक्ट के startTimeUs और endTimeUs में नहीं जोड़ा जाता है.
    • ExoTrackSelection.blacklist का नाम बदलकर excludeTrack और isBlacklisted का नाम बदलकर isTrackExcluded कर दो.
    • खाली प्लेलिस्ट पर कॉल किए जाने पर, ExoPlayer.setMediaItem(s) और addMediaItem(s) के बीच अलग-अलग व्यवहार की समस्या ठीक की गई.
  • ट्रांसफ़ॉर्मर:
    • 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).
    • सीधे तौर पर वीडियो चलाने (ऑफ़लोड) के दौरान, ओपस फ़्रेम को Ogg पैकेट में शामिल करें.
    • स्लीप मोड के दौरान, ऑफ़लोड शेड्यूल करने की सुविधा का इस्तेमाल करके मौजूदा जगह का अनुमान लगाना.
    • खिलाड़ी के लाइफ़साइकल के आखिर में संसाधनों को रिलीज़ करने के लिए, Renderer.release() और AudioSink.release() जोड़ें.
    • DefaultAudioSink में ऑडियो से जुड़ी सुविधाओं में होने वाले बदलावों के बारे में सूचनाएं पाएं. DefaultAudioSink के कंस्ट्रक्टर में ज़रूरी पैरामीटर context जोड़ें. इससे DefaultAudioSink, AudioCapabilitiesReceiver के लिसनर के तौर पर रजिस्टर हो जाएगा. साथ ही, क्षमता में बदलाव होने पर, audioCapabilities प्रॉपर्टी को अपडेट कर देगा.
    • AudioSink.Listener इंटरफ़ेस में नए इवेंट onAudioCapabilitiesChanged और नए इंटरफ़ेस RendererCapabilities.Listener के ज़रिए, ऑडियो की सुविधाओं में हुए बदलावों को लागू करें. यह इंटरफ़ेस onRendererCapabilitiesChanged इवेंट को ट्रिगर करता है.
    • ऑडियो चैनलों पर स्केलिंग/मिक्सिंग लागू करने के लिए, ChannelMixingAudioProcessor जोड़ें.
    • ऑडियो की सुविधाओं में बदलाव होने के बाद, बाईपास मोड चालू होने पर ऑडियो डिकोडर को खारिज करने के लिए, DecoderDiscardReasons में नई पूर्णांक वैल्यू DISCARD_REASON_AUDIO_BYPASS_POSSIBLE जोड़ें.
    • DTS Express और DTS:X के लिए, सीधे तौर पर प्लेबैक की सुविधा जोड़ी गई है (#335).
  • वीडियो:
    • रेंडरर के बंद होने पर, MediaCodecVideoRenderer को 0 चौड़ाई और ऊंचाई वाला VideoSize रिपोर्ट करने के लिए कहें. Player.Listener.onVideoSizeChanged में बदलाव होने पर, Player.Listener.onVideoSizeChanged को कॉल किया जाता है.Player.getVideoSize() इस बदलाव के बाद, MediaCodecVideoRenderer के साथ ExoPlayer के वीडियो का साइज़ 0 होता है. ऐसा तब होता है, जब MediaCodecVideoRenderer वीडियो के साथ काम नहीं करता या वीडियो ट्रैक का साइज़ अब तक तय नहीं किया गया है.Player.getCurrentTracks
  • DRM:
    • DefaultDrmSession पर, सिर्फ़ इंटरनल इस्तेमाल के लिए उपलब्ध कई तरीकों की विज़िबिलिटी कम करें. इन तरीकों को DRM पैकेज के बाहर से कॉल नहीं किया जाना चाहिए:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • एक नई मक्सर लाइब्रेरी जोड़ी गई है. इसका इस्तेमाल MP4 कंटेनर फ़ाइल बनाने के लिए किया जा सकता है.
  • IMA एक्सटेंशन:
    • डीएआई के लिए, एक से ज़्यादा अवधि वाली लाइव डैश स्ट्रीम चालू करें. कृपया ध्यान दें कि फ़िलहाल, लाइव स्ट्रीम में आगे-पीछे करने की सुविधा उपलब्ध नहीं है (#10912).
    • उस गड़बड़ी को ठीक किया गया है जिसमें लाइव स्ट्रीम में नया विज्ञापन ग्रुप डाला जाता है. ऐसा इसलिए होता है, क्योंकि लगातार टाइमलाइन में कॉन्टेंट की कैलकुलेट की गई पोज़िशन में थोड़ा अंतर होता है.
  • सेशन:
    • MediaSession.getControllerForCurrentRequest हेल्पर तरीका जोड़ें, ताकि उस कंट्रोलर के बारे में जानकारी मिल सके जो फ़िलहाल Player तरीके को कॉल कर रहा है.
    • ऐप्लिकेशन में androidx.media3.session.MediaButtonReceiver जोड़ें, ताकि वे मीडिया बटन इवेंट के ज़रिए कॉन्टेंट को फिर से चलाना शुरू कर सकें. ये इवेंट, उदाहरण के लिए, Bluetooth हेडसेट (#167) से भेजे जाते हैं.
    • MediaSession.Callback.onAddMediaItems में डिफ़ॉल्ट सेटिंग लागू करने की सुविधा जोड़ी गई है, ताकि अनुरोध किए गए MediaItems को Player में पास किया जा सके. ऐसा तब होगा, जब उनमें LocalConfiguration (जैसे कि यूआरआई) मौजूद हो (#282).
    • Android 12 और इससे पहले के वर्शन के लिए, मीडिया सूचना के कॉम्पैक्ट व्यू में डिफ़ॉल्ट रूप से "पिछले पर जाएं" और "अगले पर जाएं" कमांड बटन जोड़ें (#410).
    • MediaSession.Callback.onAddMediaItems में डिफ़ॉल्ट सेटिंग लागू करने की सुविधा जोड़ी गई है, ताकि अनुरोध किए गए MediaItems को Player में पास किया जा सके. ऐसा तब होगा, जब उनमें LocalConfiguration (जैसे कि यूआरआई) मौजूद हो (#282).
    • Android 12 और इससे पहले के वर्शन के लिए, मीडिया सूचना के कॉम्पैक्ट व्यू में डिफ़ॉल्ट रूप से "पिछले पर जाएं" और "अगले पर जाएं" कमांड बटन जोड़ें (#410).
  • यूआई:
    • प्ले/रोकें बटन के साथ कस्टम यूज़र इंटरफ़ेस (यूआई) एलिमेंट लिखने के लिए, यूटिलिटी के तरीके shouldShowPlayButton और handlePlayPauseButtonAction जोड़ें.
  • आरटीएसपी एक्सटेंशन:
    • अगर Describe Response SDP मैसेज में MPEG4-LATM के लिए profile-level-id वैल्यू मौजूद नहीं है, तो डिफ़ॉल्ट वैल्यू का इस्तेमाल करें (#302).
    • अगर DESCRIBE रिस्पॉन्स हेडर में मौजूद है, तो RTSP सेशन से रिलेटिव पाथ रिज़ॉल्यूशन के लिए बेस यूआरआई का इस्तेमाल करें (#11160).
  • डैश एक्सटेंशन:
    • एक से ज़्यादा समयावधि वाली DASH स्ट्रीम के लिए, MediaLoadData.startTimeMs और MediaLoadData.endTimeMs से मीडिया टाइम ऑफ़सेट हटाएं.
    • उस गड़बड़ी को ठीक किया गया है जिसमें एक से ज़्यादा अवधि वाले लाइव डैश मीडिया सोर्स को फिर से तैयार करने पर IndexOutOfBoundsException (#10838) गड़बड़ी होती थी.
  • एचएलएस एक्सटेंशन:
    • HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) को इनिशियलाइज़ करने के लिए, लोडिंग थ्रेड के इंतज़ार करने का समय सेट करने के लिए, HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) जोड़ें.TimestampAdjuster अगर टाइम आउट से पहले शुरू नहीं होता है, तो PlaybackException को थ्रो किया जाता है, ताकि वीडियो को लगातार बफ़र होने से रोका जा सके. डिफ़ॉल्ट रूप से, टाइम आउट की अवधि शून्य पर सेट होती है (#323).
  • टेस्ट यूटिलिटी:
    • DataSourceContractTest में यूआरआई स्कीम के केस-इनसेंसिटिव होने की जांच करें.
  • बंद किए गए सिंबल हटाएं:
    • DefaultAudioSink कंस्ट्रक्टर हटाएं. इसके बजाय, DefaultAudioSink.Builder का इस्तेमाल करें.
    • HlsMasterPlaylist को हटाएं और इसके बजाय HlsMultivariantPlaylist का इस्तेमाल करें.
    • Player.stop(boolean) को हटाएं. इसके बजाय, Player.stop() और Player.clearMediaItems() (अगर reset true है) का इस्तेमाल करें.
    • बंद किए गए दो SimpleCache कंस्ट्रक्टर हटाएं. इसके बजाय, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो बंद नहीं किया गया है और बेहतर परफ़ॉर्मेंस के लिए DatabaseProvider लेता है.
    • DefaultBandwidthMeter कंस्ट्रक्टर हटाएं. इसके बजाय, DefaultBandwidthMeter.Builder का इस्तेमाल करें.
    • DefaultDrmSessionManager कंस्ट्रक्टर हटाएं. इसके बजाय, DefaultDrmSessionManager.Builder का इस्तेमाल करें.
    • अब काम न करने वाले दो HttpDataSource.InvalidResponseCodeException कंस्ट्रक्टर हटा दिए गए हैं. गड़बड़ी की लॉगिंग को बेहतर बनाने के लिए, अब काम करने वाले ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अतिरिक्त फ़ील्ड(cause, responseBody) स्वीकार करता है.
    • DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash, और DownloadHelper.forSmoothStreaming हटाएं. इसके बजाय, DownloadHelper.forMediaItem का इस्तेमाल करें.
    • अब काम न करने वाले DownloadService कंस्ट्रक्टर को हटाएं. इसके बजाय, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अब भी काम करता है. इसमें channelDescriptionResourceId पैरामीटर देने का विकल्प शामिल होता है.
    • Charsets (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME, और UTF16LE_NAME) के लिए, बंद किए गए स्ट्रिंग कॉन्स्टेंट हटाएं. इसके बजाय, kotlin.text पैकेज, java.nio.charset.StandardCharsets या com.google.common.base.Charsets से Kotlin Charsets का इस्तेमाल करें.
    • अब काम नहीं करने वाले WorkManagerScheduler कंस्ट्रक्टर को हटाएं. इसके बजाय, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अब भी काम करता है. इसमें Context पैरामीटर देने का विकल्प शामिल होता है.
    • createVideoSampleFormat, createAudioSampleFormat, createContainerFormat, और createSampleFormat के तौर पर इस्तेमाल किए गए ऐसे तरीके हटाएं जो अब काम नहीं करते. इनका इस्तेमाल Format क्लास को इंस्टैंटिएट करने के लिए किया जाता था. इसके बजाय, Format के इंस्टेंस बनाने के लिए Format.Builder का इस्तेमाल करें.
    • अब काम न करने वाले तरीकों copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate, और copyWithVideoSize को हटाएं. इसके बजाय, Format.buildUpon() और सेटर तरीकों का इस्तेमाल करें.
    • इस्तेमाल बंद किए जा चुके ExoPlayer.retry() को हटाएं. इसके बजाय, prepare() का इस्तेमाल करें.
    • बंद किए गए ज़ीरो-आर्ग DefaultTrackSelector कंस्ट्रक्टर को हटाएं. इसके बजाय, DefaultTrackSelector(Context) का इस्तेमाल करें.
    • हटाए गए OfflineLicenseHelper कंस्ट्रक्टर को हटाएं. इसके बजाय, OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) का इस्तेमाल करें.
    • इस्तेमाल बंद किए गए DownloadManager कंस्ट्रक्टर को हटाएं. इसके बजाय, Executor लेने वाले कंस्ट्रक्टर का इस्तेमाल करें.
    • इस्तेमाल बंद किए जा चुके Cue कंस्ट्रक्टर हटाएं. इसके बजाय, Cue.Builder का इस्तेमाल करें.
    • हटाए गए OfflineLicenseHelper कंस्ट्रक्टर को हटाएं. इसके बजाय, OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) का इस्तेमाल करें.
    • अब इस्तेमाल में नहीं हैं, ऐसे चार AnalyticsListener तरीके हटाएं:
      • onDecoderEnabled के बजाय, onAudioEnabled और/या onVideoEnabled का इस्तेमाल करें.
      • onDecoderInitialized के बजाय, onAudioDecoderInitialized और/या onVideoDecoderInitialized का इस्तेमाल करें.
      • onDecoderInputFormatChanged के बजाय, onAudioInputFormatChanged और/या onVideoInputFormatChanged का इस्तेमाल करें.
      • onDecoderDisabled के बजाय, onAudioDisabled और/या onVideoDisabled का इस्तेमाल करें.
    • हटाए गए Player.Listener.onSeekProcessed और AnalyticsListener.onSeekProcessed को हटाएं. इसके बजाय, DISCONTINUITY_REASON_SEEK के साथ onPositionDiscontinuity का इस्तेमाल करें.
    • ExoPlayer.setHandleWakeLock(boolean) हटाएं और इसके बजाय setWakeMode(int) का इस्तेमाल करें.
    • इस्तेमाल बंद किए गए DefaultLoadControl.Builder.createDefaultLoadControl() को हटाएं. इसके बजाय, build() का इस्तेमाल करें.
    • इस्तेमाल बंद किए गए MediaItem.PlaybackProperties को हटाएं. इसके बजाय, MediaItem.LocalConfiguration का इस्तेमाल करें. MediaItem.playbackProperties एट्रिब्यूट की वैल्यू के तौर पर दिया गया फ़ील्ड अब MediaItem.LocalConfiguration टाइप का है.

वर्शन 1.1.0-rc01

21 जून, 2023

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

वर्शन 1.1.0-beta01

7 जून, 2023

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

वर्शन 1.1.0-alpha01

10 मई, 2023

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

वर्शन 1.0.0

वर्शन 1.0.2

18 मई, 2023

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

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

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

  • कोर लाइब्रेरी:
    • Buffer.isLastSample() एट्रिब्यूट जोड़ें. इससे यह पता चलता है कि Buffer में फ़्लैग C.BUFFER_FLAG_LAST_SAMPLE शामिल है या नहीं.
    • उस समस्या को ठीक किया गया है जिसमें फ़्रेम वाला आखिरी सैंपल, 'स्ट्रीम खत्म' सैंपल को पढ़े बिना डीक्यू किए जाने पर, आखिरी फ़्रेम रेंडर नहीं होता था. (#11079).
  • एक्सट्रैक्टर:
    • MPEG-TS फ़ाइलों में H.265 SPS को पार्स करने की समस्या ठीक की गई है. इसके लिए, RTSP और MP4 एक्सट्रैक्टर के लिए पहले से इस्तेमाल किए जा रहे पार्सिंग लॉजिक का फिर से इस्तेमाल किया गया है (#303).
  • टेक्स्ट:
    • एसएसए: अगर UTF-16 फ़ाइलें बाइट ऑर्डर मार्क (#319) से शुरू होती हैं, तो उनके लिए सहायता जोड़ें.
  • सेशन:
    • उस समस्या को ठीक किया गया है जिसमें लेगसी MediaSessionCompat से कनेक्ट होने पर, MediaController उपलब्ध कमांड अपडेट नहीं करता है. लेगसी MediaSessionCompat अपनी कार्रवाइयां अपडेट करता है.
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, सिस्टम यूज़र इंटरफ़ेस (यूआई) से MediaLibraryService को किए गए कॉल के लिए, MediaLibraryService शून्य वैल्यू नहीं दिखाता था. यह गड़बड़ी, एपीआई लेवल 30 पर params.isRecent == true के साथ होती थी (#355).Callback.onGetLibraryRoot
    • MediaSessionService या MediaLibraryService की मेमोरी लीक की समस्या ठीक की गई है (#346).
    • उस गड़बड़ी को ठीक किया गया है जिसमें MediaSession में Timeline और जगह की जानकारी को एक साथ अपडेट करने पर, MediaController से IllegalStateException मिल सकता है.

वर्शन 1.0.1

18 अप्रैल, 2023

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

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

  • कोर लाइब्रेरी:
    • डिफ़ॉल्ट पोज़िशन पर जाने के दौरान, टारगेट की गई लाइव स्ट्रीम को बदलने की सुविधा को रीसेट किया गया है (#11051).
    • उस गड़बड़ी को ठीक किया गया है जिसमें मीडिया में मौजूद खाली सैंपल स्ट्रीम की वजह से, वीडियो अटक जाता था.
  • सेशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें लेगसी MediaSessionCompat से पब्लिश किए गए एक जैसे कई आइटम की वजह से, MediaController में अपवाद दिखता है (#290).
    • MediaSession.broadcastCustomCommand को लेगसी MediaControllerCompat.Callback.onSessionEvent में फ़ॉरवर्ड करने की सुविधा जोड़ें (#293).
    • उस गड़बड़ी को ठीक किया गया है जिसमें MediaSession.setPlayer को कॉल करने पर, उपलब्ध निर्देश अपडेट नहीं होते थे.
    • उस समस्या को ठीक किया गया है जिसमें TrackSelectionOverride इंस्टेंस, MediaController से भेजे जाने पर अनदेखा कर दिए जाते हैं. ऐसा तब होता है, जब वे Format.metadata (#296) वाले ग्रुप का रेफ़रंस देते हैं.
    • उस समस्या को ठीक किया गया है जिसमें लेगसी MediaSessionCompat के ज़रिए मेटाडेटा ऐक्सेस करने के लिए, Player.COMMAND_GET_CURRENT_MEDIA_ITEM का उपलब्ध होना ज़रूरी है.
    • उस समस्या को ठीक किया गया है जिसमें बैकग्राउंड थ्रेड पर MediaSession इंस्टेंस का इस्तेमाल करने पर, MediaSessionService में क्रैश हो जाते थे (#318).
    • उस समस्या को ठीक किया गया है जिसमें लाइब्रेरी ने मीडिया बटन रिसीवर का एलान किया था, जबकि ऐप्लिकेशन ने ऐसा नहीं किया था (#314).
  • डैश:
    • खाली सेगमेंट टाइमलाइन को हैंडल करने से जुड़ी समस्या ठीक की गई है (#11014).
  • RTSP:
    • अगर RTSP Setup with UDP, RTSP Error 461 UnsupportedTransport (#11069) के साथ काम नहीं करता है, तो TCP के साथ फिर से कोशिश करें.

वर्शन 1.0.0

22 मार्च, 2023

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

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

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

वर्शन 1.0.0-rc02

2 मार्च, 2023

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

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

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

वर्शन 1.0.0-beta03

22 नवंबर, 2022

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

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

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

वर्शन 1.0.0-beta02

21 जुलाई, 2022

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

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

  • कोर लाइब्रेरी:
    • पक्का करें कि ShuffleOrder को ExoPlayer.setShuffleOrder से बदलने पर, Player.Listener#onTimelineChanged को reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889) के साथ कॉल किया जा रहा हो.
    • प्रोग्रेसिव मीडिया के लिए, बफ़र की गई पोज़िशन में सिर्फ़ चुने गए ट्रैक शामिल करें (#10361).
    • सभी ExoPlayer लॉग आउटपुट के लिए, कस्टम लॉगर की अनुमति दी गई (#9752).
    • setDataSourceFactory में DefaultMediaSourceFactory को लागू करने से जुड़ी समस्या को ठीक किया गया है. कुछ मामलों में यह सुविधा काम नहीं कर रही थी (#116).
  • एक्सट्रैक्टर:
    • H265 के शॉर्ट टर्म रेफ़रंस पिक्चर सेट की पार्सिंग से जुड़ी समस्या ठीक की गई है (#10316).
    • esds बॉक्स से बिटरेट पार्स करने की समस्या ठीक की गई है (#10381).
  • डैश:
    • मेनिफ़ेस्ट से ClearKey लाइसेंस का यूआरएल पार्स करें (#10246).
  • यूआई:
    • पक्का करें कि TalkBack, वीडियो चलाने की स्पीड के लिए चुने गए विकल्प को, वीडियो चलाने से जुड़े कंट्रोल मेन्यू (#10298) में बोलकर सुनाए.
  • RTSP:
    • VP8 के फ़्रैगमेंट किए गए पैकेट को हैंडल करने की सुविधा जोड़ी गई है (#110).
  • लीन्बैक एक्सटेंशन:
    • LeanbackAdapter में playWhenReady में हुए बदलावों के बारे में सुनें (10420).
  • कास्ट करें:
    • प्लेलिस्ट के तरीकों में पास किए गए MediaItem का इस्तेमाल CastTimeline में Window.mediaItem के तौर पर करें (#25, #8212).
    • 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 के लिए प्लैटफ़ॉर्म के डाइग्नोस्टिक्स में योगदान देने से ऑप्ट-आउट कर सकते हैं. इसके लिए, ExoPlayer.Builder.setUsePlatformDiagnostics(false) का इस्तेमाल करें.
    • उस बग को ठीक किया गया है जिसकी वजह से MergingMediaSource का इस्तेमाल करते समय ट्रैक बहुत बार रीसेट हो जाते थे. उदाहरण के लिए, सबटाइटल साइड-लोड करते समय और वीडियो चलाने के दौरान चुने गए सबटाइटल को बदलते समय (#10248).
    • एपीआई 29 और 30 पर, 5G-NSA नेटवर्क टाइप का पता लगाना बंद कर दिया गया है. इन प्लेबैक के लिए, 4G नेटवर्क का इस्तेमाल किया जाएगा.
    • null को MediaSource.Factory.setDrmSessionManagerProvider और MediaSource.Factory.setLoadErrorHandlingPolicy में पास करने की अनुमति नहीं है. ज़रूरत पड़ने पर, DefaultDrmSessionManagerProvider और DefaultLoadErrorHandlingPolicy के इंस्टेंस को साफ़ तौर पर पास किया जा सकता है.
    • जब सटीक LocalConfiguration की जानकारी न हो, तब मीडिया चलाने के लिए ज़रूरी मेटाडेटा दिखाने के लिए MediaItem.RequestMetadata जोड़ें. MediaMetadata.mediaUrl को भी हटा दें, क्योंकि अब इसे RequestMetadata में शामिल कर दिया गया है.
    • Player.Command.COMMAND_SET_MEDIA_ITEM जोड़ें, ताकि खिलाड़ी किसी एक आइटम को सेट करने की अनुमति दे सकें.
  • ट्रैक चुनने की सुविधा:
    • TrackSelectionOverrides क्लास को TrackSelectionParameters में बदलें. इसके अलावा, TrackSelectionOverride को टॉप लेवल की क्लास के तौर पर प्रमोट करें.
    • TracksInfo का नाम बदलकर Tracks और TracksInfo.TrackGroupInfo का नाम बदलकर Tracks.Group कर दो. Player.getCurrentTracksInfo और Player.Listener.onTracksInfoChanged का नाम बदलकर Player.getCurrentTracks और Player.Listener.onTracksChanged कर दिया गया है. इसमें Player.Listener.onTracksChanged तरीके के नाम को 'अन-डेप्रिकेट' करना शामिल है. हालांकि, इसमें पैरामीटर के टाइप अलग-अलग होते हैं.
    • डिप्रेकेट किए गए DefaultTrackSelector.ParametersBuilder के बजाय, DefaultTrackSelector.Parameters.Builder को वापस लाने के लिए DefaultTrackSelector.buildUponParameters और DefaultTrackSelector.Parameters.buildUpon को बदलें.
    • जो डिफ़ॉल्ट रूप से चालू होता है.DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities इस सुविधा के चालू होने पर, DefaultTrackSelector उन ऑडियो ट्रैक को प्राथमिकता देगा जिनके चैनलों की संख्या, डिवाइस की आउटपुट क्षमताओं से ज़्यादा नहीं है. हैंडहेल्ड डिवाइसों पर, DefaultTrackSelector मल्टीचैनल ऑडियो फ़ॉर्मैट के बजाय स्टीरियो/मोनो को प्राथमिकता देगा. ऐसा तब तक होगा, जब तक मल्टीचैनल फ़ॉर्मैट को स्पैटियलाइज़ (Android 12L+) नहीं किया जा सकता या वह डॉल्बी सराउंड साउंड फ़ॉर्मैट नहीं है. इसके अलावा, जिन डिवाइसों पर ऑडियो स्पैटियलाइज़ेशन की सुविधा काम करती है उन पर DefaultTrackSelector, स्पैटियलाइज़र प्रॉपर्टी में होने वाले बदलावों पर नज़र रखेगा. साथ ही, इन बदलावों के आधार पर नए ट्रैक को चुनेगा. television यूज़र इंटरफ़ेस (यूआई) मोड वाले डिवाइसों पर ये पाबंदियां लागू नहीं होती हैं. साथ ही, सबसे ज़्यादा चैनलों वाले फ़ॉर्मैट को प्राथमिकता दी जाएगी. इस सुविधा को चालू करने के लिए, DefaultTrackSelector इंस्टेंस को Context के साथ बनाया जाना चाहिए.
  • वीडियो:
    • DummySurface का नाम बदलकर PlaceholderSurface करें.
    • MediaCodecVideoRenderer.getCodecMaxInputSize में AV1 फ़ॉर्मैट के लिए सहायता जोड़ी गई.
  • ऑडियो:
    • LG AC3 ऑडियो डिकोडर, नॉन-स्टैंडर्ड MIME टाइप के विज्ञापन दिखाता है.
    • एपीआई < 21 पर एआरटी की पुष्टि करने में लगने वाले समय को कम करने के लिए, AudioAttributes.getAudioAttributesV21() के रिटर्न टाइप को android.media.AudioAttributes से बदलकर नई AudioAttributesV21 रैपर क्लास में बदलें.
    • जब फ़ॉर्मैट के ऑडियो चैनल की संख्या सेट नहीं होती है, तब ऑडियो पासथ्रू के लिए प्लैटफ़ॉर्म (एपीआई 29+) से क्वेरी करता है या ऑडियो एन्कोडिंग चैनल की संख्या का अनुमान लगाता है. ऐसा एचएलएस चंकलेस तैयारी (10204) के साथ होता है.
    • चैनल मास्क के साथ AudioTrack को कॉन्फ़िगर करें अगर डिकोडर 12 चैनल वाला पीसीएम ऑडियो आउटपुट करता है, तो AudioFormat.CHANNEL_OUT_7POINT1POINT4 (#10322.
  • डीआरएम
    • यह पक्का करें कि फ़ॉर्मैट बदलने के तुरंत बाद, डीआरएम सेशन हमेशा सही तरीके से अपडेट हो (10274).
  • टेक्स्ट:
    • List<Cue> के बजाय CueGroup को वापस लाने के लिए, Player.getCurrentCues() को बदलें.
    • एसएसए: OutlineColour स्टाइल सेटिंग के साथ काम करता है, जब BorderStyle == 3 (यानी, OutlineColour क्यू का बैकग्राउंड सेट करता है) (#8435).
    • CEA-708: डेटा को कई सर्विस ब्लॉक में पार्स करता है और उन ब्लॉक को अनदेखा करता है जो फ़िलहाल चुने गए सर्विस नंबर से जुड़े नहीं हैं.
    • RawCcExtractor हटाएं. इसका इस्तेमाल सिर्फ़ Google के अंदर सबटाइटल फ़ॉर्मैट को मैनेज करने के लिए किया जाता था.
  • एक्सट्रैक्टर:
    • 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:
    • Media Rating Council (MRC) के सुझावों के मुताबिक, विज्ञापन पोलिंग रेट को हर 100 मिलीसेकंड से घटाकर हर 200 मिलीसेकंड कर दिया गया है.
  • 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 टिप्पणियों (इसमें 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 के तौर पर समझना बंद करें.
    • उन मेनिफ़ेस्ट के लिए बेस यूआरएल को बाहर रखने की लॉजिक से जुड़ी समस्या ठीक की गई है जो DVB नेमस्पेस (#9856) के बारे में नहीं बताते हैं.
    • मिलते-जुलते MPD.Location यूआरएल के लिए सहायता उपलब्ध है (#9939).
  • HLS:
    • सिर्फ़ ऑडियो वाली एचएलएस स्ट्रीम के लिए, Format.label एट्रिब्यूट की वैल्यू सही तरीके से भरें (#9608).
    • स्टार्ट अप टाइम को बेहतर बनाने के लिए, डिफ़ॉल्ट रूप से बिना चंक वाली तैयारी का इस्तेमाल करें. अगर आपके रेंडिशन में, मक्स किए गए ऐसे क्लोज़्ड कैप्शन ट्रैक शामिल हैं जिन्हें मास्टर प्लेलिस्ट में नहीं बताया गया है, तो आपको उन्हें मास्टर प्लेलिस्ट में जोड़ना चाहिए, ताकि वे चलाने के लिए उपलब्ध हों. इसके अलावा, HlsMediaSource.Factory.setAllowChunklessPreparation(false) की मदद से, बिना चंक वाली तैयारी की सुविधा बंद करें.
    • एचएलएस में, सटीक की-फ़्रेम की मदद से वीडियो में आगे-पीछे जाने की सुविधा उपलब्ध कराई गई है (#2882).
  • RTSP:
    • किसी भी सर्वर कनेक्शन (#9606) के लिए इस्तेमाल किए गए SocketFactory को बदलने के लिए, क्लाइंट एपीआई उपलब्ध कराएं.
    • अगर BASIC और DIGEST, दोनों मौजूद हैं, तो BASIC के बजाय DIGEST ऑथेंटिकेशन का इस्तेमाल करें (#9800).
    • जब आरटीएसपी ट्रैक की टाइमिंग उपलब्ध न हो, तब उसे मैनेज करें (#9775).
    • आरटीपी-जानकारी हेडर की अमान्य वैल्यू को अनदेखा करें (#9619).
  • ट्रांसफ़ॉर्मर:
    • एपीआई के ज़रूरी वर्शन को बढ़ाकर 21 करें.
    • TransformationException का इस्तेमाल अब ट्रांसफ़ॉर्मेशन के दौरान होने वाली गड़बड़ियों के बारे में बताने के लिए किया जाता है.
    • ट्रांसफ़ॉर्मेशन के विकल्प तय करने के लिए, TransformationRequest जोड़ें.
    • एक से ज़्यादा लिसनर को रजिस्टर करने की अनुमति दें.
    • कोडेक आउटपुट के कुछ हिस्से को पढ़ने के दौरान, ट्रांसफ़ॉर्मर के रुकने की समस्या ठीक की गई.
    • मक्सर थ्रो को रिलीज़ करते समय, Transformer.getProgress में संभावित एनपीई को ठीक करें.
    • ट्रांसफ़ॉर्मेशन लागू करने के लिए, एक डेमो ऐप्लिकेशन जोड़ें.
  • MediaSession एक्सटेंशन:
    • डिफ़ॉल्ट रूप से, MediaSessionConnector अब रोकने पर प्लेलिस्ट को मिटा देता है. जिन ऐप्लिकेशन को प्लेलिस्ट बनाए रखनी है वे कनेक्टर पर setClearMediaItemsOnStop(false) कॉल कर सकते हैं.
  • कास्ट एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से CastPlayer, onIsPlayingChanged को सही तरीके से कॉल नहीं कर पा रहा था (#9792).
    • DefaultMediaItemConverter (#9663) की मदद से, ऑडियो मेटाडेटा और आर्टवर्क को शामिल करने की सुविधा.
  • FFmpeg एक्सटेंशन:
    • GNU के बजाय LLVM के बिन यूटिलिटी पर build_ffmpeg.sh को निर्भर बनाएं (#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 मॉड्यूल ने ले ली है. इससे, प्लेयर और मीडिया सेशन के बीच सीधे तौर पर इंटिग्रेशन होता है. इसके लिए, अडैप्टर/कनेक्टर क्लास का इस्तेमाल करने की ज़रूरत नहीं होती.