-
-
Notifications
You must be signed in to change notification settings - Fork 248
test(hls): serve archive recordings as HLS from the timeline alone #4115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -38,6 +38,17 @@ broadcast by path: | |
| /{broadcast}/{video|audio}/{rendition}/seg/t{pts}.m4s | ||
| ``` | ||
|
|
||
| A [`moq-archive`](https://docs.rs/moq-archive) recording replayed through its | ||
| `Reader` is served the same way, with no second stored copy. Playlists come | ||
| from the replayed timeline alone, and a segment GETs exactly one stored object | ||
| of its rendition, so switching renditions never downloads both. An | ||
|
Comment on lines
+43
to
+44
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
When a range object exceeds Useful? React with 👍 / 👎. |
||
| inline-parameter-set codec with no catalog `description` is the exception: | ||
| the first playlist render GETs one keyframe group to build the init segment, | ||
| then caches it. Out-of-band configs need no media GET. Set `--window` | ||
| to cover the recording. The playlist ends with `EXT-X-ENDLIST` only once the | ||
| reader's caller declares the recording finished; the store holds no completion | ||
| marker. | ||
|
|
||
| The init URL carries a hash of its bytes, so a reconfigured rendition gets a | ||
| new one. An embedder of the library can also label the publisher's run with | ||
| `Broadcaster::set_generation`. Every segment URL then carries it | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| # [S] Archive HLS window | ||
|
|
||
| ## Goal | ||
|
|
||
| `moq-hls` lists a replayed recording's whole retained timeline in HLS and DASH | ||
| without a server-wide `--window`, while live broadcasts keep a window within | ||
| the relay's cache. | ||
|
|
||
| ## Plan | ||
|
|
||
| The export window (`moq_hls::export::Config::window`) trims every broadcast a | ||
| server exports. A recording served through `moq_archive::Reader` already | ||
| bounds itself: DVR expiry pops records from the replayed timeline, and an | ||
| unbounded archive never pops. Today an operator must raise `--window` past the | ||
| recording's length, which also inflates segment `Cache-Control: max-age` and | ||
| DASH `timeShiftBufferDepth` for every live broadcast on the same server. | ||
|
|
||
| Decide how an export learns that a broadcast's timeline is authoritative (the | ||
| catalog's `archive` entry carrying a store or replay path, a per-broadcast | ||
| option, or a separate server) and cap the derived HTTP and DASH values. |
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -36,6 +36,10 @@ tracing = { workspace = true } | |
| url = { workspace = true } | ||
|
|
||
| [dev-dependencies] | ||
| async-trait = "0.1" | ||
| futures = { workspace = true } | ||
| moq-archive = { path = "../moq-archive" } | ||
| moq-json = { path = "../moq-json" } | ||
|
Comment on lines
+39
to
+42
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
These new dependencies bypass the repository's centralized dependency declarations: Useful? React with 👍 / 👎. |
||
| moq-tokio = { path = "../moq-tokio", default-features = false, features = ["tcp", "noq", "aws-lc-rs"] } | ||
| tokio = { workspace = true, features = ["test-util"] } | ||
| tower = { version = "0.5", features = ["util"] } | ||
Uh oh!
There was an error while loading. Please reload this page.