Hercules Fog Recorder - Optimisations to HLS and time sync buffer

Register
Submit a solution
The challenge is finished.

Challenge Overview

The Hercules Player is an application that allows customers to download videos to their computer or device for offline playback, along with streaming playback of videos for online playback.

The Hercules Fog project has stripped out some key portions of the Hercules Player application into a new test application for downloading videos from a server, modifying the manifest, and then playing back on various mobile and TV devices.

The current implementation is C++ and will run on:

  • * Windows (with some build tweaks)
    * Linux
    * Mac
     

     

The client has been testing in their environment and has raised concerns about performance.  They are very sensitive to any increases in what they call "tune time", which is the time from when the player first requests the manifest to when playback actually starts.  They are seeing increases in tune time when Fog is part of the flow.

This challenge will attempt to address that a bit with some changes.

Remove config values

This challenge will remove the mediaPlaylistMinDurationSeconds and tsbStartDurationSeconds configuration values and how those work.  The changes below will make them obsolete so we need to make sure that all relevant code is removed as well, including anything to do with the value usage and configuration for each of those items.

Advertising fragments

Please update Fog so that it advertises all known fragments, even if they haven't been collected and downloaded yet.  This will ensure the player knows about the fragments and thinks they are available.

Recording start

Currently, Fog can be configured to start a recording at some point before the current "live" point of the stream (tsbStartDurationSeconds).  This challenge will update Fog so that it immediately begins recording from the live point, instead of a point in the past.

Fragment request

If the player asks Fog for a fragment that hasn't begun downloading yet, we will immediately download that fragment, cache it, and send it to the player.  The player will see a slight delay due to the overhead of downloading, but this will be better than what we've done in the past because the download will be prioritized over all other fragments.

Fog hanging:

The client has seen sporadic issues where bad fragments on the server / stream side cause Fog to stop downloading / the recording to hang.  No error is output in this case.  If you see any reason why Fog would stop downloading a stream, other than a valid error case, please mention that in the forum so we can address the issues.  This has normally been seen after allowing a recording to continue for multiple hours.  The client leaves their recording on overnight to see if it breaks.

Bonus

If you have any additional suggestions on things that can be done to speed up playback tune times, please mention those in your README or implement them in your submission for additional review points.  If something is intensive to implement but may be worthwhile, feel free to clearly document your idea in your README, with justification on the performance benefits, and we may ask you to do it directly for additional payment or may launch another contest based on the idea.

Optimisation1 branch

In the Git repo, there is an "Optimisation1" branch that implemented some ideas we had for tune time optimisation.  Please have a look there to look for possible ideas as well.
 

Submission

Your submission to OR should be a Git patch file that can be applied to see the fixes. Here is documentation on how to generate a Git patch file:

https://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/

We will target Git commit hash 
0b0e82cc8e73e8dbe0a144474e41f70f7ea0e747

Submission README:

Please submit a Git patch file and a separate README (don't update the README in Git) that describes your changes and how to validate the optimisations above.

Video:

No video is required for this challenge.
 

Final Submission Guidelines

Please see above

ELIGIBLE EVENTS:

2017 TopCoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30056746