Re: [Hls-interest] Survey: signaling HLS client capability

"Weil, Nicolas" <nicoweil@elemental.com> Fri, 28 May 2021 19:13 UTC

Return-Path: <prvs=775c113e5=nicoweil@elemental.com>
X-Original-To: hls-interest@ietfa.amsl.com
Delivered-To: hls-interest@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 32D563A3262 for <hls-interest@ietfa.amsl.com>; Fri, 28 May 2021 12:13:00 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.296
X-Spam-Level:
X-Spam-Status: No, score=-1.296 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, URIBL_SBL=0.5, URIBL_SBL_A=0.1] autolearn=no autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QYKFVn4eDwjk for <hls-interest@ietfa.amsl.com>; Fri, 28 May 2021 12:12:55 -0700 (PDT)
Received: from smtp-fw-80006.amazon.com (smtp-fw-80006.amazon.com [99.78.197.217]) (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 D78D23A325E for <hls-interest@ietf.org>; Fri, 28 May 2021 12:12:55 -0700 (PDT)
X-IronPort-AV: E=Sophos;i="5.83,230,1616457600"; d="scan'208,217";a="3878505"
Received: from pdx4-co-svc-p1-lb2-vlan2.amazon.com (HELO email-inbound-relay-1e-303d0b0e.us-east-1.amazon.com) ([10.25.36.210]) by smtp-border-fw-80006.pdx80.corp.amazon.com with ESMTP; 28 May 2021 19:12:48 +0000
Received: from EX13D02EUB002.ant.amazon.com (iad55-ws-svc-p15-lb9-vlan2.iad.amazon.com [10.40.159.162]) by email-inbound-relay-1e-303d0b0e.us-east-1.amazon.com (Postfix) with ESMTPS id 80EACA1E9A; Fri, 28 May 2021 19:12:47 +0000 (UTC)
Received: from EX13D02EUB003.ant.amazon.com (10.43.166.172) by EX13D02EUB002.ant.amazon.com (10.43.166.170) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Fri, 28 May 2021 19:12:46 +0000
Received: from EX13D02EUB003.ant.amazon.com ([10.43.166.172]) by EX13D02EUB003.ant.amazon.com ([10.43.166.172]) with mapi id 15.00.1497.018; Fri, 28 May 2021 19:12:46 +0000
From: "Weil, Nicolas" <nicoweil@elemental.com>
To: Roger Pantos <rpantos=40apple.com@dmarc.ietf.org>, "hls-interest@ietf.org" <hls-interest@ietf.org>
Thread-Topic: [Hls-interest] Survey: signaling HLS client capability
Thread-Index: AddT84m5xzIFbn56QretyjyKelHEXQ==
Date: Fri, 28 May 2021 19:12:16 +0000
Deferred-Delivery: Fri, 28 May 2021 19:12:09 +0000
Message-ID: <7d0c7d1a5b8549d0b659984a0178084d@EX13D02EUB003.ant.amazon.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ms-exchange-transport-fromentityheader: Hosted
x-originating-ip: [10.43.165.35]
Content-Type: multipart/alternative; boundary="_000_7d0c7d1a5b8549d0b659984a0178084dEX13D02EUB003antamazonc_"
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/hls-interest/8Z0aKAEmwN-MSPhQkzMuByO81Fk>
Subject: Re: [Hls-interest] Survey: signaling HLS client capability
X-BeenThere: hls-interest@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Discussions about HTTP Live Streaming \(HLS\)." <hls-interest.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/hls-interest>, <mailto:hls-interest-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/hls-interest/>
List-Post: <mailto:hls-interest@ietf.org>
List-Help: <mailto:hls-interest-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/hls-interest>, <mailto:hls-interest-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 28 May 2021 19:13:00 -0000

Side note on Will’s filters examples: while _HLS_admode filtering query arg would make sense as it’s purely related to HLS, I don’t think we need standardized parameters like _HLS_codec, _HLS_bitrate or _HLS_lang.

These parameters are indeed handled by origins/packagers across multiple formats already, not only for HLS. Playback URLs just need to be built with the query args supported by the origin.

Examples:
https://docs.unified-streaming.com/documentation/vod/playout-control.html#using-dynamic-track-selection
https://docs.microsoft.com/en-us/azure/media-services/latest/filters-dynamic-manifest-concept
https://docs.aws.amazon.com/mediapackage/latest/ug/manifest-filtering.html

Thanks,
Nicolas

----------------
Nicolas Weil | Senior Product Manager – Media Services
AWS Elemental

From: Hls-interest <hls-interest-bounces@ietf.org> On Behalf Of Roger Pantos
Sent: Thursday, May 27, 2021 11:53 AM
To: hls-interest@ietf.org
Subject: RE: [Hls-interest] Survey: signaling HLS client capability

Great discussion, thank you to everyone for contributing insights. This is a single reply with responses to several of the major points; please let me know if it gets too hard to follow:

On May 21, 2021, at 1:48 PM, Law, Will <wilaw=40akamai.com@dmarc.ietf.org<mailto:wilaw=40akamai.com@dmarc.ietf.org>> wrote:
Architecturally, I see concerns in having servers making decisions for clients. The reasons for this are two-fold:
1. There is a clear and strong movement towards client privacy. This includes the deprecation and freezing of User-Agent and other client identifiers, which is well under way. If not already, it will become increasingly harder for servers to make any sort of reliable inference about a client's capabilities based purely upon the request.

Agreed that privacy is a concern. I expect that this kind of a signal would typically follow in lockstep with either the OS release (Apple native clients) or app generation (HLS.js et al), so the anonymity set (per https://w3c.github.io/fingerprinting-guidance/) would remain fairly large.

To give everyone a sense of where we're leaning at the moment, I'm thinking of a single _HLS_capabilities query parameter of the form _HLS_capabilities="CS-1,INT,LL,V-9" (alpha-ordered).
  CS-1 : client supports Content Steering protocol version 1
  INT : support Interstitials
  LL : supports low-latency
  V-9 : understands HLS protocol version 9

Haven't decided on the exact set yet; I'm interested in hearing about requirements.


Two schools of thought then as to how clients can handle diversity of content & features:

  1.  Clients should ask explicitly for what they want in a way that is consistent and the response cacheable . You have already established a convention of reserved _HLS_ query args  on which the newer features of HLS are quite dependent. It would make sense to extend this to allow players to add additional filters as they request content. Examples of filters:

     *   _HLS_codec=hevc, avc
     *   _HLS_bitrate=500000-4000000
     *   _HLS_lang=fr
     *   _HLS_admode=interstitial

  1.  Another approach is that the main playlist is a menu of all content available, and that the client is capable of extracting the pieces from it that it wants. Real-time feature-based detection, rather than brittle device categorization, is the sustainable way forward. We already require smart clients to play back HLS. Those same clients are aware of which features (low latency, steering, interstitial support) they support as well as are capable of discovering the capabilities (codec, HDCP, HDR etc) of the host device. This approach gives the same main playlist to all clients, simplifying distribution.

Right. [2] is what we have today, and in general I still prefer having the server vend everything and having the client be smart enough to choose what to use.

We're considering [1] for cases in which providing everything in a single master playlist places too much of a burden on the server. Gaetan gave an example where offering both (new) interstitials and (backward-compatible) segment stitching ad mode would be a big lift.



One problem with approach [1] is that you would want to use it when the client requests the main playlist, however it doesn’t know if the origin supports such filtering. It could therefore request AVC as the only codec, but receive a static playlist back from an origin that did not support filtering. There could be a playlist attribute added to indicate that the origin acknowledges the requests and has implemented the filters. If the client does not see such an acknowledgement echoed back, then it would know that it can’t trust the origin and would have to implement some decisions of its own. One could then argue that if it can make those decisions on its own, then why entertain the complexity of the filters? If a client is modern enough to add these filters to its requests, then couldn’t it simply apply them itself?

My advice to clients would be not to rely on any kind of playlist filtering in response to the capabilities offered, and to be prepared to deal with anything the server throws its way.

Related, _HLS_capabilities is clearly optional, on both sides.

On May 21, 2021, at 2:24 PM, Alex Giladi <alex.giladi@gmail.com<mailto:alex.giladi@gmail.com>> wrote:

Regardng [1] in Will's e-mail, I'm concerned about nuclear
proliferation of query parameters and special snowflake server-side
logic.

Agreed. I think that if we restrict it to a single query parameter, it becomes manageable for CDNs to include it or exclude it from their cache keys as appropriate.

Regarding a proliferation of special snowflake server behavior, I agree that this feature is somewhat prone to what I'd consider misuse (or at least overuse). I don't have an immediate solution for that.

On May 25, 2021, at 12:30 PM, Gaëtan Hervouet <gaetanhervouet=40google.com@dmarc.ietf.org<mailto:gaetanhervouet=40google.com@dmarc.ietf.org>> wrote:
I do agree with Will’s response. Relying on user-agent [1] is indeed becoming harder and we have to move away from that. Cacheability and debuggability are of course valid points [2] which is why the query parameters do seem like a good solution (as long as there is no explosion of combinations). I do see the problem with having the query parameter sent on master manifest request impact the content of the variant playlists; it would break cacheability. However, if that parameter were to be set for all requests of the playback session (including variants) then the problem goes away and the response is now deterministic and cacheable.

I'm not sure if I agree with this last bit. If a client indicates that it does (or doesn't) support interstitials, the server can hand it a master playlist with either interstitial-laden URLs or stitched URLs. There is no reason that I can see for them to be the same URLs, so they ought to be independently cacheable.


We may also want to consider an approach where the filters are not "features" but rather an HLS spec/draft version that the player is compatible with.


My thinking is to provide both. Note that solely providing a spec/draft version is insufficient because a client might implement aspect of the spec (interstitials) but not another (low-latency).


Roger.