Version
Media3 1.10.1
More version details
Also reproduced on Media3 sample/demo app (same version family).
Devices that reproduce the issue
Not device-specific; observed across multiple Android versions
Devices that do not reproduce the issue
No response
Reproducible in the demo app?
Yes
Reproduction steps
Setup
Build Media3 demo app from 1.6.1 (or current release) with EventLogger enabled.
Use a live multi-period DASH stream with SCTE-35 in MPD EventStream (Ateme packager, client-side ad insertion / CSAI).
Do not attach any ad SDK or metadata-driven ad logic.
Normal path (control — passes)
Play through a full scheduled mid-roll : cue-out → ad period → cue-in.
Observe smooth ad→content transition (post-Stream/App freeze in DASH Multi-Period Live-Stream #1698 behavior).
Crash-out path (fails)
During an active mid-roll, trigger operator crash-out (early ad end / SCTE early return).
Observe MPD update sequence:
Penultimate period gets finite @duration (good, DASH-IF §13.6.3)
New open tail period is added (period [?])
Often a second crash-out update closes the short ad period and adds another open tail
Observe player behavior for 60–120 s.
MPD snapshots (crash-out sequence)
Captured from packager (Ateme, live CSAI). XML validates; fails Media3 interoperability on crash-out.
Snapshot
Period structure
Notes
mpd_0039
1 × open P58
Normal live tail
mpd_0040
P58 closed PT2M39.48S + open P59
Good: penultimate closure. Bad: P59 = new cue-out (out_of_network=1, Event@duration=1000 @ timescale 25 → ~40 s ) instead of crash-out return
mpd_0045
P58 + P59 closed PT20.48S + open P60
Good: P59 closed; Good: return on P60 (out_of_network=0, no Event@duration) — but ~20 s late
Crash-out tail signaling (mpd_0040 / P59):
out_of_network_indicator=1
Event@duration="1000" → interpreted as ~39998 ms break
Expected per DASH-IF IOP Part 5 §5.5.2: out_of_network=0 + immediate return or splice cancel — not a new full cue-out
Note: Shaka player is able to play the same dash stream with no issues
Expected result
After crash-out MPD update, ExoPlayer should:
Hand off to the correct period within a few seconds, or
Emit positionDiscontinuity with AUTO_TRANSITION (or equivalent forward progress),
Continue loading segments and playing without multi-minute freeze.
Actual result
After crash-out:
Brief playback (~4–5 s) then freeze for ~30–90 s (on our app) or StuckPlayerException at ~83 s (sample app).
EventLogger shows period=0 while periodCount=2 or 3 for the entire stall window.
Tail period logged as period [?] (open / unset duration).
No AUTO_TRANSITION during stall.
Recovery only when live window evicts head period: positionDiscontinuity reason=REMOVE , e.g. period 0→1, large position jump.
Player does not report a clear onPlayerError() in all captures; UX is a silent stall.
Media
MPD files: DashWithCrashOut.zip
Bug Report
Version
Media3 1.10.1
More version details
Also reproduced on Media3 sample/demo app (same version family).
Devices that reproduce the issue
Not device-specific; observed across multiple Android versions
Devices that do not reproduce the issue
No response
Reproducible in the demo app?
Yes
Reproduction steps
Setup
EventLoggerenabled.Normal path (control — passes)
Crash-out path (fails)
@duration(good, DASH-IF §13.6.3)period [?])MPD snapshots (crash-out sequence)
Captured from packager (Ateme, live CSAI). XML validates; fails Media3 interoperability on crash-out.
mpd_0039P58mpd_0040P58closedPT2M39.48S+ openP59P59= new cue-out (out_of_network=1,Event@duration=1000@ timescale 25 → ~40 s) instead of crash-out returnmpd_0045P58+P59closedPT20.48S+ openP60P59closed; Good: return onP60(out_of_network=0, noEvent@duration) — but ~20 s latempd_0040/ P59):out_of_network_indicator=1Event@duration="1000"→ interpreted as ~39998 ms breakout_of_network=0+ immediate return or splice cancel — not a new full cue-outNote: Shaka player is able to play the same dash stream with no issues
Expected result
After crash-out MPD update, ExoPlayer should:
positionDiscontinuitywithAUTO_TRANSITION(or equivalent forward progress),Actual result
After crash-out:
StuckPlayerExceptionat ~83 s (sample app).EventLoggershowsperiod=0whileperiodCount=2or3for the entire stall window.period [?](open / unset duration).AUTO_TRANSITIONduring stall.positionDiscontinuityreason=REMOVE, e.g.period 0→1, large position jump.onPlayerError()in all captures; UX is a silent stall.Media
MPD files: DashWithCrashOut.zip
Bug Report
adb bugreportto android-media-github@google.com after filing this issue.