video-dev / video-dev/hls.js

Implement support for LL-HLS #EXT-X-PRELOAD-HINT part loading

Open
#3,988 4 comments 7 reactions 1 assignee View on GitHub

@iamboorrito is already working on this.

Since Aug 11, 2025.

Low-Latency New Feature
Dominant language
TypeScript
Stars
16.9k
Forks
2.8k
Avg merge
1d 12h
Merged PRs (30d)
27

Description

Adding support for Hinted Part and Map Preloading could reduce LL-HLS latency by an additional part duration. This feature was left out of v1.0 because of timing and the complexity involved in dropping hinted parts in situations that still need to be cataloged and tested. We also lacked multiple MAP support which has not landed in v1.0.4.

Feature summary and resources:

  1. Parse EXT-X-PRELOAD-HINT tags and attributes:
    • #EXT-X-PRELOAD-HINT:TYPE=MAP,URI=”init.mp4”preload init segments (usually followed by a discontinuity)
    • #EXT-X-PRELOAD-HINT:TYPE=PART,URI=”part.m4s”
    • with byterange (length known)
      #EXT-X-PRELOAD-HINT:TYPE=PART,URI=”part.m4s”,BYTERANGE-START=0,BYTERANGE-LENGTH=4044
    • with byterange chunk-transfer
      #EXT-X-PRELOAD-HINT:TYPE=PART,URI=”part.m4s”,BYTERANGE-START=0
  2. Make preload-hint requests and handle the response
    • request part files and hold result for part update (no byterange)
    • request part byterange and hold result for part update (length known)
    • stream part file, hold result for part update byte-range(s) is received in part-update (chunk-transfer)
    • do not sample TTFB for blocked part-hint responses
  3. Handle part updates following preload-hint
    a. If part update matches preload-hint request/response push update
    b. If part update invalidates preload-hint drop request/response

https://developer.apple.com/wwdc20/10229
https://developer.apple.com/wwdc20/10232

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.