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
Linux
Mac
This challenge will refactor the automatic bitrate selection functionality of Fog to use an ABR library we built from a client player called AAMP.

NOTE:  This is a very technical challenge and will require a fair bit of work in setup and testing.  You will need to use Linux to test the player.  Ubuntu 16.04 is your best bet.

Requirements:

In the forum will be the source code to the AAMP player.  The AAMP player is a video player that implements playback.  Fog implements recording, and those recordings can be played back through AAMP.  Both Fog and AAMP handle automatic bitrate switching when the network can't handle a given bitrate.  This is common for video playback now.  The HLS and Dash streams that are used have multiple bitrates encoded in the streams, and Fog can automatically switch between bitrates as it records, based on the network congestion / available bandwidth.

AAMP does the same, but for playback.  

The goal of this challenge is to abstract out the ABR (automatic bit rate) functionality from AAMP into a separate library, and then update the AAMP player to use that new library in their implementations, to handle the bitrate switching.  A subsequent challenge will integrate this new library with Fog for it's ABR implementation.  This way we can ensure that Fog is consistent with the player, and that when the client makes changes to the bitrate switching requirements, we only have to update one library, not two separate apps.  Because both Fog and AAMP run on large numbers (millions) of embedded devices, the QA process for both is extremely arduous, so the more we can have them share code, the easier QA should be in the long run as well.

When recording a live Dash feed through the TSB (time sync buffer) endpoint in Fog, ABR will be enabled.

ABR will start at a reasonable bitrate and will ramp up or down, depending on network conditions.  Only one bitrate will be recorded at any one time, but to the player it will look like a single, consistent video for playback.

The recording should react quickly to changing network conditions.  At the start of a recording, the bitrate rampup to a high quality bitrate should be as quick as possible, depending on what the network supports.

Going down in bitrate should happen less quickly, attempting to stay at a higher bitrate as long as possible.

General requirements

A previous challenge implemented an ABR library, stripping code out of AAMP player into the library, and then updating the AAMP player to use the new ABR library.  This challenge will:

1.  Update the ABR library and AAMP player to use the latest AAMP code (provided in the forum)
2.  Update Fog to use the ABR library for ABR
3.  Strip out any old / no longer used ABR code out of Fog, once the new library is in place

Dash and HLS

Note that the ABR library must support both Dash and HLS stream formats, and Fog must be updated to use the library for ABR for both Dash and HLS recordings (TSB and regular recordings).

Validation
 
Validation is going to be difficult, due to the networking requirements here.  As a submitter, you are required to clearly document how you validated your changes and compared them to the AAMP implementation before the changes.  This will be used by reviewers to further validate the submissions.

Sample player

The latest AAMP player will be provided in the forum.  Build instructions can be found here:

https://gitlab.com/hercules-fog/Fog-CLI/wikis/aamp-build-testing 

Note that the AAMP player has changed quite a bit recently.  If you have trouble building, please ask questions in the forum.

You are required to update the ABR library and AAMP integration to match the latest AAMP player code.

Submission

Your submission should be a new AAMP player source, with the ABR functionality clearly separated out into a separate, compilable library.  This new library should be clearly documented, should have its own make structure, and should be completely independent from the AAMP player itself.  The updated AAMP player source should require this library as a dependency.

In addition, you must also include the changes needed for Fog to use this ABR library.  All existing ABR functionality in Fog should be removed and replaced with the library reference and calls.

Documentation

Please include clear, updated build documentation for:

* The new library
* AAMP player
* The updated Fog app

Target Ubuntu 16.04 for the changes for this challenge.

 



Final Submission Guidelines

Please see above

ELIGIBLE EVENTS:

2018 Topcoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30064686