Patent ID: 8407358

Claim:
A method comprising: receiving streaming data from a server at a first data rate; obtaining configuration information for the streaming data, said configuration information including a reference data depth; preloading a buffer having a finite size with the streaming data up to the reference data depth; buffering the streaming data in the buffer; consuming the streaming data from the buffer at a second data rate, said second data rate being variable; generating a substantially continuous sequence of dynamic control commands based on the data depth of the buffer relative to the reference data depth and based on at least one previous dynamic control command in the sequence of dynamic control commands; and using the substantially continuous sequence of dynamic control commands to adjust the first data rate to indirectly influence the data depth of the buffer toward the reference data depth whenever the data depth of the buffer deviates from the reference data depth; wherein generating the sequence of dynamic control commands comprises: taking a sample of the data depth of the buffer once every T seconds; generating an error signal equal to a difference between the sample of the data depth and the reference depth; applying the error signal to an Nth order controller; and producing a dynamic control command for each sample of the data depth.