This disclosure generally relates to online digital content streaming, and particularly to an adaptive streaming system that generates enhanced media manifest files for identifying and streaming a live or on-demand media file (e.g., a video file) representations with various video qualities to clients having varying delivery bandwidth and computing processing power.
An online system allows its users to connect to and communicate with other online system users. For example, an online system allows a user to encode media files, such as images or videos, and share the media files with other online system users. An online system user may also request to view media files (e.g., stream a video on demand) encoded by the online system user, or by other online system users, encouraging user engagement with the online system. However, this user engagement is decreased with increased platform latency as online system users attempt to stream a media file outside of available bandwidth or view a popular media file.
To enable adaptive streaming of multimedia content over HTTP, when an input media file (e.g., a video) is encoded, multiple levels of compression can be applied to the input file producing a plurality of compressed versions (e.g., resolution of 360p, 480p, 720p, 1080p, etc.), or “representations,” of the input file for streaming on a client device. This allows an online system user to select the representation of a media file for streaming that is within the online system user's available bandwidth. However, if the online system user attempts to stream a media file at a representation that requires greater bandwidth than a client device or network connection will allow, the online system user experiences platform latency.
Existing solutions of adaptive streaming over HTPP divide a media file into segments according to a fixed duration (e.g., 10 second segments) and cache links to these segments (e.g., universal resource locators (URLs)) across computer servers within a given content delivery network (CDN). Each URL containing a segment of the media file is listed on the manifest file of its corresponding media file, in addition to the segment's start points and end points. This allows an online system user to dynamically switch between representations to accommodate available bandwidth. However, creating a manifest file entry for each segment of a media file causes its manifest file to increase in size. Increased manifest file size complicates file administration and decreases manifest file storage efficiency for streaming service, especially live video streaming. In addition, larger manifest files increase platform latency as the manifest file must be downloaded to a client device before the media file may be streamed by an online system user.
The latency for fetching the proper media file and/or segments can be compounded by network congestion due to user traffic directed to popular media within a CDN. When a computer server within a CDN has a popular (e.g., trending) media, it is very likely that a large number of user requests for the popular media will be directed to the computer server. This can cause a delay in the delivery of various representations of a requested media file and delay stream traffic.
Furthermore, for existing solutions, the delay in stream traffic is due, in part, to the initialization process that a streaming system must complete before a client device can commence streaming a media file, such as properly initializing a manifest file associated with a representation of a media file. For example, a manifest file associated with a representation of a media file generally contains information describing an initialization segment (init), which contains data that does not change between segments, a segment index (sidx), which describes byte ranges within a segment, and media segment information. However, using (init+sidx) format in a manifest file to guide a client device on the amount of data to fetch from a storage device is inefficient as it requires the client device to perform a series of fetches in order to locate the first segment of the media file.