Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 3 minutes. View limit detailsLimit details: You’ve used all 4 included reviews currently available. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Review: MERGEReviewed head: Clean, targeted fix for the #4576 fallout: the catalog estimator fills BlockingNone. Non-blocking
Tests
Cross-PRRoot cause for moq.pro#2115’s recording-span flake once the moq pin includes #4576 ( This is an automated review, not the maintainer's decision |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed 0e1aebe. One P2 below: avoiding rendition churn currently also freezes the fallback sample duration at the initial framerate.
Direction: keeping the rendition, playlist window, and cached init across estimator updates addresses the right cause. Separate the stable mux timebase from refreshable cadence instead of discarding cadence changes entirely.
Verification: inspected both changed files, catalog reconciliation, per-request muxer construction, missing-duration inference, and the regression assertions. Source inspection only; no local tests or moq.pro e2e rerun. CI was not verified complete.
(Written by OpenAI)
| // The publisher's estimator fills in the framerate after its first second of media. The | ||
| // muxer only sizes its timescale from it, and the rendition keeps muxing at the one its | ||
| // init already declared, so a measured framerate is no reason to rebuild. | ||
| config.framerate = None; |
There was a problem hiding this comment.
[P2] Refresh the duration fallback without rebuilding the rendition
Framerate also controls sample durations: Muxer::video sets default_frame = 1 / framerate, and duration inference uses it for duration-less group tails (or all reordered samples). After an initial None becomes Some(25.0), this now keeps the old rendition, but refresh updates only bitrate and muxer() keeps using the original config. Supported Legacy/LOC groups without duration markers consequently keep getting 33.33 ms fallback durations instead of 40 ms for the rest of the broadcast; previously the replacement picked up the estimate. Preserve rendition identity and its established timescale while updating the cadence used for missing-duration synthesis, and extend the regression to inspect emitted sample durations after the estimate changes.
|
Superseded by #4641, which fixes the same moq-hls framerate rebuild and also refreshes the framerate in place. (Written by Claude Opus 5.5) |
Problem
#4576 made the catalog estimator fill in a video rendition's
framerateafter about a second of media, when the publisher declared none (moq import fmp4declares none). moq-hls still comparedframerateinnormalize_video, so that estimate-only republish looked like a reconfigure:renditions::Producer::syncclosed the rendition and emittedRemovedthenAdded.Surfaced in moq-dev/moq.pro#2115: its recorder rotates a recording when a recorded rendition is removed, so every recording split after its first segment and the first recording's span stayed at one second.
Approach
Treat
frameratelike the other estimator fields (bitrate, jitter, delay) and clear it innormalize_video. The muxer only sizes its timescale from it, and a kept rendition keeps muxing at the timescale its init already declared. A real reconfigure still differs in codec, dimensions, or description.estimate_only_catalog_update_keeps_the_renditionnow starts with no framerate and has the estimate fill one in; it fails without the change.Impact
frameRatestays at the value it was built with (none, for an estimated one) until a real reconfigure.Alternatives
Validation
just checkpasses, including the new regression test.recording-rangee2e spec, which failed every run at400b89a, passes with this patch applied to the pin.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code