A wide variety of streaming audio, video and/or other media content is now available to consumers from any number of diverse sources. Often, streaming media content is maintained at a media server that provides the content to the consumer for playback via one or more wired or wireless telecommunications networks. So-called “Internet television”, for example, is typically provided as a stream over the Internet or a similar network. Media streams are also used to provide other types of network-based media content, as well as live and pre-recorded broadcast television, content-on-demand and the like.
While streaming formats can be convenient for many applications, implementing “trick play” (such as fast-forward and rewind functions) is often relatively difficult within many conventional streaming environments. To “fast forward” a conventional media stream, for example, some streaming media players simply accumulate and decode future content that has been received but not yet played, and then discard those decoded media frames that are not needed. Conversely, to implement a rewind feature, the media player typically skips backwards in a buffer or cache of previously-received content to replay media frames that were previously decoded. The rewind feature is often limited, however, to previously-received content that is maintained in local storage at the player. If the user wishes to rewind past the content that remains in local storage, then prior content typically needs to be re-obtained from the server and re-decoded to continue the rewind. This can consume substantial amounts of memory, as well as significant processing resources. This relatively inefficient operation is especially troublesome for software decoders and the like that may have limited processing resources.
Further, the non-sequential and irregular nature of many popular media streaming formats can create challenges in identifying the particular media frames that are rendered during most conventional trick play functions. Some fast forward or rewind functions simply skip ahead (or behind) in the stream by locating and presenting certain “key frames” that carry information without dependencies to other frames (e.g., the I-frames of a conventional MPEG stream). These key frames, however, are not typically located at regular intervals or other predictable locations within the media stream. As a result, obtaining the key frames often involves scanning most, if not all, of the stream to locate the key frames, and then discarding the remaining decoded content.
It is therefore desirable to implement an effective trick play feature that is suitable for use in streaming media applications. Ideally, such a feature would reduce or eliminate the need for additional processing resources or special buffering, as well as the need to scan for key frames located at irregular intervals. These and other desirable features will become apparent from the subsequent detailed description and the appended claims, taken in conjunction with the accompanying drawings and this background section.