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).
- MP3: अगर
- वीडियो:
onOutputFormatChanged
को प्रोसेस करते समय,MediaCodecAdapter
की दी गई पिक्सल आसपेक्ट रेशियो की वैल्यू का इस्तेमाल करने की सुविधा को रोलबैक किया गया (#1371).
- टेक्स्ट:
ReplacingCuesResolver.discardCuesBeforeTimeUs
में मौजूद उस गड़बड़ी को ठीक किया गया है जिसमेंtimeUs
पर चालू होने वाली क्यू को गलत तरीके से खारिज कर दिया गया था. यह क्यू पहले शुरू हो चुकी थी, लेकिन अब तक खत्म नहीं हुई थी (#1939).
- मेटाडेटा:
- Vorbis टिप्पणियों से डिस्क/ट्रैक की संख्या और शैली को
MediaMetadata
(#1958) में निकालें.
- Vorbis टिप्पणियों से डिस्क/ट्रैक की संख्या और शैली को
वर्शन 1.5.0
27 नवंबर, 2024
androidx.media3:media3-*:1.5.0
रिलीज़ हो गया है.
वर्शन 1.5.0 में ये कमिट शामिल हैं.
- सामान्य लाइब्रेरी:
ForwardingSimpleBasePlayer
जोड़ें, ताकि थोड़े बदलावों के साथ किसी दूसरे प्लेयर पर फ़ॉरवर्ड किया जा सके. साथ ही, यह भी पक्का किया जा सके कि सुनने वालों को पूरी तरह से सही जानकारी दी जा रही हो और उन्हें सही तरीके से मैनेज किया जा रहा हो (#1183).SimpleBasePlayer.State.playlist
कोgetPlaylist()
से बदलें.- प्लेलिस्ट का स्ट्रक्चर बनाने के बजाय,
SimpleBasePlayer.State.Builder.setPlaylist()
के लिए बदलाव करने की सुविधा जोड़ें, ताकि सीधे तौर परTimeline
और मौजूदाTracks
औरMetadata
की जानकारी दी जा सके. minSdk
को 21 (Android Lollipop) पर सेट करें. यह सभी अन्य AndroidX लाइब्रेरी के साथ अलाइन है.androidx.media3:media3-common-ktx
आर्टफ़ैक्ट जोड़ें, जो कॉमन लाइब्रेरी के ऊपर बनाई गई, Kotlin के हिसाब से बनी सुविधाएं देता हैmedia3-common-ktx
लाइब्रेरी मेंPlayer.Events
को सुनने के लिए, कोरूटीन को स्पिन करने के लिएPlayer.listen
सस्पेंड करने वाला एक्सटेंशन फ़ंक्शन जोड़ें.- मैन्युअल तरीके से, लाइन के बाहर रखी गई इनर क्लास से
@DoNotInline
एनोटेशन हटाएं. इन क्लास को इस तरह डिज़ाइन किया गया है कि रनटाइम क्लास की पुष्टि न हो पाने से बचा जा सके. R8 के नए वर्शन में, अब रनटाइम से जुड़ी गड़बड़ियों से बचने के लिए, इन कॉल को अपने-आप आउट-ऑफ़-लाइन किया जाता है. इसलिए, अब मैन्युअल तरीके से आउट-ऑफ़-लाइन करने की ज़रूरत नहीं है. लाइब्रेरी के सभी Gradle उपयोगकर्ताओं को, पहले से ही Android Gradle प्लग इन के ऐसे वर्शन का इस्तेमाल करना होगा जो R8 के ऐसे वर्शन का इस्तेमाल करता हो जोcompileSdk = 35
की वजह से ऐसा करता है. Gradle के अलावा किसी दूसरे बिल्ड सिस्टम का इस्तेमाल करने वाले लाइब्रेरी के उपयोगकर्ताओं को यह पक्का करना होगा कि R8 के बराबर का छोटा/अस्पष्ट करने वाला चरण, रनटाइम क्लास की पुष्टि में होने वाली गड़बड़ियों से बचने के लिए, अपने-आप आउट-ऑफ़-लाइन होने की इसी तरह की प्रोसेस करता है. यह बदलाव, अन्य AndroidX लाइब्रेरी में पहले ही कर दिया गया है.
- ExoPlayer:
- अब हर मीडिया आइटम के लिए,
MediaCodecRenderer.onProcessedStreamChange()
को कॉल किया जा सकता है. पहले, इसे पहले चरण के लिए नहीं बुलाया जाता था. इसे चालू करने के लिए,MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
का इस्तेमाल करें. - गड़बड़ी होने पर,
PreloadMediaSource.PreloadControl.onPreloadError
को लागू करने की अनुमति देने के लिए,PreloadMediaSource.PreloadControl
जोड़ें. - ऐप्लिकेशन में प्रीलोड इवेंट भेजने के लिए,
BasePreloadManager.Listener
जोड़ें. - एसएनटीपी क्लाइंट के टाइम आउट को बदलने की अनुमति दें और टाइम आउट होने पर, अन्य पतों को फिर से आज़माएं (#1540).
MediaCodecAdapter.Configuration.flags
को हटाएं, क्योंकि फ़ील्ड हमेशा शून्य था.- Wear OS API 35 और उसके बाद के वर्शन पर, उपयोगकर्ता को प्लेबैक के लिए डिवाइस में पहले से मौजूद स्पीकर चुनने की अनुमति दें. ऐसा तब ही करें, जब डिवाइस पर इस सुविधा का विज्ञापन किया गया हो.
- ऑडियो फ़ोकस मैनेज करने की सुविधा चालू होने तक,
Context.getSystemService(Context.AUDIO_SERVICE)
को कॉल ब्लॉक करने की सुविधा देर से चालू करें. इससे यह पक्का होता है कि ऑडियो फ़ोकस मैनेजमेंट की सुविधा चालू न होने पर, कॉल को ब्लॉक न किया जाए (#1616). - वीडियो लोड न होने पर भी, बफ़र किए गए वीडियो को चलाने की अनुमति दें (#1571).
- जब अलग-अलग रेंडरर, वीडियो चलाने की अनुमति देते हैं, तब सिग्नल देने के लिए
AnalyticsListener.onRendererReadyChanged()
जोड़ें. MediaCodec
को असाइनोक्रोनस मोड (एपीआई 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
टाइप असाइन करें.
- icy या vnd.dvb.ait कॉन्टेंट वाले ट्रैक को
- इमेज:
- Glide या Coil जैसी बाहरी इमेज लोड करने वाली लाइब्रेरी के साथ आसानी से इंटिग्रेट करने के लिए,
ExternallyLoadedImageDecoder
जोड़ें.
- Glide या Coil जैसी बाहरी इमेज लोड करने वाली लाइब्रेरी के साथ आसानी से इंटिग्रेट करने के लिए,
- 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).
- टेक्स्ट ट्रैक के साथ SmoothStreaming वाली स्ट्रीम चलाते समय मिलने वाली
- आरटीएसपी एक्सटेंशन:
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1 वगैरह):
- IAMF डिकोडर मॉड्यूल जोड़ें. यह IAMF ट्रैक वाली एमपी4 फ़ाइलों को चलाने की सुविधा देता है. इसके लिए, ऑडियो सिंथेसाइज़ करने के लिए libiamf नेटिव लाइब्रेरी का इस्तेमाल किया जाता है.
- प्लेबैक की सुविधा, स्टीरियो लेआउट के साथ-साथ स्पेशलाइज़ेशन के साथ 5.1 में चालू होती है. साथ ही, हेड ट्रैकिंग की सुविधा भी चालू की जा सकती है. हालांकि, फ़िलहाल, दोनों कानों से सुनने की सुविधा उपलब्ध नहीं है.
- Android 15 पर, डिकोडर एक्सटेंशन के लिए 16 केबी वाले पेज का इस्तेमाल करने की सुविधा जोड़ें (#1685).
- IAMF डिकोडर मॉड्यूल जोड़ें. यह IAMF ट्रैक वाली एमपी4 फ़ाइलों को चलाने की सुविधा देता है. इसके लिए, ऑडियो सिंथेसाइज़ करने के लिए libiamf नेटिव लाइब्रेरी का इस्तेमाल किया जाता है.
- 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:
- एक्सट्रैक्टर:
- MP3:
Info
फ़्रेम में लंबाई फ़ील्ड के आधार पर, आखिर में मौजूद गैर-MP3 डेटा को सही तरीके से अनदेखा करके,Searched too many bytes
गड़बड़ी को ठीक करें (#1480).
- MP3:
- टेक्स्ट:
- TTML: प्रतिशत
tts:fontSize
वैल्यू को मैनेज करने की सुविधा को ठीक करें, ताकि यह पक्का किया जा सके कि वे प्रतिशतtts:fontSize
वैल्यू वाले पैरंट नोड से सही तरीके से इनहेरिट की गई हैं. LegacySubtitleUtil
मेंIndexOutOfBoundsException
को ठीक करें, क्योंकिSubtitle
में आउटपुट के शुरू होने का अनुरोध किया गया समय, आखिरी इवेंट के समय से ज़्यादा या उसके बराबर होने पर, इसे गलत तरीके से मैनेज किया गया था (#1516).
- TTML: प्रतिशत
- डीआरएम:
- एपीआई लेवल 31 और इसके बाद के वर्शन वाले डिवाइसों पर, L1 Widevine कॉन्टेंट चलाते समय मिलने वाली
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
गड़बड़ी को ठीक करना. यह गड़बड़ी, फ़्रेमवर्क केMediaDrm.requiresSecureDecoder
तरीक़े (#1603) को अधूरा लागू करने की वजह से होती है.
- एपीआई लेवल 31 और इसके बाद के वर्शन वाले डिवाइसों पर, L1 Widevine कॉन्टेंट चलाते समय मिलने वाली
- असर:
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).
- MP4 से ID3 क्रम के टैग की मैपिंग ठीक करें. पहले, 'एल्बम के क्रम' (
- इमेज:
- स्क्वेयर साइज़ के अलावा, 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 एक्सटेंशन:
- Cast एक्सटेंशन:
- उस गड़बड़ी को ठीक करें जिसकी वजह से Media3 मीडिया आइटम में,
MediaQueueItem
के एल्बम के टाइटल को कलाकार के टाइटल में बदल दिया गया था (#1255).
- उस गड़बड़ी को ठीक करें जिसकी वजह से Media3 मीडिया आइटम में,
- टेस्ट करने के लिए उपयोगी टूल:
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).
- WebVTT: एक-दूसरे के बाद दिखने वाले सीयू से,
- डीआरएम:
NoSuchMethodError
से जुड़ी समस्या को हल करना, जो Android 14 वाले कुछ डिवाइसों परResourceBusyException
याNotProvisionedException
के बजायMediaDrm
फ़्रेमवर्क से दिख सकती है (#1145).
- असर:
- कलर स्पेस को बदलकर, पीक्यू को एसडीआर टोन-मैपिंग में बेहतर बनाया गया.
- सेशन:
- यूज़र इंटरफ़ेस:
- अगर
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).
- ऑडियो:
- वीडियो:
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
के प्रज़ेंटेशन के समय के करीब थंबनेल दिए जाते हैं.
- DASH थंबनेल के लिए सहायता जोड़ी गई. ग्रिड इमेज को काटा जाता है और अलग-अलग
- डीआरएम:
- डिफ़ॉल्ट रूप से, डीआरएम कॉन्टेंट में 'साफ़ लीड' वाले एन्क्रिप्ट (सुरक्षित) नहीं किए गए सैंपल तुरंत चलाएं. भले ही, बाद में एन्क्रिप्ट किए गए सैंपल के लिए कुंजियां अब तक तैयार न हों. अगर वीडियो चलाने के दौरान, एन्क्रिप्ट किए गए सैंपल तक पहुंचने पर भी कुंजियां तैयार नहीं होती हैं, तो वीडियो बीच में रुक सकता है. हालांकि, पहले ऐसा होने पर वीडियो चलना शुरू ही नहीं होता था. इस व्यवहार को
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).
- JPEG मोशन फ़ोटो में, सेकंडरी (चलने न देने वाले) HEVC ट्रैक को
- ऑडियो:
- एक से ज़्यादा बार कॉल करने पर,
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
को ठीक करें. साफ़ तौर पर दिखने वाले कॉन्टेंट को चलाने के लिए, सुरक्षित डिकोडर का गलत तरीके से इस्तेमाल करने की वजह से गड़बड़ी हुई.
- एपीआई लेवल 33 और उसके बाद के वर्शन के लिए, गलत ClearKey
- सेशन:
- कस्टम की और वैल्यू को
MediaMetadataCompat
सेMediaMetadata.extras
औरMediaMetadata.extras
सेMediaMetadataCompat
में डालें (#756, #802). - लेगसी कंट्रोलर के लिए,
notifyChildrenChanged
ब्रॉडकास्ट करने की सुविधा ठीक करें (#644). - एक गड़बड़ी को ठीक किया गया है. इसकी वजह से, सूचना के बंद
setWhen
टाइमर के लिए, नेगेटिव समय सेट करने पर कुछ डिवाइसों पर क्रैश होता था (#903). IllegalStateException
को ठीक करें, जब सूचना के पहले अपडेट का अनुरोध करने पर, मीडिया सूचना कंट्रोलर कनेक्ट नहीं हो पाता (#917).
- कस्टम की और वैल्यू को
- यूज़र इंटरफ़ेस:
- DASH एक्सटेंशन:
- DASH मेनिफ़ेस्ट में Dolby के लिए, "f800" को चैनल की संख्या के तौर पर पांच के तौर पर पार्स करें (#688).
- डिकोडर एक्सटेंशन (FFmpeg, VP9, AV1, MIDI वगैरह):
- 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) वाली गड़बड़ी को ठीक किया गया.
- एमपी4 और Matroska में 24/32-बिट बिग-एंडियन पीसीएम के लिए सहायता जोड़ें. साथ ही, एमपी4 में
- वीडियो:
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
की वजह से, वीडियो चलाने पर होने वाली रुकावट को ठीक करता है. इसके लिए, यह सिस्टम डायलॉग बॉक्स दिखाता है, ताकि उपयोगकर्ता कोई सही ऑडियो आउटपुट (जैसे, ब्लूटूथ हेडफ़ोन) कनेक्ट कर सके. अगर टाइम आउट (डिफ़ॉल्ट रूप से पांच मिनट) के अंदर कोई डिवाइस कनेक्ट हो जाता है, तो ऑडियो अपने-आप फिर से चलने लगेगा.
- Wear OS डिवाइसों के लिए
- डाउनलोड:
- Android 14 के साथ काम करने के लिए,
DownloadService
के लिए "डेटा सिंक" फ़ोरग्राउंड सेवा का टाइप बताएं. इस सेवा का इस्तेमाल करते समय, ऐप्लिकेशन को मेनिफ़ेस्ट मेंdataSync
कोforegroundServiceType
के तौर पर जोड़ना होगा. साथ ही,FOREGROUND_SERVICE_DATA_SYNC
अनुमति (#11239) भी जोड़नी होगी.
- Android 14 के साथ काम करने के लिए,
- एचएलएस एक्सटेंशन:
- 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).
- उस गड़बड़ी को ठीक किया गया है जिसकी वजह से किसी प्लैटफ़ॉर्म को बंद करने पर, Leanback कोड में
- टेस्ट करने के लिए उपयोगी टूल:
TestExoPlayerBuilder
औरFakeClock
को Espresso यूज़र इंटरफ़ेस (यूआई) जांच और Compose यूज़र इंटरफ़ेस (यूआई) जांच के साथ काम करने लायक बनाएं. इससे, Espresso या Compose व्यू के इंटरैक्शन के दौरान, वीडियो के आगे बढ़ने की गड़बड़ी ठीक हो जाती है.
- इस्तेमाल नहीं किए जाने वाले सिंबल हटाएं:
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
औरTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
को हटाएं.Composition.Builder.setHdrMode(int)
का इस्तेमाल करें औरComposition
कोTransformer.start(Composition, String)
पर पास करें.- इस्तेमाल न किए जा सकने वाले
DownloadNotificationHelper.buildProgressNotification
तरीके को हटाएं. इसके बजाय, ऐसे तरीके का इस्तेमाल करें जोnotMetRequirements
पैरामीटर लेता हो.
वर्शन 1.2.0-rc01
1 नवंबर, 2023
1.2.0 के स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.2.0-beta01
19 अक्टूबर, 2023
1.2.0 के स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.2.0-alpha02
29 सितंबर, 2023
1.2.0 के स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.2.0-alpha01
17 अगस्त, 2023
1.2.0 के स्टेबल वर्शन का इस्तेमाल करें.
वर्शन 1.1.0
वर्शन 1.1.1
16 अगस्त, 2023
- सामान्य लाइब्रेरी:
- सभी मॉड्यूल से गलती से जोड़ी गई
multidex
डिपेंडेंसी हटाएं (#499).
- सभी मॉड्यूल से गलती से जोड़ी गई
- ExoPlayer:
PlaybackStatsListener
में मौजूद समस्या को ठीक करें. इसमें, प्लेलिस्ट मिटाने के बाद, गलतPlaybackStats
बन जाते हैं.- कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) को लॉग करने के लिए, ये अतिरिक्त फ़ील्ड जोड़ें: स्ट्रीमिंग फ़ॉर्मैट (sf), स्ट्रीम टाइप (st), वर्शन (v), टॉप बिरेट (tb), ऑब्जेक्ट की अवधि (d), मेज़र किया गया थ्रुपुट (mtp), और ऑब्जेक्ट टाइप (ot) (#8699).
- ऑडियो:
- एक गड़बड़ी को ठीक किया गया है. इसकी वजह से, बहुत छोटी फ़ाइलें चलाते समय
Player.getState()
कभीSTATE_ENDED
पर ट्रांज़िशन नहीं होता था (#538).
- एक गड़बड़ी को ठीक किया गया है. इसकी वजह से, बहुत छोटी फ़ाइलें चलाते समय
- ऑडियो ऑफ़लोड करना:
- आरएफ़सी 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).
- कंट्रोलर की स्थिति में कस्टम लेआउट जोड़ें और उसे ऐक्सेस करने के लिए कोई getter दें. कस्टम लेआउट में बदलाव होने पर,
वर्शन 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)
के बीच काम करने के तरीके में अंतर को ठीक करें.
- ExoPlayer को डिवाइस के वॉल्यूम कंट्रोल करने की अनुमति सिर्फ़ तब दें, जब आपने साफ़ तौर पर ऑप्ट इन किया हो. इनका ऐक्सेस पाने के लिए,
- ट्रांसफ़ॉर्मर:
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
रेंडरर की सुविधाओं में बदलाव होने पर, नया ट्रैक चुनने की सुविधा ट्रिगर करेगा.
- जोड़ें
- एक्सट्रैक्टर:
- ऑडियो:
- गड़बड़ी को ठीक किया गया है.इसकी वजह से, टनल करने की सुविधा चालू होने और
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
जैसे यूटिल मेथड जोड़ें.
- चलाने/रोकने वाले बटन के साथ कस्टम यूज़र इंटरफ़ेस (यूआई) एलिमेंट लिखने के लिए,
- आरटीएसपी एक्सटेंशन:
- DASH एक्सटेंशन:
- एक से ज़्यादा अवधियों वाली DASH स्ट्रीम के लिए,
MediaLoadData.startTimeMs
औरMediaLoadData.endTimeMs
से मीडिया टाइम ऑफ़सेट हटाएं. - एक से ज़्यादा अवधि वाले लाइव डैश मीडिया सोर्स को फिर से तैयार करने पर,
IndexOutOfBoundsException
(#10838) वाली गड़बड़ी को ठीक किया गया.
- एक से ज़्यादा अवधियों वाली DASH स्ट्रीम के लिए,
- एचएलएस एक्सटेंशन:
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 रिलीज़ से जुड़ी है.
- मुख्य लाइब्रेरी:
- डाउनलोड:
SegmentDownloader
और सबक्लास (#248) में, मर्ज किए जाने वाले दो सेगमेंट के शुरू होने के समय के बीच का ज़्यादा से ज़्यादा अंतर कॉन्फ़िगर किया जा सकता है.
- ऑडियो:
- वीडियो:
- HEVC HDR10 फ़ॉर्मैट को
HEVCProfileMain10
के बजायHEVCProfileMain10HDR10
पर मैप करें. - Chromecast with Google TV और Lenovo M10 FHD Plus पर डिवाइस से जुड़ी समस्या को हल करने का तरीका जोड़ा गया. इस समस्या की वजह से, 60fps AVC स्ट्रीम को 'काम नहीं करती' के तौर पर मार्क किया जाता है (#10898).
- स्क्रीन के रीफ़्रेश रेट से काफ़ी ज़्यादा फ़्रेम रेट वाले मीडिया को चलाते समय, फ़्रेम रिलीज़ की परफ़ॉर्मेंस से जुड़ी समस्याएं ठीक करना.
- HEVC HDR10 फ़ॉर्मैट को
- कास्ट करना:
- मीडिया आइटम के बीच ट्रांज़िशन करते समय, ट्रांज़िशन के दौरान दिखने वाले
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).
- अगर ट्रैक एटम को पार्स करते समय, सैंपल टेबल (stbl) में ज़रूरी सैंपल ब्यौरा (stsd) मौजूद नहीं है, तो
- ऑडियो:
- डायरेक्ट प्लेबैक (पासथ्रू) में
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:
- 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).
- पक्का करें कि
- एक्सट्रैक्टर:
- डैश:
- मेनिफ़ेस्ट से ClearKey लाइसेंस का यूआरएल पार्स करें (#10246).
- यूज़र इंटरफ़ेस:
- पक्का करें कि TalkBack, वीडियो चलाने के कंट्रोल वाले मेन्यू में, फ़िलहाल चालू स्पीड के विकल्प के बारे में बताए (#10298).
- RTSP:
- VP8 फ़्रैगमेंट किए गए पैकेट को मैनेज करने की सुविधा जोड़ें (#110).
- Leanback एक्सटेंशन:
playWhenReady
LeanbackAdapter
में हुए बदलावों को सुनें (10420).
- कास्ट करना:
वर्शन 1.0.0-beta01
16 जून, 2022
androidx.media3:media3-*:1.0.0-beta01
रिलीज़ हो गया है.
1.0.0-beta01 वर्शन में ये बदलाव शामिल हैं.
यह ExoPlayer 2.18.0 रिलीज़ से जुड़ा है.
- मुख्य लाइब्रेरी:
MediaMetricsManager
की मदद से, Android प्लैटफ़ॉर्म की गड़बड़ी की जानकारी देने वाली सुविधा चालू करें. ExoPlayer, प्लैटफ़ॉर्म पर वीडियो चलाने से जुड़े इवेंट और परफ़ॉर्मेंस डेटा को फ़ॉरवर्ड करेगा. इससे, डिवाइस पर सिस्टम की परफ़ॉर्मेंस और डीबग करने से जुड़ी जानकारी देने में मदद मिलती है. अगर डिवाइस के उपयोगकर्ता ने इस्तेमाल और गड़बड़ी की जानकारी शेयर करने की सुविधा चालू की है, तो Google भी यह डेटा इकट्ठा कर सकता है. ऐप्लिकेशन,ExoPlayer.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 के अंदर इस्तेमाल होने वाले सबटाइटल फ़ॉर्मैट को मैनेज करने के लिए किया जाता था.
- एक्सट्रैक्टर:
- यूज़र इंटरफ़ेस:
- अगर
useController=false
(#9605) है, तोPlayerView
पर सेट किए गएOnClickListener
s पर इवेंट की डिलीवरी ठीक करें. सभी व्यू कॉन्फ़िगरेशन के लिए,OnLongClickListener
को इवेंट डिलीवरी की सुविधा भी ठीक करें. ACTION_UP
से पहलेPlayerView
के दायरे से बाहर निकलने वाले टच इवेंट के क्रम को क्लिक के तौर पर गलत तरीके से इस्तेमाल करने की समस्या को ठीक करें (#9861).PlayerView
की सुलभता से जुड़ी समस्या को ठीक करें. इस समस्या की वजह से, टैप करने पर कंट्रोल छिपने के बजाय, वीडियो चलाने की सुविधा चालू या बंद हो सकती है (#8627).ExoPlayer
के बजायPlayer
इंटरफ़ेस के साथ काम करने के लिए,TrackSelectionView
औरTrackSelectionDialogBuilder
को फिर से लिखें. इससे व्यू कोPlayer
के अन्य वर्शन के साथ इस्तेमाल किया जा सकता है. साथ ही, यूज़र इंटरफ़ेस (यूआई) मॉड्यूल से ExoPlayer मॉड्यूल पर निर्भरता हट जाती है. यह एक ऐतिहासिक बदलाव है.PlayerView
ट्रैक सिलेक्टर में, फ़ोर्स किए गए टेक्स्ट ट्रैक न दिखाएं. साथ ही, अगर "कोई नहीं" चुना गया है, तो फ़ोर्स किए गए सही टेक्स्ट ट्रैक को चुना हुआ रखें (#9432).
- अगर
- डैश:
- DTS
AudioChannelConfiguration
एलिमेंट से चैनल की संख्या पार्स करना. इससे, DTS स्ट्रीम के लिए ऑडियो पासथ्रू की सुविधा फिर से चालू हो जाती है (#10159). null
कोDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
पर पास करने की अनुमति न दें. ज़रूरत पड़ने पर,DefaultCompositeSequenceableLoaderFactory
के इंस्टेंस साफ़ तौर पर पास किए जा सकते हैं.
- DTS
- 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).
- CMake के वर्शन को
- इस्तेमाल नहीं किए जाने वाले सिंबल हटाएं:
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
हटाएं. इसके बजाय,Player.Listener.onTracksChanged(Tracks)
का इस्तेमाल करें.Player.getCurrentTrackGroups
औरPlayer.getCurrentTrackSelections
हटाएं. इसके बजाय,Player.getCurrentTracks
का इस्तेमाल करें.ExoPlayer.getCurrentTrackGroups
औरExoPlayer.getCurrentTrackSelections
का इस्तेमाल भी किया जा सकता है. हालांकि, ये तरीके अब काम नहीं करते.DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
औरDEFAULT_TRACK_SELECTOR_PARAMETERS
कॉन्स्टेंट हटाएं. अगर हो सके, तो इसके बजायgetDefaultTrackSelectorParameters(Context)
का इस्तेमाल करें. अगर ऐसा नहीं है, तोDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
का इस्तेमाल करें.- कन्स्ट्रक्टर
DefaultTrackSelector(ExoTrackSelection.Factory)
हटाएं. इसके बजाय,DefaultTrackSelector(Context, ExoTrackSelection.Factory)
का इस्तेमाल करें. Transformer.Builder.setContext
हटाएं. इसके बजाय,Context
कोTransformer.Builder
कन्स्ट्रक्टर को पास किया जाना चाहिए.
वर्शन 1.0.0-alpha03
14 मार्च, 2022
androidx.media3:media3-*:1.0.0-alpha03
रिलीज़ हो गया है.
1.0.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
यह ExoPlayer 2.17.1 रिलीज़ से जुड़ा है.
- ऑडियो:
- एचएलएस में Dolby Atmos (E-AC3-JOC) के लिए, ऑडियो की सुविधाओं की जांच करने से जुड़ी गड़बड़ी को ठीक करना.
- एक्सट्रैक्टर:
- FMP4: उस समस्या को ठीक करें जहां v0 और v1, दोनों emsg एटम वाली स्ट्रीम के लिए, emsg सैंपल मेटाडेटा गलत क्रम में आउटपुट हो सकता है (#9996).
- टेक्स्ट:
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).
- एक्सट्रैक्टर:
- टेक्स्ट:
- डीआरएम:
DrmSessionManager.(pre)acquireSession
सेplaybackLooper
को हटाएं. जब किसी ऐप्लिकेशन में कस्टमMediaSource
मेंDrmSessionManager
का इस्तेमाल किया जाता है, तोplaybackLooper
कोDrmSessionManager.setPlayer
पर पास करना होगा.
- विज्ञापन प्लेबैक / IMA:
- आईएमए डाइनैमिक ऐड इंसर्शन (डीएआई) के लिए सहायता जोड़ें (#8213).
AdPlaybackState
में एक तरीका जोड़ें, ताकि किसी विज्ञापन ग्रुप को रीसेट किया जा सके, ताकि उसे फिर से चलाया जा सके (#9615).- विज्ञापन चलाने के दौरान, वीडियो चलाने की स्पीड को 1.0 पर सेट करना (#9018).
- विज्ञापन ग्रुप लोड न होने की वजह से, वीडियो चलाने की प्रोसेस तुरंत रीसेट होने की समस्या को ठीक किया गया है (#9929).
- यूज़र इंटरफ़ेस:
- डैश:
Representation
(#9579) में, पार्स की गई ज़रूरी और अन्य प्रॉपर्टी जोड़ें.forced-subtitle
ट्रैक की भूमिका के लिए सहायता दें (#9727).main
ट्रैक की भूमिका कोC.SELECTION_FLAG_DEFAULT
के तौर पर समझना बंद करें.- ऐसे मेनिफ़ेस्ट के लिए, बेस यूआरएल को बाहर रखने का लॉजिक ठीक करें जिनमें DVB नेमस्पेस (#9856) का एलान नहीं किया गया है.
- मिलते-जुलते
MPD.Location
यूआरएल का इस्तेमाल करने की सुविधा जोड़ी गई है (#9939).
- HLS:
- सिर्फ़ ऑडियो वाली एचएलएस स्ट्रीम के लिए,
Format.label
को सही तरीके से पॉप्युलेट करें (#9608). - शुरू होने में लगने वाले समय को कम करने के लिए, डिफ़ॉल्ट रूप से चंकलेस तैयारी का इस्तेमाल करें. अगर आपके वर्शन में, म्यूक्स किए गए ऐसे सबटाइटल ट्रैक शामिल हैं जिन्हें मास्टर्स प्लेलिस्ट में एलान नहीं किया गया है, तो आपको उन्हें मास्टर्स प्लेलिस्ट में जोड़ना चाहिए, ताकि उन्हें चलाया जा सके. इसके अलावा,
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
का इस्तेमाल करके, चंक के बिना तैयार करने की सुविधा बंद की जा सकती है. - एचएलएस में, वीडियो के किसी खास हिस्से पर जाने के लिए, की-फ़्रेम की सुविधा जोड़ी गई है (#2882).
- सिर्फ़ ऑडियो वाली एचएलएस स्ट्रीम के लिए,
- RTSP:
- किसी भी सर्वर कनेक्शन (#9606) के लिए इस्तेमाल किए गए
SocketFactory
को बदलने के लिए, क्लाइंट एपीआई दें. - अगर दोनों मौजूद हैं, तो पुष्टि करने के लिए BASIC के बजाय DIGEST का इस्तेमाल करें (#9800).
- जब आरटीएसपी ट्रैक का टाइमिंग उपलब्ध न हो, तब उसे हैंडल करना (#9775).
- अमान्य RTP-Info हेडर वैल्यू को अनदेखा करें (#9619).
- किसी भी सर्वर कनेक्शन (#9606) के लिए इस्तेमाल किए गए
- ट्रांसफ़ॉर्मर:
- एपीआई के लिए ज़रूरी कम से कम वर्शन को 21 पर सेट करें.
TransformationException
का इस्तेमाल अब ट्रांसफ़ॉर्मेशन के दौरान होने वाली गड़बड़ियों के बारे में बताने के लिए किया जाता है.- ट्रांसफ़ॉर्मेशन के विकल्पों की जानकारी देने के लिए,
TransformationRequest
जोड़ें. - एक से ज़्यादा लोगों को रजिस्टर करने की अनुमति दें.
- कोडेक आउटपुट को कुछ हद तक पढ़ने पर, ट्रांसफ़ॉर्मर के फ़ंक्शन के रुकने की समस्या को ठीक किया गया.
Transformer.getProgress
में, 'वीडियो को एक साथ चलाने वाला टूल' रिलीज़ करते समय, संभावित एनपीई ठीक करें.- ट्रांसफ़ॉर्मेशन लागू करने के लिए, कोई डेमो ऐप्लिकेशन जोड़ें.
- MediaSession एक्सटेंशन:
- डिफ़ॉल्ट रूप से,
MediaSessionConnector
अब प्लेलिस्ट को रोकने पर मिटा देता है. जिन ऐप्लिकेशन को प्लेलिस्ट को बनाए रखने की ज़रूरत है वे कनेक्टर परsetClearMediaItemsOnStop(false)
को कॉल कर सकते हैं.
- डिफ़ॉल्ट रूप से,
- कास्ट एक्सटेंशन:
- 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
मॉड्यूल से बदल दिया गया है. इससे प्लेयर और मीडिया सेशन के बीच सीधे तौर पर इंटिग्रेशन होता है. इसके लिए, अडैप्टर/कनेक्टर क्लास का इस्तेमाल करने की ज़रूरत नहीं होती.