Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 8 additions & 67 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions js/join/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ function join(link: Link): () => void {
const show = new Watch.Player({
origin: connection.origin,
name: Feed.path(link.name, link.generation),
// The guest's receive rate, so the player drops to the half size their link can carry.
probe: connection.probe,
// Claim the guest's receive rate, so the player drops to the half size their link can carry.
viewer: { viewers: connection.viewers },
video: { canvas: element<HTMLCanvasElement>("show") },
});
signals.cleanup(() => show.close());
Expand Down
2 changes: 1 addition & 1 deletion moq
Submodule moq updated 1441 files
1 change: 0 additions & 1 deletion quest/m0/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ repository.
- [moq-video's browser backends are pinned](/quest/m0/pin-browser-video.md) - the web studio's video slice and browser composition
- [moq-audio's browser backends are pinned](/quest/m0/pin-browser-audio.md) - the web studio's audio slice
- [moq-audio's source tap is pinned](/quest/m0/pin-audio-tap.md) - the samples clap-to-measure sync times a clap from
- [moq-audio's strip pan is pinned](/quest/m0/pin-audio-pan.md) - the bus strip pan the studio's pan sets
- [A replayed media file never repeats a timestamp](/quest/m0/media-replay-timestamps.md) - a media source that starts over publishes strictly increasing timestamps, and its flaky test passes every run

## Related
Expand Down
6 changes: 1 addition & 5 deletions quest/m0/audio-pan.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,11 @@ the rest of audio scenes:
moq-audio; the studio only sets it and saves it. Rejected: a pan per audio
scene a sound is sent to.
- ✅ Settled moq-side in
[Pan a bus source](https://github.com/moq-dev/moq/blob/main/quest/m3/audio-strip-pan.md):
[Pan a bus source](https://github.com/moq-dev/moq/pull/8180):
a constant-power law, -3 dB at center; a stereo source is balanced, the
far side attenuated and each channel kept where it is; a bus that is not
stereo refuses a pan other than center.
- Changing pan never drops or repeats audio, ramped across a block as gain
is.
- Both panels draw a sound's mute, gain, and delay with `strip_controls` in
`rs/moq-studio/src/ui.rs`; a pan added there shows in both.

## Required

- [moq-audio's strip pan is pinned](/quest/m0/pin-audio-pan.md) - the `Strip` pan the studio sets
13 changes: 0 additions & 13 deletions quest/m0/pin-audio-pan.md

This file was deleted.

5 changes: 1 addition & 4 deletions rs/moq-scene/src/publish.rs
Original file line number Diff line number Diff line change
Expand Up @@ -514,10 +514,7 @@ impl<'a> Video<'a> {
config.color = color;
config.kind = listing.kind.clone();
let rendition = config.probe().await?;
let reserved = listing
.catalog
.reserve()
.with_interval(config.gop.duration(config.framerate));
let reserved = listing.catalog.reserve().with_interval(config.effective_join());
let producer = moq_video::encode::Producer::new(listing.broadcast.clone(), reserved, rendition)?;
Ok(Self {
track: Encoding::new(producer, listing.sessions.clone()),
Expand Down
4 changes: 2 additions & 2 deletions rs/moq-scene/src/replay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ fn copy_held(
let copied: Vec<u64> = held.into_keys().collect();
for pair in copied.windows(2) {
if pair[1] > pair[0] + 1 {
track.drop_groups(pair[0] + 1..pair[1], moq_net::StreamError::NotFound);
track.skip_groups(pair[0] + 1..pair[1]);
}
}
Ok(media.then_some(covered))
Expand Down Expand Up @@ -406,7 +406,7 @@ mod tests {
.unwrap();
for sequence in 0..groups {
match lost == Some(sequence) {
true => track.drop_groups(sequence..sequence + 1, moq_net::StreamError::Cancel),
true => track.skip_groups(sequence..sequence + 1),
false => write(&track, sequence, &second(sequence)),
}
}
Expand Down
4 changes: 2 additions & 2 deletions rs/moq-scene/src/source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2159,7 +2159,7 @@ pub(crate) mod test {
let mut config = moq_video::encode::Config::new(64, 64, moq_video::FrameRate::new(30, 1).unwrap());
config.kind = moq_video::encode::Kind::Software;
let rendition = config.probe().await.unwrap();
let reserved = catalog.reserve().with_interval(config.gop.duration(config.framerate));
let reserved = catalog.reserve().with_interval(config.effective_join());
let mut producer = moq_video::encode::Producer::new(broadcast.clone(), reserved, rendition).unwrap();
let mut encoder = moq_video::encode::Encoder::new(&config).unwrap();
let gray = vec![0x80; 64 * 64 * 4];
Expand Down Expand Up @@ -2616,7 +2616,7 @@ mod tests {
let mut config = moq_video::encode::Config::new(64, 64, moq_video::FrameRate::new(30, 1).unwrap());
config.kind = moq_video::encode::Kind::Software;
let rendition = config.probe().await.unwrap();
let reserved = timebase.reserve().with_interval(config.gop.duration(config.framerate));
let reserved = timebase.reserve().with_interval(config.effective_join());
let video = moq_video::encode::Producer::new(broadcast.clone(), reserved, rendition).unwrap();
(video, moq_video::encode::Encoder::new(&config).unwrap())
}
Expand Down
2 changes: 1 addition & 1 deletion rs/moq-studio/src/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1993,7 +1993,7 @@ impl Renditions {
video,
} = probed;
let (broadcast, timebase) = (&self.broadcast, &self.timebase);
let reserved = timebase.reserve().with_interval(config.gop.duration(config.framerate));
let reserved = timebase.reserve().with_interval(config.effective_join());
let suffix = match &video.codec {
hang::catalog::VideoCodec::H264(_) => ".avc3",
hang::catalog::VideoCodec::H265(_) => ".hev1",
Expand Down
4 changes: 3 additions & 1 deletion rs/moq-studio/src/record.rs
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,9 @@ impl Run {
None => Reading {
source: self.program.clone(),
format: CatalogFormat::Hang,
pick: Box::new(|studio: hang::Catalog<moq_scene::publish::Ext>| Some(largest_video(studio.media()))),
pick: Box::new(|studio: hang::Catalog<moq_scene::publish::Ext>| {
Some(largest_video(studio.without_ext()))
}),
closing: Some(self.closing.clone()),
},
Some(name) => {
Expand Down
2 changes: 1 addition & 1 deletion rs/moq-studio/src/replay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ mod tests {
let mut config = moq_video::encode::Config::new(64, 64, moq_video::FrameRate::new(30, 1).unwrap());
config.kind = moq_video::encode::Kind::Software;
let rendition = config.probe().await.unwrap();
let reserved = catalog.reserve().with_interval(config.gop.duration(config.framerate));
let reserved = catalog.reserve().with_interval(config.effective_join());
let mut producer = moq_video::encode::Producer::new(broadcast.clone(), reserved, rendition).unwrap();
let mut encoder = moq_video::encode::Encoder::new(&config).unwrap();
let gray = vec![0x80; 64 * 64 * 4];
Expand Down