Media3 1.12.0-beta01 shipped on Nov 11, 2026, following 1.12.0-alpha01 (Oct 21) and alpha02 (Oct 26). A beta usually means "safe to try"; this one also carries a batch of source-breaking changes, a new build floor, and a clean-up of long-deprecated APIs. Everything below comes from the official AndroidX release notes for Media3, retrieved today.
1. Breaking changes first
If you only read one section, read this one. These are the changes that can fail a build or change behavior:
- Nullability annotations: alpha01 replaced
NonNullApiwith JSpecifyorg.jspecify.annotations.NullMarked. Beta01 replacesandroidx.media3.common.util.NullableTypewithorg.jspecify.annotations.Nullableand removesUnknownNull. - Kotlin subclasses with nullable types: subclasses of
RunnableFutureTaskwith a nullable result must now declare a nullable type argument, and subclasses ofCompositeMediaSourcewith nullable child IDs must useCompositeMediaSource<Void?>. - Gradle minSdk is now 24.
- Muxers: repeated
Muxer.close()is now a no-op in all library muxers, while calling any other method afterclose()throwsIllegalStateException. The notes call this a behavior change. - Compose UI (unstable API): in
media3-ui-compose-material3,Playernow animates all control slots including custom ones, and thevisibleparameter is removed fromPlayerDefaults.TopControls,CenterControlsandBottomControls.
// Before: nullable result inferred loosely
class MyTask : RunnableFutureTask<Void, Exception>()
// After: say the result is nullable
class MyTask : RunnableFutureTask<Void?, Exception>()
// Custom composite source with nullable child IDs
class MySource : CompositeMediaSource<Void?>() { /* ... */ }
Alpha01 also removed the experimental DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean), and the four FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES / _H265 flags on Mp4Extractor and FragmentedMp4Extractor. That parsing is now always on for H.264 and H.265, so delete any code passing those flags.
2. Removed deprecated symbols and their replacements
Beta01 deletes a set of deprecated APIs. Each one has a documented replacement:
TextureAssetLoaderbecomesRawAssetLoader.- Public
DefaultDecoderFactoryconstructors becomeDefaultDecoderFactory.Builder. DefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_BLACKLIST_MSbecomesDEFAULT_TRACK_EXCLUSION_MS.setRequireRegisteringAllInputFrames(boolean)becomesVideoFrameProcessor.INPUT_TYPE_SURFACE_AUTOMATIC_FRAME_REGISTRATION.EditedMediaItemSequence.forceAudioTrack/forceVideoTrackbecometrackTypes.contains(...), and the experimental builder setters are replaced byEditedMediaItemSequence.Builder(Set).ExportResult.durationMsandsetDurationMsbecomeapproximateDurationMs/setApproximateDurationMs.SilenceSkippingAudioProcessor.DEFAULT_PADDING_SILENCE_USis replaced bysilenceRetentionRatio.Timeline.getPeriodPosition(Window, Period, int, long, long)becomesgetPeriodPositionUs(...).
3. Memory: a 16-byte change that matters
C.DEFAULT_BUFFER_SEGMENT_SIZE drops from 65536 to 65520 so segments fit ART large-object-space pages. According to the notes, this cuts sample buffer memory by about 6% on 4 KiB-page devices and about 20% on 16 KiB-page devices. If you hardcoded 65536 anywhere to size your own buffers around the default, revisit it.
4. New in the Compose player UI
Beta01 adds a subtitles composable slot to ContentFrame and Player, with default bitmap and horizontal-text cue rendering in media3-ui-compose-material3. Alpha01 laid the groundwork: CuesState and rememberCuesState, TrackSelectionState, PlaybackState, a standalone BufferingIndicator, a LiveButton, and alignment on ContentFrame. Slots no longer receive the player or visibility as parameters, so capture them from the calling scope:
Player(
player = player,
topControls = { // now a BoxScope.() -> Unit
Text(title, modifier = Modifier.align(Alignment.TopStart))
},
subtitles = { /* optional: default cue rendering is provided */ },
)
Treat the snippet as a shape, not a copy-paste: the Compose UI artifacts are flagged unstable in these notes, so check the exact parameter list against your version.
5. CodecDB for Transformer
Transformer gets androidx.media3.transformer.codecdb, which recommends video encoder configurations (codec, encoder settings, bitrate) for the device, based on measured encoder quality data. For apps that export user video, this is a principled alternative to hand-tuned bitrate tables per device tier. Alpha02 also added a media3-effect-play-services module with EnhancementSessionDecorator for video enhancement and StudioSoundAudioProcessor for audio source separation.
6. Playback fixes worth knowing
- HLS: fixed reloading of failed or canceled chunks that kept partially buffered samples, and several issues when switching pathways with Content Steering.
- DASH: fixed duplicated or garbled CEA-608 subtitles with multiple embedded caption tracks.
- MP4: fixed gapless AAC playback when a muxer shortens the last
sttsentry, which had made padding derive as 0. - Video: HEVC decoder fallback is allowed for backward-compatible Dolby Vision Profile 7.
Player.listen/listenTono longer throw "Player is accessed on the wrong thread" when cancelled off the application thread.- Session: media button preferences APIs are stabilized.
- Cast:
CastParams.Builder.setSystemOutputSwitcherEnabled(boolean)is added, enabled by default for apps targeting API 37 on API 37+ devices. - IMA:
ImaAdsLoader.requestAds(DataSpec, Object, AdViewProvider)is added and theViewGroupoverload is deprecated.
Upgrade checklist
- Confirm your own
minSdkis 24 or higher. - Build once and fix JSpecify and Kotlin nullable-type errors in custom
MediaSourceor task subclasses. - Grep for the removed symbols in section 2 and the removed MP4 extractor flags.
- If you use the Compose
Player, re-check custom control slots against the new signatures. - Audit muxer code for calls after
close(). - Run on a 16 KiB-page device or emulator image to see the memory change for yourself.
This is a beta. If you ship a media app, move a branch to 1.12.0-beta01 now: the breaking changes are mechanical, and finding them early beats finding them at stable.
Source: AndroidX Media3 release notes (1.12.0-beta01, 1.12.0-alpha02, 1.12.0-alpha01), developer.android.com, retrieved Nov 13, 2026.
No comments yet. Be the first to leave one!