Player Stalls on Live DASH Stream with SCTE-35 SpliceInsert in EventStream (No Ad Content Expected)
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 3k
- Forks
- 955
- Avg merge
- 12d 14h
- Merged PRs (30d)
- 2
Description
Version
Media3 1.3.1
More version details
No response
Devices that reproduce the issue
Google Pixel 8A Android 16
Xioami Tab 10 Android 14
Galaxy A54 Android 15
Devices that do not reproduce the issue
No response
Reproducible in the demo app?
Not tested
Reproduction steps
- Initialize ExoPlayer and DashMediaSource using a MediaItem pointing to a live DASH stream.
- Ensure the live DASH stream's (DRM or Clear) MPD contains an EventStream with SCTE-35 SpliceInsert markers, similar to the snippet above, where no actual ad segments are provided by the content server for those markers.
- Start playback.
- Observe the player's behavior when it reaches a point in the stream where such an SCTE-35 marker is present in the manifest or media segments.
Expected result
The player should continue seamless playback of the main content. It should either:
- Parse the SCTE-35 EventStream data as metadata and deliver it via Player.Listener#onMetadata(Metadata metadata) without impacting the playback timeline or causing a stall.
- Gracefully skip any perceived "gap" or "break" signaled by the SCTE-35 markers if they imply a timeline discontinuity, and immediately resume playing the next available content segment, without requiring explicit ad-state management from the client.
Actual result
When playing a live DASH stream containing SCTE-35 SpliceInfoSection markers (specifically SpliceInsert commands with BreakDuration) within its EventStream, the Media3 player enters a STATE_BUFFERING state and indefinitely stalls. It fails to load subsequent media chunks or resume playback, even though no ad content is provided or expected by the client application.
Our application intends to play the live stream continuously as "pure content." The SCTE-35 markers are present in the stream for internal signaling or analytics at the origin/server level, but they are not meant to trigger client-side ad insertion or any player-side ad-break handling. We are not using androidx.media3.exoplayer.source.ads.ServerSideAdInsertionMediaSource or any other ad-specific MediaSource in our player setup; we are using androidx.media3.exoplayer.dash.DashMediaSource.
Upon encountering the SCTE-35 SpliceInsert marker with a BreakDuration in the DASH EventStream, the player transitions to loading and remains in this state indefinitely. It does not load the next media chunk, nor does it report a critical error via onPlayerError().
Media
Attaching device logs filtered with EventLogger
player_stalling_clear_non_ssai_device_Logs.txt
Stream details and Charles logs I will share over the email.
Bug Report
- You will email the zip file produced by
adb bugreportto android-media-github@google.com after filing this issue.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.