Refactor MoQT sending logic to pull objects from the application, instead of pushing them onto individual MoQT sessions.

This CL introduces a new interface, a MoqtTrackPublisher.  A track publisher knows everything necessary to publish a track, caches recent objects and may be shared across multiple MoQT sessions.  Objects are always pulled from the publisher.

This CL also restructures the sending logic around every object being published within a single subscription (there has been a lot of code from the era where we deduplicated objects; that is now gone).  The publisher notifies the subscription, which in turn notifies the relevant stream within the session.

There is also a lot of other minor refactors as necessary.

The current version of this CL does not support publishing objects far in the past, largely due to design ambiguities surrounding how fetch is supposed to work (I am writing a slide deck for Vancouver on that).  Instead, we merely backfill the recent objects that are still in the cache; that covers most of the use cases we care about for now.

PiperOrigin-RevId: 653833971
25 files changed
tree: be01061674c4f70e980a1129af4914749c67ddfa
  1. build/
  2. depstool/
  3. quiche/
  4. .bazelrc
  5. .bazelversion
  6. BUILD.bazel
  7. CONTRIBUTING.md
  8. LICENSE
  9. README.md
  10. WHITESPACE
  11. WORKSPACE.bazel
README.md

QUICHE

QUICHE stands for QUIC, Http, Etc. It is Google‘s production-ready implementation of QUIC, HTTP/2, HTTP/3, and related protocols and tools. It powers Google’s servers, Chromium, Envoy, and other projects. It is actively developed and maintained.

There are two public QUICHE repositories. Either one may be used by embedders, as they are automatically kept in sync:

To embed QUICHE in your project, platform APIs need to be implemented and build files need to be created. Note that it is on the QUICHE team's roadmap to include default implementation for all platform APIs and to open-source build files. In the meanwhile, take a look at open source embedders like Chromium and Envoy to get started:

To contribute to QUICHE, follow instructions at CONTRIBUTING.md.

QUICHE is only supported on little-endian platforms.