A method of progressively playing back, by a client, a media sequence stored as a media file on a remote server, wherein the media file includes an index, the method comprising the following steps performed by the client: obtaining the index from the remote server; identifying a starting location within the media sequence; identifying, using the index, byte ranges of the media file corresponding to media required to play the media sequence from the starting location; placing the identified byte ranges in a request queue; requesting the byte ranges from the request queue that are required to play the media sequence from the starting location; buffering received bytes of information pending commencement of playback; and playing back the buffered bytes of information; wherein the method also comprises the following steps performed by the client, upon receiving a user instruction: identifying, using the index, byte ranges of the media file corresponding to media required to play the media sequence in accordance with the user instruction; flushing the request queue; establishing a request queue using the byte ranges identified in response to the user instruction; and requesting the byte ranges from the request queue that are required to play the media in accordance with the user instruction, wherein the method further comprises the following steps performed by the client: maintaining a mask indicating the portions of the media file that have been downloaded; identifying, using the mask, whether at least a portion of a byte range required to play the media in accordance with the user instruction has already been downloaded; placing in the request queue only the portions of byte ranges that have not already been downloaded from the remote server to play the media in accordance with the user instruction; and requesting the byte ranges from the request queue. the method comprising the following steps performed by the client: obtaining the index from the remote server; identifying a starting location within the media sequence; identifying, using the index, byte ranges of the media file corresponding to media required to play the media sequence from the starting location; placing the identified byte ranges in a request queue; requesting the byte ranges from the request queue that are required to play the media sequence from the starting location; buffering received bytes of information pending commencement of playback; and playing back the buffered bytes of information; wherein the method also comprises the following steps performed by the client, upon receiving a user instruction: identifying, using the index, byte ranges of the media file corresponding to media required to play the media sequence in accordance with the user instruction; flushing the request queue; establishing a request queue using the byte ranges identified in response to the user instruction; and requesting the byte ranges from the request queue that are required to play the media in accordance with the user instruction, identifying, using the index, byte ranges of the media file corresponding to media required to play the media sequence in accordance with the user instruction; flushing the request queue; establishing a request queue using the byte ranges identified in response to the user instruction; and requesting the byte ranges from the request queue that are required to play the media in accordance with the user instruction, wherein the method further comprises the following steps performed by the client: maintaining a mask indicating the portions of the media file that have been downloaded; identifying, using the mask, whether at least a portion of a byte range required to play the media in accordance with the user instruction has already been downloaded; placing in the request queue only the portions of byte ranges that have not already been downloaded from the remote server to play the media in accordance with the user instruction; and requesting the byte ranges from the request queue. maintaining a mask indicating the portions of the media file that have been downloaded; identifying, using the mask, whether at least a portion of a byte range required to play the media in accordance with the user instruction has already been downloaded; placing in the request queue only the portions of byte ranges that have not already been downloaded from the remote server to play the media in accordance with the user instruction; and requesting the byte ranges from the request queue.