PATENT DOCUMENT

Publication Number: US-9444879-B2
Application Number: US-201313733070-A
Country: US
Kind Code: B2

Title: Approach for downloading data over networks using automatic bandwidth detection

Abstract:
An approach is provided for downloading data over a network that uses automatic bandwidth detection. According to the approach, a first version of data to be requested is selected from a plurality of available versions of the data. The first version may be selected based upon a default selection or based upon prior determined connection speeds. A client requests the first version of the data from a server and the client begins receiving the first version of the data. A determination of at least an approximate connection speed is made based upon at least a portion of the first version of the data received at the client. A determination is then made, based upon the determined connection speed, whether a different version of the data should be requested. If so, then the client requests a different version of the data from the server.

Claims:
What is claimed is: 
     
       1. A computer-implemented method for downloading data over a communications link, the computer-implemented method comprising:
 requesting, from a server, a first version of the data from a plurality of versions of the data; 
 measuring a first amount of time to receive a first portion of the first version of the data; 
 measuring a second amount of time to receive a second portion of the first version of the data based at least in part on the first amount of time being less than a first time threshold, wherein the second portion is greater in size than the first portion; 
 calculating a connection speed associated with a network address based at least in part on the second amount of time; 
 storing, at a client, the calculated connection speed; and 
 selecting a version of the data from the plurality of versions of the data based at least in part on the connection speed. 
 
     
     
       2. The computer-implemented method as recited in  claim 1 , further comprising:
 selecting the first version of the data from the plurality of versions of the data based at least in part on a prior connection speed to the server. 
 
     
     
       3. The computer-implemented method as recited in  claim 1 , further comprising:
 selecting the first version of the data from the plurality of versions of the data based at least in part on a prior connection speed. 
 
     
     
       4. The computer-implemented method as recited in  claim 1 , further comprising:
 generating connection speed data based at least in part on the connection speed wherein 
 the connection speed data is also associated with a network interface of the client. 
 
     
     
       5. The computer-implemented method as recited in  claim 1 , further comprising:
 requesting the selected version of the data from the server based at least in part on the selected version of data being different than the first version of the data. 
 
     
     
       6. The computer-implemented method as recited in  claim 1 , wherein the measuring the second amount of time comprises:
 comparing the first amount of time to the first time threshold. 
 
     
     
       7. The computer-implemented method as recited in  claim 1 , wherein the calculating the connection speed comprises:
 comparing the second amount of time to a second time threshold. 
 
     
     
       8. The computer-implemented method as recited in  claim 1 , further comprising:
 terminating the measuring the first amount of time based at least in part on the first amount of time exceeding the first time threshold; and 
 setting the first amount of time to the first time threshold. 
 
     
     
       9. The computer-implemented method as recited in  claim 1 , wherein the measuring the first amount of time comprises beginning measurement of the first amount of time at receipt at the client of the first version of the data from the server. 
     
     
       10. The computer-implemented method as recited in  claim 1 , wherein the first version of the data and the selected version of the data are versions of a same original data, the first version of the data having at least one property that is different than the selected version of the data. 
     
     
       11. The computer-implemented method as recited in  claim 10 , wherein the at least one property comprises a resolution of the data. 
     
     
       12. The computer-implemented method as recited in  claim 10 , wherein the at least one property comprises an amount of data. 
     
     
       13. The computer-implemented method as recited in  claim 10 , wherein the at least one property comprises a bandwidth used for transmitting data from the server. 
     
     
       14. The computer-implemented method as recited in  claim 1 , further comprising:
 measuring a third amount of time to receive a third portion of the first version of the data based at least in part on the second amount of time being less than a second time threshold, wherein the third portion is greater in size than the second portion, and the measuring the third amount of time is performed after the measuring the second amount of time; and 
 calculating the connection speed based at least on the third amount of time. 
 
     
     
       15. An apparatus for downloading and viewing data over the Internet comprising:
 a computer system comprising a processor and a memory, the computer system: 
 requesting, from a server, a first version of data from a plurality of versions of the data; 
 in response to measuring a first amount of time and a second amount of time, calculating a connection speed associated with a network address based at least in part on the second amount of time, wherein the first amount of time is based at least in part on receipt of a first portion of the first version of the data, and the second amount of time is based at least in part on receipt of a second portion of the first version of the data and the first amount of time being less than a first time threshold, wherein the second portion is greater in size than the first portion; and 
 storing, at the computer system, the calculated connection speed; and 
 selecting a version of the data from the plurality of versions of the data based at least in part on the connection speed. 
 
     
     
       16. The apparatus as recited in  claim 15 , the computer system:
 measuring a third amount of time to receive a third portion of the first version of the data based at least in part on the second amount of time being less than a second time threshold, wherein the third portion is greater in size than the second portion, and the measure the third amount of time is performed after the measure the second amount of time; and 
 calculating the connection speed based at least on the third amount of time. 
 
     
     
       17. A computer-implemented method for downloading data over a communications link, the computer-implemented method comprising:
 determining a first connection speed to a server during a setup negotiation with the server; 
 selecting a first version of the data from a plurality of versions of the data based at least in part on the first connection speed; 
 measuring a first amount of time to receive a first portion of the first version of the data; 
 measuring a second amount of time to receive a second portion of the first version of the data based at least in part on the first amount of time being less than a first time threshold, wherein the second portion is greater in size than the first portion; 
 calculating a second connection speed associated with a network address based at least in part on the second amount of time; 
 storing, at a client, the calculated second connection speed; 
 selecting a version of the data from the plurality of versions of the data based at least in part on the second connection speed; and 
 requesting the selected version of the data from the server. 
 
     
     
       18. A non-transitory computer-readable medium for downloading data over a communications link, the computer-readable medium carrying instructions which, when executed by one or more processors, cause:
 requesting, from a server, a first version of the data from a plurality of versions of the data; 
 measuring a first amount of time to receive a first portion of the first version of the data; 
 measuring a second amount of time to receive a second portion of the first version of the data based at least in part on the first amount of time being less than a first time threshold, wherein the second portion is greater in size than the first portion; 
 calculating a connection speed associated with a network address based at least in part on the second amount of time; 
 storing, at a client, the calculated connection speed; 
 selecting a version of the data from the plurality of versions of the data based at least in part on the connection speed; and 
 requesting the selected version of the data from the server. 
 
     
     
       19. The computer-readable medium as recited in  claim 18 , further comprising additional instructions which, when executed by the one or more processors, cause selecting the first version of the data from the plurality of versions of the data based at least in part on a prior connection speed to the server. 
     
     
       20. The computer-readable medium as recited in  claim 18 , further comprising additional instructions which, when executed by the one or more processors, cause selecting the first version of the data from the plurality of versions of the data based at least in part on a prior connection speed. 
     
     
       21. The computer-readable medium as recited in  claim 18 , further comprising additional instructions which, when executed by the one or more processors, cause:
 generating connection speed data based at least in part on the connection speed wherein 
 the connection speed data is also associated with a network interface of the client. 
 
     
     
       22. The computer-readable medium as recited in  claim 18 , further comprising additional instructions which, when executed by the one or more processors, cause:
 requesting the selected version of the data from the server based at least in part on the selected version of data being different than the first version of the data. 
 
     
     
       23. The computer-readable medium as recited in  claim 18 , wherein the measuring the second amount of time comprises:
 comparing the first amount of time to the first time threshold. 
 
     
     
       24. The computer-readable medium as recited in  claim 18 , wherein the calculating the connection speed comprises:
 comparing the second amount of time to a second time threshold. 
 
     
     
       25. The computer-readable medium as recited in  claim 18 , further comprising additional instructions which, when executed by the one or more processors, cause:
 terminating the measuring the first amount of time based at least in part on the first amount of time exceeding the first time threshold; and 
 setting the first amount of time to the first time threshold. 
 
     
     
       26. The computer-readable medium as recited in  claim 18 , wherein the measuring the first amount of time comprises beginning measurement of the first amount of time at receipt at the client of first data contained in the first portion of the first version of the data from the server. 
     
     
       27. The computer-readable medium as recited in  claim 18 , further comprising additional instructions which, when executed by the one or more processors, cause:
 measuring a third amount of time to receive a third portion of the first version of the data based at least in part on the second amount of time being less than a second time threshold, wherein the third portion is greater in size than the second portion, and the measuring the third amount of time is performed after the measuring the second amount of time; and 
 calculating the connection speed based at least on the third amount of time. 
 
     
     
       28. A non-transitory computer-readable medium for downloading data over a communications link, the computer-readable medium carrying instructions which, when executed by one or more processors, cause:
 determining a first connection speed to a server during a setup negotiation with the server; 
 selecting a first version of the data from a plurality of versions of the data based at least in part on the first connection speed; 
 in response to measuring a first amount of time and a second amount of time, calculating a second connection speed associated with a network address based at least in part on the second amount of time, wherein the first amount of time is based at least in part on receipt of a first portion of the first version of the data, and the second amount of time is based at least in part on receipt of a second portion of the first version of the data and the first amount of time being less than a first time threshold, wherein the second portion is greater in size than the first portion; and 
 storing, at a client, the calculated second connection speed; 
 selecting a version of the data from the plurality of versions of the data based at least in part on the second connection speed; and 
 requesting the selected version of the data from the server.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application is a continuation of co-pending U.S. application Ser. No. 11/088,326 filed on Mar. 23, 2005, which is hereby incorporated by reference herein in its entirety. 
    
    
     FIELD OF THE INVENTION 
     This invention relates generally to downloading data over networks and more specifically, to an approach for downloading data over networks using automatic bandwidth detection. 
     BACKGROUND 
     The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, the approaches described in this section may not be prior art to the claims in this application and are not admitted to be prior art by inclusion in this section. 
     One of the issues with downloading data over communications networks is how to accommodate different users that may have very different and varying connection speeds. For example, two different users downloading the same movie over the Internet may have very different connection speeds. One user may be using a client with a dialup connection, while the other user is using a client with a “broadband” connection, such as a DSL or cable modem connection. Thus, the user with the dialup connection requires a significantly longer amount of time to download the same movie compared to the user with the broadband connection, which can result in an unsatisfactory user experience. Furthermore, the available bandwidth for any particular user is not necessarily constant and may vary significantly over time. For example, users that have shared access connections, such as cable modem services, may experience large variations in available bandwidth, depending upon the activities of the other users sharing the same connection. Thus, a user with a shared access connection may experience significantly longer download times when the shared access connection is heavily used by other users, compared to other times, when the shared access connection is not as heavily used by others. As another example, a user with a wireless connection may experience different available bandwidth as the user changes location with respect to a particular wireless access point (WAP). The user may also experience different available bandwidth when a change in location causes a change to a different WAP that has different bandwidth capabilities. 
     One approach to addressing this problem has been to offer a choice of different versions of content and allow a user to select a version of content that is appropriate for their connection speed. For example, low, medium and high resolution versions of a movie may be offered to a user for download. The low resolution version of the movie has the smallest file size and is suitable for slow connections, such as dialup connections. The medium resolution version of the movie has a larger file size and is suitable for medium speed connections, such as basic DSL service. The high resolution version of the movie has the largest file size and is suitable for high speed connections, such as cable modem or T1 line services. Higher resolution content generally provides a better user experience, at the cost of longer download times. Thus, the user wants to download the version that provides the highest resolution within an acceptable download delay. 
     One problem with this approach is that a user may not know their connection speed and may be confused by conventional connection speeds expressed in kilobits per second (kbs) or megabits per second (mbs). Even if the user knows their standard connection speed, the actual connection speed at the time of particular download may vary, depending for example, upon network traffic or the activity of other users in a shared access service, or by location for wireless devices. Furthermore, if a user selects the wrong download option, the user may have a less than optimal experience. If the user selects a lower resolution version, then the quality suffers. If the user selects a higher resolution version, then the download time may be greatly increased. 
     Based on the foregoing, there is a need for an approach for downloading data over networks that does not suffer from limitations of prior approaches. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       In the figures of the accompanying drawings like reference numerals refer to similar elements. 
         FIG. 1  is a block diagram that depicts an architecture for implementing an approach for downloading data over a communications network according to an embodiment of the invention. 
         FIG. 2  is a block diagram that depicts a table of data used to determine the connection speed between server and client by measuring the times required to receive successively larger portions of data until the measured time to receive a particular portion of data exceeds a time threshold specified for the particular portion of data. 
         FIG. 3  depicts a table that may be used to determine an approximate current connection speed based upon an amount of data received in a specified time. 
         FIG. 4  is a flow diagram that depicts an operational example of the approach described herein for downloading data using automatic bandwidth detection. 
         FIG. 5  is a block diagram of an example computer system on which embodiments of the invention may be implemented. 
     
    
    
     DETAILED DESCRIPTION 
     In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be apparent, however, to one skilled in the art that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the present invention. Various aspects of the invention are described hereinafter in the following sections:
         I. OVERVIEW   II. ARCHITECTURE   III. SELECTING AN INITIAL VERSION OF DATA TO BE REQUESTED   IV. DETERMINING THE CURRENT CONNECTION SPEED BASED UPON THE TIME TO RECEIVE SUCCESSIVELY LARGER PORTIONS OF DATA   V. DETERMINING THE CURRENT CONNECTION SPEED BASED UPON THE AMOUNT OF DATA RECEIVED WITHIN A SPECIFIED TIME   VI. DETERMINING WHETHER A DIFFERENT VERSION OF DATA SHOULD BE REQUESTED   VII. OPERATIONAL EXAMPLE   VIII. STREAMING DATA APPLICATIONS   IX. IMPLEMENTATION MECHANISMS       

     I. Overview 
     An approach is provided for downloading data over a network that uses automatic bandwidth detection. According to the approach, a first version of data to be requested is selected from a plurality of available versions of the data. The first version may be selected based upon a default selection or based upon prior determined connection speeds. A client requests the first version of the data from a server and the client begins receiving the first version of the data. A determination of at least an approximate connection speed is made based upon a rate at which at least a portion of the first version of the data is received at the client. A determination is then made, based upon the determined connection speed, whether a different version of the data should be requested. If so, then the client requests a different version of the data from the server. As described in more detail hereinafter, connection speed may be determined by measuring the amount of time required to receive successively larger portions of the first version of the data or by measuring the amount of the first version of the data received within a specified measuring period. 
     II. Architecture 
       FIG. 1  is a block diagram of an arrangement  100  for downloading data over a communications network using automatic bandwidth detection according to an embodiment of the invention. Arrangement  100  includes a server  102  and a client  104  communicatively coupled via a communications link  106 . Communications link  106  may be implemented by any medium or mechanism that provides for the exchange of data between server  102  and client  104 . Examples of communications link  106  include, without limitation, a network such as a Local Area Network (LAN), Wide Area Network (WAN), Ethernet or the Internet, or one or more terrestrial, satellite or wireless links. Communications link  106  may be secure or unsecured and may use any protocol. For example, in the context of the Internet, communications may be made on communications link  106  using HTTP or HTTPS. 
     Server  102  is a device configured to provide information to other entities in response to requests from those entities. Server  102  includes a server process  108  that may be implemented by any process capable of processing requests for information from client  104  and providing the requested information to client  104 . For example, in the context of the Internet, server process  108  may be a Web server, such as an Apache server, that processes requests for Web pages from client  104  and provide the requested Web pages to client  104 . Server  102  is also configured with storage  110  that may be implemented by any type or combination of volatile, e.g., random access memory (RAM), and non-volatile storage, e.g., one or more disks. Server  102  may include various other elements and processes, depending upon a particular implementation, that are not depicted in  FIG. 1  or described herein for purposes of explanation. 
     Client  104  is a device configured to request data from server  102 . Client  104  includes a client process  112  that may be implemented by any process capable of generating and sending requests for information to server  102 . For example, in the context of the Internet, client process  112  may be a generic Web browser or a media player process, configured to download and play video data and music. Client  104  may include various other elements and processes, depending upon a particular implementation, that are not depicted in  FIG. 1  or described herein for purposes of explanation. For example, client  104  may include a graphical user interface (GUI) for conveying information to a user. Client  104  may also include user selection devices, such as a mouse, and interfaces to allow a user to convey selection information to client process  112 . Client  104  also includes storage  114  that, like storage  110 , may be implemented by any type or combination of volatile, e.g., random access memory (RAM), and non-volatile storage, e.g., one or more disks. Client  104  may be any type of device or mechanism and the approach described herein is not applicable to any type of device or context. Examples of client  104  include, without limitation, workstations, personal computers (desktop or laptop), cellphones, personal digital assistants (PDAs), media players and any other wireless or mobile devices that are capable of requesting data from server  102 . 
     According to one embodiment of the invention, storage  110  includes three versions  116 ,  118 ,  120  of data, identified in  FIG. 1  as “VERSION 1”, “VERSION 2” and “VERSION 3.” As depicted in  FIG. 1 , the three versions of the data correspond to low, medium and high resolution versions of the data. Accordingly, VERSION 1  116  contains relatively less data than VERSION 2  118 , which contains relatively less data than VERSION 3  120 . The actual amount of data in the three versions  116 ,  118 ,  120  is not important. As described in more detail hereinafter, the particular version  116 ,  118 ,  120  of the data requested by client  104  is automatically selected based upon the determined connection speed between server  102  and client  104  via communications link  106 . 
     III. Selecting an Initial Version of Data to be Requested 
     According to the approach, a first version of data to be requested is automatically selected from a plurality of available versions of the data. The first version may be a default version for a particular client  104 , or a general default used for multiple clients. For example, when client process  112  is first installed on client  104 , a default first version may be established. 
     According to one embodiment of the invention, prior determined connection speeds are used to select an initial version of data to request. When connection speeds are determined as described hereinafter, the connection speeds are stored in association with client  104  so that they may be used in future initial version selection determinations. For example, suppose that a current connection speed between client  104  and server  102  is determined during the download of data from server  102  to client  104 , as described hereinafter. The current connection speed is stored in storage  114  in association with client  104 . Sometime later, client process  112  is ready to download other data from server  102 . Client process  112  retrieves and uses the prior connection speed to select an initial version of data to request. For example, suppose that the prior connection speed was 50,000 bps. Client process  112  selects an initial version of data that corresponds to the connection speed of 50,000 bps, e.g., a version that corresponds to a dialup connection speed. 
     Connection speeds may be stored in association with a client by network address. For example, a current connection speed determined for client  104  may be stored in storage  114  based upon the IP address of client  104 . In this situation, client process  112  performs a lookup of the prior connection speed based upon the IP address of client  104 . Some clients are configured with more than one network interface. For example, a laptop computer may be configured with both a wired network interface, such as Ethernet card, and a wireless network interface, such as an 802.11 interface card. Different network interfaces may provide different connection speeds. Therefore, according to on embodiment of the invention, current connection speeds are stored in association with a client based upon both data that identifies the client and by network interface. Thus, multiple current connection speeds may be stored for a client, depending upon how many network interfaces the client has. When an initial selection of a version is to be made, a prior connection speed is retrieved based upon the client and the particular network interface being used. 
     It is not uncommon for content to be made available across several servers to increase the availability of the content. For example, a song or movie may be made available to customers via several servers. Requests for the song or movie are routed to a particular server, for example, based upon the current load of each server. Each connection between a client and a particular server may have a different connection speed, based upon a number of factors, such as the capacity and demand at each server. According to one embodiment of the invention, connection speeds are stored based upon particular connections. For example, the current connection speed for client  104  may be stored in association with a connection between client  104  and “Server1.XYZ.com” or a connection between client  104  and “Server2.XYZ.com”. 
     According to another embodiment of the invention, the selection of an initial version of data may be made based upon connection speeds for similar connections. Thus, although a prior connection speed may not be available for a specific connection, a prior connection speed may be available for a similar connection and used to select an initial version of data. For example, suppose that a request for content (foo.jpg) is to be made and several versions of foo.jpg are available. The request might take the form of: “http://www.server1.xyz.com/videos/foo1.jpg”. Suppose further that there is no stored connection speed for the connection between client  104  and server1 at xyz.com, but that a prior connection speed was stored and is available for the connection between client  104  and server2 at xyz.com. In this situation, the prior connection speed for server2 at xyz.com may be used to select the initial version of foo.jpg to be requested. Prior connection speed information may be shared among multiple clients, for example, in a connection speed library. This may be useful in situations where multiple clients have similar access to a server, for example, in an office environment where several clients shared a wireless access point (WAP) and a server. 
     IV. Determining the Current Connection Speed Based Upon the Time to Receive Successively Larger Portions of Data 
     According to one embodiment of the invention, the current connection speed between server  102  and client  104  is determined by measuring the times required to receive successively larger portions of data, until the measured time to receive a particular portion of data exceeds a time threshold specified for the particular portion of data. A data rate associated with the particular portion of data provides at least an approximation of the current connection speed. 
     This approach is now described in more detail with reference to a table  200  depicted in  FIG. 2 . Each row in Table  200  corresponds to a successively larger portion of data and includes a portion size (in bits), a time threshold (in ms) and a data rate (in bps). Thus, a 5,000 bit portion of data received in 100 ms corresponds to a data rate of 50,000 bits per second. 
     The portion sizes and time thresholds in table  200  are used to determine an approximate current connection speed between server  102  and client  104 . Client  104  requests a version of data from server  102 . The amount of time required for client  104  to receive 5,000 bits of the requested data from server  102  is measured. The measurement may be made from the time client  104  requests the data from server  102 . Alternatively, the measurement may be made from the time that client  104  starts receiving data to be measured. The latter approach may provide a more meaningful measurement because it eliminates delays attributable to server  102 . The 5,000 bits may, or may not be, the first 5,000 bits received by client  104  from server  102  in the requested version of data, depending upon a particular implementation. If the measured time to receive 5,000 bits is equal to or greater than 100 ms, then the current connection speed is 50,000 bps or slower and no further testing is performed. 
     If the measured time to receive 5,000 bits is less than 100 ms, then the current connection speed is greater than 50,000 bps and additional testing is performed. In this situation, the amount of time required for client  104  to receive 64,000 bits of data from server  102  is measured. The 64,000 bits of data may, or may not be, the next 64,000 bits after the 5,000 bits previously measured, depending upon a particular implementation. If the measured time to receive the 64,000 bits is equal to or greater than 200 ms, then the current connection speed is greater than 50,000 bps, but equal to or less than 320,000 bps, and no further testing is performed. 
     If the measured time to receive the 64,000 bits is less than 200 ms, then the current connection speed is greater than 320,000 bps and additional testing is performed. In this situation, the amount of time required for client  104  to receive 500,000 bits of data from server  102  is measured. The 500,000 bits of data may, or may not be, the next 500,000 bits after the 64,000 bits previously measured, depending upon a particular implementation. If the measured time to receive the 500,000 bits is equal to or greater than 250 ms, then the current connection speed is greater than 320,000 bps, but equal to or less than 2,000,000 bps. If the measured time to receive 500,000 bits is less than 250 ms, then the current connection speed is greater than 2,000,000 bps. 
     The use of a test ladder as described herein allows the current connection speed to be at least approximated by measuring the times required to receive successively larger portions of data and comparing the measured times to time thresholds associated with each portion of data. In the present example, a test ladder with three levels has been used for purposes of explanation. The approach is not limited to the use of three levels and any number of levels may be used. Increasing the number of levels in the test ladder provides greater granularity in the estimate of the current connection speed. It should be noted that the use of a test ladder in the manner described herein avoids having to perform a calculation to determine an estimated data rate. Instead, simple comparisons and lookups may be used. 
     According to one embodiment of the invention, a maximum limit (latency ceiling) is placed on measured times to control the overall time of the process. For example, a maximum limit may be set at one to two seconds. Once a measurement reaches the maximum limit, the measurement is stopped and the maximum limit value is used. Alternatively, once the maximum limit is reached, the process may be aborted and a default version selection used. The use of a maximum limit provides control over the adverse effects that can be caused by an exceptionally slow connection. 
     One of the benefits of this approach is that the use of progressively larger portions of data via the test ladder accommodates both low and high speed connections. Low speed connections are not overloaded with large amounts of test data, which reduces the adverse effects that the testing might have. Higher speed connections will automatically use larger portions of data as the test ladder is traversed, which provides more accurate measurements. 
     V. Determining the Current Connection Speed Based Upon the Amount of Data Received within a Specified Time 
     According to another embodiment of the invention, the current connection speed between client  104  and server  102  is determined based upon a measured amount of data received by client  104  within a specified time, i.e., a measuring period. The measuring period may start at different times, depending upon a particular implementation, and the approach is not limited to the measuring period starting at any particular time. For example, the measuring period may start when client  104  requests a version  116 ,  118 ,  120  of the data. As another example, to eliminate latencies associated with server  102 , which may be highly variable, the measuring period may start when client  104  receives the first data contained in a requested version  116 ,  118 ,  120  of the data. As another example, the measuring period may start after any portion of a requested version  116 ,  118 ,  120  of the data has been received, so long as the requested version  116 ,  118 ,  120  of data is not completely received before the measuring period is complete. The length of the measuring period may be specified via client process  112 , or any other process and may vary, depending upon the requirements of a particular implementation. For example, the measuring period may be specified by configuration data used by client process  112 . The measuring period should be selected so that the end of the measuring period occurs before all of the data in the requested version  116 ,  118 ,  120  of data has been received. 
     Once the amount of data received during the measuring period has been counted, the current connection speed may be determined by two approaches. According to the first approach, the current connection speed is obtained by dividing the amount of data received by the measuring period. This approach provides a relatively accurate determination of the current connection speed. According to the second approach, a simple lookup is performed to determine an approximate current connection speed.  FIG. 3  depicts a table  300  that may be used with the second approach. Table  300  indicates the data rate, in bps, for three different amounts of received data, in bits, during a measuring period of 0.5 seconds. Given a number of bits of data receiving during the measuring period, table  300  may be traversed to obtain the closest data rate. For example, for up to 25,000 bits, the data rate of 50,000 bps is used. For between 25,000 and 160,000 bits, the data rate of 320,000 bps is used. For more than 160,000 bits, the data rate of 2,000,000 bps is used. This lookup approach avoids having to perform the calculation of the first approach, albeit with the consequence of a less accurate current connection speed. 
     VI. Determining Whether a Different Version of Data should be Requested 
     Once the current connection speed has been determined, a determination is made whether a different version of data should be requested. This generally involves identifying a version of data that best corresponds to the current connection speed, and then determining whether this is the version of data currently being received. If they are different, then the version of data that best corresponds to the current connection speed is requested. 
     For example, table  200  identifies three versions  116 ,  118 ,  120  of data that best correspond to each of the three connection speeds. Thus, if using the test ladder as previously described herein, a determination is made that the current connection speed is 50,000 bps or less, then VERSION 1 is the version of data that best corresponds to the current connection speed. If the current connection speed is greater than 50,000 bps but less than 320,000 bps, then VERSION 2 is the version of data that best corresponds to the current connection speed. If the current connection speed is greater than 320,000 bps, then VERSION 3 is the version of data that best corresponds to the current connection speed. A similar approach may be used with table  300  when the current connection speed is determined by measuring the amount of data received by client  104  during a specified time. 
     Once the version of data that best corresponds to the current connection speed has been identified, this version is compared to the version currently being received to determine whether a different version should be requested. If the two versions are the same, then a different version does not need to be requested. If they are different, then the version that best corresponds to the current connection speed is requested. For example, suppose that client  104  initially requested and is currently receiving VERSION 1 of the data from server  102 . Suppose further that the current connection speed is determined to be 320,000 bps. In this situation, VERSION 2 of the data is the version that best corresponds to the current connection speed. Since VERSION 2 is not currently being received, client  104  requests VERSION 2 of the data from server  102 . 
     It should be noted that although in this example a higher resolution version was requested, in some situations the selection process may result in a lower resolution version being selected. This may occur, for example, if a default selection was not appropriate for a current connection speed. As another example, the current connection speed may be different than a prior connection speed on which the initial version selection was made. 
     VII. Operational Example 
       FIG. 4  is a flow diagram  400  that depicts and operation example of the approach described herein for downloading data using automatic bandwidth detection. In step  400 , an initial version of data is selected. For example, suppose that an initial selection is made for VERSION 1 of data based upon client  104  historically receiving data from server  102  over communications link  106  at dial up connection speeds. 
     In step  404 , client requests VERSION 1 of the data from server  102 . In step  406 , client  104  begins receiving VERSION 1 of the data and determines at least an approximate current connection speed based upon the rate at which at least a portion of VERSION 1 of the data is received. For example, suppose that communications link  106  has been changed to a cable modem connection. Using the approaches described herein, a determination is made that the current connection speed is now greater than 2,000,000 bps. The current connection speed may be stored in storage  114  for use in future initial selection determinations as described herein. 
     In step  408 , client  104  determines whether a different version of the data is to be requested. VERSION 3 of the data is selected as the best version that corresponds to the current connection speed of 2,000,000 bps. The selected version is compared to the current version to determine whether a different version should be requested. In the present example, since the selected version of data VERSION 3 is different than the current version of data VERSION 1, a determination is made that a different version of data, i.e., VERSION 3, should be requested. In step  410 , client  104  requests VERSION 3 from server  102 . 
     VIII. Streaming Data Applications 
     In conventional client/server arrangements, a server provides all of the requested data to a client as quickly as possible, given loading and bandwidth constraints. For example, in the context of the Internet, an HTTP server typically transfers the entire contents of a file that corresponds to the URL requested by the client in the HTTP GET request. In streaming data applications, data is provided by a server to a client according to a specified streaming rate. The specified streaming rate is typically based upon the natural rate of the media. Thus, for streaming data applications, a measurement of the rate at which data is received at a client is not necessarily indicative of the connection speed between the client and a server, because the data is intentionally being transmitted at a slower rate. 
     Therefore, according to one embodiment of the invention, for streaming data applications, the approaches described herein are used during setup negotiation before the actual streaming of data begins. Most streaming data protocols provide an extension mechanism that can be used for this purpose. For example, the Real Time Streaming Protocol (RTSP) provides and OPTIONS request that can be used by a client to request an amount of pseudo-random data to be returned in the OPTIONS response message. This option can be used to conduct the test ladder of bandwidth tests with successive OPTIONS requests on an RTSP connection. Alternatively, instead of using an extension mechanism, a set of test files may be created and iteratively requested to test the connection speed. 
     IX. Implementation Mechanisms 
     The approach described herein for downloading data provides for an improved user experience by automatically selecting a version of data to download based upon the current connection speed. This allows the user to enjoy the highest resolution version given their current connection speed without having to be involved in the process. Furthermore, the approach may be implemented transparent to users. For example, the approach may be implemented in a media player in a manner such that the user is not aware that the media player selected a particular version of data, e.g., a movie or video, based upon automatic bandwidth detection as described herein. The approach may be a configurable option in a media player. The approach allows a version selection to be made quickly so that delays attributable to requesting a different version of the same data are not noticed by a user. For example, the portion sizes in the test ladder may be made small and the measuring period made short so that the determination of whether a different version of data should be requested can be made quickly. This allows the version of data to be optimized for the current connection speed with minimal adverse impact on the user experience. 
     The approach may be implemented on a request-by-request basis, or less frequently, depending upon the particular implementation. For example, once the approach has been implemented, the estimated connection speed may be re-used to select versions of data for other requests using the same or similar connections, as described herein. The estimated connection speed may be re-determined after a specified number of requests, after a specified amount of time, or based upon other criteria. Re-determining the estimated connection speed is useful for mobile devices that experience varying connection speeds. 
     Although the approach has been depicted in the figures and described herein in the context of downloading data from server  102  to client  104 , the invention is not limited to this context and is applicable to exchanging data between any two entities of any type. 
     Embodiments of the invention may be implemented in any process, mechanism or computer architecture and the approach is not limited to any particular implementation or context. For purposes of example,  FIG. 5  is a block diagram that illustrates a computer system  500  upon which an embodiment of the invention may be implemented. Computer system  500  includes a bus  502  or other communication mechanism for communicating information, and a processor  504  coupled with bus  502  for processing information. Computer system  500  also includes a main memory  506 , such as a random access memory (RAM) or other dynamic storage device, coupled to bus  502  for storing information and instructions to be executed by processor  504 . Main memory  506  also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor  504 . Computer system  500  further includes a read only memory (ROM)  508  or other static storage device coupled to bus  502  for storing static information and instructions for processor  504 . A storage device  510 , such as a magnetic disk or optical disk, is provided and coupled to bus  502  for storing information and instructions. 
     Computer system  500  may be coupled via bus  502  to a display  512 , such as a cathode ray tube (CRT), for displaying information to a computer user. An input device  514 , including alphanumeric and other keys, is coupled to bus  502  for communicating information and command selections to processor  504 . Another type of user input device is cursor control  516 , such as a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor  504  and for controlling cursor movement on display  512 . This input device typically has two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that allows the device to specify positions in a plane. 
     The invention is related to the use of computer system  500  for implementing the techniques described herein. According to one embodiment of the invention, those techniques are performed by computer system  500  in response to processor  504  executing one or more sequences of one or more instructions contained in main memory  506 . Such instructions may be read into main memory  506  from another machine-readable medium, such as storage device  510 . Execution of the sequences of instructions contained in main memory  506  causes processor  504  to perform the process steps described herein. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions to implement the invention. Thus, embodiments of the invention are not limited to any specific combination of hardware circuitry and software. 
     The term “machine-readable medium” as used herein refers to any medium that participates in providing data that causes a machine to operation in a specific fashion. In an embodiment implemented using computer system  500 , various machine-readable media are involved, for example, in providing instructions to processor  504  for execution. Such a medium may take many forms, including but not limited to, non-volatile media, volatile media, and transmission media. Non-volatile media includes, for example, optical or magnetic disks, such as storage device  510 . Volatile media includes dynamic memory, such as main memory  506 . Transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise bus  502 . Transmission media can also take the form of acoustic or light waves, such as those generated during radio-wave and infra-red data communications. 
     Common forms of machine-readable media include, for example, a floppy disk, a flexible disk, hard disk, magnetic tape, or any other magnetic medium, a CD-ROM, any other optical medium, punchcards, papertape, any other physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, any other memory chip or cartridge, a carrier wave as described hereinafter, or any other medium from which a computer can read. 
     Various forms of machine-readable media may be involved in carrying one or more sequences of one or more instructions to processor  504  for execution. For example, the instructions may initially be carried on a magnetic disk of a remote computer. The remote computer can load the instructions into its dynamic memory and send the instructions over a telephone line using a modem. A modem local to computer system  500  can receive the data on the telephone line and use an infra-red transmitter to convert the data to an infra-red signal. An infra-red detector can receive the data carried in the infra-red signal and appropriate circuitry can place the data on bus  502 . Bus  502  carries the data to main memory  506 , from which processor  504  retrieves and executes the instructions. The instructions received by main memory  506  may optionally be stored on storage device  510  either before or after execution by processor  504 . 
     Computer system  500  also includes a communication interface  518  coupled to bus  502 . Communication interface  518  provides a two-way data communication coupling to a network link  520  that is connected to a local network  522 . For example, communication interface  518  may be an integrated services digital network (ISDN) card or a modem to provide a data communication connection to a corresponding type of telephone line. As another example, communication interface  518  may be a local area network (LAN) card to provide a data communication connection to a compatible LAN. Wireless links may also be implemented. In any such implementation, communication interface  518  sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information. 
     Network link  520  typically provides data communication through one or more networks to other data devices. For example, network link  520  may provide a connection through local network  522  to a host computer  524  or to data equipment operated by an Internet Service Provider (ISP)  526 . ISP  526  in turn provides data communication services through the world wide packet data communication network now commonly referred to as the “Internet”  528 . Local network  522  and Internet  528  both use electrical, electromagnetic or optical signals that carry digital data streams. The signals through the various networks and the signals on network link  520  and through communication interface  518 , which carry the digital data to and from computer system  500 , are exemplary forms of carrier waves transporting the information. 
     Computer system  500  can send messages and receive data, including program code, through the network(s), network link  520  and communication interface  518 . In the Internet example, a server  530  might transmit a requested code for an application program through Internet  528 , ISP  526 , local network  522  and communication interface  518 . The received code may be executed by processor  504  as it is received, and/or stored in storage device  510 , or other non-volatile storage for later execution. In this manner, computer system  500  may obtain application code in the form of a carrier wave. 
     In the foregoing specification, embodiments of the invention have been described with reference to numerous specific details that may vary from implementation to implementation. Thus, the sole and exclusive indicator of what is, and is intended by the applicants to be, the invention is the set of claims that issue from this application, in the specific form in which such claims issue, including any subsequent correction. Hence, no limitation, element, property, feature, advantage or attribute that is not expressly recited in a claim should limit the scope of such claim in any way. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.

Metadata:
Filing Date: 20130102
Publication Date: 20160913
Grant Date: 20160913
Priority Date: 20050323
Inventors: MACKIE DAVID J.
Assignee: APPLE INC
CPC Classifications: [{"code": "H04L67/10", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06F17/30905", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04W4/18", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L67/06", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F16/9577", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L67/10", "inventive": true, "first": true, "tree": "[]"}, {"code": "H04W4/18", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F16/9577", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04L67/06", "inventive": true, "first": false, "tree": "[]"}, {"code": "H04W4/18", "inventive": true, "first": true, "tree": "[]"}, {"code": "H04L67/06", "inventive": true, "first": false, "tree": "[]"}]
Family ID: 47428008