Repository navigation
Follow epochless restarts in exports and bindings #5700
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
254624b
096b53b
35c37ab
dac09f0
4db3ed4
daea6fd
705bc5c
3c78d51
ae9bca2
ab634ff
af01067
8897353
8cbda81
e85ea4d
504c483
3377d14
0f396d7
5299967
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -467,6 +467,12 @@ These land with the next breaking release, not the 2026-09-23 train. | |
| decode time (RTMP, a browser) trails by the delay plus the video's | ||
| send-ahead: 2 s at the new default, where `--delay 500ms` keeps the 1 s it | ||
| had. moq-srt egress runs at its SRT latency or 1 s, whichever is longer. | ||
| - **`moq_origin_announced_broadcast` delivers every publisher instance.** Its | ||
| callback gets a new broadcast handle each time another instance takes over | ||
| the path or the broadcast returns, and its terminal `0` only on cancel. Free | ||
| each handle with `moq_consume_close` once its successor arrives. A binding's | ||
|
Contributor
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. 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win Tell callers when to free the final handle. If the wait ends without a successor, the instruction to free a handle “once its successor arrives” never applies to the last handle. State that callers must also free the last positive handle when they finish using it, including after cancellation or terminal origin closure. 🤖 Prompt for AI Agents |
||
| `AnnouncedBroadcast.available()` works the same way, and its first call is | ||
| unchanged. | ||
|
|
||
| ## Wire | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| # [S] The OBS source follows a broadcast's restarts | ||
|
|
||
| ## Goal | ||
|
|
||
| The OBS MoQ source keeps playing across an epochless GOAWAY drain or a | ||
| publisher replacement. When `AnnouncedBroadcast::available()` hands out the | ||
| next publisher instance, the source drops its catalog and track readers for | ||
| the old one and subscribes to the new one, without blanking for longer than | ||
| the new instance takes to deliver a keyframe. | ||
|
|
||
| ## Plan | ||
|
|
||
| `cpp/obs/src/moq-source.cpp` calls `available()` once (`moq_source_on_connect`) | ||
| and stops when its catalog ends, so a replaced instance leaves the source | ||
| stopped once the old route dies and its tracks end with an error. Since moq-ffi's `available()` now | ||
| resolves each instance in turn, re-arm it after every instance and rebuild the | ||
| `Connection`'s consumer, catalog and tracks on each one, reusing the decoders | ||
| when the codec config is unchanged. | ||
|
|
||
| Cover it in `cpp/obs/test` with a replacement while the source plays. | ||
|
|
||
| Public API: none. Wire: none. |
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
Document both causes of terminal
0.The C API also sends terminal
0when the origin closes after it delivered a handle. The phrase “only on cancel” gives callers the wrong terminal-code contract. Include origin closure in this sentence.🤖 Prompt for AI Agents