Subject: Re: [Hls-interest] HLS Content Steering v1.0b1 preliminary specification

From: David Hassoun <[email-masked]>
Date: Mon, 1 Mar 2021 09:49:45 -0700

This is in part why I'm still in favor of an optional client API that can
apply the data done from the steering service. It wont affect VST if this
client already has the data up front to adjust the initial steering and
avoids another API request.

I do think it is very important to have the option to provide up front
steering control outside of the initial playlist control as
realistically many solutions wont have dynamic server generated playlists
(at least for some time).  I know there is pushback to have client API when
everything is being primed to be done from the steering manifest - aka
server side. Though I still find it totally reasonable to have the server
be default with the option to override in client. There was discussion
about a client API to at minimum force a steering load and then with the
local proxy we could do it all client side - or at least partial client
with logic to determine when to override or not. However that still does
not address a clean up front steering control. I suppose we could have an
API/Boolean-Property to determine if a steering manifest is required up
front before playback. If so it will attempt the request and the client can
proxy/intercept to set data immediately or let the http call go through.
It's fairly complex but would potentially achieve the benefit and control
needed?

<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon>
Virus-free.
www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

On Sun, Feb 28, 2021 at 6:59 AM Daniel Weinberger <
[email-masked]> wrote:

> Hi Will,
>
> I want to add some thoughts on your last part that a player should be
> required to resolve the steering manifest before loading any media playlist.
>
> I'm also in favor of clarifying the expected client behavior, but in this
> case there is one negative side effect of your suggestion: It delays the
> startup time of a video.
> The steering manifest is referenced in the master playlist and if the
> player is required to resolve it before the first media playlist is loaded,
> this is one additional blocking step in between. I'm sure all player
> vendors work hard to minimize startup time and adding additional blocking
> requests here is not desired.
> It can be argued that this is just a small text file and won't take long
> to download even with bad network throughput, but there are also
> environments where this is considerable: environments with higher latency.
>
> Regards,
> Daniel
> _____________________________
>
>  <http://www.bitmovin.com/>
>
> *Daniel Weinberger*
> Principal Solutions Architect
>
>
> On Sat, Feb 27, 2021 at 12:39 AM Law, Will <wilaw=
> [email-masked]> wrote:
>
>> Another question on this new proposal: can the spec clarify whether the
>> client is required to request the steering manifest and resolve the
>> pathways *before* it loads any media playlists? Given the playlist below
>>
>>
>>
>> #EXTM3U
>>
>> #EXT-X-CONTENT-STEERING:SERVER-URI="
>> https://example.com/steering?video=00001
>> <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>
>> ",PATHWAY-ID="My-Great-CDN"
>>
>> #EXT-X-STEERING-TEMPLATE:ID="1",PREFIX="https://a.example.com/video
>> <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>
>> "
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=200000,STEERING="1"
>>
>> https://a.example.com/video/my-movie/mid/index.m3u8
>> <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hforWWE$>
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=400000,STEERING="1"
>>
>> https://a.example.com/video/my-movie/high/index.m3u8
>> <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/high/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mfpy4iP$>
>>
>>
>>
>> a client could start by immediately loading
>> https://a.example.com/video/my-movie/mid/index.m3u8, and then resolving
>> the steering manifest in the background after it had built up a few seconds
>> of playback buffer. Players would be tempted to do this as it would provide
>> a lower VST (by one RTT and whatever processing time there is on the
>> steering server). This would be a bad outcome for two reasons a) For QoE as
>> there could potentially be two cold hits against CDNs in the first 10s of
>> playback   - one for the default and the second as the new pathway kicks in
>> and b) if you are trying to move away from an underperforming default
>> pathway your startup sequence would continue to be pinned against it.
>>
>>
>>
>> The current version of the steering draft is ambiguous. It says “When the
>> player needs to poll for Pathway updates,", but does not dictate when this
>> should happen with respect to conventional start-up.
>>
>>
>>
>> Suggestion is that if the player understands steering, it MUST resolve
>> the steering manifest prior to loading any media playlist.
>>
>>
>>
>> -Will
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *From: *Roger Pantos <rpantos=[email-masked]>
>> *Date: *Friday, February 26, 2021 at 9:42 AM
>> *To: *"[email-masked]" <[email-masked]>
>> *Cc: *http-live-streaming-review <
>> [email-masked]>
>> *Subject: *Re: [Hls-interest] HLS Content Steering v1.0b1 preliminary
>> specification
>>
>>
>>
>> One objection we’ve heard to the approach below is that it requires the
>> master playlist to be customized on a per-pathway basis. To address that
>> we’re tweaking the proposal slightly: we're making the PATHWAY-ID attribute
>> optional. If it is not present in the master playlist, the client will omit
>> the _HLS_pathway query parameter from the steering manifest request until
>> it obtains its first steering manifest.
>>
>>
>>
>> (There are other ways for providers to communicate the initial pathway to
>> the steering server. For instance, the SERVER-URI could be relative to the
>> master playlist; each pathway could HTTP-redirect it to the actual steering
>> server along with an origin identifier.)
>>
>>
>>
>> Here are two examples of the current approach. The first one uses
>> absolute URLs in the master playlist, as you might have with a
>> dynamically-generated master playlist that knows the current pathway when
>> the playlist is produced. The second uses relative URLs, as you might have
>> for a static master playlist that is the same on all pathways.
>>
>>
>>
>> In both cases the content is available here:
>>
>>
>>
>> On the first CDN at -
>>
>>
>>
>> https://a.example.com/video/my-movie/master.m3u8
>> <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qV1Gx_j$>
>>
>>
>>
>> and on the second CDN at -
>>
>>
>>
>> https://b.example.com/backup-video/my-movie/master.m3u8
>> <https://urldefense.com/v3/__https:/b.example.com/backup-video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44llkyj51$>
>>
>>
>>
>> -----
>>
>>
>>
>> Absolute URIs (master playlist URI
>> https://a.example.com/video/my-movie/master.m3u8
>> <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qV1Gx_j$>
>> )
>>
>>
>>
>> #EXTM3U
>>
>> #EXT-X-CONTENT-STEERING:SERVER-URI="
>> https://example.com/steering?video=00001
>> <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>
>> ",PATHWAY-ID="My-Great-CDN"
>>
>> #EXT-X-STEERING-TEMPLATE:ID="1",PREFIX="https://a.example.com/video
>> <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>
>> "
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=200000,STEERING="1"
>>
>> https://a.example.com/video/my-movie/mid/index.m3u8
>> <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hforWWE$>
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=400000,STEERING="1"
>>
>> https://a.example.com/video/my-movie/high/index.m3u8
>> <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/high/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mfpy4iP$>
>>
>>
>>
>> The client requests
>>
>>
>>
>> https://example.com/steering?video=00001&_HLS_pathway=“My-Great-CDN
>> <https://urldefense.com/v3/__https:/a.example.com/steering?video=00001&_HLS_pathway=**BMy-Great-CDN__;4oCc!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44h1w5BH2$>
>> "
>>
>>
>>
>> And gets back this steering manifest:
>>
>>
>>
>> {
>>
>>   "VERSION": 0,
>>
>>   "TTL": 300,
>>
>>   "RELOAD-URI": "https://example.com/steering?video=00001&session=123
>> <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>
>> ",
>>
>>   "PATHWAYS": [
>>
>>     {
>>
>>       "ID": "My-Great-CDN",
>>
>>       "TEMPLATES": {
>>
>>         "1" : {
>>
>>           "PREFIX": "https://a.example.com/video
>> <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>
>> "
>>
>>         }
>>
>>       }
>>
>>     },
>>
>>     {
>>
>>       "ID": "My-Backup-CDN",
>>
>>       "TEMPLATES": {
>>
>>         "1" : {
>>
>>           "PREFIX": "https://b.example.com/backup-video
>> <https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>
>> "
>>
>>         }
>>
>>       }
>>
>>     }
>>
>>   ]
>>
>> ]
>>
>>
>>
>>
>>
>> -----
>>
>>
>>
>> Relative URIs (master playlist URI
>> https://a.example.com/video/my-movie/master.m3u8
>> <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qV1Gx_j$>
>> )
>>
>>
>>
>> #EXTM3U
>>
>> #EXT-X-CONTENT-STEERING:SERVER-URI="
>> https://example.com/steering?video=00001
>> <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>
>> "
>>
>> #EXT-X-STEERING-TEMPLATE:ID="1",PREFIX=""
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=200000,STEERING="1"
>>
>> /mid/index.m3u8
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=400000,STEERING="1"
>>
>> /high/index.m3u8
>>
>>
>>
>> In this case PREFIX=“” indicates that the steerable part is the entire
>> (relative) URI. So after the client receives the steering manifest (same as
>> above), if it has to switch to My-Backup-CDN it will just prepend its
>> PREFIX to the steerable part of each URL to produce:
>>
>>
>>
>> https://b.example.com/backup-video
>> <https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>
>> /mid/index.m3u8
>>
>>
>>
>> https://b.example.com/backup-video
>> <https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>
>> /high/index.m3u8
>>
>>
>>
>> Unless anybody spots any other major flaws in this approach, we’ll plan
>> to update the preliminary spec and send out another version.
>>
>>
>>
>>
>>
>> Roger.
>>
>>
>>
>> On Feb 19, 2021, at 7:07 PM, Roger Pantos <[email-masked]> wrote:
>>
>>
>>
>>
>>
>>
>>
>> On Feb 17, 2021, at 1:46 PM, Pieter-Jan Speelmans <
>> [email-masked]> wrote:
>>
>>
>>
>> Hi all
>>
>>
>>
>> I am pretty concerned about the backwards compatibility problems when
>> attempting to use this in combination with older devices. It will force
>> services to either provide two playlists, one with and one without
>> EXT-X-DEFINE with client-side detection of the maximum version supported by
>> the client. While this will not be an issue for up to date Apple devices,
>> this will definitely be an issue for out of date devices but also most
>> smart TVs, Chromecasts, Airplay implementations by those other than Apple
>> (f.e. on LG), ...
>>
>>
>>
>> Well, we’re still early enough that we could consider changing the
>> format. I’m not particularly moved by the hardship of supporting
>> EXT-X-DEFINE — anybody who is implementing content steering is going to
>> have to do at least that much work in their m3u8 parsing anyway — but I
>> acknowledge that requiring content vendors to provide a different master
>> playlists for old, un-updated clients is a non-trivial burden.
>>
>>
>>
>> What if we took the following approach instead?
>>
>>
>>
>> First, add a new STEERING attribute to regular EXT-X-STREAM and MEDIA
>> tags:
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=200000,STEERING=“1”
>> https://a.example.com/video/mid/index.m3u8
>> <https://urldefense.com/v3/__https:/a.example.com/video/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44myYNLnQ$>
>>
>> #EXT-X-STREAM-INF:BANDWIDTH=400000,STEERING=“1”
>> https://a.example.com/video/high/index.m3u8
>> <https://urldefense.com/v3/__https:/a.example.com/video/high/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44j6ekA61$>
>>
>> This links the variants (and renditions) to a steering template
>> definition:
>>
>> #EXT-X-STEERING-TEMPLATE:ID=“1”,PREFIX="https://a.example.com/video
>> <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>
>> ”
>>
>>
>> #EXT-X-CONTENT-STEERING:SERVER-URI="/steering?video=00001",PATHWAY-ID="My-Great-CDN"
>>
>> The manifest would change a bit:
>>
>> {
>>
>>    "VERSION": 0
>>
>>    "TTL": 300,
>>
>>    "RELOAD-URI": "https://example.com/steering?video=00001&session=123
>> <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>
>> ",
>>
>>    "PATHWAYS": [
>>
>>        {
>>
>> "ID": "My-Great-CDN",
>>
>> "TEMPLATES": {
>>
>>   "1" : {
>>
>> “PREFIX”: "https://a.example.com/video
>> <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>
>> "
>>
>>   }
>>
>> }
>>
>>        },
>>
>>        {
>>
>> "ID": "My-Backup-CDN",
>>
>> "TEMPLATES": {
>>
>>   "1" : {
>>
>> “PREFIX”: "https://b.example.com/backup-video
>> <https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>
>> "
>>
>>   }
>>
>> }
>>
>>        }
>>
>>    ]
>>
>> }
>>
>>
>>
>> The client would load and play the master playlist as usual. When it
>> parsed the EXT-X-STREAM-INF and EXT-X-MEDIA tags it would see the STEERING
>> attribute and verify that there is a corresponding EXT-X-STEERING-TEMPLATE
>> and that the PREFIX of the steering template matches the start of the URI
>> (fatal error if either check fails). It would store away the remainder of
>> the URI as the “steerable part.”
>>
>> When it loaded the manifest it would check that each pathway had an
>> object in its TEMPLATES object for each STEERING-TEMPLATE (matching the key
>> to the ID). (If it did not, steering would be disabled.)
>>
>>
>>
>> To switch pathways it would concatenate the PREFIX from
>> the TEMPLATES object with the steerable part of each URI. After that,
>> everything would behave the same way.
>>
>>
>>
>> This approach isn’t as flexible as general variable substitution. But I
>> think that it would still cover the majority of the substitution use cases
>> (and I’d be interested to hear about those that it doesn’t).
>>
>>
>>
>>
>>
>> Roger.
>>
>>
>>
>>
>>
>> My personal opinion is that the value of backwards compatibility would
>> warrant the drawbacks I currently see.
>>
>>
>>
>> Best regards,
>>
>> Pieter-Jan
>>
>>
>>
>>
>>
>>
>> *Pieter-Jan Speelmans *CTO
>>
>> *THEO Technologies NV*
>> *w *| www.theoplayer.com
>> <https://urldefense.com/v3/__http:/www.theoplayer.com/__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44kRAt7LO$>
>> Philipssite 5, Bus 1. 3001 Leuven, Belgium
>>
>> <https://urldefense.com/v3/__https:/d2oj23ymxjbl3l.cloudfront.net/__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44uAXLPbU$>
>> Leuven (Belgium) - New York (US) - Singapore (SG) - Barcelona (ES)
>> BTW: BE 0847.829.290, RPR: Leuven
>>
>>
>>
>> On Wed, Feb 17, 2021 at 9:57 PM Roger Pantos <rpantos=
>> [email-masked]> wrote:
>>
>> Hello hls-interest,
>>
>> As discussed on the call today, here is the preliminary specification for
>> the new Content Steering feature. We are converging on the final design for
>> 1.0, so please take a look at it when you can and tell us what you think.
>>
>> You can send feedback to this list, or to
>> [email-masked] if you want it to go directly
>> to us.
>>
>>
>>
>>
>> regards,
>>
>> Roger Pantos
>> Apple Inc.--
>> Hls-interest mailing list
>> [email-masked]
>> https://www.ietf.org/mailman/listinfo/hls-interest
>> <https://urldefense.com/v3/__https:/www.ietf.org/mailman/listinfo/hls-interest__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44nsxABxl$>
>>
>>
>>
>> *Legal Notice *
>>
>> You can find the latest terms and policies of THEO Technologies under
>> www.theoplayer.com/terms
>> <https://urldefense.com/v3/__http:/www.theoplayer.com/terms__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hw7Mpir$>
>> including our "GENERAL TERMS AND CONDITIONS". In the absence of a signed
>> agreement between you and THEO Technologies, by replying to this email
>> these terms apply to the relevant transaction between us.
>>
>> The contents of this email message and any attachments are intended
>> solely for the addressee(s) and contain CONFIDENTIAL and/or privileged
>> information and are legally protected from disclosure. If you are not the
>> intended recipient of this message, please immediately alert the sender by
>> reply email and then delete this message including any attachments and you
>> are hereby notified that any use, dissemination, copying, or storage of
>> this message or its attachments is strictly prohibited.
>>
>> Full security of emails over the internet cannot be ensured. Despite our
>> efforts it is your responsibility to provide for your protection.
>>
>> Global HQ: THEO Technologies NV, Philipssite 5 bus 1, 3001 Heverlee,
>> Belgium - BE 0847.829.290 - CEO: Steven Tielemans
>>
>>
>>
>>
>> --
>> Hls-interest mailing list
>> [email-masked]
>> https://www.ietf.org/mailman/listinfo/hls-interest
>>
> --
> Hls-interest mailing list
> [email-masked]
> https://www.ietf.org/mailman/listinfo/hls-interest
>

