Methods for delivering media over a network, such as methods for delivering video over the Internet, are traditionally broken down into two categories—streaming and downloading. Real Time Streaming Protocol (“RTSP”) and Real Time Messaging Protocol (“RTMP”) are two popular transport protocols used for streaming video, while Hypertext Transfer Protocol (“HTTP”) is typically used for downloading video.
A recent trend in industry is to divide an entire video program into small video segments referred to as “video chunks” and rely on HTTP to transport those chunks from a video server to a client device. The client device issues pull requests to the video server to progressively request and download the video chunks from the video server. While the client device is downloading new video chunks, the client device may play back previously downloaded video chunks.
This download scheme, which is known as “HTTP progressive download,” has advantages over the use of traditional video streaming transport protocols such as RTSP and RTMP. For example, the HTTP progressive download scheme allows (1) use of network infrastructure that is optimized for HTTP traffic, (2) easy and effortless traversal of Network Address Translation (“NAT”) and firewall functionality, (3) comparatively less expensive transport of video data to edges of a network using standard HTTP servers and caches, and (4) use of variable bit rate (“VBR”) encoding of video to improve coding efficiency and conserve bandwidth.
Although the HTTP progressive download scheme has become an increasingly popular alternative to traditional media streaming protocols, it has shortcomings. For example, the HTTP progressive download scheme is not bit rate adaptive and does not adapt the progressive downloads to fit changing network conditions. Consequently, a client device has to download and buffer chunks of a video for a long time before playback of the video can be started without the risk of playback freezes and re-buffering that may be caused by insufficient and/or changing network conditions (e.g., changing availability of network resources such as network bandwidth).
Adaptive HTTP video streaming, which some consider to be a hybrid of the HTTP progressive download scheme and traditional streaming, has been introduced. Unlike the HTTP progressive download scheme, adaptive HTTP video streaming allows a client device to request to download different versions of a video encoded with different bit rates and/or resolutions. For example, two different versions of a video having different bit rates and/or resolutions may be maintained by a video server for access by client devices. As part of adaptive HTTP video streaming, a client device may determine, for each new video chunk included in the video and to be downloaded, which version of the video chunk to request and download from the video server. To determine which version of the video chunk to request, the client device employs a client video rate adaption heuristic configured to determine, based on parameters of the client device such as client device decoding and/or rendering capabilities, which version of the video chunk to request and download from the video server.
However, conventional adaptive HTTP video streaming technologies also have shortcomings. For example, conventional adaptive HTTP video streaming technologies have slow response times to changes in network conditions such as shifts in network congestion, make rate adaptation decisions at the client device based on limited information, and/or tend to be biased to be either too aggressive or too conservative in rate adaptation.