Re: [Moq] Data model and MoQ streams
Suhas Nandakumar <suhasietf@gmail.com> Fri, 02 December 2022 22:22 UTC
Return-Path: <suhasietf@gmail.com>
X-Original-To: moq@ietfa.amsl.com
Delivered-To: moq@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DC4FEC14CF15 for <moq@ietfa.amsl.com>; Fri, 2 Dec 2022 14:22:38 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.993
X-Spam-Level:
X-Spam-Status: No, score=-1.993 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_FONT_LOW_CONTRAST=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, TRACKER_ID=0.1, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qNN1NcKoe9OO for <moq@ietfa.amsl.com>; Fri, 2 Dec 2022 14:22:35 -0800 (PST)
Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id ADC69C14CEE4 for <moq@ietf.org>; Fri, 2 Dec 2022 14:22:34 -0800 (PST)
Received: by mail-wr1-x42b.google.com with SMTP id d1so9886902wrs.12 for <moq@ietf.org>; Fri, 02 Dec 2022 14:22:34 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9Wj2DxYisiO8Y08Bxw2anEd32FRbDptnFPze0zTvW98=; b=RqP7W7GdxyCw4UAkQjJvzpwEmu/RoHe9Hu/uP8YYpfr1gjrm7zWdwCcph+lQ7S6iio apZhxyPO4u4xBpnuzy2FD4qjRRhulU7iuJhppxU2Gd2ByRlXoP3SxRdYsaA0N/vDchLP 7wqIy4MORVvpPOUv+W4VzRboOej21gcSlm5niIp2QhxcGXKC9yYL90ztBYttVMJxuJI6 3UVaKGtG232XSH9CD0zcWLXdSMULLa8RFCahev66ZX7PONyqhALILgZVvzgX3wdDIzFf s6+wEk+w9MktYczqWpGAqFQpqmkTlRNrC8eBVd7/oEXnkFMLRx0M7+oXvpbqxRfQ7Jcx vfZg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9Wj2DxYisiO8Y08Bxw2anEd32FRbDptnFPze0zTvW98=; b=z508rVYSJs/OFleTQ37EP9Cx8BCLF2mge2oDXhPKnG9qUjxg4Vp7ocXzIz7MbmhGqa WhInOqlWwbs91CpDl0DgxzldGzpI4VbblrvA55MgDz38qxJmUB16tnpNbsZ+exxQQy34 VtLdXZw/eTf84oiGocRdN37PQzuJmZSA5FGklqEYFQCsITgpU+S9PBMVWa7YhZPRh+As 4aWg7TiZPcXJrcCklcVODNzfVxns1H25R335gv+EIVuhmD2X6G/1qEXteC4YNn3V4l9a +UO0ZyiMLfWwi17thluPsi1rOH29EWOgkdQHZV8Kg6svQK93tkUZYq44HXWwdCCrM/Cz wchw==
X-Gm-Message-State: ANoB5pkdzEJsES0hUqycV0SJwKQLT85Ad5pFfR+3n2sfujMJDhb+qIb0 UGYz2NYSjAFjElmg5abCpECrEOZR97DuZOeUilM=
X-Google-Smtp-Source: AA0mqf42FRlmv39lveMoliHBsxw2ok4Ux7Iigi76qobc68qTaP6HArY6UCyl28Mb+re8m7qJ3fg5nfidNCZ+VuTmlY4=
X-Received: by 2002:adf:e9cb:0:b0:236:5f03:35df with SMTP id l11-20020adfe9cb000000b002365f0335dfmr42966593wrn.427.1670019752817; Fri, 02 Dec 2022 14:22:32 -0800 (PST)
MIME-Version: 1.0
References: <cdb53c88-3b78-7a2e-3dd6-572b90192294@huitema.net> <CAHVo=Z=+aG1S9AuLV8qZsQgHcZyr39ys76VYDSbprDyoxC50gQ@mail.gmail.com> <1041F1F7-4247-4EBF-A3E6-31F5A71F0FE2@akamai.com> <CAHVo=ZkSgYQS9EDA3+o2ObOJVFPeJ=t3LxGTVGEszaeEfttgLA@mail.gmail.com> <MW5PR15MB5145FE957332D3E7B246D573D4149@MW5PR15MB5145.namprd15.prod.outlook.com> <D4E37AEB-F3B7-48B7-AA65-5C76B0B4D75D@akamai.com> <MW5PR15MB5145A9E0611B4FD277001B34D4149@MW5PR15MB5145.namprd15.prod.outlook.com> <CAMRcRGQraBaPAUjQ-woTwtfCwxpzMkc+p-ffwSGCkxmQbPBRjw@mail.gmail.com> <CAHVo=Zkb4cOZ-ERdLnHm83i=wprjeQntYjUMX_1N-P0J6V0X_Q@mail.gmail.com>
In-Reply-To: <CAHVo=Zkb4cOZ-ERdLnHm83i=wprjeQntYjUMX_1N-P0J6V0X_Q@mail.gmail.com>
From: Suhas Nandakumar <suhasietf@gmail.com>
Date: Fri, 02 Dec 2022 14:22:21 -0800
Message-ID: <CAMRcRGSfBC4nhEjtYc1iX72Fty5ixD0h3ojaW_e1rmxVNSqhyg@mail.gmail.com>
To: Luke Curley <kixelated@gmail.com>
Cc: Roberto Peon <fenix=40meta.com@dmarc.ietf.org>, Christian Huitema <huitema@huitema.net>, "Law, Will" <wilaw@akamai.com>, MOQ Mailing List <moq@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000227a8f05eedfc630"
Archived-At: <https://mailarchive.ietf.org/arch/msg/moq/yRW-jVCcljvXQP4wEHBscNyj2so>
Subject: Re: [Moq] Data model and MoQ streams
X-BeenThere: moq@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Media over QUIC <moq.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/moq>, <mailto:moq-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/moq/>
List-Post: <mailto:moq@ietf.org>
List-Help: <mailto:moq-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/moq>, <mailto:moq-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 02 Dec 2022 22:22:38 -0000
On Fri, Dec 2, 2022 at 11:16 AM Luke Curley <kixelated@gmail.com> wrote: > I would caution against aiming to make a media-agnostic protocol right out > of the gate. > Agreed. > > We have very clear media use-cases that need to be supported. There's > basic features like the ability to seek backwards that either don't work > with QUICR as designed, or no longer make it a generic transport. I'm not > saying that it's not possible, and it might even be the best solution, just > that we're getting ahead of ourselves. > QUICR does support the idea of catch up and needed semantics (pretty much like http cached object retrieval) for caches/relays to retrieve the data . I do agree that is not semantically equivalent to seeking backwards, but as you pointed out, it can be made to work ( needs time based seeking). QUICR was proposed with the idea of unifying streaming and interactive use-cases in mind, with native relay support and extensibility in mind (for media centric use-cases like AR/VR, for example) and that makes it very much in scope of what MOQ is trying to solve, IIUC > In my opinion, we should build a simple and extensible media protocol. We > should always be aware of new use-cases and amenable to splitting the > protocol into a generic and media components (ex. QUIC vs HTTP/3). > > > > On Thu, Dec 1, 2022, 6:11 PM Suhas Nandakumar <suhasietf@gmail.com> wrote: > >> Agree with Will and Roberto. >> >> Within QuicR, for example, the manifest/catalog is just another type of >> object that can be published and subscribed too. How it gets delivered is >> via QUIC Streams and has knobs to control its priority and other things. >> The same is true with media objects. Having the common idea of >> resources/objects with names that you publish and subscribe to can keep >> application/domain logic out of delivery/transport protocol. >> >> >> On Thu, Dec 1, 2022 at 11:03 AM Roberto Peon <fenix= >> 40meta.com@dmarc.ietf.org> wrote: >> >>> If the “catalog” is another media flow, then that could certainly work. >>> That’d certainly not be O(n^2). >>> >>> I don’t think patching is even needed so long as we have a >>> ‘stream-of-messages’ thing (where one can ask for message X)—it is just way >>> easier that way! >>> >>> -=R >>> >>> >>> >>> I also like “catalog” FWIW >>> >>> >>> >>> *From: *Law, Will <wilaw@akamai.com> >>> *Date: *Thursday, December 1, 2022 at 9:59 AM >>> *To: *Roberto Peon <fenix@meta.com> >>> *Cc: *Christian Huitema <huitema@huitema.net>, MOQ Mailing List < >>> moq@ietf.org>, Luke Curley <kixelated@gmail.com> >>> *Subject: *Re: [Moq] Data model and MoQ streams >>> >>> @Roberto - what if the “manifest” were just another media object flow >>> that the client subscribed to? So it would receive it at the start of the >>> playback, then subscribe to updates which would it would receive >>> automatically. Such a subscribe-able >>> >>> ZjQcmQRYFpfptBannerStart >>> >>> *This Message Is From an External Sender * >>> >>> ZjQcmQRYFpfptBannerEnd >>> >>> @Roberto - what if the “manifest” were just another media object flow >>> that the client subscribed to? So it would receive it at the start of the >>> playback, then subscribe to updates which would it would receive >>> automatically. Such a subscribe-able manifest can be sent as a monolithic >>> object, or broken up into a subscription of its sub-components as you >>> suggest in the thread. The problem with the latter approach is that you >>> still need a an overall descriptor to indicate what sub-components are >>> available. The “manifest” will likely be compact and only dispatched when >>> there is a change in the publishers content mix (adaption sets, >>> representations etc to use DASH terms, not with every GOP as with HLS). >>> This is likely to be in the order of minutes, so its data contribution over >>> the wire is de minimus compared to the other media flows. We could conceive >>> of a patch update mechanism, in which the initial receipt is the full >>> manifest and then you subscribe to a flow of delta updates. Since clients >>> can join at arbitrary times and we don’t want to have to produce custom >>> updates per client, this introduces the complexity of signaling to indicate >>> to the client which base version it should apply the patch to, or else all >>> patches are a delta from the base and not from each other, which reduces >>> the patch efficiency. I think the simplicity of a solution in which 1) the >>> manifest is super compact 2) it only updates when the publishers changes >>> its overall content mix and 3) updates carry the complete manifest – is >>> most attractive and scalable. If n is the number of changes in the >>> inventory, then the manifest is dispatched with order O(n) not O(n^2). >>> >>> >>> >>> Cheers >>> >>> Will >>> >>> >>> >>> BTW - I use the term “manifest” to describe the inventory offered by a >>> publisher. We have strong aversions connotations around “playlist” and >>> “manifest” with the HLS and DASH formats respectively. To avoid inheriting >>> unintended assumptions, we should use a new term in the world of MoQ. I >>> propose the term “*catalog*” to represent this inventory. Its >>> syntactically concise, not overloaded in the format world and >>> understandable without explanation. You’ll see this term used in some >>> upcoming drafts which Suhas and myself will release shortly. But for now, >>> think about “catalog” and if it might be a preferred alternative to >>> “manifest”. >>> >>> >>> >>> >>> >>> *From: *Roberto Peon <fenix@meta.com> >>> *Date: *Thursday, December 1, 2022 at 9:02 AM >>> *To: *Luke Curley <kixelated@gmail.com>, "Law, Will" <wilaw@akamai.com> >>> *Cc: *Christian Huitema <huitema@huitema.net>, MOQ Mailing List < >>> moq@ietf.org> >>> *Subject: *Re: [Moq] Data model and MoQ streams >>> >>> >>> >>> Manifests that are not appendable are going to need to send O(n^2) data >>> when new things are added to the manifest. This has been particularly bad >>> with live streaming, where the lengths, sizes, and codec parameters change >>> over the lifetime of the video/stream. >>> >>> An (appendable) stream of messages would allow a manifest that was at >>> most O(n) transfer. >>> Even better would be to take some of the structure from pre-existing >>> manifests, and represent as stream-of-messages, i.e. a stream of periods, a >>> stream of representations, etc. >>> >>> This can be (re) leveraged for both person-to-person and broadcast so >>> long as a player has the ability to receive something other than what it >>> requested. >>> >>> (e.g. if a manifest is a list of things that /could/ be sent, but there >>> is some complication in generating or fetching the most desired >>> representation, then some other representation should be sent) >>> >>> -=R >>> >>> >>> >>> *From: *Moq <moq-bounces@ietf.org> on behalf of Luke Curley < >>> kixelated@gmail.com> >>> *Date: *Wednesday, November 30, 2022 at 4:25 PM >>> *To: *Law, Will <wilaw@akamai.com> >>> *Cc: *Christian Huitema <huitema@huitema.net>, MOQ Mailing List < >>> moq@ietf.org> >>> *Subject: *Re: [Moq] Data model and MoQ streams >>> >>> My current thought is that the sender advertises what tracks are >>> available for subscription, including any custom metadata: TRACK 1: >>> resolution=480p, bitrate=2000, codec=avc1. 4d002a TRACK 2: resolution=720p, >>> bitrate=4000, codec=avc1. 4d002aTRACK >>> >>> ZjQcmQRYFpfptBannerStart >>> >>> *This Message Is From an External Sender * >>> >>> ZjQcmQRYFpfptBannerEnd >>> >>> My current thought is that the sender advertises what tracks are >>> available for subscription, including any custom metadata: >>> >>> >>> >>> TRACK 1: resolution=480p, bitrate=2000, codec=avc1.4d002a >>> >>> TRACK 2: resolution=720p, bitrate=4000, codec=avc1.4d002a >>> >>> TRACK 3: resolution=1080p, bitrate=6000, codec=av01.0.15M.10 >>> >>> TRACK 4: bitrate=128, codec=mp4a.40.2, language=eng >>> >>> TRACK 5: bitrate=128, codec=mp4a.40.2, language=jap >>> >>> >>> >>> This is effectively a manifest. We could potentially leverage an >>> existing manifest (ex. HLS/DASH), use an existing container (ex. MP4 moov), >>> or make something custom. Personally, I like sending an init segment (ex. >>> mp4 moov) since it already has a lot of this information and is required to >>> configure the decoder, but I digress. >>> >>> >>> >>> >>> >>> The receiver chooses which tracks to receive: >>> >>> >>> >>> PLAY [3, 2, 1] >>> >>> PLAY 4 >>> >>> >>> >>> This means "send me 1080p, otherwise 720p, otherwise 480p based on my >>> available bitrate" and "send me english". The relay does need to keep a >>> mapping from track ID to bitrate but I think that's fine. The order is also >>> important, so the relay can naively check if the track is enabled and below >>> the available bitrate, rather than needing to sort itself based on business >>> logic. >>> >>> >>> >>> >>> >>> This could be very useful for seamless track switching: >>> >>> >>> >>> TRACK 6: resolution=720p, bitrate=3000, codec=avc1.4d002a, >>> advertisement=true, enabled=false >>> >>> PLAY [6, 3, 2, 1] >>> >>> ... >>> >>> TRACK_UPDATE 6: enabled=true >>> >>> >>> >>> The relay would start to send track 6 after it's been enabled with no >>> round-trip required. The sender can optionally disable tracks 3/2/1 to >>> avoid non-advertisement content from being available at the time. >>> >>> >>> >>> >>> >>> On Wed, Nov 30, 2022 at 1:54 PM Law, Will <wilaw@akamai.com> wrote: >>> >>> I want to highlight one issue with scalability as we begin to propose >>> solutions in which. “.. *Or the receiver could just tell the sender to >>> choose a track from a subset (ex. only these tracks, which are below 720p). >>> The sender only needs to know the maximum bitrate for each track.”. *This >>> scheme requires the sender to have knowledge of what tracks are available, >>> for a given resource, along with their bitrates, resolutions and any other >>> attributes on which a client may choose to filter (such as language, >>> captions, accessibility etc). When that sender is an edge relay, we must >>> maintain state of the content “package” in order to implement these >>> server-side decisions. This requires memory, and the relay parsing some of >>> type of package description, such as a manifest. We assume that the relay >>> delivering the subscription was even the one that previously delivered some >>> type of manifest and this may not be true. There will be many types of >>> manifests, their format will change all the time and when they do the >>> entire delivery surface must be constantly updated to accommodate the >>> evolution. In highly scaled system, having the ability for the edges not to >>> have maintain content state over time , to not have to have knowledge of >>> the media and to easily substitute one relay for another during delivery >>> leads to more robust architecture. At a higher level, we can think of >>> knowledge of the internal offerings of a given live resource as a contract >>> between the publisher and subscribers(s), where those agents are the only >>> ones that need to understand the composition and the relays simply follow >>> routing instructions and do not make decisions outside the state of the >>> WebTransport connections which they manage. >>> >>> >>> >>> I can illustrate this with two different means to achieve what Luke >>> hinted at in this thread. >>> >>> >>> >>> Option A >>> >>> Client: Hey server, send me the highest bitrate stream of 720p or below >>> that you can for the resource ABC123 >>> >>> Server: I must previously have received the manifest describing what >>> streams are available for ABC123, parsed it, stored it. So I look up the >>> streams, filter out those > 720p and select the highest bitrate from the >>> remainder. >>> >>> >>> >>> It would be a more scalable design if the relay only had to maintain >>> state about the WebTransport connections. This can be accomplished by the >>> subscriber providing the list of qualifying subscription identifiers, along >>> with their target bitrates, and then asking the sender (which is a relay) >>> to pick one. >>> >>> >>> >>> Option B >>> >>> Client, Hey relay, from this list of stream IDs and bitrates , send me >>> the highest bitrate appropriate for my connection >>> [“123”:1Mbps,”456”:2Mbps,”789”:5Mbps]. >>> >>> Relay: I see your throughput is 3Mbps so I’m sending you stream 456. >>> >>> >>> >>> >>> >>> Option B is easier to scale. The relay doesn’t need to know that “456” >>> is part of ABC123. I can ask any relay for this content, even if it has >>> never seen resource ABC123 before. It allows a lot of flexibility in how >>> the content is described/referenced by delegating the composition of the >>> resource to the publishers and subscribers and having relays respond to a >>> very simple and low level set of forwarding instructions. >>> >>> >>> >>> Cheers >>> >>> Will >>> >>> >>> >>> >>> >>> *From: *Luke Curley <kixelated@gmail.com> >>> *Date: *Wednesday, November 30, 2022 at 10:03 AM >>> *To: *Christian Huitema <huitema@huitema.net> >>> *Cc: *MOQ Mailing List <moq@ietf.org> >>> *Subject: *Re: [Moq] Data model and MoQ streams >>> >>> >>> >>> I like the summary; no disagreements here. >>> >>> >>> >>> I think any confusion has been caused by loose terminology and loose >>> requirements. I'm going to take a stab at both but I don't really know what >>> I'm doing or how to be most effective in IETF. >>> >>> >>> >>> The media bitrate needs to be adjusted in response to congestion. For >>> 1:1 the encoder can change the encoded bitrate, but for 1:N we need a >>> bitrate ladder. >>> >>> >>> >>> HLS/DASH works by letting the receiver choose the next rendition >>> (audio+video track) to download based on decoder support and network >>> conditions. Unfortunately, the receiver has very little information about >>> congestion when media is delivered frame-by-frame (more info >>> <https://github.com/kixelated/warp-draft/issues/44>). This is a >>> fundamental problem with LL-DASH and Twitch's LHLS. >>> >>> >>> >>> The solution is to expose the congestion controller's estimated bitrate >>> from the sender. This could be pushed periodically like a RTCP sender >>> report but that has a delay, especially during congestion. >>> >>> >>> >>> I propose an alternative. In Warp, a session advertises subscribable >>> tracks (aka media streams) that can have different content, encodings, >>> bitrate, etc. There can be multiple active subscriptions and for each >>> subscription, the receiver asks the sender for *one* track from a >>> provided list. The sender uses the congestion controller's estimated >>> bitrate, rounding down to choose the track. This sender-side ABR is >>> extremely simple and has worked great in production. >>> >>> >>> >>> This gives the receiver the ability to control the desired experience >>> while allowing it to delegate ABR responsibility. The receiver could >>> request specific tracks using subscriptions with a list of size 1, >>> implementing receiver-side ABR if they would like. Or the receiver could >>> just tell the sender to choose a track from a subset (ex. only these >>> tracks, which are below 720p). The sender only needs to know the maximum >>> bitrate for each track. >>> >>> >>> >>> On Mon, Nov 28, 2022, 6:44 PM Christian Huitema <huitema@huitema.net> >>> wrote: >>> >>> This email stems from an ongoing discussion of the "data model" used by >>> MoQ on Slack. Slack is a great tool for rapid exchanges, but not every >>> member of this list follows it. Also, it is not archived, which means >>> that the exchanges will disappear after a few weeks. So, email. Lots of >>> what follows is my personal take on the debate. >>> >>> The questions started with exchanges between Luke and Suhas about the >>> names of variables used in protocol headers. These exchanges were made a >>> bit harder because we don't have good agreement on the data model behind >>> MoQ, including agreements on how to name what. Part of that is because >>> different teams are working on different scenarios, such as streaming >>> and real time, and also different network configurations, such as with >>> relay or not. >>> >>> I think that we have some agreement about what MoQ shall do: enabling >>> the transport of media streams. The client opens a QUIC connection using >>> Web Transport and requests one or several media streams. The server >>> sends the corresponding data, until the client somehow closes the media >>> stream. That means we also have an agreement about what is out-of-scope: >>> some communication scenarios require the orchestration of several media >>> streams, such as multiple audio, video and other streams from multiple >>> participants in a conference. I would expect applications doing that to >>> open multiple MoQ streams, perhaps using multiple connections, and >>> organizing the orchestration themselves. The "MoQ stream" would be the >>> building block. >>> >>> We have a bit of a discussion on what the "MoQ stream" is. There is >>> broad agreement on the general concept that the media is composed of a >>> series of "objects", organized as series of groups (GOP). But then there >>> are differences, because a given media stream (say, a video) can be >>> encoded in multiple ways, say high, medium and low definition. The Warp >>> draft calls these different "renditions" of the media stream. >>> >>> The differences are largely due to the way different teams plan to >>> handle congestion. One way is to have the server decide. The media is >>> sent as a series of GOP, each on its own QUIC stream. At the beginning >>> of each GOP, the server looks at transmission conditions and decides >>> what rendition to use for the next GOP. This is a very convenient way to >>> manage congestion, but it imposes constraints: each rendition shall have >>> the same notion of GOP, which is not obvious is for example the low def >>> and high def codecs are operating in parallel. In that architecture, >>> relays have to acquire all renditions of a MoQ stream, so they can do >>> the real time adaptation. Real time clients also have to upload multiple >>> renditions so relays can get them and adapt. >>> >>> Another way is to let the client decide. The client asks for a specific >>> rendition, and the server provides exactly that. In case of congestion, >>> the server drops some data to fit into the available bandwidth. The >>> client notices that, closes the current stream, and opens a new MoQ >>> stream with a lower definition. Adaptation takes a bit longer than in >>> the previous scenario, but there is no requirement to synchronize GOP >>> boundaries across different algorithms. The relay management is also a >>> bit simpler. >>> >>> Then there are mixed scenarios. The client might ask for both low def >>> and high def, display high def as long as it receives it correctly, >>> switch to low def if high def stutters. The server would send GOP for >>> low def and high def in parallel, using a higher priority for low def. >>> Relays could use similar strategies, asking for all available renditions. >>> >>> I think these positions are not as far apart as it seems. They lead to >>> exposing the "rendition" property prominently in the protocol. (I hope >>> we can find a way to do that in a manner independent of media and >>> codec.) This would lead to something like: >>> >>> * client requests a media (by name) and specifies the renditions that it >>> is willing to receive. Server responds with some kind of accept message. >>> * server transmits the media as a series of GOP, which each GOP starting >>> with identification of which media stream and what rendition this is. >>> Servers may send several GOP renditions in parallel, each using its own >>> QUIC stream, with appropriate priorities. Servers chose what to send >>> based on client references and network conditions. >>> * relays act as client vis a vis the origin or the upstream relay, act >>> as server for the clients or the downstream relays, typically request >>> multiple renditions in parallel. >>> >>> There are things to iron out. Media names are typically long URIs. We >>> would want a short identifier or "media ID" in the QUIC stream headers. >>> The mapping from media name to media ID could be negotiated as part of >>> the initial request/accept exchange. The GOP headers would have to carry >>> a rendition ID -- or maybe we negotiate a unique ID for each valid >>> combination of media and rendition, add complexity and save a few bits. >>> (I could defend both sides of that argument.) >>> >>> OK. That message is already too long. But I hope it helps informing the >>> WG and making progress. >>> >>> -- Christian Huitema >>> >>> >>> >>> >>> -- >>> Moq mailing list >>> Moq@ietf.org >>> https://www.ietf.org/mailman/listinfo/moq >>> >>> -- >>> Moq mailing list >>> Moq@ietf.org >>> https://www.ietf.org/mailman/listinfo/moq >>> >>
- [Moq] Data model and MoQ streams Christian Huitema
- Re: [Moq] Data model and MoQ streams Spencer Dawkins at IETF
- Re: [Moq] Data model and MoQ streams Luke Curley
- Re: [Moq] Data model and MoQ streams Christian Huitema
- Re: [Moq] Data model and MoQ streams Suhas Nandakumar
- Re: [Moq] Data model and MoQ streams Law, Will
- Re: [Moq] Data model and MoQ streams Roberto Peon
- Re: [Moq] Data model and MoQ streams Alan Frindell
- Re: [Moq] Data model and MoQ streams Suhas Nandakumar
- Re: [Moq] Data model and MoQ streams Law, Will
- Re: [Moq] Data model and MoQ streams Luke Curley
- Re: [Moq] Data model and MoQ streams Luke Curley
- Re: [Moq] Data model and MoQ streams Christian Huitema
- Re: [Moq] Data model and MoQ streams Roberto Peon
- Re: [Moq] Data model and MoQ streams Law, Will
- Re: [Moq] Data model and MoQ streams Luke Curley
- Re: [Moq] Data model and MoQ streams Roberto Peon
- Re: [Moq] Data model and MoQ streams Suhas Nandakumar
- Re: [Moq] Data model and MoQ streams Luke Curley
- Re: [Moq] Data model and MoQ streams Suhas Nandakumar
- Re: [Moq] Data model and MoQ streams Christian Huitema
- Re: [Moq] Data model and MoQ streams Shihang(Vincent)