-- 

*[ David Hassoun | CEO ] *[ p. 303.872.0442 | c. 303.359.7466 ]
[ RealEyes | www.realeyes.com ]
[ 940 Logan | Denver CO, 80203 ]

<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon>
Virus-free.
www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

---

From: Roger Pantos <[email-masked]>
Date: Mon, 01 Mar 2021 09:32:53 -0800

Hello Will, thanks for the comment. Response inline:

> On Feb 26, 2021, at 3:01 PM, Law, Will <wilaw=[email-masked]> wrote:
> 
> Hi Roger
>  
> One comment here around the inconsistency of the ‘prefix’ rules between the two cases. The player is being asked to perform two different operations, with “” being a special flag that differentiates between the two.  I will explain the problem and then propose a solution. 
>  
> The current master playlist #EXT-X-STEERING-TEMPLATE attribute is called “prefix”, which implies something inserted ahead of something else. However if we evaluate the first case with an absolute URL
>  
> #EXTM3U
> #EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/steering?video=00001 <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",PATHWAY-ID="My-Great-CDN"
> #EXT-X-STEERING-TEMPLATE:ID="1",PREFIX="https://a.example.com/video <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>"
> https://a.example.com/video/my-movie/mid/index.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hforWWE$>
> https://a.example.com/video/my-movie/high/index.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/high/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mfpy4iP$>
>  
>       "ID": "My-Backup-CDN",
>       "TEMPLATES": {
>         "1" : {
>           "PREFIX": "https://b.example.com/backup-video <https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>"
>  
>  
> If the player wishes to implement the switch to my My-Backup-CDN , it must actually match & replace (not prefix) the original URL, in order to convert

The context here is within the EXT-X-STEERING-TEMPLATE tag. The job of that tag is to define the template that every steerable URL which refers to the tag must follow. Right now the only rule on a steerable URL is that it must have a particular leading sub-string, which we called its prefix. We imagine there might be a call in the future to define other replaceable parts, such as the suffix or particular query parameters, so we set up the taxonomy to support that. Note that trivially any string can be considered to have “” as its prefix.

I’d be open to using a different term than prefix (such as leader/trailer or front/back or start/end or something else). But “match” is too broad; we would not want to say that “match” refers to the start of the string and… something else refers to some other part of it.

Roger.

>  
> https://a.example.com/video/my-movie/mid/index.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hforWWE$>
>  
> in to
>  
> https://b.example.com/backup-video/my-movie/mid/index.m3u8 <https://b.example.com/backup-video/my-movie/mid/index.m3u8>
>  
> A prefix operation would give https://b.example.com/backup-video <https://b.example.com/backup-video>https://a.example.com/video/my-movie/mid/index.m3u8 <https://a.example.com/video/my-movie/mid/index.m3u8>  which is clearly invalid.
>  
> However in the second relative mode, illustrated by 
>  
> #EXTM3U
> #EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/steering?video=00001 <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>"
> This prefix operation is exactly what is required to convert
>  
> /mid/index.m3u8
>  
> in to 
>  
> https://b.example.com/backup-video/my-movie/mid/index.m3u8 <https://b.example.com/backup-video/my-movie/mid/index.m3u8>
>  
> So we have an inconsistency in the algorithm that sits behind the use of “prefix” . This is never a good idea for players, which should rather perform the same operation consistently every time.
>  
> Proposal 
>  
> Rename the master playlist #EXT-X-STEERING-TEMPLATE identifier PREFIX to be MATCH. This closer reflects its true functionality.
> Implement this single algorithm in the player across all use cases:
> To create the NEW URL from the OLD URL given a master playlist MATCH value and a steering manifest  PREFIX value
> Assign NEW to be the value of PREFETCH
> Assign TEMP to be OLD URL
> Delete from TEMP any part that matches MATCH. This operation is consistent even if MATCH is empty string.
> Append TEMP to NEW to create the final URL.
>                                                
>  
> Cheers
> Will
>  
>  
>  
>  
>  
>  
>  
>  
>  
>  
> From: Roger Pantos <rpantos=[email-masked] <mailto:rpantos=[email-masked]>>
> Date: Friday, February 26, 2021 at 9:42 AM
> To: "[email-masked] <mailto:[email-masked]>" <[email-masked] <mailto:[email-masked]>>
> Cc: http-live-streaming-review <[email-masked] <mailto:[email-masked]>>
> Subject: Re: [Hls-interest] HLS Content Steering v1.0b1 preliminary specification
>  
> One objection we’ve heard to the approach below is that it requires the master playlist to be customized on a per-pathway basis. To address that we’re tweaking the proposal slightly: we're making the PATHWAY-ID attribute optional. If it is not present in the master playlist, the client will omit the _HLS_pathway query parameter from the steering manifest request until it obtains its first steering manifest.
>  
> (There are other ways for providers to communicate the initial pathway to the steering server. For instance, the SERVER-URI could be relative to the master playlist; each pathway could HTTP-redirect it to the actual steering server along with an origin identifier.)
>  
> Here are two examples of the current approach. The first one uses absolute URLs in the master playlist, as you might have with a dynamically-generated master playlist that knows the current pathway when the playlist is produced. The second uses relative URLs, as you might have for a static master playlist that is the same on all pathways.
>  
> https://a.example.com/video/my-movie/master.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qV1Gx_j$>
>  
> https://b.example.com/backup-video/my-movie/master.m3u8 <https://urldefense.com/v3/__https:/b.example.com/backup-video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44llkyj51$>
>  
> -----
>  
> Absolute URIs (master playlist URI https://a.example.com/video/my-movie/master.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qV1Gx_j$>)
>  
> #EXTM3U
> #EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/steering?video=00001 <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",PATHWAY-ID="My-Great-CDN"
> #EXT-X-STEERING-TEMPLATE:ID="1",PREFIX="https://a.example.com/video <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>"
> https://a.example.com/video/my-movie/mid/index.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hforWWE$>
> https://a.example.com/video/my-movie/high/index.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/high/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mfpy4iP$>
>  
> The client requests 
>  
> https://example.com/steering?video=00001&_HLS_pathway=“My-Great-CDN <https://urldefense.com/v3/__https:/a.example.com/steering?video=00001&_HLS_pathway=**BMy-Great-CDN__;4oCc!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44h1w5BH2$>"
>  
>   "RELOAD-URI": "https://example.com/steering?video=00001&session=123 <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",
>   "PATHWAYS": [
>     {
>       "ID": "My-Great-CDN",
>       "TEMPLATES": {
>         "1" : {
>           "PREFIX": "https://a.example.com/video <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>"
>         }
>       }
>     },
>     {
>       "ID": "My-Backup-CDN",
>       "TEMPLATES": {
>         "1" : {
>           "PREFIX": "https://b.example.com/backup-video <https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>"
>         }
>       }
>     }
>   ]
> ]
>  
>  
> -----
>  
> Relative URIs (master playlist URI https://a.example.com/video/my-movie/master.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qV1Gx_j$>)
>  
> #EXTM3U
> #EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/steering?video=00001 <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>"
> In this case PREFIX=“” indicates that the steerable part is the entire (relative) URI. So after the client receives the steering manifest (same as above), if it has to switch to My-Backup-CDN it will just prepend its PREFIX to the steerable part of each URL to produce:
>  
> https://b.example.com/backup-video <https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>/mid/index.m3u8
>  
> https://b.example.com/backup-video <https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>/high/index.m3u8
>  
> Unless anybody spots any other major flaws in this approach, we’ll plan to update the preliminary spec and send out another version.
>  
>  
> Roger.
> 
> 
>> On Feb 19, 2021, at 7:07 PM, Roger Pantos <[email-masked] <mailto:[email-masked]>> wrote:
>>  
>>  
>> 
>> 
>>> On Feb 17, 2021, at 1:46 PM, Pieter-Jan Speelmans <[email-masked] <mailto:[email-masked]>> wrote:
>>>  
>>> Hi all 
>>>  
>>> I am pretty concerned about the backwards compatibility problems when attempting to use this in combination with older devices. It will force services to either provide two playlists, one with and one without EXT-X-DEFINE with client-side detection of the maximum version supported by the client. While this will not be an issue for up to date Apple devices, this will definitely be an issue for out of date devices but also most smart TVs, Chromecasts, Airplay implementations by those other than Apple (f.e. on LG), ...
>>  
>> Well, we’re still early enough that we could consider changing the format. I’m not particularly moved by the hardship of supporting EXT-X-DEFINE — anybody who is implementing content steering is going to have to do at least that much work in their m3u8 parsing anyway — but I acknowledge that requiring content vendors to provide a different master playlists for old, un-updated clients is a non-trivial burden.
>>  
>> First, add a new STEERING attribute to regular EXT-X-STREAM and MEDIA tags:
>> 
>> https://a.example.com/video/mid/index.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44myYNLnQ$>
>> 
>> https://a.example.com/video/high/index.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/high/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44j6ekA61$>
>> 
>> This links the variants (and renditions) to a steering template definition:
>> 
>> #EXT-X-STEERING-TEMPLATE:ID=“1”,PREFIX="https://a.example.com/video <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>”
>> 
>>    "RELOAD-URI": "https://example.com/steering?video=00001&session=123 <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",
>>    "PATHWAYS": [
>>        {
>> "ID": "My-Great-CDN",
>> "TEMPLATES": {
>>   "1" : { 
>> “PREFIX”: "https://a.example.com/video <https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>" 
>>   }
>> }
>>        },
>>        {
>> "ID": "My-Backup-CDN",
>> "TEMPLATES": {
>>   "1" : { 
>> “PREFIX”: "https://b.example.com/backup-video <https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>" 
>>   }
>> }
>>        }
>>    ]
>> }
>>  
>> The client would load and play the master playlist as usual. When it parsed the EXT-X-STREAM-INF and EXT-X-MEDIA tags it would see the STEERING attribute and verify that there is a corresponding EXT-X-STEERING-TEMPLATE and that the PREFIX of the steering template matches the start of the URI (fatal error if either check fails). It would store away the remainder of the URI as the “steerable part.”
>> 
>> When it loaded the manifest it would check that each pathway had an object in its TEMPLATES object for each STEERING-TEMPLATE (matching the key to the ID). (If it did not, steering would be disabled.)
>>  
>> To switch pathways it would concatenate the PREFIX from the TEMPLATES object with the steerable part of each URI. After that, everything would behave the same way.
>>  
>> This approach isn’t as flexible as general variable substitution. But I think that it would still cover the majority of the substitution use cases (and I’d be interested to hear about those that it doesn’t).
>>  
>>  
>> Roger.
>> 
>> 
>>>  
>>> My personal opinion is that the value of backwards compatibility would warrant the drawbacks I currently see. 
>>>  
>>> Best regards,
>>> Pieter-Jan
>>>  
>>>  
>>> Pieter-Jan Speelmans
>>> CTO
>>> 
>>> THEO Technologies NV
>>> w | www.theoplayer.com <https://urldefense.com/v3/__http:/www.theoplayer.com/__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44kRAt7LO$>
>>> On Wed, Feb 17, 2021 at 9:57 PM Roger Pantos <rpantos=[email-masked] <mailto:[email-masked]>> wrote:
>>>> Hello hls-interest,
>>>> 
>>>> As discussed on the call today, here is the preliminary specification for the new Content Steering feature. We are converging on the final design for 1.0, so please take a look at it when you can and tell us what you think. 
>>>> 
>>>> You can send feedback to this list, or to [email-masked] <mailto:[email-masked]> if you want it to go directly to us.
>>>> 
>>>> 
>>>> 
>>>> 
>>>> regards,
>>>> 
>>>> Roger Pantos
>>>> Apple Inc.-- 
>>>> [email-masked] <mailto:[email-masked]>
>>>> https://www.ietf.org/mailman/listinfo/hls-interest <https://urldefense.com/v3/__https:/www.ietf.org/mailman/listinfo/hls-interest__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44nsxABxl$>
>>>  
>>> Legal Notice 
>>> You can find the latest terms and policies of THEO Technologies under www.theoplayer.com/terms <https://urldefense.com/v3/__http:/www.theoplayer.com/terms__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hw7Mpir$> including our "GENERAL TERMS AND CONDITIONS". In the absence of a signed agreement between you and THEO Technologies, by replying to this email these terms apply to the relevant transaction between us.   
>>> The contents of this email message and any attachments are intended solely for the addressee(s) and contain CONFIDENTIAL and/or privileged information and are legally protected from disclosure. If you are not the intended recipient of this message, please immediately alert the sender by reply email and then delete this message including any attachments and you are hereby notified that any use, dissemination, copying, or storage of this message or its attachments is strictly prohibited. 
>>> Full security of emails over the internet cannot be ensured. Despite our efforts it is your responsibility to provide for your protection.
>>> Global HQ: THEO Technologies NV, Philipssite 5 bus 1, 3001 Heverlee, Belgium - BE 0847.829.290 - CEO: Steven Tielemans
>> 
>>  
> 
>  
> -- 
> [email-masked] <mailto:[email-masked]>
> https://www.ietf.org/mailman/listinfo/hls-interest <https://www.ietf.org/mailman/listinfo/hls-interest>

---

From: Roger Pantos <[email-masked]>
Date: Mon, 01 Mar 2021 09:59:40 -0800

Hello Will, response inline:

> On Feb 26, 2021, at 3:38 PM, Law, Will <wilaw=[email-masked]> wrote:
> 
> Another question on this new proposal: can the spec clarify whether the client is required to request the steering manifest and resolve the pathways beforeit loads any media playlists? Given the playlist below
>  
> #EXTM3U
> a client could start by immediately loading https://a.example.com/video/my-movie/mid/index.m3u8 <https://a.example.com/video/my-movie/mid/index.m3u8>, and then resolving the steering manifest in the background after it had built up a few seconds of playback buffer. Players would be tempted to do this as it would provide a lower VST (by one RTT and whatever processing time there is on the steering server). This would be a bad outcome for two reasons a) For QoE as there could potentially be two cold hits against CDNs in the first 10s of playback   - one for the default and the second as the new pathway kicks in and b) if you are trying to move away from an underperforming default pathway your startup sequence would continue to be pinned against it.
>  
> The current version of the steering draft is ambiguous. It says “When the player needs to poll for Pathway updates,", but does not dictate when this should happen with respect to conventional start-up.
>  
> Suggestion is that if the player understands steering, it MUST resolve the steering manifest prior to loading any media playlist.

We tried to make this clear in the Player Behavior section:

1. When playing a Master Playlist with an EXT-X-CONTENT-STEERING tag, load the Steering Manifest in parallel with the media playlist and segments requests, composed using the default values of the EXT-X-DEFINE tags.

In other words what we expect is that the player will begin loading the media using the steering path expressed directly in the master playlist. As Daniel mentioned in his reply, to do otherwise would insert an extra round trip into the startup phase of playback.

We expect that the dominant case will be that whoever hands out the master playlist to the player — be it dynamically generated, or a static master playlist with relative media playlists selected on a particular CDN — will do so in agreement with its steering server, providing a master playlist that describes the currently-preferred pathway. In the case where it does not, the steering response will race with the media playlist / segment requests and cause an immediate pathway reselection. There’s a bit of inefficiency there due to the extra round trip and canceled requests, so I would encourage providers to take care to avoid hitting that case.

Note that having _HLS_pathway or some other indication of master playlist origin in the steering manifest request can assist the steering server in keeping the client on its current pathway.

Roger.

---

From: Roger Pantos <[email-masked]>
Date: Mon, 01 Mar 2021 10:18:03 -0800

There are a few options for an engaged client that do not require client-side API in AVFoundation (and, eventually, in JavaScript). Clients that are in a position to proxy the master playlist can compose their preferred version of the steering manifest into a data:// URI and supply it as the SERVER-URI attribute, possibly adding a RELOAD-URI to it so that subsequent requests go to the “real” steering server. A data:// URI will immediately win the race, causing selection of the preferred pathway with a minimum of thrash. A similar technique for an AVFoundation-specific master playlist is to have a SERVER-URI with a custom scheme, which would be supplied by the AVAssetResourceLoader delegate.

That said, if you’d like to see a specific AVFoundation API for controlling this I’d encourage you to file a bug asking for it: https://feedbackassistant.apple.com. As always, explaining how such a feature would improve the user's experience and why it’s better than the existing alternatives will help us to prioritize it.

thanks,

Roger.

> On Mar 1, 2021, at 8:49 AM, David Hassoun <[email-masked]> wrote:
> 
> This is in part why I'm still in favor of an optional client API that can apply the data done from the steering service. It wont affect VST if this client already has the data up front to adjust the initial steering and avoids another API request. 
> 
> I do think it is very important to have the option to provide up front steering control outside of the initial playlist control as realistically many solutions wont have dynamic server generated playlists (at least for some time).  I know there is pushback to have client API when everything is being primed to be done from the steering manifest - aka server side. Though I still find it totally reasonable to have the server be default with the option to override in client. There was discussion about a client API to at minimum force a steering load and then with the local proxy we could do it all client side - or at least partial client with logic to determine when to override or not. However that still does not address a clean up front steering control. I suppose we could have an API/Boolean-Property to determine if a steering manifest is required up front before playback. If so it will attempt the request and the client can proxy/intercept to set data immediately or let the http call go through. It's fairly complex but would potentially achieve the benefit and control needed?
> 
>  <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon>	Virus-free. www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link> <x-msg://11/#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
> On Sun, Feb 28, 2021 at 6:59 AM Daniel Weinberger <[email-masked] <mailto:[email-masked]>> wrote:
> Hi Will,
> 
> I want to add some thoughts on your last part that a player should be required to resolve the steering manifest before loading any media playlist.
> 
> I'm also in favor of clarifying the expected client behavior, but in this case there is one negative side effect of your suggestion: It delays the startup time of a video. 
> The steering manifest is referenced in the master playlist and if the player is required to resolve it before the first media playlist is loaded, this is one additional blocking step in between. I'm sure all player vendors work hard to minimize startup time and adding additional blocking requests here is not desired. 
> It can be argued that this is just a small text file and won't take long to download even with bad network throughput, but there are also environments where this is considerable: environments with higher latency.
> 
> Regards,
> Daniel
> Daniel Weinberger
> On Sat, Feb 27, 2021 at 12:39 AM Law, Will <wilaw=[email-masked] <mailto:[email-masked]>> wrote:
> Another question on this new proposal: can the spec clarify whether the client is required to request the steering manifest and resolve the pathways before it loads any media playlists? Given the playlist below
> 
>  
> 
> #EXTM3U
> 
> From: Roger Pantos <rpantos=[email-masked] <mailto:[email-masked]>>
> [ David Hassoun | CEO ] 
> [ p. 303.872.0442 | c. 303.359.7466 ]
> [ RealEyes | www.realeyes.com <http://www.realeyes.com/> ]
>  <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=icon>	Virus-free. www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail&utm_term=link> <x-msg://11/#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>--

---

From: "Law, Will" <[email-masked]>
Date: Mon, 1 Mar 2021 20:53:18 +0000

“In the case where it does not, the steering response will race with the media playlist / segment requests and cause an immediate pathway reselection. There’s a bit of inefficiency there due to the extra round trip and canceled requests, so I would encourage providers to take care to avoid hitting that case.”
But that use case is likely to be a very common use case. A distributor prepares a master playlist in January, populates it with a default CDN, caches it with a long TTL across many CDNs and then uses steering manifests for the remainder of the year to ensure that their users receive good quality. Relatively few Content Distributors prepare per-user dynamic playlists – it’s mostly static playlists or dynamic playlists from SSAI vendors. The SSAI vendors are not currently set up to integrate steering. The elegance of the current design is that it decouples steering from playlist/ SSAI manifest generation which is practical and flexible. It just needs some careful definition to avoid undesirable player behavior.

My concern is that many players will not cancel requests for media playlists/segments that are underway (aside from the inefficiency for those that do). They will then end up loading the media playlist and the first segment from a poorly performing CDN (one that could be down completely) before switching on the second and subsequent requests to the steered source.  This will result in poor start-up performance, two cold hits against CDNs, lack of prefetch and likely an increase in start-up-induced rebuffering.

Suggestion #1
To resolve this , an option would be to add language to the Player Behavior section indicating that after the player loads the steering manifest in parallel with the default media playlists, if the steering manifest indicates the different pathway to what has already been loaded, then the player MUST cancel any requests underway and if those requests have already completed, MUST NOT render any content to the user obtained from the default pathway. Another version of this would allow the player to load the default media playlists but not proceed with any segment/init loading until the pathway choice had been validated by the steering manifest.  This would not result in much VST decline at all since the load time of the steering manifests is likely to be close to that of the media playlists and they would both be retrieved in parallel.

Suggestion #2
There are many providers (for example long VOD content providers as well as live stream providers) who want the discretion of being able to trade-off the VST increase of a forced steering load with the QoE quality benefits that might result from that . A 200ms increase in VST may be worth having the player make a steering requests from a highly performing regional CDN. They also want the certainty of this  player behavior across the ecosystem. To accommodate this , a new attribute could be added to the #EXT-X-CONTENT-STEERING  description, perhaps something like:

#EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/steering?video=00001<https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",PATHWAY-ID="My-Great-CDN",FORCE

to indicate that the player must resolve the steering manifest before loading any other content? If it’s absent, then players should be constrained by the requirements suggested in #1.

Cheers
Will

From: Roger Pantos <rpantos=[email-masked]>
Date: Monday, March 1, 2021 at 10:00 AM
To: "Law, Will" <[email-masked]>
Cc: http-live-streaming-review <[email-masked]>, "[email-masked]" <[email-masked]>
Subject: Re: [Hls-interest] HLS Content Steering v1.0b1 preliminary specification

On Feb 26, 2021, at 3:38 PM, Law, Will <wilaw=[email-masked]<mailto:wilaw=[email-masked]>> wrote:

#EXTM3U
#EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/steering?video=00001<https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",PATHWAY-ID="My-Great-CDN"
#EXT-X-STEERING-TEMPLATE:ID="1",PREFIX="https://a.example.com/video<https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>"
#EXT-X-STREAM-INF:BANDWIDTH=200000,STEERING="1"
https://a.example.com/video/my-movie/mid/index.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/my-movie/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hforWWE$>
#EXT-X-STREAM-INF:BANDWIDTH=400000,STEERING="1"
https://a.example.com/video/my-movie/high/index.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/my-movie/high/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mfpy4iP$>

a client could start by immediately loading https://a.example.com/video/my-movie/mid/index.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/my-movie/mid/index.m3u8__;!!GjvTz_vk!E6fhAAQPxWo-bK7LlqHUAnZeDNBMn6k4o5KNy7XbzzP0fc3IYkli5nNSh8WI$>, and then resolving the steering manifest in the background after it had built up a few seconds of playback buffer. Players would be tempted to do this as it would provide a lower VST (by one RTT and whatever processing time there is on the steering server). This would be a bad outcome for two reasons a) For QoE as there could potentially be two cold hits against CDNs in the first 10s of playback   - one for the default and the second as the new pathway kicks in and b) if you are trying to move away from an underperforming default pathway your startup sequence would continue to be pinned against it.

Roger.

-Will

From: Roger Pantos <rpantos=[email-masked]<mailto:rpantos=[email-masked]>>
Date: Friday, February 26, 2021 at 9:42 AM
To: "[email-masked]<mailto:[email-masked]>" <[email-masked]<mailto:[email-masked]>>
Cc: http-live-streaming-review <[email-masked]<mailto:[email-masked]>>
Subject: Re: [Hls-interest] HLS Content Steering v1.0b1 preliminary specification

On the first CDN at -

https://a.example.com/video/my-movie/master.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qV1Gx_j$>

https://b.example.com/backup-video/my-movie/master.m3u8<https://urldefense.com/v3/__https:/b.example.com/backup-video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44llkyj51$>

-----

Absolute URIs (master playlist URI https://a.example.com/video/my-movie/master.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qV1Gx_j$>)

#EXTM3U
#EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/steering?video=00001<https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",PATHWAY-ID="My-Great-CDN"
#EXT-X-STEERING-TEMPLATE:ID="1",PREFIX="https://a.example.com/video<https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>"
#EXT-X-STREAM-INF:BANDWIDTH=200000,STEERING="1"
https://a.example.com/video/my-movie/mid/index.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/my-movie/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hforWWE$>
#EXT-X-STREAM-INF:BANDWIDTH=400000,STEERING="1"
https://a.example.com/video/my-movie/high/index.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/my-movie/high/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mfpy4iP$>

The client requests

https://example.com/steering?video=00001&_HLS_pathway=“My-Great-CDN<https://urldefense.com/v3/__https:/a.example.com/steering?video=00001&_HLS_pathway=**BMy-Great-CDN__;4oCc!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44h1w5BH2$>"

{
  "VERSION": 0,
  "TTL": 300,
  "RELOAD-URI": "https://example.com/steering?video=00001&session=123<https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",
  "PATHWAYS": [
    {
      "ID": "My-Great-CDN",
      "TEMPLATES": {
        "1" : {
          "PREFIX": "https://a.example.com/video<https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>"
        }
      }
    },
    {
      "ID": "My-Backup-CDN",
      "TEMPLATES": {
        "1" : {
          "PREFIX": "https://b.example.com/backup-video<https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>"
        }
      }
    }
  ]
]

-----

Relative URIs (master playlist URI https://a.example.com/video/my-movie/master.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/my-movie/master.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qV1Gx_j$>)

#EXTM3U
#EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/steering?video=00001<https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>"
#EXT-X-STEERING-TEMPLATE:ID="1",PREFIX=""
#EXT-X-STREAM-INF:BANDWIDTH=200000,STEERING="1"
/mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=400000,STEERING="1"
/high/index.m3u8

https://b.example.com/backup-video<https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>/mid/index.m3u8

https://b.example.com/backup-video<https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>/high/index.m3u8

Roger.

On Feb 19, 2021, at 7:07 PM, Roger Pantos <[email-masked]<mailto:[email-masked]>> wrote:

On Feb 17, 2021, at 1:46 PM, Pieter-Jan Speelmans <[email-masked]<mailto:[email-masked]>> wrote:

Hi all

#EXT-X-STREAM-INF:BANDWIDTH=200000,STEERING=“1”
https://a.example.com/video/mid/index.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/mid/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44myYNLnQ$>

#EXT-X-STREAM-INF:BANDWIDTH=400000,STEERING=“1”
https://a.example.com/video/high/index.m3u8<https://urldefense.com/v3/__https:/a.example.com/video/high/index.m3u8__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44j6ekA61$>

#EXT-X-STEERING-TEMPLATE:ID=“1”,PREFIX="https://a.example.com/video<https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>”

The manifest would change a bit:
{
   "VERSION": 0
   "TTL": 300,
   "RELOAD-URI": "https://example.com/steering?video=00001&session=123<https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",
   "PATHWAYS": [
       {
"ID": "My-Great-CDN",
"TEMPLATES": {
  "1" : {
“PREFIX”: "https://a.example.com/video<https://urldefense.com/v3/__https:/a.example.com/video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44mqwdeF4$>"
  }
}
       },
       {
"ID": "My-Backup-CDN",
"TEMPLATES": {
  "1" : {
“PREFIX”: "https://b.example.com/backup-video<https://urldefense.com/v3/__https:/b.example.com/backup-video__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44gKCaDMb$>"
  }
}
       }
   ]
}

Roger.

Best regards,
Pieter-Jan

Pieter-Jan Speelmans
CTO

THEO Technologies NV
w | www.theoplayer.com<https://urldefense.com/v3/__http:/www.theoplayer.com/__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44kRAt7LO$>
Philipssite 5, Bus 1. 3001 Leuven, Belgium
[Image removed by sender.]<https://urldefense.com/v3/__https:/d2oj23ymxjbl3l.cloudfront.net/__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44uAXLPbU$>
Leuven (Belgium) - New York (US) - Singapore (SG) - Barcelona (ES)
BTW: BE 0847.829.290, RPR: Leuven

On Wed, Feb 17, 2021 at 9:57 PM Roger Pantos <rpantos=[email-masked]<mailto:[email-masked]>> wrote:
Hello hls-interest,

You can send feedback to this list, or to [email-masked]<mailto:[email-masked]> if you want it to go directly to us.

regards,

Roger Pantos
Apple Inc.--
Hls-interest mailing list
[email-masked]<mailto:[email-masked]>
https://www.ietf.org/mailman/listinfo/hls-interest<https://urldefense.com/v3/__https:/www.ietf.org/mailman/listinfo/hls-interest__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44nsxABxl$>

Legal Notice
You can find the latest terms and policies of THEO Technologies under www.theoplayer.com/terms<https://urldefense.com/v3/__http:/www.theoplayer.com/terms__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44hw7Mpir$> including our "GENERAL TERMS AND CONDITIONS". In the absence of a signed agreement between you and THEO Technologies, by replying to this email these terms apply to the relevant transaction between us.
The contents of this email message and any attachments are intended solely for the addressee(s) and contain CONFIDENTIAL and/or privileged information and are legally protected from disclosure. If you are not the intended recipient of this message, please immediately alert the sender by reply email and then delete this message including any attachments and you are hereby notified that any use, dissemination, copying, or storage of this message or its attachments is strictly prohibited.
Full security of emails over the internet cannot be ensured. Despite our efforts it is your responsibility to provide for your protection.
Global HQ: THEO Technologies NV, Philipssite 5 bus 1, 3001 Heverlee, Belgium - BE 0847.829.290 - CEO: Steven Tielemans

--
Hls-interest mailing list
[email-masked]<mailto:[email-masked]>
https://www.ietf.org/mailman/listinfo/hls-interest<https://urldefense.com/v3/__https:/www.ietf.org/mailman/listinfo/hls-interest__;!!GjvTz_vk!E6fhAAQPxWo-bK7LlqHUAnZeDNBMn6k4o5KNy7XbzzP0fc3IYkli5sLzi3jM$>

---

From: Roger Pantos <[email-masked]>
Date: Tue, 02 Mar 2021 12:09:48 -0800

I don’t think it needs to be a very common case at all.

First, some number of providers will simply use static steering manifests —basically using content steering as a better-defined version of the duplicate STREAM-INF tags we have now. In those cases, whether the master playlist contains relative or absolute URLs, it’s pretty simple to put a version of the static manifest on each pathway (with that pathway as #1) and have the master playlist from that pathway point to it.

The next step is standing up an active steering server that can dynamically change the steering to respond to network impairment or load or time of day or whatever. In those cases what’s in the master playlist must agree with the current view of the steering server for that client. Most providers that serve static master playlists through multiple CDNs already have some version of this: when they provide the master playlist URL to the client they dynamically pick the one that’s on the CDN they like at the moment. What’s left is to make sure that the steering server response agrees with that choice (at least initially); there are various techniques available to do that. Dynamic master playlist generators should be fairly straightforward to keep in sync. 

Even in cases where, as you say, a static master playlist against a particular CDN is cached on a different CDN / server, there is generally one master playlist per CDN per asset. At playback time the client conspires with the backend to choose which master playlist to use, based on current conditions. The only new requirement here is that the master playlist that is chosen agree with the steering server’s current view of the world.

If the master playlist contains the wrong initial choice (one that triggers an immediate pathway switch) then it will switch over as soon as the steering manifest comes back. Clients in general are already well-versed at canceling pending requests against the previous variant stream when they switch. As for discarding content received from the default pathway, I don’t see a reason to do that. If the default pathway manages to cough up enough data to use before the steering server tells it to switch, why not use it? 

I do agree that it’s worth emphasizing the importance of having the master playlist agree with the first manifest response in the spec.

Regarding the suggestion to require serialization, I think I’d like to hear from a few people who actually want that behavior before considering it. Every option we add increases client complexity and chips away at interoperability.

Roger.

> On Mar 1, 2021, at 12:53 PM, Law, Will <wilaw=[email-masked]> wrote:
> 
> #EXT-X-CONTENT-STEERING:SERVER-URI="https://example.com/steering?video=00001 <https://urldefense.com/v3/__https:/example.com/steering?video=00001&session=123__;!!GjvTz_vk!E3AorzSNM8BjAiM9Qaz2_XmVx2NyOl_J1ZzrkyQCOBZuw0Khr__44qtYzaA4$>",PATHWAY-ID="My-Great-CDN",FORCE
>  
>> On Feb 26, 2021, at 3:38 PM, Law, Will <wilaw=[email-masked] <mailto:wilaw=[email-masked]>> wrote:
>>  
>> a client could start by immediately loading https://a.example.com/video/my-movie/mid/index.m3u8 <https://urldefense.com/v3/__https:/a.example.com/video/my-movie/mid/index.m3u8__;!!GjvTz_vk!E6fhAAQPxWo-bK7LlqHUAnZeDNBMn6k4o5KNy7XbzzP0fc3IYkli5nNSh8WI$>, and then resolving the steering manifest in the background after it had built up a few seconds of playback buffer. Players would be tempted to do this as it would provide a lower VST (by one RTT and whatever processing time there is on the steering server). This would be a bad outcome for two reasons a) For QoE as there could potentially be two cold hits against CDNs in the first 10s of playback   - one for the default and the second as the new pathway kicks in and b) if you are trying to move away from an underperforming default pathway your startup sequence would continue to be pinned against it.
>>  
>> https://www.ietf.org/mailman/listinfo/hls-interest <https://urldefense.com/v3/__https:/www.ietf.org/mailman/listinfo/hls-interest__;!!GjvTz_vk!E6fhAAQPxWo-bK7LlqHUAnZeDNBMn6k4o5KNy7XbzzP0fc3IYkli5sLzi3jM$>
> 
> 
> --