HbbTV-Association / ReferenceApplication

MIT License
80 stars 33 forks source link

Manifest <Location> element may not work in HbbTV1+2 mode #77

Closed Murmur closed 1 year ago

Murmur commented 1 year ago

Initial mpd url = https://server.com/video1/manifest.php Redirect field = <Location>https://server.com/video1/session123/manifest.php?key1=val1</Location>

Dash live manifest may insert <Location> field to redirect MPD@minimumUpdatePeriod reloads to a second url, this is common way to identify a playback sessions without cookies or any other server-side sticky session tracking.

As a workaround web server may use HttpResponse.StatusCode=302 (temporary redirect) if possible and dash player supports it properly.

We have identified some HbbTV1+2 native players don't support <Location> field so instead they keep calling the initial mpd url. Same devices work fine in a mseeme(dashjs) mode.

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500S" type="dynamic" maxSegmentDuration="PT0H0M3.840S" availabilityStartTime="2023-10-18T07:30:00Z" publishTime="2023-10-18T08:05:41Z" suggestedPresentationDelay="PT6S" minimumUpdatePeriod="PT2.500S" timeShiftBufferDepth="PT240S"
profiles="urn:dvb:dash:profile:dvb-dash:2014,urn:dvb:dash:profile:dvb-dash:isoff-ext-live:2014,urn:mpeg:dash:profile:cmaf:2019" >
  <Location>https://server.com/video1/session123/manifest.php?key1=val1</Location>
  <Period id="p1" start="PT0S">
     ...
  </Period>
  <UTCTiming schemeIdUri="urn:mpeg:dash:utc:http-iso:2014" value="https://server.com/utctiming.php"/>
</MPD>
jpiesing commented 1 year ago

Location element has been required by DVB-DASH since the the first version. The following text is in V1.1.1 and onwards.

Players shall use the MPD.Location element URL for all MPD updates and not the URL used to initially retrieve the MPD.

jpiesing commented 1 year ago

See also https://redmine.hbbtv.org/issues/13278

bobcampbell-resillion commented 1 year ago

Closing here, as there is a redmine to create an assertion for a missing test to cover this.