Skip to content

Implement clean track switching #8

@tobbee

Description

@tobbee

Implement clean switching between tracks in the same render group like video or audio tracks.

Use Absolute Joining Fetch (code 0x03) as part of the following scheme recommended by Gwendal Simon and Will Law:

  1. Client is playing Group N of track A and wishes to switch to track B
  2. SUBSCRIBE B (low-priority)
  3. ABSOLUTE_JOINING_FETCH B with Joining_start = X (high priority)
  4. SUBSCRIBE_UPDATE A end=X
  5. Wait for the FETCH to conclude (or get close to conclude)
  6. SUBSCRIBE_UPDATE B (high priority)

The client is the one who decides the target value X for switching. X should be greater than N and depends on

  • the urgency to switch

    • for example if congested, the client can set X = N+1 to make it asap, or even X=N for an emergence switch down
    • for example if clients plays an object close to the end of the group N it may choose X=N+2 instead of N+1
    • for example if it is an up-switch, it may not matter to force a switch too early in the future at the risk of getting redundant A and B objects
  • the knowledge about the future group ID and the timing

    • for example, if groups are very short or very long RTT client-server, the client can target the group that
      corresponds to the time it takes to get the first FETCH object
    • for example, if gaps in the group ID, the client get the info of the next group/timing by another mean (timeline track?)
    • for example if it switches because it knows that, starting at group X, the content will be differen
  • the current live object of track B, which is obtained by the SUBSCRIBE_OK after step 2

    • for example the ABSOLUTE_JOINING FETCH can be omitted if the current live group of B is N+1.

Slides describing describing this and other alternatives are available
here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions