The systems and methods described herein relate to streaming variable bit rate multimedia content. More particularly, the systems and methods described herein relate to streaming variable bit rate multimedia content at a constant bit rate negotiated between a server and a client.
Traditional approaches to multimedia streaming provide content that is encoded at a constant bit rate and transmitted from a server to one or more clients over a constant bit rate channel. For example, standard telephone quality audio content is often encoded at 64K bits per second (b/s). Therefore, a telephone transmission channel must have a throughput of at least 64K b/s to properly stream the audio content.
In contrast, it is sometimes more advantageous to encode video content using a variable bit rate, the reason being that for certain types of video content—such as movies—the information that needs to be encoded varies over time. An idle segment of a movie contains less information than a segment where there is a great deal of action. It may be inefficient to encode such content at a constant bit rate. Depending on the bit rate chosen, idle segments can under-utilize an available bit rate, while action segments may not have sufficient bit rate to be encoded with the same quality as the idle segments.
Encoding a movie at a bit rate that varies as necessary to obtain the desired quality allows the movie to be encoded at a constant quality. However, variable bit rate content can pose problems for streaming media applications. One of the main problems is that the throughput of the transmission channel is often limited. If the instantaneous bit rate of the encoded content is ever higher than the throughput of the channel, the content cannot be streamed, even if the average bit rate of the content is less than the channel's throughput.
Another problem encountered is that transmission channels sometimes require that a constant bit rate be reserved for the streaming content application. In such cases, the channel will not be utilized efficiently. To stream the content, the reserved bit rate must be at least as large as the peak bit rate of the content. That means that during periods when the bit rate of the content does not fully reach the peak, a portion of the reserved bit rate is not being utilized, and that too much bandwidth was reserved in the first place.
The systems and methods described herein provide for improved streaming of variable bit rate multimedia content. The described systems and methods solve the problems cited above by streaming the variable bit rate content at a constant bit rate that is negotiated between a server and a client. As a result, the content is streamed at a constant bit rate so the transmission channel is utilized in an efficient manner, solving the second problem mentioned above. If the client is able to buffer the streamed content (to a hard drive, for example) the content can be streamed at a rate that is significantly less than its peak bit rate. The content can even be streamed at a rate that is less than its average bit rate, which solves the first problem mentioned above.
The systems and methods described herein also provide for techniques to reduce the size of a client buffer utilized in the streaming process. Reducing the size of the client buffer also reduces a startup delay (streaming rate multiplied by the buffer size) experienced in the streaming process. These techniques solve two additional problems traditionally encountered in streaming multimedia content, namely, a large buffer size and a long startup delay.
The same numbers are used throughout the drawings to reference like features and components.
a is a flow diagram of a client methodological implementation described herein for calculating a buffer size.
b is a flow diagram of a client methodological implementation described herein for calculating a buffer size.
Systems and methods for improved streaming of variable bit rate multimedia content are described herein. One or more exemplary implementations of systems and methods for streaming of variable bit rate multimedia content are shown. The described systems and methods are exemplary only and are not meant to limit the scope of the appended claims. Other embodiments not specifically described herein may be implemented within the scope of the appended claims.
The implementations of systems and methods for streaming variable bit rate multimedia content are shown embodied in one or more of three components: a server, an encoder and a client. It is noted that the encoder may be embodied separate from the server; although a typical embodiment of a server including an encoder is shown.
Advanced System Format (ASF)
The exemplary implementations shown herein utilize the Advanced System Format (ASF) for storing coordinated multimedia data for its ability to deliver data over a wide variety of networks and for its additional suitability for local playback. However, it is noted that another format may be used without departing from the scope of the appended claims. Those skilled in the art will recognize any variations in the described implementations that may be necessary to adapt the implementations to utilize another file format.
An ASF file is composed of one or more media streams. A file header specifies properties of an entire file, along with stream-specific properties. Multimedia data, stored after the file header, references a particular media stream number to indicate its type and purpose. The delivery and presentation of all media stream data is aligned to a common timeline.
ASF is a multimedia presentation file format. It supports live and on-demand multimedia content. ASF files may be edited, but ASF is specifically designed for streaming and/or local playback.
ASF files are logically composed of three types of top-level objects: a header object, a data object and an index object. The header object is mandatory and must be placed at the beginning of every ASF file. The data object is also mandatory and must follow the header object. The index object (or objects) is/are optional but are useful in providing time-based random access into ASF files.
The following descriptions will focus on a file header object and file data objects and may be referred to simply as a header and one or more data packets. Although shown in one or more simplified diagrams, below, the header object and file data objects shown comport with ASF specifications © 2001-2003 MICROSOFT CORP.
Exemplary Server/Encoder System
The I/O module 108 may be any one or more modules that provide data to the server or assist in the transmission of data from the server 100, including but not limited to a parallel port, a serial port, a USB (Universal Serial Bus) port, an infrared (IR) port, a user input device or the like. The network interface 110 typically comprises a network interface card but may also comprise a modem, a wireless network interface device, or the like.
The server 100 also includes a mass storage device 112 such as a hard disk drive, an optical drive or the like, that may be used to store one or more applications, buffer content, etc. Additionally, the server 100 includes other miscellaneous hardware 114 that is typically found on a server and may be required to cooperate with other elements of the server described below to provide the functionality described herein.
The encoder 102 and the memory 104 are shown as having several elements therein. It is noted that these elements may be integrated within the server 100 elements or in a separate encoder embodiment. The elements shown in the encoder 102 and the memory 104 may comprise hardware modules, software modules and/or data or a combination of hardware and software. Furthermore, the elements and functionality attributed to the server memory 104 and the encoder 102, respectively, may be distributed among the server 100, the encoder 102 and the memory 104 in any other fashion that provides similar functionality as described below.
As shown in the present example, the memory stores an operating system 120 that controls the functionality and coordination thereof for the server 100 and its elements. The memory 104 also stores miscellaneous software 122 that may include application programs, control programs or the like that may be necessary in addition to the specific modules discussed below to carry out one or more of the functions described herein.
The memory 104 also stores a streaming module 124 and a speed multiplier module 126 that are configured to stream content to one or more client computers. A client stream selection 128 and stores a selection of streams selection from a client for transmission to the client and a client stream multiplier 130 which stores a speed multiplier requested by a client for streaming and an actual speed multiplier utilized by the server 100 for streaming content to the client. The client stream selection 128 and the client speed multiplier 130 will be discussed in greater detail below.
A header 132 is stored in a content buffer 118 of the memory 104 and is associated with a series of data packets (data packet 1134(1) through data packet n 134(n)). The header 132 stores multiple buffer (B) values 136, multiple streaming rate (R) values 138, and a variable bit rate flag 140 that, when set, indicates that the data packets 134 include variable bit rate data.
Each data packet 134 includes a send time 142 that is used to identify a time at which the server 100 is to transmit each respective data packet to a client. The send time 142 is utilized to cause variable bit rate content to be streamed at a variable bit rate to the client. However, if the client requests that the content should be streamed at a non-real-time rate and the data packets 134 contain variable bit rate content, then the server 100 will ignore the send times 142 and stream the content at a constant bit rate. This function is described in greater detail below.
As shown in the present example, the encoder 102 includes multimedia content 150 that may be stored in memory or streamed in to the encoder 102 from an outside source. A compression module 152 encodes the multimedia content 150 to store in the memory 102 as the series of data packets 134. The header 132 and the data packets 134 shown stored in the memory 104 comprise a data file 135.
A variable bit rate (VBR) flag module 154 sets the VBR flag 140 in the header 132 if the multimedia content is variable bit rate content and the client hasn't requested a constant bit rate, as previously discussed.
The encoder 102 also includes a buffer size calculation module 160 that is configured to calculate how much data a client needs to buffer to stream content at a given rate as the encoder 102 compresses the multimedia content 150. The buffer calculation module 160 uses a “leaky bucket” model that takes into account the multiple buffer (B) values 136 and the multiple rate (R) values 138.
The “leaky bucket” model is an allegorical reference to variable bit rate data flowing into a figurative “bucket” that may be represented as one or more values in the content buffer 118. There is a hole in the bucket, and data flows out through the hole at a constant bit rate (R). At moments when R is less than the instantaneous bit rate, data will accumulate in the bucket. The bucket can only hold a certain amount of data, B, before it overflows. Initially, the bucket is empty, at least in the implementations described herein. It is noted, however, that one or more other implementations may start with an initial buffer fullness of a nonzero value.
In at least one implementation described herein, the encoder 102 chooses fourteen (14) different streaming rates (R values 136) and calculates the smallest value of buffer size, B values 138, for each R such that the bucket does not overflow. The encoder stores the fourteen values for R and B in the header 132 (R values 138 and B values 136).
Additionally, the encoder 102 calculates a pair of R and B values for each stream of the multimedia content 150 (included in buffer values 138 and streaming rate values 136). For example, two R and B values for the audio stream and two R and B values for the video stream. One of these R values is referred to herein as the average bit rate of the stream (Ravg(n)) and the other value is referred to herein as the peak bit rate of the stream (Rpeak(n)). The bit rates correspond to an average buffer size for the stream (Bavg(n)) and the peak buffer size for the stream (Bpeak(n)). It is noted, however, that in practice these values may not exactly correspond to true average and peak bit rates. Furthermore, it is noted that it is not necessarily true that the average rates and buffer sizes are always smaller than the peak rates and buffer sizes.
It is also noted that more than two rate/buffer size pairs may be used for each stream. For example, one particular implementation may utilize four rate values and four corresponding buffer size values. Those skilled in the art will readily understand how the use of more than two rate/buffer size pairs can be integrated into the description provided herein.
The elements of the server 100 and the functionality thereof will be discussed in greater detail, below, with respect to explanation of one or more methodological implementations in which said elements are involved.
Exemplary Client System
The client 200 also includes one or more input/output (I/O) modules 210 through which data is transmitted into and out of the client 200. The I/O module(s) 210 can include but is not limited to a port (parallel, USB, serial, IR), a speaker connection, or the like. The client 200 also includes a network interface card (NIC) 212 that the client 200 uses to communicate with one or more other systems across a network, such as the Internet (not shown). Although the NIC 212 is shown, it is noted that other means of network communication may be used in place of the NIC 212, such as a modem or other device.
The client 200 also includes a display 214 on which the multimedia content (video) may be rendered, a user input module 216 that may include a keyboard, mouse, stylus, etc., and other miscellaneous hardware 218 that may be necessary to accomplish functionally peripheral tasks associated with the techniques described herein.
A mass storage device 220 is included in the client 200 and is used to store electronic data, such as application software and other miscellaneous software that may be used to implement the systems and methods described herein.
The memory 204 stores an operating system 230 and has a content buffer 232. The content buffer 232 is also depicted as being stored on the mass storage device 220 as it may be stored in any available memory of a sufficient size. Also stored in the memory 204 is a stream selection module 234 that is configured to select one or more streams from multimedia content received from a server. A throughput determination module 236 stored in the memory 204 is configured to determine throughput for a channel with another system, such as a server.
The client 200 uses the channel throughput to determine which streams it wants to receive. If the same content has been encoded in multiple bit rates, the channel throughput will influence which streams the client selects. However, it is noted that the client 200 will typically select at least one audio stream and one video stream even if the channel throughput is not enough to stream the streams in real time.
A header acquisition module 238 is configured to retrieve header data 240 from a header associated with a stream from a server or other system that the client 200 can use to more efficiently determine streaming parameters. In one implementation, only certain information from the header is obtained while in another implementation, the entire header may be acquired.
A bit rate module 242 is configured to calculate a sum of an average bit rate of each selected stream, i.e. a total average bit rate (TAR 244). A speed multiplier module 246 calculates a requested speed multiplier 248 from channel throughput and the total average bit rate 244 to determine a speed to request from a server (in at least one implementation, this is done in a “Speed” header of a “Play” command).
An actual speed multiplier 250 is stored in the memory 204 and represents a speed multiplier contained in a server's response to a “Play” request (typically in a “Speed” header). This accounts for occasions in which a server may limit the speed multiplier to a lower value than what the client 200 requested.
The bit rate module 242 is also configured to calculate a streaming bit rate, which is included in streaming rate (R) values 252 stored in the memory 204. The memory 204 also stores buffer (B) values 254 that are used (as described below) in the calculation of the size of the content buffer 232.
A buffer calculation module 260 calculates how much data the client must buffer (i.e. the size of the content buffer 232) before the client can begin to play, or render, the multimedia content. The content will arrive from a server at a constant bit rate but the playback engine 208 will consume the data at a variable bit rate. Depending on the difference between the peak and average bit rates, different amounts of content data may need to be buffered before playback can begin. If not enough data has been buffered, the playback engine 208 will run out of data and the audio and video will exhibit undesirable artifacts.
Further aspects of the elements and functions shown and described in
Methodological Implementation—Encoder
At block 302, the encoder 102 acquires multimedia data from a content file or from an outside source that transmits the content to the server 100. The encoder 102 compresses (i.e. encodes) the content at block 304 and creates the data file 135 in the content buffer 132 (block 306).
In one implementation described herein, the buffer size calculation module 160 of the encoder 102 chooses fourteen (14) different streaming rate values (R) 138 (block 308) and calculates the smallest value of buffer value (i.e. size) B 136 for each R 138 so that the “bucket” in the model utilized does not overflow at block 310.
These buffer values 136 and rate values 138 are calculated across all streams in the multimedia content 150, and they include any non-data overhead from the file. Additionally, the buffer size calculation module 160 calculates a pair of R and B values 138, 136 for each stream at block 312. Each pair of R values 138 includes an average bit rate and a peak bit rate. For example, an average bit rate and a corresponding buffer value and a peak bit rate and a corresponding buffer value are calculated for an audio stream. Likewise an average bit rate and a corresponding buffer value and a peak bit rate and a corresponding buffer value are calculated for a video stream.
If the data file 135 contains variable bit rate content (“Yes” branch, block 314), then the VBR flag module 154 of the encoder 102 sets the VBR flag 140 in the header 132 at block 316. The encoder 102 then stores the rate values 138 and buffer values 136 in the header at block 318. If the data file 135 does not contain variable bit rate content (“No” branch, block 314), then the encoder 102 stores the rate values 138 and buffer values 136 in the header at block 318.
Methodological Implementation—Server
At block 402, the server 100 receives client stream selections 128 from the client 200. The client stream selections 128 are streams from the data file 135 that the client 200 has selected to receive. At block 404, the server 100 receives the client speed multiplier 130 requested by the client 200. The speed multiplier module 126 determines the actual client speed multiplier 130 that will be used in the streaming process (block 406). The client speed multiplier 130 may remain unchanged from the requested value or it may be altered to better accommodate server and client parameters.
The actual client stream multiplier 130 is then transmitted to the client 200 at block 408. After the client 200 sets up to receive the streaming data, the server 100 streams the multimedia content to the client 200 at block 410.
Methodological Implementation—Client
At block 502, the throughput determination module 236 of the client 200 determines the throughput of a channel established between the client 200 and the server 100. This determination may be done by any method known in the art.
At block 504, the header acquisition module 238 obtains the header data 240 from the header 132 that the client 200 will need to calculate an appropriate streaming rate and buffer size. The stream selection module 234 uses the buffer values 136 and the streaming rate values 138 retrieved from the header 132 and the channel throughput to select one or more streams for streaming (block 506) and notifying the server 100 of the stream selection(s). Although the buffer values 136 and the streaming rate value 138 are used in the selection process, it is noted that other considerations are also used in determining which streams to select for streaming (e.g. is an audio stream in English preferred over an audio stream in French? etc.).
At block 508, the bit rate module 238 derives the total average bit rate 244 of the selected streams by summing the average bit rate of each selected stream. It is noted that this bit rate is not one of the fourteen (14) bit rates selected in the “leaky bucket” method described above; this is one of the bit rate pairs chosen for each stream.
The requested speed multiplier 248 is derived from the channel throughput and the total average bit rate 244. More specifically, in the present example, the requested speed multiplier 248 is the channel throughput divided by the total average bit rate 244. If the channel throughput is insufficient to stream the content in real time, the speed multiplier will have a value that is less than one (1). Furthermore, the speed multiplier module 246 may also be configured to reduce the speed multiplier by some predetermined amount (e.g. 15%) to account for network transmission overhead.
After the requested speed multiplier 248 is sent to the server 100, the server 100 returns the actual speed multiplier 250 that will be used in the streaming process at block 512. The buffer calculation module 260 proceeds to calculate the appropriate buffer size that should be used in the streaming process at block 514. The process of block 514 is described in greater detail, below, with respect to
a and 6b are a flow diagrams 600, 620 that, together, depict a client methodological implementation of buffer size calculation as described above. The flow diagram 600 of
In the following discussion, the following values are used:
In the following discussion, the actions discussed are performed by the buffer calculation module 260 unless specified otherwise.
The flow diagram 600 depicted in
At block 602, if RStot is greater than Rbucket(m) (“Yes” branch, block 602), then Btot′ equals Bbucket(m). In other words, if RStot is larger than the rate of the leaky bucket having the highest rate, then the buffer size is set to the buffer size associated with the leaky bucket having the highest rate at block 604.
Otherwise (“No” branch, block 602), if RStot is less than or equal to Rbucket(1) (“Yes” branch, block 606), then Btot′ is calculated to be Bbucket(1)+(Rbucket(1)−RStot)*T at block 608. If not (“No” branch, block 606), then Btot′ is determined by interpolation at block 610.
The calculation of Btot′ shown in block 610 is:
Btot′=Bbucket(q)+[(RStot−Rbucket(q))*(Bbucket(q+1)−Bbucket(q))]/[Rbucket(q+1)−Rbucket(q)]
At this point, the “intermediate” buffer size Btot′ has been determined. Btot′ is referred to as “intermediate” here only because it will be compared with another buffer size (Btot) derived below to determine the better buffer size to use. However, it is noted that Btot′ is a buffer size that could be used in an of itself.
The flow diagram 620 depicted in
As shown in the flowchart 620, the buffer size calculation module 160 cycles through each stream in the file and performs certain calculations using streams that have been selected for streaming. It is noted that in at least one other implementation, another technique may be used that simply determines beforehand which streams have been selected for streaming and bases calculations on those streams. The implementation depicted by
At block 622, the variable n (representing a stream number associated with a stream in the file) is initialized to 1 and the value Btot is initialed to zero. If n is not associated with a stream that has been selected for streaming (“No” branch, block 624)1, then the process skips down to block 640, where n is incremented by 1. If n represents a selected stream (“Yes” branch, block 624), then RS(n) is set to the average streaming rate for stream n (Ravg(n) multiplied by the speed factor (S) at block 626.
If RS(n) is greater than the peak bit rate for the stream, i.e. Rpeak(n) (“Yes” branch, block 628), then B(n) is set to Bpeak(n) at block 630). If not (“No” branch, block 628), then if RS(n) is less than or equal to the average bit rate of the stream (Ravg(n)) (“Yes” branch, block 632), then B(n) equals Bavg(n)+(Ravg(n) −RS(n))*T(block 634). Otherwise (“No” branch, block 632), B(n) is derived using linear interpolation at block 636).
Block 636 derives B(n) as:
Bavg(n)+[(RS(n)−Bavg(n))*(Bpeak(n)−Bavg(n))]/[(Rpeak(n)−Ravg(n)].
The Btot value is updated at block 638 by adding the newly derived B(n). In other words, Btot keeps a running total of the sum of all B(n) as B(n) for each selected stream is derived.
The stream number, n, is incremented at block 640. If there is another stream in the file that hasn't been processed yet (“Yes” branch, block 642), then the process reverts to block 624 and repeats until all streams have been processed. After all the streams in the file have been processed (“No” branch, block 642), then the minimum of Btot and Btot′ is determined at block 644, which provides the buffer size that will be used in the streaming process
The content buffer 232 in the client 200 is set to that amount and the streaming process can begin.
Other Considerations
Although not specifically described above, some other considerations can be made when deriving an optimal buffer size to utilize in a streaming process. In the particular example shown above, a set of fourteen (14) leaky buckets for all streams in a file are used together with a set of (2) leaky buckets for each stream in the file. In principle, any other subset of streams could also have its own set of leaky buckets.
For example, if there are four streams in a file, in addition to the usual sets of leaky buckets for the subsets {1,2,3,4}, {1}, {2}, {3} {4}, there could be sets of leaky buckets for the subsets {1,2} and {3,4}—which would be of significant greater interest if streams 1 and 2 were likely to be selected together and if stream 3 and 4 were likely to be selected together.
Then, given any subset of streams—say {1,2,3}—the minimum sufficient buffer size could be computed as the minimum of the Btot values computed from not only {1,2,3,4} and {1}+{2}+{3} but also {1,2}+{3}. The latter is likely to provide the tightest bound of the three.
Furthermore, it is noted that any of the available buffer size computations can be omitted. For example, the buffer size calculation (Btot′) based on {1,2,3,4} does not have to be used. The buffer size computation (Btot) based on {1}+{2}+{3} may be sufficient.
Exemplary Computing Environment
The various components and functionality described herein are implemented with a computing system.
Generally, various different general purpose or special purpose computing system configurations can be used. Examples of well known computing systems, environments, and/or configurations that may be suitable for use with the invention include, but are not limited to, personal computers, server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like.
The functionality of the computers is embodied in many cases by computer-executable instructions, such as program modules, that are executed by the computers. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Tasks might also be performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote computer storage media.
The instructions and/or program modules are stored at different times in the various computer-readable media that are either part of the computer or that can be read by the computer. Programs are typically distributed, for example, on floppy disks, CD-ROMs, DVD, or some form of communication media such as a modulated signal. From there, they are installed or loaded into the secondary memory of a computer. At execution, they are loaded at least partially into the computer's primary electronic memory. The invention described herein includes these and other various types of computer-readable media when such media contain instructions programs, and/or modules for implementing the steps described below in conjunction with a microprocessor or other data processors. The invention also includes the computer itself when programmed according to the methods and techniques described below.
For purposes of illustration, programs and other executable program components such as the operating system are illustrated herein as discrete blocks, although it is recognized that such programs and components reside at various times in different storage components of the computer, and are executed by the data processor(s) of the computer.
With reference to
Computer 700 typically includes a variety of computer-readable media. Computer-readable media can be any available media that can be accessed by computer 700 and includes both volatile and nonvolatile media, removable and non-removable media. By way of example, and not limitation, computer-readable media may comprise computer storage media and communication media. “Computer storage media” includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by computer 700. Communication media typically embodies computer-readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. The term “modulated data signal” means a signal that has one or more if its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of any of the above should also be included within the scope of computer readable media.
The system memory 704 includes computer storage media in the form of volatile and/or nonvolatile memory such as read only memory (ROM) 708 and random access memory (RAM) 710. A basic input/output system 712 (BIOS), containing the basic routines that help to transfer information between elements within computer 700, such as during start-up, is typically stored in ROM 708. RAM 710 typically contains data and/or program modules that are immediately accessible to and/or presently being operated on by processing unit 702. By way of example, and not limitation,
The computer 700 may also include other removable/non-removable, volatile/nonvolatile computer storage media. By way of example only,
The drives and their associated computer storage media discussed above and illustrated in
The computer may operate in a networked environment using logical connections to one or more remote computers, such as a remote computing device 750. The remote computing device 750 may be a personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to computer 700. The logical connections depicted in
When used in a LAN networking environment, the computer 700 is connected to the LAN 752 through a network interface or adapter 756. When used in a WAN networking environment, the computer 700 typically includes a modem 758 or other means for establishing communications over the Internet 754. The modem 758, which may be internal or external, may be connected to the system bus 706 via the I/O interface 740, or other appropriate mechanism. In a networked environment, program modules depicted relative to the computer 700, or portions thereof, may be stored in the remote computing device 750. By way of example, and not limitation,
Computer-Executable Instructions
An implementation of the exemplary systems and methods for improved streaming of variable bit rate multimedia content may be described in the general context of computer-executable instructions, such as program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Typically, the functionality of the program modules may be combined or distributed as desired in various embodiments.
Conclusion
Although the subject matter has been described in language specific to structural features and/or methods, it is to be understood that the invention defined by the appended claims is not necessarily limited to the specific features or methods described herein. Rather, the specific features and methods are disclosed as exemplary forms of implementing the claimed systems and methods.
Number | Name | Date | Kind |
---|---|---|---|
4963995 | Lang | Oct 1990 | A |
5057932 | Lang | Oct 1991 | A |
5132964 | Esaki | Jul 1992 | A |
5164839 | Lang | Nov 1992 | A |
5262875 | Mincer et al. | Nov 1993 | A |
5440334 | Walters et al. | Aug 1995 | A |
5568181 | Greenwood et al. | Oct 1996 | A |
5710970 | Walters et al. | Jan 1998 | A |
5758076 | Wu et al. | May 1998 | A |
5787472 | Dan et al. | Jul 1998 | A |
5822537 | Katseff et al. | Oct 1998 | A |
5835495 | Ferriere | Nov 1998 | A |
5872920 | Hausman et al. | Feb 1999 | A |
5890010 | Nishigami | Mar 1999 | A |
5913038 | Griffiths | Jun 1999 | A |
5931961 | Ranganathan et al. | Aug 1999 | A |
5963202 | Polish | Oct 1999 | A |
5978567 | Rebane et al. | Nov 1999 | A |
5983263 | Rothrock et al. | Nov 1999 | A |
5995705 | Lang | Nov 1999 | A |
5996015 | Day et al. | Nov 1999 | A |
6005621 | Linzer et al. | Dec 1999 | A |
6014706 | Cannon et al. | Jan 2000 | A |
6041345 | Levi et al. | Mar 2000 | A |
6054943 | Lawrence | Apr 2000 | A |
6111567 | Savchenko et al. | Aug 2000 | A |
6118817 | Wang | Sep 2000 | A |
6120149 | Hosoi | Sep 2000 | A |
6161201 | Payne et al. | Dec 2000 | A |
6195692 | Hsu | Feb 2001 | B1 |
6209041 | Shaw et al. | Mar 2001 | B1 |
6216163 | Bharali et al. | Apr 2001 | B1 |
6262990 | Ejiri | Jul 2001 | B1 |
6272148 | Takagi et al. | Aug 2001 | B1 |
6292834 | Ravi et al. | Sep 2001 | B1 |
6292880 | Mattis et al. | Sep 2001 | B1 |
6314492 | Allen et al. | Nov 2001 | B1 |
6327421 | Tiwari et al. | Dec 2001 | B1 |
6329165 | Chattoraj et al. | Dec 2001 | B1 |
6343298 | Savchenko et al. | Jan 2002 | B1 |
6351767 | Batchelder et al. | Feb 2002 | B1 |
6385647 | Willis et al. | May 2002 | B1 |
6405256 | Lin et al. | Jun 2002 | B1 |
6407680 | Lai et al. | Jun 2002 | B1 |
6421348 | Gaudet et al. | Jul 2002 | B1 |
6449269 | Edholm | Sep 2002 | B1 |
6480498 | Gaudet et al. | Nov 2002 | B1 |
6484199 | Eyal | Nov 2002 | B2 |
6493748 | Nakayama et al. | Dec 2002 | B1 |
6502135 | Munger et al. | Dec 2002 | B1 |
6553376 | Lewis et al. | Apr 2003 | B1 |
6611868 | Arutyunov | Aug 2003 | B1 |
6611898 | Slattery et al. | Aug 2003 | B1 |
6614763 | Kikuchi et al. | Sep 2003 | B1 |
6643259 | Borella et al. | Nov 2003 | B1 |
6725333 | Degenaro et al. | Apr 2004 | B1 |
6735634 | Geagan, III et al. | May 2004 | B1 |
6757255 | Aoki et al. | Jun 2004 | B1 |
6760749 | Dunlap et al. | Jul 2004 | B1 |
6760765 | Asai et al. | Jul 2004 | B1 |
6765878 | Carlson | Jul 2004 | B1 |
6772375 | Banga | Aug 2004 | B1 |
6779043 | Crinion | Aug 2004 | B1 |
6785288 | Enns et al. | Aug 2004 | B1 |
6952424 | Bass et al. | Oct 2005 | B1 |
6954430 | Haglund | Oct 2005 | B2 |
6986018 | O'Rourke et al. | Jan 2006 | B2 |
6990070 | Aweya et al. | Jan 2006 | B1 |
7007090 | Spangler et al. | Feb 2006 | B1 |
7020087 | Steinberg et al. | Mar 2006 | B2 |
7051110 | Hagai et al. | May 2006 | B2 |
7054774 | Batterberry et al. | May 2006 | B2 |
7054911 | Lango et al. | May 2006 | B1 |
7054949 | Jennings | May 2006 | B2 |
RE39184 | Schloss et al. | Jul 2006 | E |
7073028 | Lango et al. | Jul 2006 | B2 |
7076560 | Lango et al. | Jul 2006 | B1 |
7133881 | Sirivara et al. | Nov 2006 | B2 |
20020047899 | Son et al. | Apr 2002 | A1 |
20020048448 | Daniels | Apr 2002 | A1 |
20020049817 | Drory et al. | Apr 2002 | A1 |
20020077900 | Thompson et al. | Jun 2002 | A1 |
20020090027 | Karczewicz et al. | Jul 2002 | A1 |
20020138641 | Taylor et al. | Sep 2002 | A1 |
20020170067 | Norstrom et al. | Nov 2002 | A1 |
20020194608 | Goldhor | Dec 2002 | A1 |
20030018799 | Eyal | Jan 2003 | A1 |
20030099364 | Thompson et al. | May 2003 | A1 |
20030236902 | Weiss et al. | Dec 2003 | A1 |
20030236912 | Klemets et al. | Dec 2003 | A1 |
20040003101 | Roth et al. | Jan 2004 | A1 |
20040054912 | Adent et al. | Mar 2004 | A1 |
20040244010 | Kleyman et al. | Dec 2004 | A1 |
20050152400 | Suzuki | Jul 2005 | A1 |
20050157714 | Shlissel et al. | Jul 2005 | A1 |
20050256941 | Armstrong et al. | Nov 2005 | A1 |
Number | Date | Country |
---|---|---|
20020069272 | Aug 2002 | KR |
Number | Date | Country | |
---|---|---|---|
20040264489 A1 | Dec 2004 | US |