Re: [Moq] Data model and MoQ streams

Roberto Peon <fenix@meta.com> Thu, 01 December 2022 19:03 UTC

Return-Path: <prvs=3334c4bda9=fenix@meta.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 C1354C14F748 for <moq@ietfa.amsl.com>; Thu, 1 Dec 2022 11:03:22 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.69
X-Spam-Level:
X-Spam-Status: No, score=-2.69 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, HTML_FONT_LOW_CONTRAST=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_NONE=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=meta.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 DI32pGANmqDx for <moq@ietfa.amsl.com>; Thu, 1 Dec 2022 11:03:18 -0800 (PST)
Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A150EC14F726 for <moq@ietf.org>; Thu, 1 Dec 2022 11:03:18 -0800 (PST)
Received: from pps.filterd (m0148461.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2B1IZ79Y006102; Thu, 1 Dec 2022 11:03:15 -0800
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=meta.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=s2048-2021-q4; bh=JZCpXvnGJbDrGu7twWU2ZJf/7h00npVCXOlbn95nVIY=; b=Omve1yf29ExC4lFpEuauwx6QQKEi7lEykB835V8xSPE9Gnaj/P73+jO+EXczQ7+LXuA0 j5RgXB0bm6ef29YKdB1lyq+PngYoKwi2TSOCVJCXaadNiktyw8j/oZCnGNHkN0QriuY8 L3Vkwt78yuj/ZpgnUhfiz8K2VaxKaDEibhxiQ6UDf2UJXfOwJrW41BBdhAul5Ufe+f88 rg9UG6h/iQ1s64tlD630niURmxxwAKoyi57HahbTwt9xvNA0GoJw8sgeFmNPr9nROQxu CV8G+ND5VYYnOPqELlRW+Fu/8t1Vc4ZvZRwuW/Q9LJoGxtNffodTCi9b/OFShT8/5eAl zQ==
Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1nam02lp2045.outbound.protection.outlook.com [104.47.57.45]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3m67nvwxrq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 01 Dec 2022 11:03:14 -0800
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q8Hj7872Q7P6Vv3q82cCNMrCXKdeNA483WN64pxSM6GcYOcEwWi5oXFqTJFQDka/4ik8Cum75/gOa4ArZt/ifH7DsmMbFwZt6wxHYqREXLmh6JgEJKKvEBhGRLkr12b188PqFW4PcHQAW3RqnR4qiM2p2MmbXWg2GsoOytEjHVS3IMsUbvek/RRhyOgEaQTIIfH8H1M+LkCPZ8D/biicYa5SqHMZOef5YJuVKp9+rrAQA2eZSMQ6Z5Okx+AQRAEJ2b6Hc3ml1P3fObGO3DCyMMUBKO4UDXHoldq7gSZO0dhagG/xuSiLc9X25C3dcpG6+Jbl8M+BnD1Gq5YG1AZwQA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LFQ+huoz5gnUgr88q8OYSG2L866Ud27ZGx8Nrsl7i2g=; b=MlCraqLw410/ecxAGsH3UXzYvxp1FA8MfxSKA5/2y01OY/PPGk/RRdrVnzdUiVhfJfuKDRaG4+uwXoGjRKaccFIggYFLGzrJ4rFDLiemjlBza3bThcNm2pWLtS7SUHxbO9ia5kYOsbsFbnQ4HF1nRCGeL25KoTMX4qB4FcXcY6PRpHo61g1Cnqco4ubbv6rq8w5DPAIUprDko4uM3KAI0Yj0ZGzkZbM17vXphmmVbdf85Sq3VqKeWUdFonAU1dzP218Mb49EyGOKc5RNJwGb/GFfcPV/jfJKfK6NDQcSUYKHp3uVVED1mOXzda2vD9ZGiWz+tlfgV8PI83NGG9VQCw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=meta.com; dmarc=pass action=none header.from=meta.com; dkim=pass header.d=meta.com; arc=none
Received: from MW5PR15MB5145.namprd15.prod.outlook.com (2603:10b6:303:197::5) by MN2PR15MB2621.namprd15.prod.outlook.com (2603:10b6:208:123::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.8; Thu, 1 Dec 2022 19:03:10 +0000
Received: from MW5PR15MB5145.namprd15.prod.outlook.com ([fe80::f4ad:8c71:d5e6:515f]) by MW5PR15MB5145.namprd15.prod.outlook.com ([fe80::f4ad:8c71:d5e6:515f%5]) with mapi id 15.20.5880.008; Thu, 1 Dec 2022 19:03:09 +0000
From: Roberto Peon <fenix@meta.com>
To: "Law, Will" <wilaw@akamai.com>
CC: Christian Huitema <huitema@huitema.net>, MOQ Mailing List <moq@ietf.org>, Luke Curley <kixelated@gmail.com>
Thread-Topic: [Moq] Data model and MoQ streams
Thread-Index: AQHZA5xzgIBfFaPH7USSUjjs2ARIYK5XxOQAgABAdICAACoxAIABFQN/gAARkoCAABB+Zw==
Date: Thu, 01 Dec 2022 19:03:08 +0000
Message-ID: <MW5PR15MB5145A9E0611B4FD277001B34D4149@MW5PR15MB5145.namprd15.prod.outlook.com>
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>
In-Reply-To: <D4E37AEB-F3B7-48B7-AA65-5C76B0B4D75D@akamai.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: MW5PR15MB5145:EE_|MN2PR15MB2621:EE_
x-ms-office365-filtering-correlation-id: 2e86cc0f-2eb5-48b0-fb00-08dad3ceafa7
x-fb-source: Internal
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: Xnq+sx7STA04/j/hl5GXyv2NoCC3Tt68zNTR9GsyQoQ45AwePBjXL2rSkQlC+BnvrJ4/raqlGNbz+jZ7PpKcMpwcJMKhm1g9JsHdHikQeI0fJtNgJt/+PzvxW5A0E0vYa+QoEU6LBAhWc7ffhEEqXjitOecJyjN8ouCdXau1mviNeI5dtatzHeUDLfTWxTbHDGembebvEONEQXx0HYwhML2y5LTFASItWo9zkjqPKWlXQy5hOkw3eAtJnWd7cRDf4PxFIx1Q7IdbOhxgCTou+4OJyIg0e8fBs7Xa9wNqCwkvgtBnolJgIO45Z3xACm0TVoEKisi7+JbAhQ6ZuvCrWSvdaVXfCvbDSPj41NzJu6P8rzVE/ul/pxTezk4QB2TE9rNVb9WjQm27DH6KS/kYo8ERaBcBV5piBTTIl4jFgbrlX+oxr3EGAoSUAxyTEFRW8+d/4NuO8udxwhZNeONS4EdJxPnz7cObqfu4SV75xJBgoV6FWMT+GQz4t8V2hgKmz5tzlcyqY/xLhyo0tr+1Yma4qzNlAPlC3WnOnTTr8CpNoQkOHIZ6RDYTqLwPpy27UzczD7J2dtXqWD5skymtBxuZa7AZVju8cVZgXY/2ZfaeP/HJLw5CciY1x3Ekr0feGLtt0aFjg3qO5LTbF/N8Bu7LtdrJsSLonv8xG3A2VsAV8CVVJTyngBD7EJU5k6H9ejJ5J6BXRaN8xAa6jqmg8rIIy+mQCPxYbz6wx8jW/EyjoVlruYsQ2BC5m9MzhW5o
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW5PR15MB5145.namprd15.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(39860400002)(396003)(346002)(366004)(136003)(376002)(451199015)(66899015)(54906003)(33656002)(6916009)(316002)(966005)(38070700005)(55016003)(166002)(86362001)(122000001)(38100700002)(83380400001)(7696005)(6506007)(186003)(9686003)(2906002)(26005)(53546011)(30864003)(71200400001)(5660300002)(64756008)(8936002)(41300700001)(478600001)(52536014)(66556008)(66476007)(66446008)(76116006)(8676002)(4326008)(66946007)(234284002); DIR:OUT; SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: 6PK2BkOTMkB07LXJaTvjEQq+ls1tzjKHWSVjFwmMNDRdvSu6KhRIaH9hy3/57EfTFeEe7lwMW1kvnkz4SXl3VlECH7u4IZV+MSjF3bQLV7gcFN8QCazk47ojPb2DPTdglgtF/CD1ZcXlf9GfVDTF69Gs3gsN5Q/9o00XoFEO4ldCd82pe6mT1IRIKwgaopuXe+TsTsShmjYPrWbUwKVwVeIyRfL+LoIL03hckwFRdgEiMAULNTqXcAV4/nAMLb/Q9rU3Ji+WcN69KoX+8BKGpfz5zeqQeTPMH49Wg40CwH+qv7BRX/r0imqPPX/qz+ucXbKFrtvb2jk2Sgy5nGoO0QVg1FPI5gXbQt4HJPzIMc9ACPXsap/Mu8dImenNYRsRj9CSTZS+yWKxEei7izPBtYi7hvIn7yyA/7zRlAoj0XBjbR1NkZlDszM+68wyfoK+ZkuZgXusANOI7Q+cI85Yuivaf6ySurT1TtS7Y5wZ++7PFso+xOH4aCIP8gK3bFWSxzH9C1fozfua5SJ8giyn4bIZRlbsf9n6fVzQkQM9rjiwWwsKadHKhiQ64YRxsE/ZthFfPEFg+ddzFTde08yaEpqdxMFxOUr2AGA7J4iZ2FCumcwkqGLbSRUGzx8UYGrerFyjQmdP9KT00k8M2Pywi4LKEqS5xAFOz3Gs2C5+YXHeTOv3E4OUGx+7+gTLQO2+f2E/EVWv2kKsnZau0t7Cx8BkPMkuG2ZRFjV+CIoxkwWZJozx9o7Zp2CuB59Qh/jwTdxRvjz7+cFvPqO0EfRAZtx3yVv7/VsAXNxCg9hsoKb06/bnKNFM5uN+HYLWmo5275ycyEkpM2I5bJwlB6zhjWSAKxg3g42CdzZySXgSXKe2j1KCpRzis1VbzqE7k2GUt1nykSRgetvEXr3+UKyRnrsYKq195Wl8/zvAK4twRwD534wxgeFz9+URVi1/mDhc4zUzWuZUXLmsnBWopFODtzfip14GlmIGrdk4yQcjCVjrKh08GeqBbPFi1oKIjW3pULqseHea7zYs7HZi2T0NxRwq4aHnbZTmYlRyPMvmS/hhn4RmSXy7MJiRCsUslL7pdNXfhbV5DHV4btcfV8E11yXi4okeucXDgzR0eWLYXnPDl40mC6U5cLX7cpvrJcV9b8n7X93uUBUZDh8pc5rDQEeYKm69Cc9XiPesz2asR+cMOAXFukfx7tRPro/opXkOEUa8vXwewKJx2XdmDGuVR4yjLVYZ4U3QIbskB7dMRTIYVTUZiuAPiCGRUFByixmbUQx9lxpQiIC1jbZZVXHsMD6e/6k+t0VE0NXajGtlUWDA9dgAntTmFfkxPd3zUTfBD0dar7Muzxm97Ftry7HNXP/aoX/Mh8+QNhhkGOF8UdTpBNt2UYKMjlyu56s+A99WcZw80aleQctiXtr+z6g3lQ6GNLv/BvBlK4Yx0C8zZeXMkBnOtN8jurXS4gj0JkttFV0uZyAQkFddBUuheaJBSIAzrEfSzHMpNpP1zu56YxCBNNIE8dNUjoim6IkdVF150WD19eYzDJf80uINbxROvx7HxD5ISlGwdltowwHljehJMb03zTAAwLQB8Am/wF40fb8XfwGBNkNf/xy2j7Fhvg==
Content-Type: multipart/alternative; boundary="_000_MW5PR15MB5145A9E0611B4FD277001B34D4149MW5PR15MB5145namp_"
X-OriginatorOrg: meta.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MW5PR15MB5145.namprd15.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 2e86cc0f-2eb5-48b0-fb00-08dad3ceafa7
X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Dec 2022 19:03:08.9623 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: XndPQ/L+s2GMUZbnPWmDHOVPh0dxsrZy8inSXubLj6uRbaFeNwLxUY37882GoYyR
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR15MB2621
X-Proofpoint-ORIG-GUID: hOFc4dtlEhw9zo9ayGFQV6R2FW4T-XnX
X-Proofpoint-GUID: hOFc4dtlEhw9zo9ayGFQV6R2FW4T-XnX
X-Proofpoint-UnRewURL: 4 URL's were un-rewritten
MIME-Version: 1.0
X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.923,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-12-01_13,2022-12-01_01,2022-06-22_01
Archived-At: <https://mailarchive.ietf.org/arch/msg/moq/v6kqbABHjYtmL2i-qAhqccTm_Vg>
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: Thu, 01 Dec 2022 19:03:22 -0000

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<mailto: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<mailto:kixelated@gmail.com>>
Date: Wednesday, November 30, 2022 at 10:03 AM
To: Christian Huitema <huitema@huitema.net<mailto:huitema@huitema.net>>
Cc: MOQ Mailing List <moq@ietf.org<mailto: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<mailto: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<mailto:Moq@ietf.org>
https://www.ietf.org/mailman/listinfo/moq<https://www.ietf.org/mailman/listinfo/moq>