Media3

मीडिया के इस्तेमाल के उदाहरणों के लिए लाइब्रेरी की सुविधा.
नया अपडेट रिलीज़ किया गया जांचा और परखा हुआ वर्शन रिलीज़ कैंडिडेट बीटा रिलीज़ ऐल्फ़ा रिलीज़
20 दिसंबर, 2024 1.5.1 - - 1.6.0-alpha01

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

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

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

ग्रूवी

dependencies {
    def media3_version = "1.4.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
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

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

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

    // For 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.4.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
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

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

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

    // For 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.6.0

वर्शन 1.6.0-alpha01

20 दिसंबर, 2024

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

  • सामान्य लाइब्रेरी:
    • Format.toBundle(boolean excludeMetadata) का तरीका हटाएं और इसके बजाय Format.toBundle() का इस्तेमाल करें.
    • androidx.media में मिलती-जुलती क्लास को बदलने के लिए, AudioManagerCompat और AudioFocusRequestCompat जोड़ें.
  • ExoPlayer:
    • वीडियो ट्रैक चुनते समय, भाषा का ध्यान रखें. डिफ़ॉल्ट रूप से, चुने गए ऑडियो ट्रैक की भाषा से मैच करने वाला 'मुख्य' वीडियो ट्रैक चुनें. हालांकि, ऐसा तब ही होगा, जब वह उपलब्ध हो. अश्लील वीडियो की भाषा की प्राथमिकताओं को TrackSelectionParameters.Builder.setPreferredVideoLanguage(s) के ज़रिए दिखाया जा सकता है.
    • DefaultTrackSelector.selectVideoTrack() तरीके में selectedAudioLanguage पैरामीटर जोड़ें.
    • MediaSourceEventListener.onLoadStarted और उससे जुड़े MediaSourceEventListener.EventDispatcher तरीकों में retryCount पैरामीटर जोड़ें.
    • एक से ज़्यादा अवधि वाली DASH स्ट्रीम में, प्लेलिस्ट आइटम या अवधियों की अवधि, असल कॉन्टेंट से मेल न खाने पर आइटम के आखिर में फ़्रेम फ़्रीज़ होने की समस्या को ठीक किया गया है (#1698).
    • DefaultLoadControl में bufferForPlaybackMs और bufferForPlaybackAfterRebufferMs की डिफ़ॉल्ट वैल्यू को 1,000 और 2,000 मिलीसेकंड पर सेट करें.
    • MediaExtractorCompat जोड़ें. यह एक नई क्लास है, जो प्लैटफ़ॉर्म MediaExtractor के बराबर सुविधाएं उपलब्ध कराती है.
    • BasePreloadManager.Listener को टॉप-लेवल PreloadManagerListener पर ले जाएं.
    • RenderersFactory.createSecondaryRenderer को लागू करके, पहले से गर्म करने के लिए सेकंडरी रेंडरर उपलब्ध कराए जा सकते हैं. मीडिया आइटम को पहले से गर्म करने की सुविधा से, वीडियो चलाने के दौरान मीडिया आइटम के ट्रांज़िशन तेज़ी से होते हैं.
    • DASH, एचएलएस, और स्मूद स्ट्रीमिंग जैसे अडैप्टिव स्ट्रीमिंग फ़ॉर्मैट में मेनिफ़ेस्ट अनुरोधों के लिए CmcdData भेजने की सुविधा चालू करें (#1951).
    • उस कोडेक का MediaCodecInfo दें जिसे MediaCodecRenderer.onReadyToInitializeCodec (#1963) में शुरू किया जाएगा.
    • AdsMediaSource को बदलें, ताकि विज्ञापन ग्रुप जोड़कर AdPlaybackStates को बड़ा किया जा सके. अमान्य बदलावों का पता चलता है और अपवाद का मैसेज दिखता है.
  • ट्रांसफ़ॉर्मर:
    • Format का इस्तेमाल करने के लिए, VideoFrameProcessor.registerInputStream और VideoFrameProcessor.Listener.onInputStreamRegistered के पैरामीटर अपडेट करें.
    • पुराने सिस्टम के साथ काम करने वाले अन्य फ़ॉर्मैट में ट्रांसम्यूट करने की सुविधा जोड़ी गई.
    • DefaultEncoderFactory का इस्तेमाल करते समय, एचडीआर स्टैटिक मेटाडेटा जनरेट करें.
  • एक्सट्रैक्टर:
    • AVI: लगातार बिटरेट वाले कंप्रेस किए गए ऑडियो वाली फ़ाइलों को हैंडल करने की समस्या को ठीक किया गया. ऐसा तब होता है, जब स्ट्रीम हेडर में चंक की संख्या के बजाय बाइट की संख्या सेव की जाती है.
  • ऑडियो:
    • onAudioPositionAdvancing को ठीक करें, ताकि प्लेबैक फिर से शुरू होने पर इसे कॉल किया जा सके. इससे पहले, इसे प्लेबैक रोके जाने पर कॉल किया जाता था.
  • वीडियो:
    • MediaCodecVideoRenderer को इस तरह ठीक करें कि Surface के बिना, रेंडरर सिर्फ़ तब शुरुआती फ़्रेम को स्किप करे, जब VideoFrameReleaseControl.getFrameReleaseAction FRAME_RELEASE_TRY_AGAIN_LATER न हो.
  • टेक्स्ट:
    • MediaItem.Builder.setSubtitleConfigurations के साथ कॉन्फ़िगर की गई सभी सबटाइटल फ़ाइलों को लोड करना बंद करें. इसके बजाय, सिर्फ़ एक फ़ाइल लोड करें, अगर उसे ट्रैक चुनने की सुविधा से चुना गया है (#1721).
  • असर:
    • OverlaySettings की सुविधाओं को StaticOverlaySettings में ले जाया गया. OverlaySettings को सबक्लास में बांटा जा सकता है, ताकि डाइनैमिक ओवरले सेटिंग की अनुमति दी जा सके.
  • म्यूक्सर:
    • MuxerException को Muxer इंटरफ़ेस से हटा दिया गया है, ताकि एफ़क्यूडीएन का नाम बहुत लंबा न हो.
  • सेशन:
    • 'MediaButtonReceiver.shouldStartForegroundService` के पैरामीटर के तौर पर'Context' जोड़ें (#1887).
  • यूज़र इंटरफ़ेस:
    • media3-ui-compose मॉड्यूल में PlayerSurface Composable जोड़ें.
    • media3-ui-compose मॉड्यूल में PlayPauseButtonState, NextButtonState, PreviousButtonState, RepeatButtonState, ShuffleButtonState क्लास और उनसे जुड़े rememberPlayPauseButtonState, rememberNextButtonState, rememberPreviousButtonState, rememberRepeatButtonState, rememberShuffleButtonState कॉम्पोज़ेबल जोड़ें.
  • एचएलएस एक्सटेंशन:
    • HlsInterstitialsAdsLoader का पहला वर्शन जोड़ें. विज्ञापन लोडर, एचएलएस मीडिया प्लेलिस्ट के एचएलएस इंटरस्टीशियल को पढ़ता है और उन्हें AdPlaybackState पर मैप करता है, जिसे AdsMediaSource पर पास किया जाता है. यह शुरुआती वर्शन, सिर्फ़ X-ASSET-URI एट्रिब्यूट वाली एचएलएस वीओडी स्ट्रीम के साथ काम करता है.
    • HlsInterstitialsAdsLoader.AdsMediaSourceFactory जोड़ें. ऐप्लिकेशन इसका इस्तेमाल, AdsMediaSource इंस्टेंस बनाने के लिए कर सकते हैं. ये इंस्टेंस, HlsInterstitialsAdsLoader का इस्तेमाल आसान और सुरक्षित तरीके से करते हैं.
  • DASH एक्सटेंशन:
    • DASH के लिए AC-4 लेवल-4 फ़ॉर्मैट का इस्तेमाल करने की सुविधा जोड़ें (#1898).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
    • MPEG-H ऑडियो को डिकोड करने के लिए, MPEG-H डिकोडर मॉड्यूल जोड़ें. यह मॉड्यूल, नेटिव MPEG-H डिकोडर मॉड्यूल का इस्तेमाल करता है (#1826).
  • डेमो ऐप्लिकेशन:
    • PlayPauseButtonState, NextButtonState, PreviousButtonState, RepeatButtonState, ShuffleButtonState का इस्तेमाल करके, demo-compose में MinimalControls (PlayPauseButton, NextButton, PreviousButton) और ExtraControls (RepeatButton, ShuffleButton) यूज़र इंटरफ़ेस (यूआई) के एलिमेंट जोड़ें.
  • इस्तेमाल नहीं किए जाने वाले सिंबल हटाएं:
    • अब इस्तेमाल में न होने वाले AudioMixer.create() तरीके को हटाएं. इसके बजाय, DefaultAudioMixer.Factory().create() का इस्तेमाल करें.
    • इस्तेमाल नहीं किए जा सकने वाले इन Transformer.Builder तरीकों को हटाएं:
      • setTransformationRequest(), इसके बजाय setAudioMimeType(), setVideoMimeType(), और setHdrMode() का इस्तेमाल करें.
      • setAudioProcessors(), ऑडियो प्रोसेसर को EditedMediaItem.Builder.setEffects() में सेट करें और उसे Transformer.start() में पास करें.
      • setVideoEffects(), वीडियो इफ़ेक्ट को EditedMediaItem.Builder.setEffects() में सेट करें और उसे Transformer.start() में पास करें.
      • setRemoveAudio(), Transformer.start() में भेजे गए EditedMediaItem से ऑडियो हटाने के लिए, 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 का इस्तेमाल करें.

संस्‍करण 1.5

संस्‍करण 1.5.1

19 दिसंबर, 2024

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

  • ExoPlayer:
    • इस प्लैटफ़ॉर्म के एपीआई (#1641) के साथ, कोडेक के टाइम आउट से जुड़ी समस्याओं से बचने के लिए, MediaCodec में असिंक्रोनस डिक्रिप्शन का इस्तेमाल बंद करें.
  • एक्सट्रैक्टर:
    • 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() से बदलें.
    • प्लेलिस्ट का स्ट्रक्चर बनाने के बजाय, SimpleBasePlayer.State.Builder.setPlaylist() के लिए बदलाव करने की सुविधा जोड़ें, ताकि सीधे तौर पर Timeline और मौजूदा Tracks और Metadata की जानकारी दी जा सके.
    • minSdk को 21 (Android Lollipop) पर सेट करें. यह सभी अन्य AndroidX लाइब्रेरी के साथ अलाइन है.
    • androidx.media3:media3-common-ktx आर्टफ़ैक्ट जोड़ें, जो कॉमन लाइब्रेरी के ऊपर बनाई गई, Kotlin के हिसाब से बनी सुविधाएं देता है
    • media3-common-ktx लाइब्रेरी में Player.Events को सुनने के लिए, कोरूटीन को स्पिन करने के लिए Player.listen सस्पेंड करने वाला एक्सटेंशन फ़ंक्शन जोड़ें.
    • मैन्युअल तरीके से, लाइन के बाहर रखी गई इनर क्लास से @DoNotInline एनोटेशन हटाएं. इन क्लास को इस तरह डिज़ाइन किया गया है कि रनटाइम क्लास की पुष्टि न हो पाने से बचा जा सके. R8 के नए वर्शन में, अब रनटाइम से जुड़ी गड़बड़ियों से बचने के लिए, इन कॉल को अपने-आप आउट-ऑफ़-लाइन किया जाता है. इसलिए, अब मैन्युअल तरीके से आउट-ऑफ़-लाइन करने की ज़रूरत नहीं है. लाइब्रेरी के सभी Gradle उपयोगकर्ताओं को, पहले से ही Android Gradle प्लग इन के ऐसे वर्शन का इस्तेमाल करना होगा जो R8 के ऐसे वर्शन का इस्तेमाल करता हो जो compileSdk = 35 की वजह से ऐसा करता है. Gradle के अलावा किसी दूसरे बिल्ड सिस्टम का इस्तेमाल करने वाले लाइब्रेरी के उपयोगकर्ताओं को यह पक्का करना होगा कि R8 के बराबर का छोटा/अस्पष्ट करने वाला चरण, रनटाइम क्लास की पुष्टि में होने वाली गड़बड़ियों से बचने के लिए, अपने-आप आउट-ऑफ़-लाइन होने की इसी तरह की प्रोसेस करता है. यह बदलाव, अन्य AndroidX लाइब्रेरी में पहले ही कर दिया गया है.
  • ExoPlayer:
    • अब हर मीडिया आइटम के लिए, MediaCodecRenderer.onProcessedStreamChange() को कॉल किया जा सकता है. पहले, इसे पहले चरण के लिए नहीं बुलाया जाता था. इसे चालू करने के लिए, MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart() का इस्तेमाल करें.
    • गड़बड़ी होने पर, PreloadMediaSource.PreloadControl.onPreloadError को लागू करने की अनुमति देने के लिए, PreloadMediaSource.PreloadControl जोड़ें.
    • ऐप्लिकेशन में प्रीलोड इवेंट भेजने के लिए, BasePreloadManager.Listener जोड़ें.
    • एसएनटीपी क्लाइंट के टाइम आउट को बदलने की अनुमति दें और टाइम आउट होने पर, अन्य पतों को फिर से आज़माएं (#1540).
    • MediaCodecAdapter.Configuration.flags को हटाएं, क्योंकि फ़ील्ड हमेशा शून्य था.
    • Wear OS API 35 और उसके बाद के वर्शन पर, उपयोगकर्ता को प्लेबैक के लिए डिवाइस में पहले से मौजूद स्पीकर चुनने की अनुमति दें. ऐसा तब ही करें, जब डिवाइस पर इस सुविधा का विज्ञापन किया गया हो.
    • ऑडियो फ़ोकस मैनेज करने की सुविधा चालू होने तक, Context.getSystemService(Context.AUDIO_SERVICE) को कॉल ब्लॉक करने की सुविधा देर से चालू करें. इससे यह पक्का होता है कि ऑडियो फ़ोकस मैनेजमेंट की सुविधा चालू न होने पर, कॉल को ब्लॉक न किया जाए (#1616).
    • वीडियो लोड न होने पर भी, बफ़र किए गए वीडियो को चलाने की अनुमति दें (#1571).
    • जब अलग-अलग रेंडरर, वीडियो चलाने की अनुमति देते हैं, तब सिग्नल देने के लिए AnalyticsListener.onRendererReadyChanged() जोड़ें.
    • MediaCodec को असाइनोक्रोनस मोड (एपीआई 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 के साथ जोड़े गए) के लिए, लोड शुरू होने/गड़बड़ी होने/रद्द होने/पूरा होने के इवेंट रिपोर्ट किए जाएंगे. ये इवेंट, AnalyticsListener से उत्सर्जित किए गए डुप्लीकेट लोड इवेंट के तौर पर दिख सकते हैं.
    • सबटाइटल और मेटाडेटा से जुड़ी गड़बड़ियों की वजह से, वीडियो चलाने की प्रोसेस पूरी तरह से रुकने से रोकना. इसके बजाय, समस्या वाले ट्रैक को बंद कर दिया जाता है और बाकी ट्रैक का चलना जारी रहता है (#1722).
      • सबटाइटल को हैंडल करने के नए तरीके (एक्सट्रैक्ट करने के दौरान) में, onLoadError कॉलबैक की मदद से, उससे जुड़ी पार्स करने (उदाहरण के लिए, अमान्य सबटाइटल डेटा) और लोड करने से जुड़ी गड़बड़ियां (उदाहरण के लिए, एचटीटीपी 404) भेजी जाती हैं.
      • सबटाइटल को रेंडर करते समय, सबटाइटल मैनेज करने के पुराने तरीके में, onLoadError कॉलबैक के ज़रिए सिर्फ़ लोड से जुड़ी गड़बड़ियां ही भेजी जाती हैं. वहीं, पार्स करने से जुड़ी गड़बड़ियों को अनदेखा कर दिया जाता है. यह पहले से मौजूद तरीका है.
    • एक से ज़्यादा अवधि वाली DASH स्ट्रीम में, प्लेलिस्ट आइटम या अवधियों की अवधि, असल कॉन्टेंट से मेल न खाने पर आइटम के आखिर में फ़्रेम फ़्रीज़ होने की समस्या को ठीक किया गया है (#1698).
    • SntpClient में सेटर जोड़ें, ताकि पिछले अपडेट के बाद बीते हुए ज़्यादा से ज़्यादा समय को सेट किया जा सके. इसके बाद, क्लाइंट को फिर से शुरू किया जाता है (#1794).
  • ट्रांसफ़ॉर्मर:
    • SurfaceAssetLoader जोड़ें, जो Surface की मदद से, वीडियो डेटा को Transformer में लाइन में लगाने की सुविधा देता है.
    • ImageAssetLoader, IllegalStateException के बजाय AssetLoader.onError के ज़रिए काम न करने वाले इनपुट की शिकायत करता है.
    • इमेज एक्सपोर्ट करने के लिए, MediaItem.Builder.setImageDurationMs का इस्तेमाल करके इमेज की अवधि सेट करना ज़रूरी बनाएं.
    • EditedMediaItems के ऑडियो के क्रम में गैप होने पर, उन्हें एक्सपोर्ट करने की सुविधा जोड़ी गई.
  • ट्रैक चुनना:
    • DefaultTrackSelector: जब अन्य फ़ैक्टर एक जैसे हों, तो चैनल के हिसाब से ऑडियो के बजाय ऑब्जेक्ट के हिसाब से ऑडियो का इस्तेमाल करें.
  • एक्सट्रैक्टर:
    • Mp4Extractor और FragmentedMp4Extractor को ऐसे H264 सैंपल की पहचान करने की अनुमति दें जिनका इस्तेमाल बाद के सैंपल के लिए रेफ़रंस के तौर पर नहीं किया जाता.
    • AmrExtractor में, इंडेक्स के हिसाब से वीडियो पर जाने की सुविधा चालू करने का विकल्प जोड़ा गया.
    • मान्य फ़्रेम के बीच 128 केबी से ज़्यादा साइज़ वाली एमपी3 फ़ाइलों को अमान्य के बजाय, काटी गई फ़ाइलों के तौर पर माना जाएगा. इसका मतलब है कि जिन फ़ाइलों के आखिर में एमपी3 डेटा नहीं है और जिनमें एमपी3 बाइट की लंबाई बताने के लिए कोई दूसरा मेटाडेटा नहीं है वे अब ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} (#1563) के साथ काम न करने के बजाय, एमपी3 डेटा के आखिर में ही चलना बंद हो जाएंगी.
    • MP4 फ़ाइलों में बदलाव सूचियों को प्रोसेस करते समय, मीडिया के शुरू होने की ऐसी जगहों के लिए प्रीरोल सैंपल मैनेज करने की सुविधा को ठीक किया गया है जो कि फ़्रेम की शुरुआत नहीं हैं (#1659).
    • Mp4Extractor और FragmentedMp4Extractor में मौजूद mdhd बॉक्स से मीडिया की अवधि का इस्तेमाल करके, फ़्रेम रेट का बेहतर हिसाब लगाया गया(#1531).
    • MP4 एडिट सूचियों में media_time की गलत स्केलिंग ठीक करें. segment_duration को मूवी के टाइमस्केल का इस्तेमाल करके पहले से ही सही तरीके से स्केल किया जा चुका था. अब media_time को ट्रैक के टाइमस्केल का इस्तेमाल करके सही तरीके से स्केल किया गया है. इस बारे में एमपी4 फ़ॉर्मैट स्टैंडर्ड (#1792) में बताया गया है.
    • एडिट सूची के साथ MP4 के लिए endIndices कैलकुलेशन में, क्रम से न होने वाले फ़्रेम को मैनेज करें (#1797).
    • -1 वैल्यू को हैंडल करने के लिए, MP4 फ़ाइलों के mdhd बॉक्स में मीडिया की अवधि को पार्स करने की प्रोसेस को ठीक करें (#1819).
    • H.263 वीडियो के लिए, MP4 फ़ाइलों में h263 बॉक्स की पहचान करने की सुविधा जोड़ी गई है (#1821).
    • AC-4 लेवल-4 ISO बेस मीडिया फ़ाइल फ़ॉर्मैट के साथ काम करने की सुविधा जोड़ें (#1265).
  • DataSource:
    • HttpEngineDataSource को अपडेट करें, ताकि एपीआई लेवल 34 के बजाय, S एक्सटेंशन 7 वाले वर्शन से इसका इस्तेमाल किया जा सके (#1262).
    • DataSourceContractTest: यह पुष्टि करें कि DataSource.getUri(), दस्तावेज़ में बताए गए तरीके से, रिज़ॉल्व किया गया यूआरआई दिखाता है. अगर यह अनुरोध किए गए यूआरएल से अलग है, तो जांच में नए DataSourceContractTest.TestResource.Builder.setResolvedUri() तरीके का इस्तेमाल करके इसकी जानकारी दी जा सकती है.
    • DataSourceContractTest: यह बताएं कि DataSource.getUri() और getResponseHeaders(), open() को कॉल करने में हुई गड़बड़ी ('न मिला' रिसॉर्स की वजह से) के बाद और अगले close() कॉल से पहले, 'खुला है' वैल्यू दिखाते हैं.
      • DataSourceContractTest.getNotFoundResources() को बदलने पर, जांच करने वाली सब-क्लास को एक से ज़्यादा 'नहीं मिला' संसाधन देने की अनुमति मिलती है. साथ ही, वे उम्मीद के मुताबिक हेडर भी दे सकती हैं. इससे, एचटीटीपी 404 (हेडर के साथ) और "सर्वर नहीं मिला" (कोई हेडर नहीं) के बीच अंतर करने में मदद मिलती है.
  • ऑडियो:
    • अगर मीडिया में CTA-2075 लाउडनेस मेटाडेटा मौजूद है, तो कोडेक पर इसे अपने-आप कॉन्फ़िगर करें.
    • पक्का करें कि वीडियो में आगे-पीछे जाने पर, आवाज़ धीरे-धीरे कम हो जाए.
    • वीडियो में आगे-पीछे जाने के दौरान होने वाली पॉप आवाज़ों को ठीक करना.
    • Sonic के समय को बढ़ाने/पिच को बदलने वाले एल्गोरिदम के लिए, ट्रिंकेटेशन की गड़बड़ी को ठीक करना.
    • SpeedChangingAudioProcessor में मौजूद उस गड़बड़ी को ठीक किया गया है जिसकी वजह से आउटपुट फ़्रेम नहीं दिखते.
  • वीडियो:
    • MediaCodecVideoRenderer उन सैंपल को डिकोड करने से बचता है जिन्हें न तो रेंडर किया जाता है और न ही दूसरे सैंपल के रेफ़रंस के तौर पर इस्तेमाल किया जाता है.
    • एपीआई 35 और उसके बाद के वर्शन में, MediaCodecAdapter को अब configure में null Surface मिल सकता है. साथ ही, अगर कोडेक इसकी अनुमति देता है, तो पहले से सेट किए गए Surface को हटाने के लिए, detachOutputSurface के नए तरीके को कॉल किया जा सकता है (MediaCodecInfo.detachedSurfaceSupported).
    • onOutputFormatChanged को प्रोसेस करते समय, अगर MediaCodecAdapter की दी गई पिक्सल आसपेक्ट रेशियो वैल्यू दी गई हैं, तो उनका इस्तेमाल करें (#1371).
    • Galaxy Tab S7 FE पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया. इस समस्या की वजह से, 60fps की सुरक्षित H264 स्ट्रीम को काम न करने वाली के तौर पर मार्क किया जाता है (#1619).
    • ऐसे कोडेक के लिए समस्या हल करने का तरीका जोड़ें जो आखिरी सैंपल के बाद रुक जाते हैं और स्ट्रीम खत्म होने का सिग्नल नहीं देते.
  • टेक्स्ट:
    • कस्टम VoiceSpan जोड़ें और इसे WebVTT वॉइस स्पैन (#1632) के लिए पॉप्युलेट करें.
    • पक्का करें कि एचएलएस में WebVTT, बहुत बड़े सबटाइटल टाइमस्टैंप के साथ दिखाया गया हो. ये टाइमस्टैंप, माइक्रोसेकंड के तौर पर दिखाए जाने पर 64-बिट long को ओवरफ़्लो करते हैं और 90,000 एमपीईजी टाइमबेस से गुणा किए जाते हैं (#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).
  • असर:
    • DefaultVideoFrameProcessor के लिए, SurfaceTexture के स्केलिंग से जुड़ी समस्या को हल करने का तरीका जोड़ें. SurfaceTexture में एक छोटी स्केलिंग शामिल हो सकती है, जो काटे गए बफ़र के किनारे के आस-पास 1-टेक्सल बॉर्डर को काट देती है. अब इसे इस तरह से मैनेज किया जाता है कि आउटपुट, उम्मीद के मुताबिक हो.
    • DefaultVideoFrameProcessor.queueInputBitmap() की स्पीड बढ़ाएं. इस वजह से, Transformer की मदद से इमेज को वीडियो में तेज़ी से एक्सपोर्ट किया जा सकता है.
  • IMA एक्सटेंशन:
    • प्लेलिस्ट मिटाने पर, ImaServerSideAdInsertionMediaSource में ArrayIndexOutOfBoundsException दिखने की गड़बड़ी को ठीक किया गया है.
    • उस गड़बड़ी को ठीक किया गया है जिसमें सर्वर साइड से डाली गई डीआई स्ट्रीम में, प्रीरोल के बिना आखिरी मिडरोल के बाद वीडियो चलाने पर ArrayIndexOutOfBoundsException दिख सकता है (#1741).
  • सेशन:
    • MediaButtonReceiver.shouldStartForegroundService(Intent) जोड़ें, ताकि ऐप्लिकेशन इस तरीके को बदलकर, वीडियो चलाने के लिए आने वाले 'चलाएं' निर्देश को रोक सकें. डिफ़ॉल्ट रूप से, यह सेवा हमेशा चालू रहती है और ForegroundServiceDidNotStartInTimeException (#1528) की मदद से, सिस्टम को क्रैश किए बिना वीडियो चलाने की सुविधा को बंद नहीं किया जा सकता.
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से, किसी लेगसी सेवा से कनेक्ट होने पर, MediaBrowser से भेजे गए कस्टम निर्देश, MediaBrowserServiceCompat के बजाय MediaSessionCompat.Callback पर भेजे जाते थे. इस वजह से, MediaBrowser को लेगसी सेवा (#1474) से भेजी गई असल रिटर्न वैल्यू नहीं मिल सकी.
    • मीडिया बटन के इंटेंट के लिए ब्रॉडकास्ट रिसीवर सेट करते समय, कुछ मैन्युफ़ैक्चरर के डिवाइसों से मिलने वाले IllegalArgumentException को हैंडल करें (#1730).
    • मीडिया आइटम के लिए कमांड बटन जोड़ें. इससे, Custom browse actions के तौर पर जानी जाने वाली लाइब्रेरी के साथ, Media3 API जोड़ दिया जाता है.MediaBrowserCompat ध्यान दें कि Media3 कमांड बटन की मदद से, मीडिया आइटम के लिए MediaBrowser और MediaController, दोनों के लिए बटन उपलब्ध हैं. AAOS की कस्टम ब्राउज़ ऐक्शन देखें.
    • उस गड़बड़ी को ठीक किया गया है जिसमें Media3 कंट्रोलर, play() का अनुरोध करने के बाद, सेशन ऐप्लिकेशन को फ़ोरग्राउंड सेवा शुरू करने की अनुमति नहीं दे पाता था.
    • CommandButton.Builder.setIconUri को सिर्फ़ कॉन्टेंट यूआरआई स्वीकार करने की पाबंदी लगाएं.
    • किसी लेगसी MediaBrowserCompat से कनेक्ट करते समय, Media3 ब्राउज़र के कनेक्शन के संकेत, शुरुआती MediaBrowserCompat को पास करें. सेवा को onGetRoot() पर किए गए पहले कॉल के साथ, रूट हिंट के तौर पर पास किए गए कनेक्शन हिंट मिल सकते हैं.
    • एक गड़बड़ी को ठीक किया गया है. इसमें, किसी लेगसी ब्राउज़र सेवा से कनेक्ट किए गए MediaBrowser को, ब्राउज़र के parentid की सदस्यता लेने के बाद, सेवा से भेजी गई गड़बड़ी का मैसेज नहीं मिलता था.
    • इंटरऑपरेबिलिटी को बेहतर बनाएं, ताकि किसी माता-पिता की सदस्यता लेने पर, लेगसी MediaBrowserService से कनेक्ट किया गया Media3 ब्राउज़र, parentId के बच्चों से दो बार अनुरोध न करे.
  • यूज़र इंटरफ़ेस:
    • एक्सएमएल पर आधारित शेयर किए गए ट्रांज़िशन से जुड़ी समस्याओं की वजह से, PlayerView-in-Compose-AndroidView में जाकर, वीडियो को स्ट्रेच/काटा गया वर्शन बनाएं. AndroidView में PlayerView का इस्तेमाल करने वाले ऐप्लिकेशन को ऑप्ट-इन करने के लिए, PlayerView.setEnableComposeSurfaceSyncWorkaround को कॉल करना होगा (#1237, #1594).
    • PlayerView में setFullscreenButtonState जोड़ें, ताकि फ़ुलस्क्रीन बटन के आइकॉन को मांग पर अपडेट किया जा सके. इसका मतलब है कि क्लिक इंटरैक्शन के बजाय, आइकॉन को किसी और तरीके से अपडेट किया जा सके (#1590, #184).
    • टेक्स्ट चुनने के लिए, "कोई नहीं" विकल्प काम न करने की गड़बड़ी को ठीक करना. ऐसा तब होता है, जब ऐप्लिकेशन में टेक्स्ट ट्रैक चुनने की प्राथमिकताएं तय की गई हों.
  • DASH एक्सटेंशन:
    • किसी सेगमेंट के बीच में शुरू होने वाली अवधियों के लिए सहायता जोड़ें (#1440).
  • स्मूद स्ट्रीमिंग एक्सटेंशन:
    • टेक्स्ट ट्रैक के साथ SmoothStreaming वाली स्ट्रीम चलाते समय मिलने वाली Bad magic number for Bundle गड़बड़ी को ठीक करना (#1779).
  • आरटीएसपी एक्सटेंशन:
    • कोड में बदले गए @ वर्ण वाले यूआरएल से उपयोगकर्ता की जानकारी हटाने की समस्या को ठीक करें (#1138).
    • हेडर एक्सटेंशन वाले आरटीपी पैकेट को पार्स करते समय क्रैश होने की समस्या ठीक की गई (#1225).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
    • IAMF डिकोडर मॉड्यूल जोड़ें. यह IAMF ट्रैक वाली एमपी4 फ़ाइलों को चलाने की सुविधा देता है. इसके लिए, ऑडियो सिंथेसाइज़ करने के लिए libiamf नेटिव लाइब्रेरी का इस्तेमाल किया जाता है.
      • प्लेबैक की सुविधा, स्टीरियो लेआउट के साथ-साथ स्पेशलाइज़ेशन के साथ 5.1 में चालू होती है. साथ ही, हेड ट्रैकिंग की सुविधा भी चालू की जा सकती है. हालांकि, फ़िलहाल, दोनों कानों से सुनने की सुविधा उपलब्ध नहीं है.
    • Android 15 पर, डिकोडर एक्सटेंशन के लिए 16 केबी वाले पेज का इस्तेमाल करने की सुविधा जोड़ें (#1685).
  • Cast एक्सटेंशन:
    • 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: Info फ़्रेम में लंबाई फ़ील्ड के आधार पर, आखिर में मौजूद गैर-MP3 डेटा को सही तरीके से अनदेखा करके, Searched too many bytes गड़बड़ी को ठीक करें (#1480).
  • टेक्स्ट:
    • TTML: प्रतिशत tts:fontSize वैल्यू को मैनेज करने की सुविधा को ठीक करें, ताकि यह पक्का किया जा सके कि वे प्रतिशत tts:fontSize वैल्यू वाले पैरंट नोड से सही तरीके से इनहेरिट की गई हैं.
    • LegacySubtitleUtil में IndexOutOfBoundsException को ठीक करें, क्योंकि Subtitle में आउटपुट के शुरू होने का अनुरोध किया गया समय, आखिरी इवेंट के समय से ज़्यादा या उसके बराबर होने पर, इसे गलत तरीके से मैनेज किया गया था (#1516).
  • डीआरएम:
    • एपीआई लेवल 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).
    • MediaButtonReceiver में KEYCODE_HEADSETHOOK को 'चलाएं' निर्देश के तौर पर मैनेज करें. साथ ही, यह तय करें कि 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.Builder.setImageDurationMs() को जो अवधि दी गई है उसे MediaItem के लिए अनदेखा किया जाए, क्योंकि यह कोई इमेज नहीं है (जैसा कि दस्तावेज़ में बताया गया है).
    • Format इंस्टेंस के बारे में, ऐप्लिकेशन की दी गई कस्टम जानकारी को सेव करने के लिए Format.customData जोड़ें.
  • ExoPlayer:
    • BasePreloadManager जोड़ें, जो rankingData की तय की गई प्राथमिकताओं के आधार पर, एक से ज़्यादा सोर्स के लिए प्रीलोडिंग को मैनेज करता है. इस क्लास को बड़ा करके, इसे पसंद के मुताबिक बनाया जा सकता है. DefaultPreloadManager जोड़ें. यह सोर्स के मीडिया सैंपल को मेमोरी में पहले से लोड करने के लिए, PreloadMediaSource का इस्तेमाल करता है. साथ ही, यह एक पूर्णांक rankingData का इस्तेमाल करता है, जो यूज़र इंटरफ़ेस पर किसी आइटम के इंडेक्स को दिखाता है.
    • एक से ज़्यादा खिलाड़ियों के साथ LoadControl का इस्तेमाल करने के लिए, LoadControl के ज़्यादातर तरीकों में PlayerId जोड़ें.
    • Buffer.isDecodeOnly() और C.BUFFER_FLAG_DECODE_ONLY हटाएं. इस फ़्लैग को सेट करने की ज़रूरत नहीं है, क्योंकि रेंडरर और डिकोडर, टाइमस्टैंप के आधार पर बफ़र को स्किप करने का फ़ैसला करेंगे. कस्टम Renderer लागू करने के लिए, यह देखना ज़रूरी है कि बफ़र का समय कम से कम BaseRenderer.getLastResetPositionUs() हो. इससे यह तय किया जा सकेगा कि सैंपल दिखाया जाए या नहीं. ज़रूरत पड़ने पर, कस्टम SimpleDecoder लागू करने की सुविधा, isAtLeastOutputStartTimeUs() की जांच कर सकती है या दूसरे बफ़र को स्किप करने के लिए, उन पर DecoderOutputBuffer.shouldBeSkipped का निशान लगा सकती है.
    • TargetPreloadStatusControl.getTargetPreloadStatus(T) से कोई वैल्यू न मिलने पर, उसे शून्य के तौर पर दिखाएं. इससे यह पता चलता है कि rankingData के साथ MediaSource को प्री-लोड नहीं किया जाना है.
    • BasePreloadManager में remove(MediaSource) जोड़ें.
    • प्रीलोड मैनेजर इंस्टेंस को बनाए रखते हुए, होल्ड किए गए सभी सोर्स को रिलीज़ करने के लिए, reset() को BasePreloadManager में जोड़ें.
    • PriorityTaskManager में इस्तेमाल की गई प्राथमिकता वैल्यू और एपीआई 35 से MediaCodec की अहमियत तय करने के लिए, ExoPlayer.setPriority() (और Builder.setPriority()) जोड़ें.
    • आखिरी बार रीबफ़र होने का समय अपडेट करने से जुड़ी समस्या ठीक करें. इसकी वजह से, CMCD में bs (बफ़र स्टैर्वेशन) की गलत कुंजी दिख रही थी (#1124).
    • सोर्स के पूरी तरह लोड होने का पता चलने पर, PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) जोड़ें. इससे, DefaultPreloadManager और कस्टम PreloadMediaSource.PreloadControl लागू करने की सुविधा, अगले सोर्स को पहले से लोड कर सकती है या अन्य कार्रवाइयां कर सकती है.
    • आइटम के आखिर में, चुपचाप स्किप करने पर, वीडियो चलाने में गड़बड़ी होने की समस्या को ठीक किया गया है.
    • वीडियो को पहले से लोड करने की अवधि को खारिज करने के लिए, PreloadMediaSource में clear जोड़ें.
    • गड़बड़ी का नया कोड PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED जोड़ें. इसका इस्तेमाल तब किया जाता है, जब ज़्यादा प्राथमिकता वाले टास्क के लिए कोडेक संसाधनों को फिर से दावा किया जाता है.
    • कॉन्टेंट का शुरुआती मीडिया तैयार होने से पहले, AdsMediaSource को प्रीरोल विज्ञापन लोड करने की अनुमति दें (#1358).
    • एक से ज़्यादा अवधि वाली DASH लाइव स्ट्रीम को फिर से तैयार करते समय, प्लेबैक STATE_ENDED पर जाने की गड़बड़ी को ठीक किया गया. ऐसा तब होता है, जब मूल अवधि को मेनिफ़ेस्ट से पहले ही हटा दिया गया हो.
    • PreloadMediaSource.PreloadControl में, onTimelineRefreshed() का नाम बदलकर onSourcePrepared() और onPrepared() का नाम बदलकर onTracksSelected() करें. इसके हिसाब से, DefaultPreloadManager.Stage में IntDefs का नाम भी बदलें.
    • डाइनैमिक शेड्यूलिंग के लिए एक्सपेरिमेंटल सपोर्ट जोड़ा गया है, ताकि सीपीयू के वेक-साइकल के साथ काम को बेहतर तरीके से अलाइन किया जा सके. साथ ही, रेंडरर के काम शुरू होने में लगने वाले समय को कम किया जा सके. ExoPlayer इंस्टेंस सेट अप करते समय, experimentalSetDynamicSchedulingEnabled() का इस्तेमाल करके इसे चालू किया जा सकता है.
    • Renderer.getDurationToProgressUs() जोड़ें. Renderer, इस तरीके को लागू करके ExoPlayer को वह अवधि दिखा सकता है जो रेंडरर के आगे बढ़ने के लिए, वीडियो चलाने की अवधि को आगे बढ़ाना ज़रूरी है. अगर ExoPlayer को experimentalSetDynamicSchedulingEnabled() के साथ सेट किया गया है, तो ExoPlayer अपने काम के टास्क को शेड्यूल करने के लिए, समय का हिसाब लगाते समय इस तरीके को कॉल करेगा.
    • MediaCodecRenderer के इस्तेमाल के लिए इनपुट और आउटपुट बफ़र उपलब्ध होने पर सूचना देने के लिए, MediaCodecAdapter#OnBufferAvailableListener जोड़ें. MediaCodecRenderer, ये कॉलबैक मिलने पर ExoPlayer को सिग्नल भेजेगा. अगर ExoPlayer को experimentalSetDynamicSchedulingEnabled() के साथ सेट किया गया है, तो ExoPlayer अपना वर्क लूप शेड्यूल करेगा, क्योंकि रेंडरर आगे बढ़ सकते हैं.
    • अलग-अलग पैरामीटर के बजाय, LoadControl के तरीकों के लिए डेटा क्लास का इस्तेमाल करें.
    • ExoPlayer.isReleased() जोड़कर देखें कि Exoplayer.release() को कॉल किया गया है या नहीं.
    • seekToPrevious() को पिछले आइटम (#1425) पर ले जाने के लिए, सबसे ज़्यादा वह पोज़िशन कॉन्फ़िगर करने के लिए ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() जोड़ें.
    • ऑडियो फ़ोकस से जुड़ी कुछ समस्याओं को ठीक किया गया है. जैसे, प्लेयर को रोकने पर, फ़ोकस पूरी तरह से हटने या कुछ समय के लिए हटने की जानकारी न मिलना (#1436).
    • एक्सट्रैक्टर की वजह से होने वाली संभावित IndexOutOfBoundsException को ठीक करें. ऐसा तब होता है, जब एक्सट्रैक्टर, तैयारी के शुरुआती चरण के बाद अतिरिक्त ट्रैक की जानकारी देते हैं (#1476).
    • ExoPlayer.setVideoEffect() में मौजूद Effects को, रेंडरर ऑफ़सेट हटाए गए टाइमस्टैंप मिलेंगे (#1098).
    • प्लेयर की गड़बड़ी को ठीक करने के दौरान, संभावित IllegalArgumentException को ठीक करें. यह गड़बड़ी, प्लेलिस्ट के किसी दूसरे आइटम को पढ़ते समय हुई थी (#1483).
  • ट्रांसफ़ॉर्मर:
    • ExportResult में audioConversionProcess और videoConversionProcess जोड़ें. इससे पता चलता है कि आउटपुट फ़ाइल में मौजूद ट्रैक को कैसे बनाया गया.
    • ट्रिम ऑप्टिमाइज़ेशन के लिए, H.264 लेवल की जांच को कम करें.
    • एसडीआर और एचडीआर इनपुट मीडिया के बीच क्रम से स्विच करने की सुविधा जोड़ी गई.
    • कंपोजिशन-लेवल पर ऑडियो इफ़ेक्ट जोड़ने की सुविधा जोड़ी गई है.
    • Ultra एचडीआर इमेज को एचडीआर वीडियो में ट्रांसकोड करने की सुविधा जोड़ी गई.
    • DefaultAudioMixer को रीसेट करने और फिर से इस्तेमाल करने के बाद, सही संख्या में बाइट न दिखाने की समस्या को ठीक किया गया.
    • डिकोडर में मौजूद उस गड़बड़ी को ठीक करना जिसमें PCM इनपुट को हैंडल करते समय, ऑडियो चैनलों की संख्या को स्टीरियो पर सीमित किया गया था.
    • 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) और एच.262 एचएलएस स्ट्रीम (#1126) में आ रही समस्याओं को ठीक करने के लिए, सुधार किए गए हैं.
    • MP3: Info फ़्रेम के डेटा साइज़ को, स्ट्रीम (जैसे, फ़ाइल साइज़ या एचटीटीपी Content-Length हेडर) के बताए गए साइज़ के मुकाबले प्राथमिकता दें. इससे, लगातार बिटरेट पर वीडियो चलाने के लिए, ट्रेलर के ऐसे डेटा को बाहर रखा जा सकता है जिसे चलाया नहीं जा सकता.जैसे, एल्बम आर्टवर्क. इससे, वीडियो चलाने के लिए, बिटरेट की सटीक गिनती की जा सकती है (#1376).
    • MP3: Info फ़्रेम (अगर मौजूद हो) में फ़्रेम की संख्या और अन्य डेटा का इस्तेमाल करके, बिटरेट में लगातार बदलाव किए बिना, किसी खास बिटरेट पर जाने के लिए औसत बिटरेट का हिसाब लगाएं.इसके बजाय, Info फ़्रेम के बाद के फ़्रेम के बिटरेट से अनुमान लगाएं, जो कृत्रिम रूप से कम हो सकता है. उदाहरण के लिए, PCUT फ़्रेम (#1376).
    • AVI कंटेनर में PCM ऑडियो फ़ॉर्मैट को निकालने से जुड़ी समस्या को ठीक करना.
  • ऑडियो:
    • पासथ्रू वीडियो चलाने के लिए, DTS:X प्रोफ़ाइल 2 के एन्कोडिंग एट्रिब्यूट ठीक करें (#1299).
    • ऑफ़लोड किए गए वीडियो को चलाने के लिए, AudioTrack.stop() को कॉल करने से पहले DefaultAudioSink में स्ट्रीम पूरी होने के लिए ट्रैकिंग फ़ील्ड को रीसेट करें, ताकि AudioTrack.StreamEventCallback#onPresentationEnded सही तरीके से यह पता लगा सके कि बाकी बचे डेटा को कब चलाया गया है.
    • SilenceSkippingAudioProcessor में मौजूद गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से, अलग-अलग ऑडियो फ़ॉर्मैट (उदाहरण के लिए, स्टीरियो से मोनो) के बीच ट्रांज़िशन करने पर, प्रोसेसर को एक अपवाद (#1352) दिख सकता है.
    • MediaCodecAudioRenderer.getDurationToProgressUs() लागू करें, ताकि MediaCodecAudioRenderer के काम करने के दौरान, ExoPlayer अपने मुख्य वर्क लूप को डाइनैमिक तौर पर शेड्यूल कर सके.
  • वीडियो:
    • वीडियो चलाने के दौरान, एक डिवाइस से दूसरे डिवाइस पर स्विच करने पर, 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 क्रम के टैग की मैपिंग ठीक करें. पहले, 'एल्बम के क्रम' (soal), 'कलाकार के क्रम' (soar), और 'एल्बम के क्रम में कलाकार' (soaa) MP4 टैग को TSO2, TSOA, और TSOP ID3 टैग पर गलत तरीके से मैप किया गया था (#1302).
    • जब वैल्यू एक बाइट से ज़्यादा लंबी हो, तो MP4 (/iTunes) के अंकों वाले gnre (शैली) और tmpo (गति) टैग को पढ़ने की सुविधा ठीक करें.
    • ID3 TCON फ़्रेम को MediaMetadata.genre पर भेजें (#1305).
  • इमेज:
    • स्क्वेयर साइज़ के अलावा, DASH थंबनेल ग्रिड के लिए भी सहायता जोड़ी गई है (#1300).
    • एपीआई 34 और उसके बाद के वर्शन के लिए, AVIF फ़ॉर्मैट को इस्तेमाल करने की सुविधा जोड़ी गई है.
    • पहले से सेट किए गए ImageOutput को मिटाने के लिए, ExoPlayer.setImageOutput() के लिए पैरामीटर के तौर पर null को अनुमति दें.
  • DataSource:
    • android.resource://package/id रॉ रिसॉर्स यूआरआई के लिए सहायता लागू करें जहां package, मौजूदा ऐप्लिकेशन के पैकेज से अलग है. पहले इस बारे में जानकारी नहीं दी गई थी कि यह काम करता है. हालांकि, नाम के बजाय किसी दूसरे पैकेज में संसाधनों को ऐक्सेस करने का यह एक बेहतर तरीका है.
    • DataSpec कन्स्ट्रक्टर में, url नॉन-नल है या नहीं, इसकी जांच करें. इस पैरामीटर के लिए, पहले से ही एनोटेट किया गया था कि यह शून्य नहीं है.
    • ByteArrayDataSource को open() के दौरान, यूआरआई को बाइट कलेक्शन में बदलने की अनुमति दें. ऐसा करने के लिए, यूआरआई को बनाने के दौरान उसे हार्ड कोड में बदलने की ज़रूरत नहीं है (#1405).
  • डीआरएम:
    • DefaultDrmSessionManagerProvider पर LoadErrorHandlingPolicy सेट करने की अनुमति दें (#1271).
  • असर:
    • SpeedChangeEffect में एक ही EditedMediaItem या Composition में, रफ़्तार में कई बदलाव किए जा सकते हैं.
    • अल्ट्रा एचडीआर बिटमैप इनपुट से HLG और PQ आउटपुट के लिए सहायता.
    • EGL_GL_COLORSPACE_BT2020_HLG_EXT के लिए सहायता जोड़ी गई है. इससे ExoPlayer.setVideoEffect और Transformer के Debug SurfaceView में, एचएलजी स्क्रीन आउटपुट बेहतर होता है.
    • ओवरले मैट्रिक को लागू करने का तरीका अपडेट करें, ताकि वह दस्तावेज़ के मुताबिक हो. इसके लिए, setOverlayFrameAnchor() में लागू की गई x और y वैल्यू को फ़्लिप करें. अगर OverlaySettings.Builder.setOverlayFrameAnchor() का इस्तेमाल किया जा रहा है, तो -1 से गुणा करके, उनके x और y वैल्यू को पलटें.
    • TimestampWrapper के साथ इस्तेमाल करने पर क्रैश होने वाली गड़बड़ी को ठीक किया गया है ExoPlayer#setVideoEffects (#821).
    • डिफ़ॉल्ट एसडीआर कलर वर्किंग स्पेस को लीनियर कलर से बदलकर, इलेक्ट्रिकल BT 709 एसडीआर वीडियो पर सेट करें. ओरिजनल कलरस्पेस को बनाए रखने के लिए, तीसरा विकल्प भी दें.
    • EditedMediaItemSequences के लिए, तय नहीं किए गए z-order की जानकारी देने की अनुमति दें (#1055).
    • एचडीआर कॉन्टेंट के अलग-अलग हिस्सों में एक जैसी चमक बनाए रखना (एचएलजी रेंज का इस्तेमाल करता है).
    • एचडीआर कॉन्टेंट पर, Ultra HDR (बिटमैप) ओवरले की सुविधा जोड़ी गई है.
    • एपीआई 26 से पहले, SeparableConvolution इफ़ेक्ट इस्तेमाल करने की अनुमति दें.
    • इस्तेमाल नहीं किए गए OverlaySettings.useHdr को हटाएं, क्योंकि ओवरले और फ़्रेम की डाइनैमिक रेंज मैच होनी चाहिए.
    • TextOverlay के लिए एचडीआर की सुविधा जोड़ें. टेक्स्ट ओवरले की चमक को OverlaySettings.Builder.setHdrLuminanceMultiplier() की मदद से अडजस्ट किया जा सकता है.
  • IMA एक्सटेंशन:
    • ऐप्लिकेशन के लिए डीएआई विज्ञापन स्ट्रीम को स्थिर रूप से चलाने के लिए ज़रूरी एपीआई को प्रमोट करें.
    • ImaServerSideAdInsertionMediaSource.AdLoader में replaceAdTagParameters(Map <String, String>) जोड़ें, ताकि रनटाइम के दौरान विज्ञापन टैग पैरामीटर बदले जा सकें.
    • विज्ञापन चलाने के दौरान प्लेयर में कोई गड़बड़ी होने पर, VideoAdPlayer.VideoAdPlayerCallback.onError() को कॉल न करने की गड़बड़ी को ठीक किया गया (#1334).
    • data:// विज्ञापन टैग यूआरआई (#700) का इस्तेमाल करते समय, NullPointerException को ठीक करने के लिए IMA SDK टूल का वर्शन 3.33.0 पर अपडेट करें.
  • सेशन:
    • CommandButton.enabled की डिफ़ॉल्ट वैल्यू को true में बदलें. साथ ही, पक्का करें कि कंट्रोलर के लिए वैल्यू 'गलत है' बनी रहे, भले ही उससे जुड़ा कमांड उपलब्ध हो.
    • CommandButton के लिए आइकॉन कॉन्स्टेंट जोड़ें. इन्हें कस्टम आइकॉन संसाधनों के बजाय इस्तेमाल किया जाना चाहिए.
    • MediaSessionService.isPlaybackOngoing() जोड़ें, ताकि ऐप्लिकेशन यह क्वेरी कर सकें कि onTaskRemoved() में सेवा को बंद करना ज़रूरी है या नहीं (#1219).
    • MediaSessionService.pauseAllPlayersAndStopSelf() जोड़ें, जिससे सभी सेशन के वीडियो चलाने की सुविधा को आसानी से रोका जा सकता है. साथ ही, MediaSessionService के लाइफ़साइकल को खत्म करने के लिए, stopSelf() को कॉल किया जा सकता है.
    • MediaSessionService.onTaskRemoved(Intent) को बदलकर, डिफ़ॉल्ट रूप से सुरक्षित तरीके से लागू करें. इससे, वीडियो चलाने के दौरान सेवा फ़ोरग्राउंड में चलती रहेगी. अगर वीडियो नहीं चल रहा है, तो सेवा बंद हो जाएगी.
    • प्लैटफ़ॉर्म सेशन के मेटाडेटा में स्ट्रीम की अवधि सेट न करके, लाइव स्ट्रीम के लिए मीडिया सूचना में स्केलबैर छिपाएं (#1256).
    • MediaMetadata से MediaDescriptionCompat में कन्वर्ज़न अलाइन करें, ताकि मीडिया1 में मेटाडेटा प्रॉपर्टी चुनते समय, वही पसंदीदा क्रम और लॉजिक इस्तेमाल किया जा सके.
    • MediaSession.sendError() जोड़ें, जिससे Media3 कंट्रोलर को गड़बड़ियों की जानकारी भेजी जा सकती है. सूचना कंट्रोलर (MediaSession.getMediaNotificationControllerInfo() देखें) का इस्तेमाल करते समय, कस्टम गड़बड़ी का इस्तेमाल करके, प्लैटफ़ॉर्म सेशन के PlaybackState को गड़बड़ी की स्थिति में अपडेट किया जाता है. साथ ही, गड़बड़ी की जानकारी (#543) भी दी जाती है.
    • किसी खास कंट्रोलर से प्लेयर के इंटरैक्शन की सीरीज़ पूरी होने पर, सेशन की जानकारी देने के लिए MediaSession.Callback.onPlayerInteractionFinished() जोड़ें.
    • SessionError जोड़ें और गड़बड़ी कोड के बजाय, SessionResult और LibraryResult में इसका इस्तेमाल करें. इससे, गड़बड़ी के बारे में ज़्यादा जानकारी मिलती है. साथ ही, अगर हो सके, तो गड़बड़ी को ठीक करने का तरीका भी पता चलता है.
    • Media3 कंट्रोलर टेस्ट ऐप्लिकेशन का कोड पब्लिश करें. इसका इस्तेमाल, मीडिया सेशन पब्लिश करने वाले ऐप्लिकेशन के साथ इंटरैक्शन की जांच करने के लिए किया जा सकता है.
    • media3 के MediaSession[Builder].setSessionExtras() में पास किए गए एक्सट्रा को, media1 कंट्रोलर के PlaybackStateCompat.getExtras() में भेजें.
    • नुकसान पहुंचाने वाली और नुकसान न पहुंचाने वाली गड़बड़ियों को प्लैटफ़ॉर्म सेशन से मैप करें. PlaybackException को PlaybackStateCompat की गड़बड़ी की स्थिति से मैप किया गया है. मीडिया सूचना कंट्रोलर पर MediaSession.sendError(ControllerInfo, SessionError) के साथ भेजा गया SessionError, PlaybackStateCompat में गड़बड़ी के मैसेज के तौर पर मैप किया जाता है. इसका मतलब है कि गड़बड़ी का कोड और मैसेज सेट है, लेकिन प्लैटफ़ॉर्म सेशन की स्थिति STATE_ERROR से अलग रहती है.
    • सेशन की गतिविधि को हर कंट्रोलर के हिसाब से सेट करने की अनुमति दें, ताकि ग्लोबल सेशन की गतिविधि को बदला जा सके. कनेक्शन के समय, किसी कंट्रोलर के लिए सेशन गतिविधि तय की जा सकती है. इसके लिए, AcceptedResultBuilder.setSessionActivivty(PendingIntent) के साथ ConnectionResult बनाएं. कनेक्ट होने के बाद, सेशन की गतिविधि को MediaSession.setSessionActivity(ControllerInfo, PendingIntent) से अपडेट किया जा सकता है.
    • MediaLibrarySession.Callback पर कॉल करने से जुड़ी गड़बड़ी को बेहतर तरीके से दोहराना. गड़बड़ी की जानकारी को कॉन्फ़िगर करने के लिए, अब MediaLibrarySession.Builder.setLibraryErrorReplicationMode() का इस्तेमाल किया जा सकता है. इससे, गड़बड़ी का टाइप चुना जा सकता है या गड़बड़ी की जानकारी को कॉन्फ़िगर करने की सुविधा से ऑप्ट-आउट किया जा सकता है. यह सुविधा डिफ़ॉल्ट रूप से चालू होती है.
  • यूज़र इंटरफ़ेस:
    • ExoPlayer से कनेक्ट होने पर, PlayerView में इमेज डिसप्ले की सुविधा जोड़ें (#1144).
    • PlayerControlView में अलग-अलग आइकॉन को पसंद के मुताबिक बनाने के लिए, एक्सएमएल एट्रिब्यूट का इस्तेमाल करें. इससे, हर PlayerView इंस्टेंस के लिए अलग-अलग ड्रॉबल की अनुमति मिलती है. इसके बजाय, ग्लोबल बदलाव (#1200) का इस्तेमाल किया जा सकता है.
    • एपीआई 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 में, गलत ऑफ़सेट के साथ, ऐसे EMSG सैंपल को डिलीगेट किया गया था जिनकी प्रोसेस पूरी नहीं हुई थी. इसकी वजह से, IndexOutOfBoundsException या IllegalArgumentException (#1002) दिखता था.
    • LL-HLS स्ट्रीम के लिए, मुख्य प्लेलिस्ट के अलावा अन्य प्लेलिस्ट बार-बार रीलोड होने की गड़बड़ी को ठीक किया गया है (#1240).
    • उस गड़बड़ी को ठीक किया गया है जिसमें शुरुआती सेगमेंट के साथ एचएलएस के लिए सीएमसीडी चालू करने पर, Source Error और IllegalArgumentException दिखते थे.
    • लाइव स्ट्रीम के दौरान, मुख्य प्लेलिस्ट के अलावा अन्य प्लेलिस्ट रीफ़्रेश न होने की गड़बड़ी को ठीक किया गया (#1240).
    • एचएलएस लाइव स्ट्रीम के लिए सीएमसीडी चालू करने पर होने वाली गड़बड़ी को ठीक करनाArrayIndexOutOfBoundsException (#1395).
  • DASH एक्सटेंशन:
    • एक से ज़्यादा अवधियों वाली लाइव स्ट्रीम को फिर से तैयार करने पर, गड़बड़ी का मैसेज दिखने की समस्या को ठीक किया गया है IndexOutOfBoundsException (#1329).
    • dashif:Laurl लाइसेंस के यूआरएल के लिए सहायता जोड़ें (#1345).
  • Cast एक्सटेंशन:
    • उस गड़बड़ी को ठीक करें जिसकी वजह से Media3 मीडिया आइटम में, MediaQueueItem के एल्बम के टाइटल को कलाकार के टाइटल में बदल दिया गया था (#1255).
  • टेस्ट करने के लिए उपयोगी टूल:
    • FakeRenderer में onInit() और onRelease() लागू करें.
    • TestPlayerRunHelper.runUntil()/playUntil() के तरीकों को बदलकर, गड़बड़ियों के होने पर काम न करने वाले तरीकों में बदलें. जैसे, AnalyticsListener.onVideoCodecError() को रिपोर्ट की गई गड़बड़ियां. इस व्यवहार को बंद करने के लिए, नई TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() तरीकों की चेन का इस्तेमाल करें.
  • डेमो ऐप्लिकेशन:
    • शॉर्ट वीडियो वाले डेमो ऐप्लिकेशन में DefaultPreloadManager का इस्तेमाल करें.
    • कमांड लाइन से Intent आर्ग्युमेंट की मदद से, दोहराए जाने की सुविधा सेट करने की अनुमति दें (#1266).
    • डिवाइस पर उपलब्ध होने पर, HttpDataSource के तौर पर HttpEngineDataSource का इस्तेमाल करें.
  • इस्तेमाल नहीं किए जाने वाले सिंबल हटाएं:
    • 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).
    • DefaultVideoFrameProcessor.Factory.Builder.build() के लिए, ProGuard के -keepclasseswithmembers नियम में, रिटर्न टाइप जोड़ें (#1187).
  • ट्रांसफ़ॉर्मर:
    • MediaMuxer के एपीआई 30 से पहले, नेगेटिव प्रज़ेंटेशन टाइमस्टैंप के साथ काम न करने की वजह से, थ्रेशोल्ड सेट करने के दौरान मिलने वाले अपवाद को ठीक करने का तरीका जोड़ें.
  • ट्रैक चुनना:
    • DefaultTrackSelector: कम या सेट नहीं किए गए फ़्रेम रेट वाले वीडियो ट्रैक के बजाय, 'सामान्य' फ़्रेम रेट (>=10fps) वाले वीडियो ट्रैक का इस्तेमाल करें. इससे यह पक्का होता है कि प्लेयर, मोशन फ़ोटो से निकाले गए एमपी4 में 'असल' वीडियो ट्रैक चुनता है. इन फ़ोटो में दो एचईवीसी ट्रैक हो सकते हैं, जिनमें से एक का रिज़ॉल्यूशन ज़्यादा होता है, लेकिन फ़्रेम की संख्या बहुत कम होती है (#1051).
  • एक्सट्रैक्टर:
    • WAV फ़ाइलों से अलग-अलग साइज़ के चंक पढ़ते समय पैडिंग को स्किप न करने की समस्या को ठीक किया गया (#1117).
    • MP3: XING और VBRI जैसे मेटाडेटा फ़्रेम से Format.averageBitrate को पॉप्युलेट करें.
    • MPEG-TS: उस बदलाव को पहले जैसा करें जिसका मकसद, किसी स्ट्रीम की आखिरी ऐक्सेस यूनिट को सैंपल सूची में भेजकर, आखिरी फ़्रेम को रेंडर करना था (#7909). ऐसा इसलिए हुआ है, क्योंकि इस बदलाव की वजह से सिर्फ़ आई-फ़्रेम वाली एचएलएस स्ट्रीम (#1150) और एच.262 एचएलएस स्ट्रीम (#1126) में नई समस्याएं आ रही हैं.
  • ऑडियो:
    • अगर ऑडियो ट्रैक, ऑफ़लोड मोड में शुरू नहीं होता है, तो ऑफ़लोड करने की सुविधा बंद करके रेंडरर को वापस लाने की अनुमति दें.
  • वीडियो:
    • Galaxy Tab S7 FE, Google TV की सुविधा वाले Chromecast, और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया. इस समस्या की वजह से, 60fps H265 स्ट्रीम को 'काम नहीं करती' के तौर पर मार्क किया जाता है
    • टनल करने के दौरान, पहला फ़्रेम हमेशा रेंडर हो, यह पक्का करने के लिए गड़बड़ी को ठीक करने का तरीका जोड़ें. भले ही, एपीआई (#1169) के मुताबिक, डिवाइस ऐसा अपने-आप न करता हो. (#966).
    • एचडीआर कलर की जानकारी को मैनेज करने की वजह से, कोडेक के गलत तरीके से काम करने और एसडीआर वीडियो ट्रैक के लिए, अडैप्टिव फ़ॉर्मैट स्विच करने से रोकने से जुड़ी समस्या को ठीक किया गया (#1158).
  • टेक्स्ट:
    • WebVTT: एक-दूसरे के बाद दिखने वाले सीयू से, WebvttParser.parse के लिए अतिरिक्त CuesWithTiming इंस्टेंस बनने से रोकना (#1177).
  • डीआरएम:
    • NoSuchMethodError से जुड़ी समस्या को हल करना, जो Android 14 वाले कुछ डिवाइसों पर ResourceBusyException या NotProvisionedException के बजाय MediaDrm फ़्रेमवर्क से दिख सकती है (#1145).
  • असर:
    • कलर स्पेस को बदलकर, पीक्यू को एसडीआर टोन-मैपिंग में बेहतर बनाया गया.
  • सेशन:
    • उस समस्या को ठीक किया गया है जिसमें कंट्रोलर, मौजूदा आइटम को बदलने पर, मौजूदा पोज़िशन वापस आ जाती है (#951).
    • मीडिया कंट्रोलर और सेशन के बीच, सिर्फ़ नॉन-नल extras वाले MediaMetadata को ट्रांसमिट न होने की समस्या को ठीक करें (#1176).
  • यूज़र इंटरफ़ेस:
    • अगर Locale किसी डिसप्ले नेम की पहचान नहीं कर पाता है, तो ऑडियो ट्रैक की भाषा का नाम शामिल करने के लिए फ़ॉलबैक (#988).
  • DASH एक्सटेंशन:
    • मेनिफ़ेस्ट से सभी Label एलिमेंट को Format.labels में पॉप्युलेट करें (#1054).
  • आरटीएसपी एक्सटेंशन:
    • एसडीपी पार्सिंग में, सेशन की जानकारी वाली खाली वैल्यू (i-टैग) को स्किप करें (#1087).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
    • MIDI एक्सटेंशन को डिफ़ॉल्ट रूप से, लोकल डिपेंडेंसी के तौर पर बंद करें, क्योंकि इसे कॉन्फ़िगर करने के लिए, एक और मेवन रिपॉज़िटरी की ज़रूरत होती है. जिन उपयोगकर्ताओं को किसी स्थानीय डिपेंडेंसी से इस मॉड्यूल की ज़रूरत है वे इसे फिर से चालू कर सकते हैं.

वर्शन 1.3.0

6 मार्च, 2024

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

  • सामान्य लाइब्रेरी:
    • android.resource://package/[type/]name रॉ रिसोर्स यूआरआई के लिए सहायता लागू करें, जहां package मौजूदा ऐप्लिकेशन के पैकेज से अलग हो. इस सुविधा के काम करने के बारे में हमेशा जानकारी दी जाती रही है. हालांकि, इसे अब तक सही तरीके से लागू नहीं किया गया था.
    • ऐप्लिकेशन कोड से सेट किए गए या मीडिया से पढ़े गए 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 की मदद से, अडैप्टिव मीडिया सोर्स का इस्तेमाल करें.
    • HttpEngineDataSource को लागू करें, जो HttpDataSource है. इसके लिए, HttpEngine एपीआई का इस्तेमाल करें.
    • CompositeSequenceableLoader को सबक्लास में बदलने से रोकें. इस कॉम्पोनेंट को पहले बड़ा किया जा सकता था, लेकिन इसे लाइब्रेरी में कभी सबक्लास नहीं किया गया. डेकोरेटर पैटर्न का इस्तेमाल करके किसी इंस्टेंस को रैप करके और कस्टम CompositeSequenceableLoaderFactory लागू करके, पसंद के मुताबिक बदलाव किए जा सकते हैं.
    • एक ही समय दोहराने पर, इस आइटम का मेटाडेटा हटने की समस्या ठीक करें (#1007).
    • experimentalSetSubtitleParserFactory के तरीकों का नाम बदलकर BundledChunkExtractor.Factory और DefaultHlsExtractorFactory को setSubtitleParserFactory पर सेट करें. साथ ही, null को पास करने की अनुमति न दें. पार्स करने के तरीके को कंट्रोल करने के लिए, experimentalParseSubtitlesDuringExtraction(boolean) के नए तरीकों का इस्तेमाल करें.
    • डेटा निकालने के दौरान इस्तेमाल किए गए SubtitleParser.Factory को पसंद के मुताबिक बनाने की सुविधा जोड़ी गई है. ऐसा करने के लिए, MediaSource.Factory.setSubtitleParserFactory() का इस्तेमाल करें.
    • MergingMediaSource से जनरेट किए गए सभी Format.id फ़ील्ड में सोर्स प्रीफ़िक्स जोड़ें. इससे यह पता चलता है कि Format (#883) किस सोर्स से मिला है.
    • कस्टम कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) के मुख्य नामों की पुष्टि करने के लिए इस्तेमाल किए गए रेगुलर एक्सप्रेशन को ठीक करें. इसके लिए, इसमें बदलाव करके सिर्फ़ हाइफ़न की जांच करें (#1028).
    • सीएमसीडी क्वेरी पैरामीटर को दो बार एन्कोड करना बंद करें (#1075).
  • ट्रांसफ़ॉर्मर:
    • H.265/एचईवीसी एसईएफ़ स्लो मोशन वीडियो को फ़्लैट करने की सुविधा जोड़ी गई.
    • ट्रांसम्यूट करने की स्पीड बढ़ाएं. खास तौर पर, 'वीडियो हटाएं' बदलावों के लिए.
    • एपीआई जोड़ें, ताकि यह पक्का किया जा सके कि आउटपुट फ़ाइल किसी वीडियो फ़्रेम पर शुरू हो. इससे, ट्रिम करने की प्रोसेस का आउटपुट, उन प्लेयर के साथ बेहतर तरीके से काम कर सकता है जो वीडियो के प्रज़ेंटेशन टाइमस्टैंप तक पहला वीडियो फ़्रेम नहीं दिखाते (#829).
    • एक ऐसेट के MP4 ट्रिम ऑपरेशन को ऑप्टिमाइज़ करने के लिए सहायता जोड़ी गई.
    • यह पक्का करने के लिए सहायता जोड़ें कि आउटपुट फ़ाइल में, वीडियो फ़्रेम का पहला टाइमस्टैंप हो. iOS डिवाइसों पर काम करने वाले प्लेयर (#829) पर, ब्लैक फ़्रेम से शुरू होने वाली आउटपुट फ़ाइलों की समस्या को ठीक किया गया है.
  • ट्रैक चुनना:
    • इमेज ट्रैक चुनने की सुविधा चालू करने के लिए, DefaultTrackSelector.selectImageTrack जोड़ें.
    • अगर इमेज ट्रैक और वीडियो ट्रैक, दोनों उपलब्ध हैं, तो यह तय करने के लिए कि इमेज ट्रैक को चुनना है या नहीं, TrackSelectionParameters.isPrioritizeImageOverVideoEnabled जोड़ें. डिफ़ॉल्ट वैल्यू false है. इसका मतलब है कि वीडियो ट्रैक को चुनने को प्राथमिकता दी जाती है.
  • एक्सट्रैक्टर:
    • ColorInfo.colorSpace, ColorInfo.colorTransfer, और ColorInfo.colorRange वैल्यू हासिल करने के लिए, MP4 एक्सट्रैक्टर में अतिरिक्त AV1C पार्सिंग जोड़ें (#692).
    • MP3: Info हेडर वाली फ़ाइलों के लिए, कॉन्स्टेंट बिटरेट (सीबीआर) सर्च का इस्तेमाल करें. यह Xing हेडर के बराबर का सीबीआर होता है. पहले हम Info हेडर से, 'वीडियो पर जाने के लिए इस्तेमाल होने वाली टेबल' का इस्तेमाल करते थे. हालांकि, इससे वीडियो पर जाने के लिए ज़्यादा सटीक समय नहीं मिलता. अगर हम इस टेबल को अनदेखा करके, फ़ाइल को सीबीआर मानते हैं, तो वीडियो पर जाने के लिए ज़्यादा सटीक समय मिलता है.
    • MPEG2-TS: DTS, DTS-LBR, और DTS:X Profile2 के साथ काम करने की सुविधा जोड़ी गई (#275).
    • टीएस डिस्क्रिप्टर से ऑडियो टाइप निकालें और उन्हें भूमिका फ़्लैग पर मैप करें. इससे उपयोगकर्ता, ऑडियो ट्रैक को बेहतर तरीके से चुन पाएंगे(#973).
  • ऑडियो:
    • आवाज़ को धीरे-धीरे बढ़ाकर, चुप रहकर सुनने की सुविधा के एल्गोरिदम को बेहतर बनाया गया है. इससे, चुप रहकर सुनने की अवधि कम हो गई है और चुप रहकर सुनने की अवधि ज़्यादा नैचुरल हो गई है (#7423).
    • स्किप की गई अवधि की जानकारी ज़्यादा सटीक तरीके से दें (#1035).
  • वीडियो:
    • MediaCodecVideoRenderer कंस्ट्रक्टर को बदलें, जो VideoFrameProcessor.Factory आर्ग्युमेंट लेता है और उसे ऐसे कंस्ट्रक्टर से बदलें जो VideoSinkProvider आर्ग्युमेंट लेता है. जिन ऐप्लिकेशन को कस्टम VideoFrameProcessor.Factory इंजेक्ट करना है वे CompositingVideoSinkProvider का उदाहरण दे सकते हैं. यह उदाहरण, कस्टम VideoFrameProcessor.Factory का इस्तेमाल करता है और वीडियो सिंक प्रोवाइडर को MediaCodecVideoRenderer को पास करता है.
  • टेक्स्ट:
    • DefaultExtractorsFactory.setTextTrackTranscodingEnabled का इस्तेमाल करते समय Tried to marshall a Parcel that contained Binder objects गड़बड़ी को ठीक करने के लिए, बिटमैप की सीरीज़ बनाने की प्रोसेस को ठीक करें (#836).
    • CEA-708: rowLock वैल्यू को अनदेखा करें. CEA-708-E S-2023 स्पेसिफ़िकेशन के मुताबिक, स्ट्रीम में मौजूद वैल्यू के बावजूद, rowLock और columnLock, दोनों को सही माना जाना चाहिए. columnLock के लिए सहायता लागू नहीं की गई है, इसलिए इसे हमेशा गलत माना जाता है.
  • इमेज:
    • DASH थंबनेल के लिए सहायता जोड़ी गई. ग्रिड इमेज को काटा जाता है और अलग-अलग ImageOutput के प्रज़ेंटेशन के समय के करीब थंबनेल दिए जाते हैं.
  • डीआरएम:
    • डिफ़ॉल्ट रूप से, डीआरएम कॉन्टेंट में 'साफ़ लीड' वाले एन्क्रिप्ट (सुरक्षित) नहीं किए गए सैंपल तुरंत चलाएं. भले ही, बाद में एन्क्रिप्ट किए गए सैंपल के लिए कुंजियां अब तक तैयार न हों. अगर वीडियो चलाने के दौरान, एन्क्रिप्ट किए गए सैंपल तक पहुंचने पर भी कुंजियां तैयार नहीं होती हैं, तो वीडियो बीच में रुक सकता है. हालांकि, पहले ऐसा होने पर वीडियो चलना शुरू ही नहीं होता था. इस व्यवहार को 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).
    • 47721 सेकंड से ज़्यादा लंबी टीएस स्ट्रीम की अवधि का अनुमान ठीक करें (#855).
  • ऑडियो:
    • एक से ज़्यादा बार कॉल करने पर, SilenceSkippingAudioProcessor के लिए ईओएस को मैनेज करने की सुविधा ठीक करें (#712).
  • वीडियो:
    • Galaxy Tab S7 FE, Chromecast with Google TV, और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया. इस समस्या की वजह से, 60fps AVC स्ट्रीम को 'काम नहीं करती' के तौर पर मार्क किया जाता है (#693).
  • मेटाडेटा:
    • उस गड़बड़ी को ठीक किया गया है जिसमें MediaMetadata सिर्फ़ Vorbis टिप्पणियों से भरा गया था, जिनमें अपरकेस बटन का इस्तेमाल किया गया था (#876).
    • बहुत बड़े आईडी3 फ़्रेम को पार्स करते समय OutOfMemoryError को पकड़ें. इसका मतलब है कि टैग की जानकारी के बिना भी वीडियो चलाया जा सकता है.
  • डीआरएम:
    • एपीआई लेवल 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 एक्सटेंशन:
    • DASH मेनिफ़ेस्ट में Dolby के लिए, "f800" को चैनल की संख्या के तौर पर पांच के तौर पर पार्स करें (#688).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
    • MIDI: आगे की ओर स्किप करने पर, प्रोग्राम में बदलाव करने वाले इवेंट को स्किप करने की समस्या को ठीक किया गया है (#704).
    • FFmpeg 6.0 पर माइग्रेट करें और काम करने वाले एनडीके को r26b पर अपडेट करें (#707, #867).
  • Cast एक्सटेंशन:
    • कास्ट डिवाइस पर मीडिया लोड न होने पर, ऐप्लिकेशन क्रैश न हो, इसके लिए Timeline बनाने की प्रोसेस को बेहतर बनाएं (#708).

वर्शन 1.2.0

15 नवंबर, 2023

  • सामान्य लाइब्रेरी:
    • Log.Logger इंटरफ़ेस में, तरीकों में @Nullable Throwable पैरामीटर जोड़ें. इन तरीकों के message पैरामीटर में अब Log.{d,i,w,e}() तरीकों में पास किए गए Throwable के बारे में कोई जानकारी नहीं होती. इसलिए, अगर ज़रूरी हो, तो लागू करने के लिए इस जानकारी को मैन्युअल तरीके से जोड़ना होगा. ऐसा Logger.appendThrowableString(String, Throwable) का इस्तेमाल करके किया जा सकता है.
    • Kotlin के साथ काम करने से जुड़ी समस्या को ठीक करें. इस समस्या में, वैल्यू शून्य हो सकती है (nullable) वाले सामान्य टाइप के पैरामीटर और वैल्यू शून्य हो सकती है (nullable) वाले ऐरे एलिमेंट टाइप को वैल्यू शून्य हो सकती है (nullable) के तौर पर नहीं पहचाना जाता. उदाहरण के लिए, 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) (#33, #9978) का इस्तेमाल करके, लाइब्रेरी की ओर से उपलब्ध कराई गई सभी MediaSource क्लास के लिए, MediaItem अपडेट की अनुमति दें.
    • 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) का इस्तेमाल करके, कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) को ट्रांसमिट करने की सुविधा जोड़ें.
    • ExperimentalBandwidthMeter में ConcurrentModificationException को ठीक करें (#612).
    • MediaPeriodId पैरामीटर को CompositeMediaSource.getMediaTimeForChildMediaTime में जोड़ें.
    • ConcatenatingMediaSource2 में ClippingMediaSource (और अवधि/विंडो के समय के ऑफ़सेट वाले अन्य सोर्स) के साथ काम करना (#11226).
    • BaseRenderer.onStreamChanged() को बदलकर, MediaPeriodId आर्ग्युमेंट भी पाएं.
  • ट्रांसफ़ॉर्मर:
    • इमेज इनपुट के लिए, EXIF रोटेशन डेटा को पार्स करें.
    • TransformationRequest.HdrMode एनोटेशन टाइप और उससे जुड़े कॉन्स्टेंट हटाएं. इसके बजाय, Composition.HdrMode और उससे जुड़ी स्थिर वैल्यू का इस्तेमाल करें.
    • रोटेशन से जुड़ी समस्याओं को ठीक करने के लिए, OverlaySettings को आसान बनाएं.
    • SampleConsumer.queueInputBitmap के frameRate और durationUs पैरामीटर को TimestampIterator में बदला गया.
  • ट्रैक चुनना:
    • DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness जोड़ें , ताकि साफ़ तौर पर यह तय किया जा सके कि बिना किसी रुकावट के अडैप्टेशन की सुविधा को अनुमति दी जाए या नहीं. डिफ़ॉल्ट रूप से, true का मौजूदा तरीका बना रहता है.
  • एक्सट्रैक्टर:
    • MPEG-TS: सैंपल सूची (#7909) में स्ट्रीम के आखिरी ऐक्सेस यूनिट को पास करके, पक्का करें कि आखिरी फ़्रेम रेंडर हो गया हो.
    • rotationDegrees तय करते समय, टाइपिंग की गलती को ठीक करें. projectionPosePitch को projectionPoseRoll पर सेट किया गया (#461).
    • इस अनुमान को हटाएं कि Extractor इंस्टेंस की जांच, instanceof की मदद से सीधे तौर पर की जा सकती है. अगर आपको किसी Extractor को लागू करने की जानकारी का रनटाइम ऐक्सेस चाहिए, तो आपको पहले Extractor.getUnderlyingInstance को कॉल करना होगा.
    • BmpExtractor जोड़ें.
    • WebpExtractor जोड़ें.
    • HeifExtractor जोड़ें.
    • Mp4Extractor में, QuickTime classic के साथ काम करने की सुविधा जोड़ें.
  • ऑडियो:
    • एमपी4 और Matroska में 24/32-बिट बिग-एंडियन पीसीएम के लिए सहायता जोड़ें. साथ ही, एमपी4 में lpcm के लिए पीसीएम एन्कोडिंग को पार्स करें.
    • एमपी4 में Vorbis ऑडियो निकालने की सुविधा जोड़ी गई.
    • 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 गैपलेस मेटाडेटा के लिए सहायता जोड़ी गई.
    • अगर पहली बार लिखने में गड़बड़ी होती है, तो ऑफ़लोड करने की सुविधा बंद करके रेंडरर को वापस लाने की अनुमति दें (#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 को अब "सिर्फ़ डिकोड करने के लिए" सैंपल के लिए नहीं बुलाया जाएगा, क्योंकि लागू करने पर उसे वैसे भी null दिखाना चाहिए.
  • असर:
    • VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) टाइमस्टैंप के हिसाब से बिटमैप इनपुट को लाइन में लगाने की सुविधा जोड़ें.
    • VideoFrameProcessor.registerInputStream() को ब्लॉक न करने वाले फ़ील्ड में बदलें. ऐप्लिकेशन को VideoFrameProcessor.Listener#onInputStreamRegistered() लागू करना होगा.
    • VideoFrameProcessor.queueInputBitmap के frameRate और durationUs पैरामीटर को TimestampIterator में बदला गया.
  • IMA एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसमें एक से ज़्यादा अवधि वाली DASH लाइव स्ट्रीम, प्लेलिस्ट में पहले आइटम के तौर पर मौजूद न होने पर, अपवाद का मैसेज दिख सकता है (#571).
    • AdsLoader.destroy() को कॉल करने से पहले, StreamManager को रिलीज़ करें
    • IMA SDK टूल का वर्शन 3.31.0 पर अपडेट करें.
  • सेशन:
    • DefaultMediaNotificationProvider में, सूचनाओं की फ़ोरग्राउंड सेवा के व्यवहार को FOREGROUND_SERVICE_IMMEDIATE पर सेट करें (#167).
    • Samsung डिवाइसों पर, एपीआई लेवल 31 के बाद के वर्शन का इस्तेमाल करें, ताकि आपको एपीआई लेवल 30 से पहले के वर्शन से जुड़ी समस्याओं से बचा जा सके (#167).android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
    • उपलब्ध निर्देशों और कस्टम लेआउट को सेट करने के लिए, मीडिया सूचना कंट्रोलर को प्रॉक्सी के तौर पर इस्तेमाल करें. इनका इस्तेमाल, सूचना और प्लैटफ़ॉर्म सेशन को पॉप्युलेट करने के लिए किया जाता है.
    • Media3 में MediaSessionService.onStartCommand() को मिले मीडिया बटन इवेंट को प्लैटफ़ॉर्म सेशन और फिर Media3 पर भेजने के बजाय, इन्हें बदलें. इसकी मदद से, कॉलर कंट्रोलर हमेशा मीडिया सूचना कंट्रोलर होता है. साथ ही, ऐप्लिकेशन, सूचना से आने वाले कॉल को आसानी से पहचान सकते हैं. ऐसा, काम करने वाले सभी एपीआई लेवल पर एक ही तरह से होता है.
    • वह गड़बड़ी ठीक की गई है जिसकी वजह से किसी लेगसी MediaSessionCompat से कनेक्ट होने पर, MediaController.getCurrentPosition() आगे नहीं बढ़ रहा था.
    • MediaLibrarySession.getSubscribedControllers(mediaId) जोड़ें, ताकि आपके लिए काम करना आसान हो.
    • MediaLibrarySession.Callback.onSubscribe() को बदलकर, उस पैरंट आईडी की उपलब्धता की पुष्टि करें जिसके लिए कंट्रोलर ने सदस्यता ली है. अगर पुष्टि हो जाती है, तो सदस्यता स्वीकार कर ली जाती है और ब्राउज़र को इसकी सूचना देने के लिए, notifyChildrenChanged() को तुरंत कॉल किया जाता है (#561).
    • Automotive OS के लिए सेशन डेमो मॉड्यूल जोड़ें और Android Auto के लिए सेशन डेमो चालू करें.
    • जब मीडिया सूचना कंट्रोलर के लिए COMMAND_GET_TIMELINE उपलब्ध न हो, तो फ़्रेमवर्क सेशन की सूची सेट न करें. Android Auto, फ़्रेमवर्क सेशन से पढ़ने वाले क्लाइंट कंट्रोलर के तौर पर काम करता है. इस वजह से, Android Auto के यूज़र इंटरफ़ेस (यूआई) में queue बटन नहीं दिखता (#339).
    • SimpleBitmapLoader के बजाय डिफ़ॉल्ट रूप से DataSourceBitmapLoader का इस्तेमाल करें (#271, #327).
    • MediaSession.Callback.onMediaButtonEvent(Intent) जोड़ें, ताकि ऐप्लिकेशन, मीडिया बटन के डिफ़ॉल्ट इवेंट मैनेजमेंट को बदल सकें.
  • यूज़र इंटरफ़ेस:
    • Wear OS डिवाइसों के लिए Player.Listener लागू करें.यह Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT की वजह से, वीडियो चलाने पर होने वाली रुकावट को ठीक करता है. इसके लिए, यह सिस्टम डायलॉग बॉक्स दिखाता है, ताकि उपयोगकर्ता कोई सही ऑडियो आउटपुट (जैसे, ब्लूटूथ हेडफ़ोन) कनेक्ट कर सके. अगर टाइम आउट (डिफ़ॉल्ट रूप से पांच मिनट) के अंदर कोई डिवाइस कनेक्ट हो जाता है, तो ऑडियो अपने-आप फिर से चलने लगेगा.
  • डाउनलोड:
    • Android 14 के साथ काम करने के लिए, DownloadService के लिए "डेटा सिंक" फ़ोरग्राउंड सेवा का टाइप बताएं. इस सेवा का इस्तेमाल करते समय, ऐप्लिकेशन को मेनिफ़ेस्ट में dataSync को foregroundServiceType के तौर पर जोड़ना होगा. साथ ही, FOREGROUND_SERVICE_DATA_SYNC अनुमति (#11239) भी जोड़नी होगी.
  • एचएलएस एक्सटेंशन:
    • HLS लाइव प्लेलिस्ट को रीफ़्रेश करें. इसके लिए, आखिरी बार लोड होने के समय के बजाय, आखिरी बार लोड शुरू होने के समय के हिसाब से इंटरवल का हिसाब लगाएं (#663).
  • DASH एक्सटेंशन:
    • सेगमेंट टेंप्लेट यूआरएल में एक ही DASH आइडेंटिफ़ायर के कई यूआरएल इस्तेमाल करने की अनुमति दें.
    • वीडियो से सबटाइटल निकालने के दौरान, एक्सपेरिमेंट के तौर पर सबटाइटल पार्स करने की सुविधा जोड़ी गई है. इसमें, ओवरलैप होने वाले सबटाइटल को मर्ज करने के लिए बेहतर सुविधाएं हैं. साथ ही, सबटाइटल के सेगमेंट के बीच ट्रांज़िशन करते समय फ़्लिकरिंग की समस्या को हल करने की सुविधा भी है. इसे चालू करने के लिए, DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288) का इस्तेमाल करें.
  • आरटीएसपी एक्सटेंशन:
    • रेस कंडीशन ठीक की गई, जिसकी वजह से टीसीपी पर वापस जाने पर IndexOutOfBoundsException दिख सकता था या कुछ मामलों में वीडियो चलाने में रुकावट आ सकती थी.
    • RtspMediaPeriod के लोड होने की स्थिति दिखाते समय, आरटीएसपी सेटअप में स्टेटस देखें (#577).
    • विकल्पों के जवाब के सार्वजनिक हेडर में, पसंद के मुताबिक आरटीएसपी अनुरोध के तरीकों को अनदेखा करें (#613).
    • 'ऑनलाइन रहें' आरटीएसपी विकल्प के अनुरोध भेजने के समय अंतराल में, आरटीएसपी सेटअप रिस्पॉन्स टाइम आउट वैल्यू का इस्तेमाल करें (#662).
  • डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
    • एमआईडीआई डीकोडर मॉड्यूल रिलीज़ करें. यह मॉड्यूल, ऑडियो सिंथेसाइज़ करने के लिए Jsyn लाइब्रेरी का इस्तेमाल करके, स्टैंडर्ड एमआईडीआई फ़ाइलों को चलाने की सुविधा देता है.
    • जिन आउटपुट बफ़र को दिखाने की ज़रूरत नहीं है उन्हें सीधे मार्क करने के लिए, DecoderOutputBuffer.shouldBeSkipped जोड़ें. इसे C.BUFFER_FLAG_DECODE_ONLY के बजाय इस्तेमाल करना बेहतर है, क्योंकि C.BUFFER_FLAG_DECODE_ONLY को बंद कर दिया जाएगा.
    • Decoder.setOutputStartTimeUs और SimpleDecoder.isAtLeastOutputStartTimeUs जोड़ें, ताकि डिकोडर, शुरू होने के समय से पहले, सिर्फ़ डिकोड किए गए सैंपल छोड़ सकें. इसे Buffer.isDecodeOnly के बजाय इस्तेमाल करना चाहिए, क्योंकि Buffer.isDecodeOnly का इस्तेमाल बंद कर दिया जाएगा.
    • Maven रिपॉज़िटरी में MIDI डिकोडर आर्टफ़ैक्ट पब्लिश करने से जुड़ी गड़बड़ी ठीक की गई. आर्टफ़ैक्ट का नाम बदलकर media3-exoplayer-midi (#734) कर दिया गया है.
  • Leanback एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया है जिसकी वजह से किसी प्लैटफ़ॉर्म को बंद करने पर, 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).
  • ऑडियो ऑफ़लोड करना:
    • आरएफ़सी 7845 के मुताबिक, ऑफ़लोड किए गए Opus चलाने के लिए, बिटस्ट्रीम में Ogg आईडी हेडर और टिप्पणी हेडर पेज जोड़ें.
  • वीडियो:
    • H.265/एचईवीसी: एसपीएस में मौजूद, कम और ज़्यादा समय के लिए इस्तेमाल होने वाली रेफ़रंस पिक्चर की जानकारी को पार्स करने से जुड़ी समस्या को ठीक किया गया.
  • टेक्स्ट:
    • CEA-608: सिर्फ़ दिखने वाले टेक्स्ट को ध्यान में रखते हुए, क्यू ट्रिम करने का लॉजिक बदलें. पहले, क्यू की लंबाई को 32 वर्णों तक सीमित करते समय इंडेंट और टैब ऑफ़सेट शामिल किया जाता था. यह तकनीकी तौर पर सही था (#11019).
  • IMA एक्सटेंशन:
    • IMA SDK टूल का वर्शन 3.30.3 पर अपडेट करें.
  • सेशन:
    • कंट्रोलर की स्थिति में कस्टम लेआउट जोड़ें और उसे ऐक्सेस करने के लिए कोई getter दें. कस्टम लेआउट में बदलाव होने पर, MediaController.Listener.onCustomLayoutChanged को कॉल किया जाता है. जिन ऐप्लिकेशन को अलग-अलग Media3 कंट्रोलर पर अलग-अलग कस्टम लेआउट भेजने हैं वे 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
    • प्लेयर में ओवरलोड किए गए ऐसे तरीके जोड़ें जिनसे उपयोगकर्ता, वॉल्यूम के लिए फ़्लैग तय कर सकें:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • DeviceInfo के लिए Builder जोड़ें और मौजूदा कन्स्ट्रक्टर को बंद करें.
    • रिमोट से वीडियो चलाने के लिए, रूटिंग कंट्रोलर का आईडी बताने के लिए DeviceInfo.routingControllerId जोड़ें.
    • एक ही जगह पर आइटम जोड़ने और हटाने के लिए, Player.replaceMediaItem(s) को शॉर्टकट के तौर पर जोड़ें (#8046).
  • ExoPlayer:
    • ExoPlayer को डिवाइस के वॉल्यूम कंट्रोल करने की अनुमति सिर्फ़ तब दें, जब आपने साफ़ तौर पर ऑप्ट इन किया हो. इनका ऐक्सेस पाने के लिए, ExoPlayer.Builder.setDeviceVolumeControlEnabled का इस्तेमाल करें:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) और setDeviceVolume(int, int)
      • increaseDeviceVolume(int) और increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) और decreaseDeviceVolume(int, int)
    • FilteringMediaSource जोड़ें, ताकि MediaSource से उपलब्ध ट्रैक टाइप को फ़िल्टर किया जा सके.
    • अडेप्टिव स्ट्रीमिंग फ़ॉर्मैट DASH, HLS, और स्मूद स्ट्रीमिंग के लिए किए जाने वाले अनुरोधों में, कॉमन मीडिया क्लाइंट डेटा (CMCD) को शामिल करने की सुविधा जोड़ी गई है. इन फ़ील्ड को शामिल किया गया है: 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) हटाएं.
    • एक गड़बड़ी को ठीक किया गया है. इसकी वजह से, वीडियो स्ट्रीम के आखिर में सिग्नल मिलने पर, ट्रांसफ़ॉर्मेशन अटक सकता था. इससे, muxer का टाइम आउट हो सकता था. ऐसा तब होता था, जब कोई इनपुट फ़्रेम प्रोसेस होने बाकी होता था.
    • ज़्यादा सहायता पाने के लिए, findDecoder/EncoderForFormat की सुविधाओं का इस्तेमाल करने के बजाय, MediaCodecList के ज़रिए कोडेक की क्वेरी करें.
    • DefaultEncoderFactory में B-फ़्रेम कॉन्फ़िगरेशन हटाएं, क्योंकि यह कुछ डिवाइसों पर काम नहीं करता.
  • ट्रैक चुनना:
    • जोड़ें DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange जो डिफ़ॉल्ट रूप से बंद होता है. चालू होने पर, DefaultTrackSelector रेंडरर की सुविधाओं में बदलाव होने पर, नया ट्रैक चुनने की सुविधा ट्रिगर करेगा.
  • एक्सट्रैक्टर:
    • Ogg: लंबी अवधि वाली फ़ाइलों में आगे-पीछे जाने पर आने वाली गड़बड़ी ठीक की गई (#391).
    • FMP4: उस समस्या को ठीक करें जिसमें TimestampAdjuster, emsg atom (#356) से मेटाडेटा सैंपल के समय के साथ गलत टाइमस्टैंप ऑफ़सेट को शुरू करता है.
  • ऑडियो:
    • गड़बड़ी को ठीक किया गया है.इसकी वजह से, टनल करने की सुविधा चालू होने और AudioProcessors चालू होने पर, कुछ वीडियो नहीं चल पाते थे. जैसे, गैपलेस ट्रिमिंग के लिए (#10847).
    • सीधे प्लेबैक (ऑफ़लोड) में, Opus फ़्रेम को Ogg पैकेट में कवर करें.
    • ऑफ़लोड शेड्यूलिंग की सुविधा की मदद से, डिवाइस के बंद रहने के दौरान मौजूदा जगह का अनुमान लगाएं.
    • प्लेयर के लाइफ़साइकल के आखिर में संसाधनों को रिलीज़ करने के लिए, Renderer.release() और AudioSink.release() जोड़ें.
    • DefaultAudioSink में ऑडियो की सुविधाओं में हुए बदलावों के बारे में सुनें. DefaultAudioSink के कन्स्ट्रक्टर में ज़रूरी पैरामीटर context जोड़ें. इससे DefaultAudioSink, AudioCapabilitiesReceiver के लिसनर के तौर पर रजिस्टर हो जाएगा. साथ ही, सुविधाओं में बदलाव होने की जानकारी मिलने पर, अपनी audioCapabilities प्रॉपर्टी को अपडेट कर देगा.
    • AudioSink.Listener इंटरफ़ेस में नए इवेंट onAudioCapabilitiesChanged और onRendererCapabilitiesChanged इवेंट को ट्रिगर करने वाले नए इंटरफ़ेस RendererCapabilities.Listener की मदद से, ऑडियो की सुविधाओं में हुए बदलावों को प्रोपैगेट करें.
    • ऑडियो चैनलों पर स्केलिंग/मिक्सिंग लागू करने के लिए, ChannelMixingAudioProcessor जोड़ें.
    • ऑडियो की सुविधाओं में बदलाव होने के बाद, बायपास मोड चालू होने पर ऑडियो डिकोडर को खारिज करने के लिए, DecoderDiscardReasons में नई int वैल्यू DISCARD_REASON_AUDIO_BYPASS_POSSIBLE जोड़ें.
    • DTS Express और DTS:X के लिए, सीधे तौर पर गाने चलाने की सुविधा जोड़ी गई है (#335).
  • वीडियो:
    • रेंडरर के बंद होने पर, MediaCodecVideoRenderer को VideoSize की रिपोर्ट दें, जिसकी चौड़ाई और ऊंचाई 0 हो. Player.getVideoSize() में बदलाव होने पर, Player.Listener.onVideoSizeChanged को उसी हिसाब से कॉल किया जाता है. इस बदलाव के बाद, जब Player.getCurrentTracks वीडियो के साथ काम नहीं करता है या काम करने वाले वीडियो ट्रैक का साइज़ तय नहीं होता है, तो ExoPlayer के वीडियो का साइज़ MediaCodecVideoRenderer के साथ 0 हो जाता है.
  • डीआरएम:
    • DefaultDrmSession पर, सिर्फ़ इंटरनल इस्तेमाल के लिए बने कई तरीकों को कम दिखाएं. ऐसा इसलिए, क्योंकि इन तरीकों को डीआरएम पैकेज के बाहर से कॉल नहीं किया जा सकता:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • म्यूक्सर:
    • एक नई म्यूक्सर लाइब्रेरी जोड़ें, जिसका इस्तेमाल MP4 कंटेनर फ़ाइल बनाने के लिए किया जा सकता है.
  • IMA एक्सटेंशन:
    • डीआई के लिए, एक से ज़्यादा अवधि वाली लाइव DASH स्ट्रीम चालू करें. कृपया ध्यान दें कि फ़िलहाल, लाइव स्ट्रीम में वीडियो को आगे-पीछे करने की सुविधा काम नहीं करती (#10912).
    • एक गड़बड़ी को ठीक किया गया है. इसकी वजह से, लाइव स्ट्रीम में नया विज्ञापन ग्रुप डाला जाता है. ऐसा इसलिए होता है, क्योंकि लगातार चलने वाली टाइमलाइन में, कॉन्टेंट की कैलकुलेट की गई पोज़िशन में थोड़ा अंतर होता है.
  • सेशन:
    • फ़िलहाल, Player तरीके को कॉल करने वाले कंट्रोलर के बारे में जानकारी पाने के लिए, हेल्पर तरीका MediaSession.getControllerForCurrentRequest जोड़ें.
    • 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 मैसेज (#302) में प्रोफ़ाइल-लेवल-आईडी की वैल्यू मौजूद नहीं है, तो MPEG4-LATM के लिए डिफ़ॉल्ट प्रोफ़ाइल-लेवल-आईडी वैल्यू का इस्तेमाल करें.
    • अगर DESCRIBE रिस्पॉन्स हेडर (#11160) में मौजूद है, तो रिलेटिव पाथ रिज़ॉल्यूशन के लिए, आरटीएसपी सेशन से बेस यूआरएल का इस्तेमाल करें.
  • DASH एक्सटेंशन:
    • एक से ज़्यादा अवधियों वाली DASH स्ट्रीम के लिए, MediaLoadData.startTimeMs और MediaLoadData.endTimeMs से मीडिया टाइम ऑफ़सेट हटाएं.
    • एक से ज़्यादा अवधि वाले लाइव डैश मीडिया सोर्स को फिर से तैयार करने पर, IndexOutOfBoundsException (#10838) वाली गड़बड़ी को ठीक किया गया.
  • एचएलएस एक्सटेंशन:
    • HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) को जोड़ें, ताकि लोडिंग थ्रेड के लिए टाइम आउट सेट किया जा सके. इससे TimestampAdjuster के शुरू होने का इंतज़ार किया जा सकेगा. अगर टाइम आउट से पहले शुरू होना पूरी तरह से पूरा नहीं होता है, तो वीडियो चलाने में होने वाली देरी को रोकने के लिए, PlaybackException को ट्रिगर किया जाता है. टाइम आउट की वैल्यू डिफ़ॉल्ट रूप से शून्य पर सेट होती है (#323).
  • टेस्ट करने के लिए उपयोगी टूल:
    • DataSourceContractTest में, यूआरआई स्कीम के केस इनसेंसिटिव होने की जांच करें.
  • इस्तेमाल नहीं किए जाने वाले सिंबल हटाएं:
    • DefaultAudioSink कन्स्ट्रक्टर हटाएं और इसके बजाय DefaultAudioSink.Builder का इस्तेमाल करें.
    • HlsMasterPlaylist को हटाएं और इसके बजाय HlsMultivariantPlaylist का इस्तेमाल करें.
    • Player.stop(boolean) हटाएं. इसके बजाय, Player.stop() और Player.clearMediaItems() (अगर reset true है) का इस्तेमाल करें.
    • बंद किए गए दो SimpleCache कन्स्ट्रक्टर हटाएं. बेहतर परफ़ॉर्मेंस के लिए, ऐसे कन्स्ट्रक्टर का इस्तेमाल करें जो बंद नहीं किया गया है और DatabaseProvider लेता है.
    • DefaultBandwidthMeter कन्स्ट्रक्टर हटाएं और इसके बजाय DefaultBandwidthMeter.Builder का इस्तेमाल करें.
    • DefaultDrmSessionManager कन्स्ट्रक्टर हटाएं और इसके बजाय DefaultDrmSessionManager.Builder का इस्तेमाल करें.
    • गड़बड़ी की जानकारी को बेहतर तरीके से लॉग करने के लिए, इस्तेमाल न किए जा रहे दो HttpDataSource.InvalidResponseCodeException कंस्ट्रक्टर हटाएं. इसके बाद, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अतिरिक्त फ़ील्ड(cause, responseBody) स्वीकार करता हो.
    • DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash, और DownloadHelper.forSmoothStreaming हटाएं. इसके बजाय, DownloadHelper.forMediaItem का इस्तेमाल करें.
    • अब काम न करने वाले DownloadService कन्स्ट्रक्टर को हटाएं. इसके बजाय, ऐसे कन्स्ट्रक्टर का इस्तेमाल करें जो अब भी काम करता हो. इसमें channelDescriptionResourceId पैरामीटर देने का विकल्प शामिल होना चाहिए.
    • Charsets (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME, और UTF16LE_NAME) के लिए, इस्तेमाल न होने वाली स्ट्रिंग कॉन्स्टेंट हटाएं. इसके बजाय, kotlin.text पैकेज, java.nio.charset.StandardCharsets या com.google.common.base.Charsets से Kotlin Charsets का इस्तेमाल करें.
    • अब काम न करने वाले WorkManagerScheduler कंस्ट्रक्टर को हटाएं. इसके बजाय, ऐसे कंस्ट्रक्टर का इस्तेमाल करें जो अब भी काम करता हो. इसमें Context पैरामीटर देने का विकल्प शामिल होना चाहिए.
    • 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).
  • एक्सट्रैक्टर:
    • आरटीएसपी और एमपी4 एक्सट्रैक्टर (#303) के ज़रिए पहले से इस्तेमाल किए जा रहे पार्सिंग लॉजिक का फिर से इस्तेमाल करके, MPEG-TS फ़ाइलों में H.265 एसपीएस को पार्स करने की समस्या को ठीक करें.
  • टेक्स्ट:
    • एसएसए: अगर UTF-16 फ़ाइलें बाइट ऑर्डर मार्क (#319) से शुरू होती हैं, तो उनके लिए सहायता जोड़ें.
  • सेशन:
    • उस समस्या को ठीक करना जिसमें MediaController, अपनी कार्रवाइयों को अपडेट करने वाले लेगसी MediaSessionCompat से कनेक्ट होने पर, उपलब्ध निर्देशों को अपडेट नहीं करता.
    • एपीआई लेवल 30 (#355) पर, params.isRecent == true के साथ सिस्टम यूज़र इंटरफ़ेस (यूआई) से Callback.onGetLibraryRoot पर कॉल करने पर, MediaLibraryService को null दिखाने से रोकने वाली गड़बड़ी को ठीक किया गया.
    • 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 को कॉल करने पर, उपलब्ध निर्देशों को अपडेट न करने की गड़बड़ी को ठीक किया गया.
    • MediaController से भेजे गए TrackSelectionOverride इंस्टेंस को तब अनदेखा कर दिया जाता है, जब वे Format.metadata वाले ग्रुप का रेफ़रंस देते हैं. इस समस्या को ठीक करें (#296).
    • उस समस्या को ठीक करना जहां Player.COMMAND_GET_CURRENT_MEDIA_ITEM को लेगसी MediaSessionCompat के ज़रिए मेटाडेटा ऐक्सेस करने के लिए उपलब्ध होना चाहिए.
    • बैकग्राउंड थ्रेड पर MediaSession इंस्टेंस का इस्तेमाल करने पर, MediaSessionService में क्रैश होने की समस्या ठीक करें (#318).
    • मीडिया बटन रिसीवर को लाइब्रेरी से एलान करने की समस्या को ठीक किया गया है. ऐसा तब होता है, जब ऐप्लिकेशन ऐसा नहीं चाहता (#314).
  • डैश:
    • खाली सेगमेंट की टाइमलाइन मैनेज करने की सुविधा को ठीक करना (#11014).
  • RTSP:
    • अगर आरटीएसपी सेटअप करने के दौरान, यूडीपी के साथ आरटीएसपी गड़बड़ी 461 (#11069) दिखती है, तो टीसीपी के साथ फिर से कोशिश करें.

वर्शन 1.0.0

22 मार्च, 2023

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

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

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

वर्शन 1.0.0-rc02

2 मार्च, 2023

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

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

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

वर्शन 1.0.0-rc01

16 फ़रवरी, 2023

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

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

  • मुख्य लाइब्रेरी:
    • MediaCodecSelector की प्राथमिकताओं को बनाए रखने के लिए, रेंडरर के डिकोडर ऑर्डरिंग लॉजिक में बदलाव करें. भले ही, डिकोडर यह रिपोर्ट करे कि वह मीडिया को बेहतर तरीके से नहीं चला सकता. उदाहरण के लिए, डिफ़ॉल्ट सिलेक्टर के साथ, सिर्फ़ फ़ंक्शनल सपोर्ट वाले हार्डवेयर डिकोडर को, फ़ॉर्मैट के साथ पूरी तरह काम करने वाले सॉफ़्टवेयर डिकोडर के मुकाबले प्राथमिकता दी जाएगी (#10604).
    • ExoPlayer.Builder.setPlaybackLooper जोड़ें, जो किसी नए ExoPlayer इंस्टेंस के लिए, पहले से मौजूद वीडियो चलाने की थ्रेड सेट करता है.
    • डाउनलोड मैनेजर के सहायक टूल को मिटाने की अनुमति दें (#10776).
    • BasePlayer.seekTo में पैरामीटर जोड़ें, ताकि यह भी पता चल सके कि वीडियो में आगे या पीछे जाने के लिए किस कमांड का इस्तेमाल किया गया है.
    • एपीआई 21 और उसके बाद के वर्शन पर ड्रॉबल लोड करते समय थीम का इस्तेमाल करें (#220).
    • ConcatenatingMediaSource2 जोड़ें, जिससे एक ही विंडो में कई मीडिया आइटम को जोड़ा जा सकता है (#247).
  • एक्सट्रैक्टर:
    • अगर ट्रैक एटम को पार्स करते समय, सैंपल टेबल (stbl) में ज़रूरी सैंपल ब्यौरा (stsd) मौजूद नहीं है, तो NullPointerException के बजाय ParserException दिखाएं.
    • fMP4 में सीधे सिंक फ़्रेम पर जाने पर, सैंपल को सही तरीके से स्किप करें (#10941).
  • ऑडियो:
    • डायरेक्ट प्लेबैक (पासथ्रू) में AudioTrack के लिए, कम से कम बफ़र साइज़ का हिसाब लगाने के लिए, संपीड़ित ऑडियो फ़ॉर्मैट की बिटरेट का इस्तेमाल करें.
  • टेक्स्ट:
    • अगर सबटाइटल फ़ाइल में कोई क्यू नहीं है, तो TextRenderer को अमान्य (नेगेटिव) इंडेक्स भेजने की समस्या को ठीक करें.Subtitle.getEventTime
    • SubRip: अगर UTF-16 फ़ाइलें, बाइट ऑर्डर मार्क से शुरू होती हैं, तो उन्हें इस्तेमाल करने की सुविधा जोड़ें.
  • मेटाडेटा:
    • ID3 फ़्रेम से, एक से ज़्यादा वैल्यू को पार्स करें. ये वैल्यू, ID3 v2.4 के मुताबिक, शून्य से अलग की गई होनी चाहिए.
    • मेटाडेटा में बताए गए कॉन्टेंट या फ़ोल्डर के टाइप को दिखाने के लिए, MediaMetadata.mediaType जोड़ें.
    • MediaMetadata.folderType के बदले MediaMetadata.isBrowsable जोड़ें. अगले रिलीज़ में, फ़ोल्डर टाइप की सुविधा काम नहीं करेगी.
  • डैश:
    • इमेज अडैप्टेशन सेट के लिए पूरी पार्सिंग जोड़ें. इसमें टाइल की संख्या भी शामिल है (#3752).
  • यूज़र इंटरफ़ेस:
    • 'अब काम नहीं करता' का मैसेज दिखने की समस्या को ठीक करें PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) ताकि यह पक्का किया जा सके कि 'किसे दिखे' सेटिंग में किए गए बदलाव, रजिस्टर किए गए दर्शक को दिखें (#229).
    • दाईं से बाईं ओर (आरटीएल) लिखी जाने वाली भाषाओं के लेआउट का इस्तेमाल करते समय, PlayerView में प्लेयर के बीच में मौजूद कंट्रोल के क्रम को ठीक करना (#227).
  • सेशन:
    • पसंद के मुताबिक प्लेयर के लिए Player इंटरफ़ेस लागू करने में मदद करने के लिए, एब्स्ट्रैक्ट SimpleBasePlayer जोड़ें.
    • प्लैटफ़ॉर्म सेशन टोकन को Media3 में बदलने के लिए, हेल्पर तरीका जोड़ें SessionToken (#171).
    • प्लैटफ़ॉर्म के मीडिया सेशन (#219) के अपडेट को ट्रिगर करने के लिए, onMediaMetadataChanged का इस्तेमाल करें.
    • मीडिया सेशन को DefaultMediaNotificationProvider के getMediaButtons() के आर्ग्युमेंट के तौर पर जोड़ें और साफ़ तौर पर समझाने के लिए, बदलाव न की जा सकने वाली सूचियों का इस्तेमाल करें (#216).
    • प्लेयर (#156) पर सेट करने से पहले, onSetMediaItems कॉलबैक लिसनर जोड़ें, ताकि MediaItem सूची, शुरुआती इंडेक्स, और सेशन के हिसाब से पोज़िशन में बदलाव करने/सेट करने के तरीके उपलब्ध कराए जा सकें.
    • ब्लूटूथ मीडिया बटन के इवेंट के लिए, दो बार टैप करने की सुविधा को बंद करें (#233).
    • संदिग्ध लेगसी सेशन स्टेटस के मामले में, QueueTimeline को ज़्यादा बेहतर बनाएं (#241).
  • मेटाडेटा:
    • ID3 फ़्रेम से, एक से ज़्यादा वैल्यू को पार्स करें. ये वैल्यू, ID3 v2.4 के मुताबिक, शून्य से अलग की गई होनी चाहिए.
    • मेटाडेटा में बताए गए कॉन्टेंट या फ़ोल्डर के टाइप को दिखाने के लिए, MediaMetadata.mediaType जोड़ें.
    • MediaMetadata.folderType के बदले MediaMetadata.isBrowsable जोड़ें. अगले रिलीज़ में, फ़ोल्डर टाइप की सुविधा काम नहीं करेगी.
  • कास्ट एक्सटेंशन:
    • Bump 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 काम नहीं करता है, तो दूसरे ट्रैक का इस्तेमाल करें. (#8944).
  • डाउनलोड:
    • ProgressiveDownloader में अनलिमिटेड लूप की समस्या को ठीक करें. यह समस्या, एक ही PriorityTaskManager के साथ डाउनलोड और चलाने की वजह से होती है (#10570).
    • डाउनलोड की सूचना तुरंत दिखने की सुविधा जोड़ें (#183).
    • एक साथ कई डाउनलोड हटाने की सुविधा को एक पर सीमित किया गया है, ताकि बहुत ज़्यादा थ्रेड न बनें (#10458).
  • वीडियो:
    • अगर डिसप्ले पर Dolby Vision काम नहीं करता है, तो कोई दूसरा डिकोडर आज़माएं. (#9794).
  • ऑडियो:
    • एक साथ कई प्लेयर रिलीज़ करते समय, AudioTrack इंस्टेंस रिलीज़ करने के लिए SingleThreadExecutor का इस्तेमाल करें, ताकि OutOfMemory गड़बड़ियां न हों (#10057).
    • ऑडियो ट्रैक के ऑफ़लोड होने की स्थिति के लिए, 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) के साथ इंस्टेंस बनाएं, ताकि यह तय किया जा सके कि रेंडरर, मेटाडेटा को जल्दी आउटपुट करेगा या प्लेयर की पोज़िशन के हिसाब से सिंक करके.
  • डीआरएम:
    • Android 13 में ClearKey को लागू करने से जुड़ी एक गड़बड़ी को ठीक करना. यह गड़बड़ी, लाइसेंस का ऐसा यूआरएल दिखाती है जो खाली नहीं है, लेकिन अमान्य है.
    • प्लेलिस्ट में डीआरएम स्कीम (उदाहरण के लिए, Widevine से ClearKey) के बीच स्विच करते समय setMediaDrmSession failed: session not opened गड़बड़ी को ठीक करना.
  • टेक्स्ट:
    • CEA-608: पक्का करें कि फ़ील्ड 2 पर सेवा स्विच करने के निर्देश सही तरीके से मैनेज किए गए हों (#10666).
  • डैश:
    • मेनिफ़ेस्ट से EventStream.presentationTimeOffset पार्स करना (#10460).
  • यूज़र इंटरफ़ेस:
    • TrackSelectionDialogBuilder में, प्लेयर के मौजूदा बदलावों को प्रीसेट के तौर पर इस्तेमाल करें (#10429).
  • सेशन:
    • पक्का करें कि निर्देश हमेशा सही क्रम में लागू हों. भले ही, कुछ निर्देशों को एसिंक्रोनस तरीके से हल करना ज़रूरी हो (#85).
    • DefaultMediaNotificationProvider इंस्टेंस बनाने के लिए, DefaultMediaNotificationProvider.Builder जोड़ें. बिल्डर, सूचना आईडी, सूचना चैनल आईडी, और सूचना चैनल का नाम कॉन्फ़िगर कर सकता है. इनका इस्तेमाल, सेवा देने वाली कंपनी करती है. साथ ही, सूचनाओं के छोटे आइकॉन को सेट करने के लिए, तरीका 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:
    • विज्ञापन की जानकारी लोड करने के लिए टाइम आउट जोड़ें, ताकि उन मामलों को मैनेज किया जा सके जिनमें IMA SDK टूल, विज्ञापन लोड करने में फंस जाता है (#10510).
    • वीडियो के आखिर तक जाने पर, वीडियो के बीच में दिखने वाले विज्ञापनों को स्किप करने से रोकना (#10685).
    • सर्वर साइड से डाले गए विज्ञापनों वाली लाइव स्ट्रीम के लिए, विंडो की अवधि का सही हिसाब लगाएं. उदाहरण के लिए, IMA DAI (#10764).
  • FFmpeg एक्सटेंशन:
    • FFmpeg लाइब्रेरी को NDK 23.1.7779620 और उसके बाद के वर्शन के साथ लिंक करने के लिए, ज़रूरी नए फ़्लैग जोड़ें (#9933).
  • AV1 एक्सटेंशन:
    • Android Studio के नए रिलीज़ के साथ काम न करने की समस्या से बचने के लिए, CMake वर्शन अपडेट करें (#9933).
  • कास्ट एक्सटेंशन:
    • MediaController का इस्तेमाल करके वीडियो चलाने के दौरान, CastPlayer की पहचान करने के लिए getDeviceInfo() लागू करें (#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 से बदलने पर, reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889) के ज़रिए Player.Listener#onTimelineChanged को कॉल किया जाए.
    • प्रोग्रेसिव मीडिया के लिए, सिर्फ़ चुने गए ट्रैक को बफ़र की गई पोज़िशन में शामिल करें (#10361).
    • ExoPlayer के सभी लॉग आउटपुट के लिए कस्टम लॉगर की अनुमति दें (#9752).
    • DefaultMediaSourceFactory में setDataSourceFactory को लागू करने की समस्या को ठीक करें. यह सुविधा कुछ मामलों में काम नहीं कर रही थी (#116).
  • एक्सट्रैक्टर:
    • H265 के शॉर्ट टर्म रेफ़रंस पिक्चर सेट को पार्स करने की समस्या को ठीक किया गया (#10316).
    • esds बॉक्स से बिटरेट पार्स करने की समस्या ठीक करें (#10381).
  • डैश:
    • मेनिफ़ेस्ट से ClearKey लाइसेंस का यूआरएल पार्स करें (#10246).
  • यूज़र इंटरफ़ेस:
    • पक्का करें कि TalkBack, वीडियो चलाने के कंट्रोल वाले मेन्यू में, फ़िलहाल चालू स्पीड के विकल्प के बारे में बताए (#10298).
  • RTSP:
    • VP8 फ़्रैगमेंट किए गए पैकेट को मैनेज करने की सुविधा जोड़ें (#110).
  • Leanback एक्सटेंशन:
    • playWhenReady LeanbackAdapter में हुए बदलावों को सुनें (10420).
  • कास्ट करना:
    • CastTimeline (#25, #8212) में, प्लेलिस्ट के तरीकों के तौर पर पास किए गए MediaItem का इस्तेमाल, Window.mediaItem के तौर पर करें.
    • Player.getMetadata() और Listener.onMediaMetadataChanged() के साथ CastPlayer (#25) का इस्तेमाल करें.

वर्शन 1.0.0-beta01

16 जून, 2022

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

यह ExoPlayer 2.18.0 रिलीज़ से जुड़ा है.

  • मुख्य लाइब्रेरी:
    • MediaMetricsManager की मदद से, Android प्लैटफ़ॉर्म की गड़बड़ी की जानकारी देने वाली सुविधा चालू करें. ExoPlayer, प्लैटफ़ॉर्म पर वीडियो चलाने से जुड़े इवेंट और परफ़ॉर्मेंस डेटा को फ़ॉरवर्ड करेगा. इससे, डिवाइस पर सिस्टम की परफ़ॉर्मेंस और डीबग करने से जुड़ी जानकारी देने में मदद मिलती है. अगर डिवाइस के उपयोगकर्ता ने इस्तेमाल और गड़बड़ी की जानकारी शेयर करने की सुविधा चालू की है, तो Google भी यह डेटा इकट्ठा कर सकता है. ऐप्लिकेशन, ExoPlayer.Builder.setUsePlatformDiagnostics(false) की मदद से, ExoPlayer के लिए प्लैटफ़ॉर्म के डाइग्नोस्टिक्स में योगदान देने से ऑप्ट-आउट कर सकते हैं.
    • MergingMediaSource का इस्तेमाल करते समय, ट्रैक बार-बार रीसेट होने की गड़बड़ी को ठीक करें. उदाहरण के लिए, सबटाइटल साइड-लोड करते समय और वीडियो चलाने के दौरान चुने गए सबटाइटल को बदलते समय ऐसा होता है (#10248).
    • एपीआई 29 और 30 पर, 5G-NSA नेटवर्क टाइप का पता लगाना बंद करें. इन वीडियो को चलाने के लिए, 4G नेटवर्क की ज़रूरत होगी.
    • null को MediaSource.Factory.setDrmSessionManagerProvider और MediaSource.Factory.setLoadErrorHandlingPolicy पर पास करने की अनुमति न दें. ज़रूरत पड़ने पर, DefaultDrmSessionManagerProvider और DefaultLoadErrorHandlingPolicy के उदाहरणों को साफ़ तौर पर पास किया जा सकता है.
    • 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.buildUponParameters और DefaultTrackSelector.Parameters.buildUpon को बदलकर, इस्तेमाल में न होने वाले DefaultTrackSelector.ParametersBuilder के बजाय, DefaultTrackSelector.Parameters.Builder दिखाएं.
    • DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities जोड़ें, जो डिफ़ॉल्ट रूप से चालू होता है. चालू होने पर, DefaultTrackSelector ऐसे ऑडियो ट्रैक को प्राथमिकता देगा जिनके चैनल की संख्या, डिवाइस के आउटपुट की क्षमताओं से ज़्यादा न हो. DefaultTrackSelector, हैंडहेल्ड डिवाइसों पर मल्टीचैनल ऑडियो फ़ॉर्मैट के बजाय, स्टीरियो/मोनो फ़ॉर्मैट को प्राथमिकता देगा. ऐसा तब तक होगा, जब तक मल्टीचैनल फ़ॉर्मैट को स्पेशलाइज़्ड (Android 12L+) या डॉल्बी सराउंड साउंड फ़ॉर्मैट में नहीं बदला जाता. इसके अलावा, ऑडियो स्पेसलाइज़ेशन की सुविधा वाले डिवाइसों पर, DefaultTrackSelector स्पेशलाइज़र प्रॉपर्टी में होने वाले बदलावों पर नज़र रखेगा और इनके आधार पर नया ट्रैक चुनने की सुविधा को ट्रिगर करेगा. television यूज़र इंटरफ़ेस (यूआई) मोड वाले डिवाइसों पर, ये पाबंदियां लागू नहीं होतीं. साथ ही, सबसे ज़्यादा चैनल वाले फ़ॉर्मैट को प्राथमिकता दी जाएगी. इस सुविधा को चालू करने के लिए, DefaultTrackSelector इंस्टेंस को Context के साथ बनाया जाना चाहिए.
  • वीडियो:
    • DummySurface का नाम बदलकर PlaceholderSurface करें.
    • MediaCodecVideoRenderer.getCodecMaxInputSize में AV1 के साथ काम करने की सुविधा जोड़ें.
  • ऑडियो:
    • LG AC3 ऑडियो डिकोडर का इस्तेमाल करके, विज्ञापन के लिए गैर-स्टैंडर्ड MIME टाइप का इस्तेमाल करना.
    • एपीआई < 21 पर, एआरटी की पुष्टि में लगने वाले समय को कम करने के लिए, AudioAttributes.getAudioAttributesV21() के रिटर्न टाइप को android.media.AudioAttributes से नए AudioAttributesV21 रैपर क्लास में बदलें.
    • अगर फ़ॉर्मैट के ऑडियो चैनल की संख्या सेट नहीं है, तो प्लैटफ़ॉर्म (एपीआई 29 और उसके बाद के वर्शन) से क्वेरी करें या ऑडियो पासथ्रू के लिए ऑडियो कोडिंग चैनल की संख्या का अनुमान लगाएं. ऐसा एचएलएस के बिना चंक वाले प्रिपरेशन (10204) के साथ होता है.
    • अगर डिकोडर 12 चैनल वाला PCM ऑडियो आउटपुट करता है, तो चैनल मास्क AudioFormat.CHANNEL_OUT_7POINT1POINT4 के साथ AudioTrack को कॉन्फ़िगर करें (#10322.
  • डीआरएम
    • पक्का करें कि फ़ॉर्मैट बदलने के तुरंत बाद, डीआरएम सेशन हमेशा सही तरीके से अपडेट हो (10274).
  • टेक्स्ट:
    • List<Cue> के बजाय, Player.getCurrentCues() को CueGroup पर वापस ले जाने के लिए बदलें.
    • एसएसए: BorderStyle == 3 के लिए OutlineColour स्टाइल सेटिंग की सुविधा जोड़ें (यानी कि OutlineColour, क्यू का बैकग्राउंड सेट करता है) (#8435).
    • CEA-708: डेटा को कई सेवा ब्लॉक में पार्स करें और उन ब्लॉक को अनदेखा करें जो फ़िलहाल चुने गए सेवा नंबर से जुड़े नहीं हैं.
    • RawCcExtractor को हटाएं. इसका इस्तेमाल सिर्फ़ Google के अंदर इस्तेमाल होने वाले सबटाइटल फ़ॉर्मैट को मैनेज करने के लिए किया जाता था.
  • एक्सट्रैक्टर:
    • AVI फ़ॉर्मैट के लिए सहायता जोड़ी गई है (#2092).
    • Matroska: Opus ट्रैक के लिए DiscardPadding को पार्स करें.
    • MP4: esds बॉक्स से बिटरेट पार्स करें.
    • Ogg: डुप्लीकेट Opus आईडी और टिप्पणी हेडर की अनुमति दें (#10038).
  • यूज़र इंटरफ़ेस:
    • अगर useController=false (#9605) है, तो PlayerView पर सेट किए गए OnClickListeners पर इवेंट की डिलीवरी ठीक करें. सभी व्यू कॉन्फ़िगरेशन के लिए, OnLongClickListener को इवेंट डिलीवरी की सुविधा भी ठीक करें.
    • ACTION_UP से पहले PlayerView के दायरे से बाहर निकलने वाले टच इवेंट के क्रम को क्लिक के तौर पर गलत तरीके से इस्तेमाल करने की समस्या को ठीक करें (#9861).
    • PlayerView की सुलभता से जुड़ी समस्या को ठीक करें. इस समस्या की वजह से, टैप करने पर कंट्रोल छिपने के बजाय, वीडियो चलाने की सुविधा चालू या बंद हो सकती है (#8627).
    • ExoPlayer के बजाय Player इंटरफ़ेस के साथ काम करने के लिए, TrackSelectionView और TrackSelectionDialogBuilder को फिर से लिखें. इससे व्यू को Player के अन्य वर्शन के साथ इस्तेमाल किया जा सकता है. साथ ही, यूज़र इंटरफ़ेस (यूआई) मॉड्यूल से ExoPlayer मॉड्यूल पर निर्भरता हट जाती है. यह एक ऐतिहासिक बदलाव है.
    • PlayerView ट्रैक सिलेक्टर में, फ़ोर्स किए गए टेक्स्ट ट्रैक न दिखाएं. साथ ही, अगर "कोई नहीं" चुना गया है, तो फ़ोर्स किए गए सही टेक्स्ट ट्रैक को चुना हुआ रखें (#9432).
  • डैश:
    • DTS 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).
    • AMR के लिए आरटीपी रीडर जोड़ें. फ़िलहाल, सिर्फ़ मोनो-चैनल, नॉन-इंटरलीव्ड AMR स्ट्रीम काम करती हैं. कंपाउंड AMR आरटीपी पेलोड काम नहीं करता. (#46)
    • VP8 के लिए आरटीपी रीडर जोड़ें (#47).
    • WAV के लिए आरटीपी रीडर जोड़ें (#56).
    • आरटीएसपी के लिए, पुष्टि करने वाला बुनियादी हेडर ठीक करें. (#9544).
    • SDP के ज़रूरी फ़ील्ड की जांच करना बंद करें, क्योंकि ExoPlayer को इनकी ज़रूरत नहीं है (#10049).
    • आरटीएसपी टाइमिंग को पार्स करते समय, चेक किया गया अपवाद डालें (#10165).
    • VP9 के लिए आरटीपी रीडर जोड़ें (#47).
    • OPUS के लिए आरटीपी रीडर जोड़ें (#53).
  • डेटा सोर्स:
    • DummyDataSource का नाम बदलकर PlaceholderDataSource करें.
    • OkHttp के इंटरप्ट हैंडल करने की समस्या को हल करना.
  • सेशन:
    • अनुरोधों को एसिंक्रोनस तरीके से हल करने की अनुमति देने के लिए, MediaSession.MediaItemFiller को MediaSession.Callback.onAddMediaItems से बदलें.
    • जब MediaController किसी लेगसी मीडिया सेशन से कनेक्ट होता है, तो setMediaItems(s) के तरीके इस्तेमाल किए जा सकते हैं.
    • MediaController.setMediaUri और MediaSession.Callback.onSetMediaUri हटाएं. MediaController.setMediaItem और MediaSession.Callback.onAddMediaItems का इस्तेमाल करके भी यही काम किया जा सकता है.
    • मीडिया चलाने के लिए, onSetMediaUri के बजाय MediaSession.Callback.onAddMediaItems पर लेगसी MediaController कॉल फ़ॉरवर्ड करें.
    • सूचना को पसंद के मुताबिक बनाने के लिए, MediaNotification.Provider और DefaultMediaNotificationProvider जोड़ें.
    • आर्टवर्क की इमेज डाउनलोड करने के लिए, BitmapLoader और SimpleBitmapLoader जोड़ें.
    • लेगसी सेशन के साथ काम करने की सुविधा देने के लिए, MediaSession.setCustomLayout() जोड़ें.
    • लेगसी सेशन के साथ सुविधाओं की समानता देने के लिए, MediaSession.setSessionExtras() जोड़ें.
    • MediaSession.MediaSessionCallback का नाम बदलकर MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback का नाम बदलकर MediaLibrarySession.Callback, और MediaSession.Builder.setSessionCallback का नाम बदलकर setCallback करें.
    • MediaControllerImplLegacy में एनपीई को ठीक करें (#59).
    • टाइमलाइन में बदलाव होने पर, सेशन की पोज़िशन की जानकारी अपडेट करना(#51).
    • कंट्रोलर रिलीज़ करने के बाद, MediaControllerImplBase में एनपीई को ठीक करें (#74).
  • विज्ञापन प्लेबैक / IMA:
    • Media Rating Council (एमआरसी) के सुझावों के मुताबिक, विज्ञापन पोलिंग रेट को हर 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).
  • टेक्स्ट:
    • SubtitleConfiguration फ़ील्ड को प्राथमिकता देने के लिए, SingleSampleMediaSource.Factory.setTrackId और MediaItem.SubtitleConfiguration.Builder.setId के इंटरैक्शन को ठीक करें. अगर Factory वैल्यू सेट नहीं है, तो Factory वैल्यू पर स्विच करें (#10016).
  • विज्ञापन प्लेबैक:
    • लाइव एचएलएस एसएसएआई स्ट्रीम में, विज्ञापन के बीच के समय में ऑडियो के कम चलने की समस्या को ठीक करें.

वर्शन 1.0.0-alpha02

2 मार्च, 2022

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

यह ExoPlayer 2.17.0 रिलीज़ से जुड़ा है.

  • मुख्य लाइब्रेरी:
    • सुरक्षित तरीका DefaultRenderersFactory.getCodecAdapterFactory() जोड़ें, ताकि DefaultRenderersFactory के ऐसे सबक्लास जो buildVideoRenderers() या buildAudioRenderers() को बदल दें, वे कोडेक अडैप्टर फ़ैक्ट्री को ऐक्सेस कर सकें और उसे अपने बनाए गए MediaCodecRenderer इंस्टेंस को पास कर सकें.
    • ICY हेडर फ़ील्ड name और genre को क्रमशः MediaMetadata.station और MediaMetadata.genre पर भेजें, ताकि वे Player.Listener.onMediaMetadataChanged() (#9677) के ज़रिए ऐप्लिकेशन तक पहुंच सकें.
    • DefaultHttpDataSource#getResponseHeaders से शून्य वैल्यू वाली कुंजियां हटाएं.
    • MediaCodec इंस्टेंस बनाने में समस्या होने पर, डिवाइस को स्लीप मोड में डालें और फिर से कोशिश करें. इससे, कुछ डिवाइसों पर होने वाली एक समस्या को हल किया जा सकता है. यह समस्या तब होती है, जब किसी डिवाइस पर किसी सुरक्षित कोडेक से दूसरे कोडेक पर स्विच किया जाता है (#8696).
    • उपयोगकर्ताओं को MediaCodec से मेट्रिक डेटा पाने की अनुमति देने के लिए, MediaCodecAdapter.getMetrics() जोड़ें. (#9766).
    • Maven की डिपेंडेंसी रिज़ॉल्यूशन की समस्या को ठीक करें (#8353).
    • लाइव स्ट्रीम के लिए, स्पीड अपने-आप अडजस्ट होने की सुविधा बंद करें. ऐसा उन लाइव स्ट्रीम के लिए करें जिनमें कम लेटेंसी की सुविधाएं नहीं हैं और जिनमें स्पीड सेट करने के लिए, उपयोगकर्ता का अनुरोध नहीं किया गया है (#9329).
    • DecoderCounters#inputBufferCount का नाम बदलकर queuedInputBufferCount करें.
    • SimpleExoPlayer.renderers को निजी बनाएं. रेंडरर को ExoPlayer.getRenderer के ज़रिए ऐक्सेस किया जा सकता है.
    • Player.EventFlags में मौजूद वैल्यू से मैच करने के लिए, AnalyticsListener.EventFlags की कुछ स्थिर वैल्यू अपडेट की गई हैं.
    • AnalyticsCollector को इंटरफ़ेस और डिफ़ॉल्ट तौर पर लागू किए जाने वाले वर्शन में बांटें, ताकि किसी ऐप्लिकेशन को इसकी ज़रूरत न होने पर, R8 इसे हटा सके.
  • ट्रैक चुनना:
    • ट्रैक चुनने के दौरान, वीडियो में ऑब्जेक्ट की भूमिका के लिए, पसंदीदा फ़्लैग का इस्तेमाल करने की सुविधा जोड़ी गई है (#9402).
    • वीडियो ट्रैक चुनने के लॉजिक को अपडेट किया गया है, ताकि पसंदीदा MIME टाइप और भूमिका के फ़्लैग को ध्यान में रखते हुए, अडैप्टेशन के लिए एक से ज़्यादा वीडियो ट्रैक चुने जा सकें (#9519).
    • वीडियो और ऑडियो ट्रैक चुनने के लॉजिक को अपडेट किया गया है, ताकि सिर्फ़ ऐसे फ़ॉर्मैट चुने जा सकें जिनमें डिकोडर और हार्डवेयर के लिए एक जैसी सुविधाएं हों (#9565).
    • अगर मुख्य और हार्डवेयर से तेज़ी से वीडियो डिकोड करने वाले डिकोडर, एक से ज़्यादा कोडेक के साथ काम करते हैं, तो वीडियो ट्रैक चुनने के लॉजिक को अपडेट करें, ताकि बेहतर कोडेक को प्राथमिकता दी जा सके (#4835).
    • ट्रैक चुनने से जुड़ी तकनीकी पाबंदियों (उदाहरण के लिए, पसंदीदा MIME टाइप या चैनल की ज़्यादा से ज़्यादा संख्या) के बजाय, ऑडियो कॉन्टेंट की प्राथमिकताओं (उदाहरण के लिए, "डिफ़ॉल्ट" ऑडियो ट्रैक या सिस्टम की स्थानीय भाषा से मैच करने वाला ट्रैक) को प्राथमिकता दें.
    • ट्रैक चुनने से जुड़ी समस्या को ठीक किया गया. इस समस्या में, एक ट्रैक ग्रुप को बदलने पर, उसी तरह के अन्य ट्रैक ग्रुप बंद नहीं होते थे (#9675).
    • ट्रैक चुनने से जुड़ी समस्या को ठीक किया गया है. इसमें, खाली और नॉन-खाली ट्रैक के बदलावों को सही तरीके से लागू नहीं किया जा रहा था (#9649).
    • TrackGroupArray में डुप्लीकेट TrackGroup को प्रतिबंधित करें. TrackGroup के कंस्ट्रक्टर में id सेट करके, TrackGroup को हमेशा अलग किया जा सकता है. इससे, ऐप्लिकेशन को बैकग्राउंड में भेजने के बाद, ट्रैक बदलने की सुविधा चालू होने पर, वीडियो चलाने पर होने वाली क्रैश की समस्या ठीक हो गई है (#9718).
    • AdaptiveTrackSelection में लॉजिक में बदलाव करें, ताकि ज़रूरत के मुताबिक नेटवर्क बैंडविड्थ होने पर भी क्वालिटी को बेहतर बनाया जा सके. भले ही, वीडियो लाइव एज (#9784) के बहुत करीब हो.
  • वीडियो:
    • ज़रूरत पड़ने पर, काम करने वाले H264/H265 डिकोडर का इस्तेमाल करने के लिए, Dolby Vision के लिए डिकोडर फ़ॉलबैक लॉजिक को ठीक करें.
  • ऑडियो:
    • ज़रूरत पड़ने पर, काम करने वाले E-AC3 डिकोडर का इस्तेमाल करने के लिए, Dolby Atmos (E-AC3-JOC) के लिए डिकोडर फ़ॉलबैक लॉजिक को ठीक करें.
    • 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 फ़ील्ड जोड़ें, जो कॉन्फ़िगरेशन से बनाए गए सबटाइटल ट्रैक के Format.id फ़ील्ड में प्रोपैगेट किया जाता है (#9673).
    • Matroska कंटेनर में WebVTT सबटाइटल के लिए बुनियादी सहायता जोड़ें (#9886).
    • Cea708Decoder को सेवा ब्लॉक के एलान किए गए साइज़ से ज़्यादा पढ़ने से रोकना.
  • डीआरएम:
    • DrmSessionManager.(pre)acquireSession से playbackLooper को हटाएं. जब किसी ऐप्लिकेशन में कस्टम MediaSource में DrmSessionManager का इस्तेमाल किया जाता है, तो playbackLooper को DrmSessionManager.setPlayer पर पास करना होगा.
  • विज्ञापन प्लेबैक / 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 का इस्तेमाल करें (#9800).
    • जब आरटीएसपी ट्रैक का टाइमिंग उपलब्ध न हो, तब उसे हैंडल करना (#9775).
    • अमान्य RTP-Info हेडर वैल्यू को अनदेखा करें (#9619).
  • ट्रांसफ़ॉर्मर:
    • एपीआई के लिए ज़रूरी कम से कम वर्शन को 21 पर सेट करें.
    • TransformationException का इस्तेमाल अब ट्रांसफ़ॉर्मेशन के दौरान होने वाली गड़बड़ियों के बारे में बताने के लिए किया जाता है.
    • ट्रांसफ़ॉर्मेशन के विकल्पों की जानकारी देने के लिए, TransformationRequest जोड़ें.
    • एक से ज़्यादा लोगों को रजिस्टर करने की अनुमति दें.
    • कोडेक आउटपुट को कुछ हद तक पढ़ने पर, ट्रांसफ़ॉर्मर के फ़ंक्शन के रुकने की समस्या को ठीक किया गया.
    • Transformer.getProgress में, 'वीडियो को एक साथ चलाने वाला टूल' रिलीज़ करते समय, संभावित एनपीई ठीक करें.
    • ट्रांसफ़ॉर्मेशन लागू करने के लिए, कोई डेमो ऐप्लिकेशन जोड़ें.
  • MediaSession एक्सटेंशन:
    • डिफ़ॉल्ट रूप से, MediaSessionConnector अब प्लेलिस्ट को रोकने पर मिटा देता है. जिन ऐप्लिकेशन को प्लेलिस्ट को बनाए रखने की ज़रूरत है वे कनेक्टर पर setClearMediaItemsOnStop(false) को कॉल कर सकते हैं.
  • कास्ट एक्सटेंशन:
    • उस गड़बड़ी को ठीक किया गया जिसकी वजह से CastPlayer, onIsPlayingChanged को सही तरीके से कॉल नहीं कर पा रहा था (#9792).
    • DefaultMediaItemConverter (#9663) की मदद से, आर्टवर्क के साथ ऑडियो मेटाडेटा का इस्तेमाल करें.
  • FFmpeg एक्सटेंशन:
    • build_ffmpeg.sh को GNU के बजाय, LLVM के bin utils पर निर्भर करें (#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 हटाएं. ActionFileUpgradeUtil का इस्तेमाल करके, लेगसी ऐक्शन फ़ाइलों को DefaultDownloadIndex में मर्ज करने के लिए, ExoPlayer 2.16.1 या उससे पहले के वर्शन का इस्तेमाल करें.
    • 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 मॉड्यूल से बदल दिया गया है. इससे प्लेयर और मीडिया सेशन के बीच सीधे तौर पर इंटिग्रेशन होता है. इसके लिए, अडैप्टर/कनेक्टर क्लास का इस्तेमाल करने की ज़रूरत नहीं होती.