androidx / androidx/media

Player Stalls on Live DASH Stream with SCTE-35 SpliceInsert in EventStream (No Ad Content Expected)

Open
#2,636 14 comments 0 reactions 1 assignee View on GitHub

Nobody has claimed this yet.

bug
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
  1. Initialize ExoPlayer and DashMediaSource using a MediaItem pointing to a live DASH stream.
  2. 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.
  3. Start playback.
  4. 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:

  1. 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.
  2. 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 bugreport to android-media-github@google.com after filing this issue.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.