Skip to content

Playback: characterize byte-range LL-HLS over CMAF/fMP4 fatal load failure and upstream fix path #264

Description

@MrFr3di

Objective

Track the known Media3 failure for byte-range LL-HLS delivery over CMAF/fMP4 media and remove the characterization once a stable Media3 release carries the upstream fix.

CMAF/fMP4 and LL-HLS are not alternatives here: CMAF/fMP4 is the media packaging; LL-HLS is the HLS delivery/signaling path. MuxTV must accept provider-supplied HLS/LL-HLS independently of Apple TV support.

Failure family

The deterministic fixture uses:

  • local MockWebServer only;
  • MuxTV's real PlaybackMediaSourceFactory / MuxTvHttpClients / HlsMediaSource / ExoPlayer path;
  • exact AndroidX CMAF audio_init.mp4 test data;
  • the first 512 bytes of AndroidX CMAF audio_2.m4s exposed as #EXT-X-PART ... BYTERANGE="512@0";
  • assertions on the fatal DataSpec.subrange -> HlsMediaChunk.feedDataToExtractor cause chain and the single Range: bytes=0-511 request.

Affected flow:

LL-HLS EXT-X-PART + BYTERANGE -> bounded CMAF/fMP4 DataSpec fully consumed -> nextLoadPosition == dataSpec.length -> retry -> zero-length DataSpec.subrange(...) -> IllegalArgumentException -> fatal source error.

This is an upstream Media3 loader behavior, not a CMAF-format rejection and not an Apple-specific MuxTV architecture choice.

Landed characterization

Merged PR #274 landed the characterization on main as merge commit:

a8350d4752a987e8280f0e823884b53bebbee30c

The merge contains only the Android instrumentation characterization plus scoped Apache-2.0 attribution for AndroidX test-data bytes; no production HLS/parser/player behavior changed.

Terminology-only follow-up PR #276 renames/comments the test explicitly as LL-HLS-over-CMAF/fMP4 while preserving the same fixture bytes and assertions.

Exact 1.10.1 / 1.11.0 attribution

The identical characterization blob ea206954db072da8cd9370faccf35ffe9f783d59 reproduced the same fatal signature on:

API26/API36 evidence succeeded on both version lines. Therefore the defect is pre-existing across 1.10.1 -> 1.11.0; it was not introduced by the dependency upgrade.

Upstream status

Workaround policy

No MuxTV parser workaround is currently justified. Do not strip LL-HLS tags, disable LL-HLS, change player ownership, or alter buffer/cache/network policy merely to mask this upstream defect.

If real provider impact ever requires an app-side fallback before the fixed stable Media3 exists, it must first prove ordinary HLS, EXT-X-SKIP, complete-segment fallback, security/header ownership and secret-redaction behavior.

Acceptance / remaining gate

  • sanitized CMAF/fMP4 fixture reproduces the byte-range LL-HLS failure through MuxTV's real HLS path;
  • identical-fixture 1.10.1 vs 1.11.0 attribution recorded;
  • API26/API36 evidence exists for both version lines;
  • no live third-party URL required;
  • no production workaround landed;
  • characterization merged to main;
  • first stable Media3 carrying the upstream fix is available;
  • dependency is upgraded through its normal owner;
  • characterization is inverted/updated to prove corrected behavior;
  • exact-head Hosted Full + API26/API36 evidence is green on the fixed stable version.

Keep this issue open only as that upstream stable-fix watch. Close it without an app-side parser fallback if the released Media3 fix resolves the fixture.

Related: #186, #179.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions