Challenge Overview
Competition Task Overview
We have previously launched a PoC to convert FLV to HLS, see this page for details: http://www.topcoder.com/tc?module=ProjectDetail&pj=30043913
In this challenge, our client needs a general transcoding service that can translate live video streams from one format to another with minimal latency.
Detailed Requirements
We want to leverage VLC's ability to identify the type of the input stream, as well as it's ability to function as a media server. However we want a specific one-to-one streaming where each client will provide an input stream URL and a requested transcoding. The server must stream the transcoded output as it's response.
The incoming request must have the following format:
<protocol><server name>/<output format>/<input stream url>
as an example:
http://myserver.com/pmp4/http://myotherserver/video.m3u8
The architecture must handle any transcoding that VLC will perform, and should return a nice error message if the user requests something VLC can't handle. Below are some extra details:
- Transcoding MJPEG and FLV input to progressive-MP4 outputs is a must have.
- This app will eventually need to support all transcodings/transmuxing that VLSC does. So the mapping from the parameter in the REST request and whatever parameters get passed to the VLC server must be easily configurable.
- Configuring each translation for minimal latency and optimal throughput is critical. For each supported translation the data passed to VLC must include these optimizations. The user should have the option to override these optimizations via the REST request For example: <protocol><server name>/<output format>/<input stream url>/<options>
- https inputs and outputs must be supported
This must be a fault tolerant server that can be left to run for months at a time. It must handle errors gracefully without crashing, and should maintain logs of it's activities.
We need an EC2 service that has a server for listening to incoming REST requests which then forwards each one to one of a cluster of VLC servers. The forwarding has to hand the data to VLC in a way that VLC can consume. So keep this in mind when designing the solution too. We imagine that there will be a load balancer sitting in front of a cluster of VLC servers. The LB will translate the incoming REST to VLC-acceptable parameters and pass it to the least-busy node. The LB will need to return a URL for the client to get the output stream from. This returned URL must point directly to the VLC node that will server the output, and should not be returned until the output stream is ready to start serving content. A diagram showing the steps for this is included.
If there s another, better, way to do this please submit that, and we'll review it.
Open Source Library
Please check with us on open source libraries you want to use. VLC is already used in the PoC so it's fine.
Technology Overview
- Video Transcoding
- No restriction on programming language
- Server should be EC2 compatible (i.e. one that we can launch as EC2 instance, preferably ubuntu / cent os unless there's a good reason to use other systems like windows)
Documentation Provided
The existing PoCs are provided in the forum.
Final Submission Guidelines
Submission Deliverables
- Application Design Specification
- TCUML
- ERD if applicable
- Any additional documents that will help illustrate your solution
Submission Guidelines
For each member, the final submission should be uploaded to the Online Review Tool.