Buffering data over high bandwidth networks

By using buffers and caches in streaming devices, the problem of download speed changes and connection loss in high-bandwidth networks is solved, and the continuity and integrity of data output is achieved, reducing the interruption of streams.

CN119815113APending Publication Date: 2025-04-11DISNEY ENTERPRISES INC
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
CN202510126188.2
Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
Priority Date
2020-11-04
Filing Date
2021-11-03
Publication Date
2025-04-11

AI Technical Summary

Technical Problem

In high bandwidth networks, changes in download speed and intermittent or burst connection loss lead to buffering and leakage of media output.

Method used

Data is processed at different download speeds by using buffers and caches in streaming devices. The specific steps include: downloading the first part of the data to the buffer at a first download speed and outputting the part of the data; when the device downloads the data at a second download speed greater than the first download speed, downloading the subsequent part of the data using the cache, and outputting the data from the cache when the buffer is empty.

Benefits of technology

Efficiently use high-bandwidth connections to download additional data, reduce stream interruption, improve operation of streaming system, and ensure the continuity and integrity of data output.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN119815113A_ABST
    Figure CN119815113A_ABST
Patent Text Reader

Abstract

The invention discloses buffering data over a high bandwidth network. Techniques for buffering data over a high bandwidth network are provided. And downloading the first part of data into the buffer at the first downloading speed. The first portion of data is output from the buffer. When it is determined that data is being downloaded at a second downloading speed greater than the first downloading speed, it is determined that a cache is used for one or more subsequent portions of data, and a second portion of data is downloaded into the cache. And when it is determined that the buffer is empty, outputting the second part of data from the cache.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] This application is a divisional application of the invention patent application with the application date of November 3, 2021, application number 202111292789.9, and name "Buffering Data on High-Bandwidth Networks". Technical Field

[0002] The present disclosure generally relates to buffering data over a high bandwidth network. Background Art

[0003] Some systems download media in discrete segments. Each segment is then output sequentially. However, if the download speed varies significantly, the streaming device may select a non-optimal bit rate for the next segment(s). When intermittent or bursty connection loss occurs, the next segment(s) may not be downloaded in time, resulting in buffering and dropouts in the media output. Summary of the invention

[0004] According to a first aspect of the present disclosure, a method is provided, comprising: downloading a first portion of data into a buffer at a first download speed through a device; outputting the first portion of data from the buffer; when determining that the device is downloading data at a second download speed greater than the first download speed: determining to use a cache for one or more subsequent portions of data; and downloading a second portion of data into the cache; and when determining that the buffer is empty, outputting the second portion of data from the cache.

[0005] According to a second aspect of the present disclosure, a non-transitory computer-readable medium is provided, comprising a computer program code, which, when executed by the operation of one or more computer processors, performs operations including: downloading a first portion of data into a buffer at a first download speed through a device; outputting the first portion of data from the buffer; upon determining that the device is downloading data at a second download speed greater than the first download speed: determining to use a cache for one or more subsequent portions of data; and downloading a second portion of data into the cache; and upon determining that the buffer is empty, outputting the second portion of data from the cache.

[0006] According to a third aspect of the present disclosure, a system is provided, comprising: one or more computer processors; and a storage medium containing a program, wherein the program performs operations when executed by the one or more computer processors, the operations comprising: downloading a first portion of data into a buffer at a first download speed through the system; outputting the first portion of data from the buffer; upon determining that the system is downloading data at a second download speed greater than the first download speed: determining to use a cache for one or more subsequent portions of data; and downloading a second portion of data into the cache; and upon determining that the buffer is empty, outputting the second portion of data from the cache.

[0007] According to a fourth aspect of the present disclosure, a method is provided, comprising: downloading a first portion of data into a buffer at a first download speed through a device; outputting the first portion of data from the buffer; when determining that the device is downloading data at a second download speed greater than the first download speed: expanding the size of the buffer; and downloading a second portion of data into the buffer. BRIEF DESCRIPTION OF THE DRAWINGS

[0008] Thus a more particular description of the embodiments described herein, which have been briefly summarized above, and in which the above-described aspects are derived and can be understood in detail, may be had by reference to the drawings.

[0009] It is to be noted, however, that the appended drawings illustrate typical embodiments and are therefore not to be considered limiting; other equally effective embodiments are also contemplated.

[0010] Figure 1 A system including a streaming device configured to adaptively buffer data over a network connection having a dynamic bandwidth is depicted according to some embodiments disclosed herein.

[0011] Figure 2 A system including a streaming device configured to utilize buffers and caches to dynamically buffer data over a network connection having a dynamic bandwidth is depicted according to some embodiments disclosed herein.

[0012] Figure 3 is a flow chart illustrating a method of dynamically responding to switching network connections according to some embodiments disclosed herein.

[0013] Figure 4 is a flow chart illustrating a method for streaming media segments under dynamic network conditions according to some embodiments disclosed herein.

[0014] Figure 5 is a flow chart illustrating a method for downloading data under dynamic network conditions according to some embodiments disclosed herein.

[0015] Fig. 6A and Figure 6B is a block diagram of a computing device configured to stream data under dynamic network conditions according to some embodiments disclosed herein. DETAILED DESCRIPTION

[0016] In various systems, data is downloaded and buffered into memory for immediate or subsequent output. For example, video can be downloaded into a buffer in memory and output from the buffer for display to stream video data. The use of a buffer allows the system to pre-download some data before outputting the data to prevent stutters or pauses in the output. For example, some systems download media in discrete segments, storing each segment in a buffer. Each segment is then output from the buffer in sequence.

[0017] Some systems utilize adaptive bitrate solutions to improve the streaming process. In such systems, the streaming platform provides data streams at various bitrates (e.g., ten megabits per second, fifteen megabits per second, etc.). The streaming device can then select the bitrate to download based on its own network conditions. For example, the streaming device can measure the speed at which a video file is being downloaded to determine the appropriate bitrate to require when downloading the next portion of the video.

[0018] However, if the download speed varies significantly, the streaming device may select a non-optimal bitrate for the next segment(s). For example, the device may normally utilize the first network connection to download the media, but use a higher speed to receive intermittent connections. If these higher speeds are used to select the next bitrate, the device will select a higher bitrate that cannot be maintained on the original connection speed.

[0019] Embodiments of the present disclosure provide systems, devices, and methods responsive to dynamic and switching connections to improve the operation of devices that use dynamic networks to download or upload data. In the present disclosure, media streaming is used in some examples. However, it should be understood that embodiments of the present disclosure are easily applicable to various uses involving downloading or uploading data.

[0020] In some embodiments, a computing device may download (or upload) data using a network connection at a certain initial speed. When increased bandwidth becomes available (either on the same connection or on a second network connection), the device may utilize this burst of speed to download (or upload) additional data beyond what would otherwise be in the time frame. In one embodiment, if a device is utilizing a certain initial bit rate, quality, or other indicator of the amount of data being downloaded or uploaded, the device continues to use the same bit rate to ensure that the process is not interrupted when the higher speed connection is no longer available.

[0021] For example, a mobile device may utilize a 4G connection to download media segments in a streaming environment. The device may select a streaming bitrate based on the speed (also referred to as bandwidth) of the 4G connection. More and more high-speed networks (such as mm5G) have been deployed. These networks typically provide very high bandwidth, but with intermittent or bursty connections. For example, mm5G connections often require line of sight to a tower, which can lead to the instability and temporary nature of such high-bandwidth connections. Therefore, such higher speed connections should not be utilized when the bitrate required for subsequent segments is determined. In addition, since memory buffers are often quite limited, high-speed connections may be wasted because the buffers fill up quickly.

[0022] In an embodiment of the present disclosure, a streaming device can take advantage of such intermittent connections by allocating a separate buffer or by temporarily increasing the buffer size to allow the high-speed connection to be used to download additional data. This allows the device to take advantage of intermittent high-speed connections, which reduces interruptions to the stream and improves the operation of the entire streaming system.

[0023] Figure 1 A system 100 is depicted that includes a streaming device 105 configured to adaptively buffer data over a network connection with dynamic bandwidth according to some embodiments disclosed herein. In the illustrated embodiment, the streaming device 105 is communicatively coupled to a content server 115 via one or more networks 110A-110B. In one embodiment, the network 110 provides a wireless connection. In at least one embodiment, the streaming device 105 is a mobile device, such as a smartphone, tablet, laptop, or other device that can utilize a wireless network to download or stream data.

[0024] In some embodiments, networks 110A-110B may be associated with different bandwidths or other characteristics. For example, in one embodiment, network 110A may be a 4G or 3G cellular network with relatively limited bandwidth (and therefore relatively limited download speeds), while network 110B is a higher bandwidth network such as a WiFi connection or a 5G network.

[0025] Although two networks 110A-110B are depicted for conceptual clarity, embodiments of the present disclosure may utilize any number of discrete networks, including a single network. For example, embodiments of the present disclosure may be used to allow the streaming device 105 to respond to dynamic network conditions when switching between three or more networks. Similarly, embodiments disclosed herein may be used to allow the streaming device 105 to respond to switching conditions on a single network connection.

[0026] In one embodiment, the higher bandwidth network 110B may be relatively intermittent or intermittent and therefore not reliably usable by the streaming device 105. However, when available, the network 110B may be useful for downloading large amounts of data in a short period of time due to the higher bandwidth. In some embodiments, the streaming device 105 may generally download data (e.g., video data) from the content server 115 via the network 110A. In some embodiments, the streaming device 105 does this using adaptive bitrate logic to select a bitrate variant to request from the content server 115 based at least in part on the available bandwidth or download speed via the network 110A.

[0027] In some embodiments, the streaming device 105 temporarily buffers the downloaded data in a buffer in memory. The media is then output from the buffer. In many embodiments, the buffer has a relatively limited size. Therefore, the streaming device 105 typically downloads partial data (e.g., media segments) via the network 110A just before the data needs to be output / displayed.

[0028] In one embodiment, if the streaming device 105 determines that a higher bandwidth connection is available (e.g., via network 110B), it may dynamically respond to take advantage of these higher speeds. In one embodiment, the streaming device 105 determines that the higher speed is available based on determining that the device's current connection is classified or marked as a predefined high-speed connection. For example, when connected via network 110A, the streaming device 105 connection may be classified as "4G" while network 110B is classified as "5G".

[0029] In some embodiments, the streaming device 105 identifies a faster connection by evaluating how fast data is currently being downloaded from the content server 115 or other source. For example, in one such embodiment, the streaming device 105 monitors its current download speed (e.g., for the current data segment or portion) and the historical download speed over a sliding window (e.g., within the last sixty seconds, or the last ten segments or portions of data). If the current download speed exceeds the historical speed according to some predefined criteria, the streaming device 105 can determine that it is on a high-bandwidth connection. In embodiments, the criteria can include a threshold multiple (e.g., at least two times faster), a minimum speed (e.g., at least one hundred megabits per second), a threshold increase (e.g., at least fifty megabits per second faster than the historical speed), etc.

[0030] In at least one embodiment, the streaming device 105 can identify a high-bandwidth connection based on a previous connection. For example, in one such embodiment, the streaming device 105 can utilize a location service to identify and record its current location whenever a high-bandwidth network 110B is available. Subsequently, based on the current location or movement of the streaming device 105, the streaming device 105 can determine that the network 110B may be available at some point in the future (e.g., within ten seconds or some other predefined time). In response, the streaming device 105 can begin preparing for a higher speed connection, as discussed below.

[0031] In one embodiment, when the streaming device 105 determines that a higher bandwidth connection is being used, it begins downloading data from the content server 115 into an unrestricted cache or buffer. In some embodiments, the cache is located in a secondary memory of the streaming device 105, commonly referred to as "secondary memory" or "storage" (e.g., hard disk drive (HD), solid state drive (SSD), ROM, flash memory, fixed or removable storage media, etc.), while the original buffer is located in the main memory of the streaming device 105, commonly referred to as "main memory" or simply "memory" (e.g., random access memory (RAM)). As commonly used and known in the art, the term "memory" may refer to a device described herein as "main memory", while the term "storage" may refer to a device described herein as "secondary memory". Typically, the main memory is tightly coupled to the system's (one or more) processing units (e.g., RAM), allowing for faster access times. However, this direct coupling often requires that the size of the main memory is relatively limited. In contrast, the secondary memory typically lacks this direct access compared to the main memory, resulting in slower access times. However, the secondary memory can typically be significantly larger than the main memory. In another embodiment, if sufficient space is available in main memory (eg, in a high memory system), the streaming device 105 may expand the size of the memory buffer, or establish a second buffer or cache in main memory.

[0032] In some embodiments, the streaming device 105 downloads data into the cache at the same bit rate as previously used to download the data. For example, if the streaming device 105 initially streams from the content server 115 using a bit rate of ten megabits per second, the streaming device 105 will continue to request ten megabits for streaming even if the network 110B is capable of supporting a much higher bit rate.

[0033] By downloading this data into an uncapped buffer, the streaming device 105 can take advantage of the high speed and download additional data beyond what would otherwise be downloaded. For example, the streaming device 105 can continue to download as much data as possible into the buffer using the faster network 110B, rather than buffering a capped amount of data (e.g., the next 60 seconds of video, or the next five segments).

[0034] In one embodiment, when the original memory buffer is empty (e.g., all previously downloaded segments have been output), the streaming device 105 will start outputting data from the cache. This may include transferring data to and outputting data from memory, or directly outputting data from storage.

[0035] In some embodiments, the streaming device 105 may continue to download data into a cache (rather than an original buffer) until some predefined criteria is met. This may include determining that the streaming device 105 has returned to the original network 110A. For example, the streaming device 105 may check the label or classification of its current connection. In another embodiment, the streaming device 105 may continue to monitor the download speed, as discussed above, to detect whether to fall back to the original connection (e.g., by comparing the current speed to a sliding window of historical speeds over the past N segments or seconds).

[0036] In one embodiment, the streaming device 105 may then continue to output data from the cache until the cache becomes empty (e.g., until all downloaded data has been output). In one embodiment, when the cache is close to being empty (e.g., when the amount of data left to be output from the cache is below a predefined threshold), the streaming device 105 may return to the original streaming paradigm.

[0037] In some embodiments, the streaming device 105 is downloading or streaming from a predefined pool of data. For example, segments or portions of the data may correspond in their entirety to a given episode, movie, podcast, or other media. In one embodiment, if the streaming device 105 downloads all available data into a cache before the network 110B is lost (e.g., if the entire episode has already been downloaded), it may stop downloading additional data and simply output the data from the cache.

[0038] In some embodiments, the streaming device 105 may maintain a cache of the downloads to allow the streaming device 105 to subsequently output the media even if all network connections are lost. In another embodiment, the streaming device 105 may allow access to the cache only while the streaming session remains active. In one such embodiment, if the user exits the stream, the streaming device 105 may delete the cached data or otherwise mark it as unavailable, requiring the streaming device 105 to re-stream the media.

[0039] In some embodiments, the streaming device 105 is configured to download additional data from other streams upon completion of the first stream. For example, if the streaming device 105 is streaming a given episode from a program, the streaming device 105 may begin downloading the next episode if the given episode download has been completed. This may allow the streaming device 105 to pre-fetch additional data. In one embodiment, the streaming device 105 may use any suitable logic to determine which data stream to download. For example, in one embodiment, the streaming device 105 or content server 115 utilizes a predefined media order or list (e.g., a list of episodes) and requests / provides the next one. In another embodiment, the streaming device 105 or content server 115 uses other customized logic for suggesting media to the user to select the next data to download.

[0040] In at least one embodiment, the streaming device 105 can track whether the pre-downloaded media has actually been consumed. In some embodiments, the streaming device 105 does this by monitoring which data or segments are actually output from the cache. The streaming device 105 can transmit this information to the content server 115 or other system. This allows the content server 115 (or other system) to remember where the user left off in a given stream based on the media that was actually output, rather than just based on the data that was downloaded. Similar logic can be applied to embodiments where the streaming device 105 pre-fetches subsequent episodes or media.

[0041] In some embodiments, in addition to or instead of downloading media from the stream into the cache, the streaming device 105 can pre-fetch other predefined media. For example, in addition to or instead of pre-fetching segments of the requested media, the streaming device 105 can use the high-bandwidth network 110B to download advertisements or other predefined media into the cache. This can allow the streaming device 105 to seamlessly output the data. For example, in a live broadcast environment, there may be no media that can be pre-downloaded into the cache. However, the streaming device 105 can use a high-bandwidth connection to pre-download advertisements or other media into the cache. Then, the data can be appropriately output later. In one embodiment, the streaming device 105 can monitor which advertisements or other media are actually output / exhausted, and transmit this information to the content server 115 or other system.

[0042] In at least one embodiment, the streaming device 105 may selectively use the high-bandwidth network 110B to download additional data or variations that would not otherwise be downloaded. For example, while the streaming device 105 is streaming data at a first bit rate over the original connection, when the network 110B is available, the streaming device 105 may stream one or more segments into the cache at a higher bit rate. As another example, if the streaming device 105 is streaming audio-only media, the streaming device 105 may download some associated video into the cache when a high-bandwidth connection is available.

[0043] In some embodiments, as the streaming device 105 downloads data into the cache, the cache is allowed to grow or expand as needed. That is, the cache is uncapped. For example, while some initial size may be defined when the cache is created, the streaming device 105 may allow the cache to grow as data is downloaded until a certain predetermined maximum value is reached or until storage space is exhausted. By using an uncapped buffer for occasional high-bandwidth connections, the streaming device 105 may significantly improve the streaming environment.

[0044] Figure 2 A system 200 including a streaming device 105 configured to dynamically buffer data using a buffer and cache over a network connection with dynamic bandwidth is depicted according to some embodiments disclosed herein. In the illustrated embodiment, the streaming device 105 downloads media segments 215 from a content server 115. As shown, these segments 215 are contiguous portions of data in a predefined media stream and are downloaded and output in sequence.

[0045] In the illustrated embodiment, the streaming device 105 includes a buffer 205 and a cache 210. In at least one embodiment, the buffer 205 is located in a memory, and the cache 210 is located in a storage device. In some embodiments, the cache 210 may simply correspond to additional space in the memory. In yet another embodiment, the cache 210 is not a discrete data structure, but is implemented by extending the upper limit of the buffer 205.

[0046] In one embodiment, the buffer 205 has a finite (usually fixed) size. In the illustrated embodiment, the buffer 205 is configured to store three segments 215. In some embodiments of the present disclosure, the cache 210 is larger and configured to store additional data. In the illustrated embodiment, the cache 210 stores seven segments 215. In at least one embodiment, the cache 210 can be dynamically expanded as data is downloaded. For example, if a high bandwidth connection is still available after the cache is full, the streaming device 105 can expand the cache to allow it to grow and store more segments 215.

[0047] In an embodiment, the streaming device 105 may download segments 215 into the buffer 205 during normal use. When a segment 215 is output from the buffer 205, the segment is deleted or otherwise marked as "exhausted," allowing the streaming device 105 to download subsequent segments 215 into the buffer 205. In the illustrated embodiment, upon determining that a high-bandwidth connection is available, the streaming device 105 begins downloading subsequent segments 215 into the cache 210. That is, the streaming device 105 may download segments 215 that have not yet been fetched (whether or not they have been output) to the cache 210, rather than the buffer 205.

[0048] Once the last segment 215 in the buffer 205 (segment 215C in the illustrated embodiment) has been output, the streaming device 105 begins outputting subsequent segments 215 from the cache 210. In some embodiments, this includes sequentially transferring the segments 215 from the cache 210 to the buffer 205 or another portion of memory, and then outputting them from the memory.

[0049] In one embodiment, as long as the high-bandwidth connection remains available, the streaming device 105 continues to download segments 215 to the cache 210. If the high-bandwidth connection is no longer available and the streaming device 105 resumes using the original connection, the streaming device 105 may pause downloading until all (or substantially all) of the data in the cache 210 is exhausted.

[0050] For example, when the streaming device 105 determines that some predefined amount of data remains in the buffer 210 (e.g., three more segments 215 to be output), the streaming device 105 may initiate the original streaming process to download the subsequent segments 215 into the buffer 205. If a high-bandwidth connection becomes available again, the streaming device 105 may again begin downloading data to the buffer 210. This allows the streaming device 105 to seamlessly transition between connections with different bandwidths / speeds.

[0051] Figure 3 3 is a flow chart illustrating a method 300 of dynamically responsively switching network connections according to some embodiments disclosed herein. In one embodiment, the method 300 is performed by a streaming device, such as the streaming device 105. The method 300 begins at block 305, where the streaming device downloads data (e.g., media segments) into a buffer (e.g., in a memory) at an initial speed. For example, the streaming device may stream the segments into the buffer via a first wireless connection associated with a first bandwidth / speed. In some embodiments, the streaming device further downloads data associated with an initial bit rate (e.g., a ten-megabit stream).

[0052] Then, the method 300 continues to block 310, where the streaming device determines whether a burst connection is available. In an embodiment, a burst connection is a relatively higher bandwidth or higher speed connection that becomes available to the streaming device. For example, the burst connection may correspond to a 5G connection. In another embodiment, the burst connection may correspond to a faster download speed on the same original connection.

[0053] In one embodiment, the streaming device determines whether a burst connection is available based on a tag or classification indicated by the current connection. In another embodiment, the streaming device compares the current or most recent download speed to a historical download speed (e.g., within the previous five segments or sixty seconds). If the current speed exceeds a certain predefined threshold compared to the original speed (or abstractly, not compared to the initial speed), the streaming device may determine that a burst connection is available.

[0054] If no burst connection is available, the method 300 returns to block 305. In this manner, the streaming device continues to stream data through the buffer as usual. If the streaming device determines that a burst connection is available, the method 300 continues to block 315 where the streaming device creates a cache for downloading data via the burst connection (or determines to begin using a pre-existing cache). In one embodiment, this includes allocating some portion of memory or storage for the data. In one embodiment, the cache is larger than the buffer (or the cache will be uncapped and allowed to grow as needed).

[0055] The method 300 then proceeds to block 320 where the streaming device begins downloading data (e.g., subsequent segments of the media) into the cache using the burst connection. In an embodiment, because burst connections are associated with higher speeds or bandwidths, the streaming device can download additional segments immediately, rather than waiting until just before the additional segments need to be output. In at least one embodiment, the streaming device continues to download data associated with the same stream or bit rate. That is, if the streaming device is downloading a given stream, variant, or bit rate, the streaming device can continue to use the same stream, variant, or bit rate when downloading into the cache. This allows the streaming device to seamlessly switch back and forth between the buffer and the cache (and between the initial connection and the burst connection).

[0056] At block 325, the streaming device determines whether a burst connection is still available. If so, method 300 returns to block 320. In this way, the streaming device may continue to download data at a higher speed until a burst connection is no longer available or some other criterion is met. As discussed above, the criterion may include determining whether the entire media (e.g., an entire program) has been downloaded, etc. In at least one embodiment, the streaming device may be authorized to download some predefined maximum amount of data into the cache. For example, based on a license or some other criteria, the streaming device may be allowed to pre-download some predefined amount of data (e.g., up to fifty segments or ten minutes).

[0057] Returning to block 325, if the streaming device determines that the burst connection is no longer available, the method 300 returns to block 305 to stream the data into the buffer using the initial connection. In at least one embodiment, the streaming device may wait until the buffer is empty (or nearly empty) and immediately begin streaming at the initial rate, as discussed above.

[0058] Advantageously, the method 300 allows a streaming device to smoothly transition between different connection modes while fully utilizing temporary burst connections to pre-download data into a cache.

[0059] Figure 4 4 is a flow chart illustrating a method 400 for streaming media segments under dynamic network conditions according to some embodiments disclosed herein. In one embodiment, the method 400 is performed by a streaming device (e.g., the streaming device 105). In one embodiment, the method 400 specifically corresponds to streaming media segments (as opposed to more general data), and additional details are provided for one such embodiment. The method 400 begins at block 405, where the streaming device selects a segment bitrate for streaming.

[0060] For example, using adaptive bit rate logic, a streaming device may determine which bit rate to utilize based in part on the bandwidth available at the streaming device or the current download speed. As used herein, a given bit rate may alternatively be referred to as a "variant," "stream," or the like. In an embodiment, selecting a bit rate includes selecting a specific version or variant of the media to be downloaded. Although higher bit rates are typically associated with higher quality video / audio, they also require higher bandwidth to be reliably downloaded. Therefore, a streaming device may select a bit rate that ensures reliable streaming at the highest possible quality.

[0061] At block 410, the streaming device downloads the media segments (one or more) associated with the selected bit rate into a buffer. As discussed above, these buffered segments are then output in sequence. At block 415, the streaming device determines whether the downloaded media has been completed. For example, if the streaming device is streaming a movie, the streaming device can determine whether the last media segment in the movie has been downloaded. If so, the method 400 terminates at block 420. That is, in the illustrated embodiment, in this way, if the initial connection is still being used, the streaming device will stop downloading when it completes the current stream.

[0062] If the streaming device determines that it has not yet completed streaming the media, the method 400 continues to block 425. At block 425, the streaming device determines whether a burst connection is available, as discussed above. If a burst connection is not available, the method 400 returns to block 410. In this way, the streaming device can continue streaming data at the initially selected bit rate via the initial connection. If the streaming device determines that a burst connection is available, the method 400 continues to block 430.

[0063] At block 430, the streaming device downloads subsequent segments of the media into a cache. In one embodiment, the cache may be located in memory or any suitable location. The cache may be larger than the buffer, associated with an uncapped or unlimited size, or both. In the illustrated embodiment, while the segments may be downloaded at a higher download speed (due to the higher bandwidth of the burst connection), the streaming device continues to download the segments at the same bit rate / variant. This ensures that, in the event that the burst connection is suddenly lost (e.g., due to transient and unstable nature), subsequent segments can still be downloaded using the original connection without interruption.

[0064] At block 435, the streaming device determines whether the selected media (e.g., the episode or movie being streamed) has been downloaded. If not, the method 400 returns to block 445. If the streaming device has finished downloading the current media, the method 400 proceeds to block 440, where the streaming device identifies the next media. In one embodiment, the streaming device does this by querying a content server or provider. The content server can then determine which media should be streamed next (e.g., using a defined media order, using a predictive algorithm to recommend media to the user, etc.). This allows the streaming device to pre-cache media for the next stream that the user may wish to view. The method 400 then continues to block 445.

[0065] At block 445, the streaming device determines whether the burst connection is still available. If so, the method 400 returns to block 430 to continue downloading the segments into the cache at an increased rate. If the burst connection is no longer available, the method 400 returns to block 410 to continue streaming using the original connection. In at least one embodiment, as discussed above, the streaming device can pause downloading until the cache has been exhausted.

[0066] Additionally, in some embodiments, if the streaming device has already begun downloading a separate media stream (e.g., the next episode in a series), the method 400 may terminate instead of continuing to download segments from the next media unless the streaming device has actually begun consuming the next media. That is, unless the user has completed the first media and started outputting the second media, the streaming device will not continue downloading the second media on the initial connection.

[0067] Figure 5 is a flow chart illustrating a method 500 for downloading data under dynamic network conditions according to some embodiments disclosed herein. The method 500 begins at block 505, where a device (e.g., a streaming device 105) downloads a first portion of data into a buffer at a first download speed. At block 510, the device outputs the first portion of data from the buffer. Then, the method 500 continues to block 515, where, upon determining that the device is downloading data at a second download speed greater than the first download speed, the device determines to use a cache for one or more subsequent portions of data, and downloads a second portion of data into the cache. At block 520, upon determining that the buffer is empty, the device outputs the second portion of data from the cache.

[0068] Fig. 6A600A is a block diagram of a computing device 600A configured to stream data under dynamic network conditions according to some embodiments disclosed herein. In one embodiment, the computing device 600A is a streaming device 105. Although depicted as a physical device, in an embodiment, the computing device 600A can be implemented as a virtual device or service, or across multiple devices (e.g., in a cloud environment). As shown, the computing device 600A includes a processor 605, a memory 610, a storage device 615, an I / O interface 620, and a network interface 625. In the illustrated embodiment, the processor 605 retrieves and executes programming instructions stored in the memory 610, and stores and retrieves application data residing in the storage device 615. The processor 605 generally represents a single CPU, a GPU, a CPU and a GPU, multiple CPUs, multiple GPUs, a single CPU or GPU with multiple processing cores, etc. A memory 610 is generally included to represent a random access memory. Storage device 615 can be any combination of memory or storage components, including (but not limited to) disk drives, flash-based storage devices, etc., and can include fixed storage devices, removable storage devices, or a combination of both, such as, fixed disk drives, removable memory cards, cache, optical storage devices, network attached storage devices (NAS), or storage area networks (SAN).

[0069] In some embodiments, I / O devices 635 (such as a mouse, keyboard, monitor, touch screen, etc.) are connected via I / O interface 620. In addition, via network interface 625, computing device 600A may be communicatively coupled (directly or indirectly) with one or more other devices and components, such as content servers, via one or more networks.

[0070] In the illustrated embodiment, storage device 615 includes data cache 650A. In an embodiment, data cache 650A is generally used to store data portions downloaded at burst speeds, as discussed above. In some embodiments, data cache 650A is unbounded because it can be expanded to store any amount of data. For example, as long as a burst connection is available, computing device 600A can continue to download segments into data cache 650A, and the data cache increases as needed.

[0071] As shown, the memory 610 includes a data buffer 645. The streaming application 640 is depicted as residing in the storage device 615. Although depicted as software, in embodiments, the functions of the streaming application 640 can be implemented using hardware, software, or a combination of hardware and software. When the processor executes the instructions of the streaming application 640 during runtime, the memory 610 can be used to temporarily store the streaming application 640. In one embodiment, the size of the data buffer 645 is fixed. The streaming application 640 is generally configured to perform one or more embodiments disclosed herein. For example, when a normal connection is available, the streaming application 640 can stream data (e.g., from a content server) into the data buffer 645. When burst speed is available, the streaming application 640 can begin streaming data into the data cache 650A.

[0072] Figure 6B 6 is a block diagram of a computing device 600B configured to stream data under dynamic network conditions according to some embodiments disclosed herein. In the illustrated embodiment, the computing device 600B includes both a data buffer 645 and a data cache 650B in the memory 610, rather than using the storage device 615 to host the cache. In one embodiment, the streaming application 640 may stream data into the data buffer 645 as discussed above. When burst speeds are available, in the illustrated embodiment, the streaming application 640 streams data into the data cache 650B in the memory 610. That is, the system allocates a cache in the memory 610 rather than allocating a cache in the storage device 615. In at least one embodiment, the streaming application 640 may alternatively expand the size of the data buffer 645 when downloading new data at a burst speed, rather than allocating a separate data cache 650B.

[0073] In one embodiment, the streaming application 640 downloads data into the data buffer 650B until the burst connection is no longer available. In some embodiments, if the data buffer 650B reaches a predetermined size (that is, if a predetermined amount of data has been downloaded into the data buffer 650B), the streaming application 640 may allocate another buffer in the storage device 615 to continue downloading data.

[0074] In the present disclosure, various embodiments are referred to. However, it should be understood that the present disclosure is not limited to the embodiments described in detail. On the contrary, whether or not it is related to different embodiments, any combination of the following features and elements can be thought of to realize and practice the teachings provided herein. In addition, when the elements of the embodiments are described in the form of "at least one of A and B", it should be understood that the embodiments are considered to exclusively include element A, exclusively include element B, and include element A and element B, respectively. In addition, although some embodiments can achieve advantages that are superior to other possible solutions or superior to the prior art, the present disclosure does not limit whether a specific advantage is achieved by a given embodiment. Therefore, the aspects, features, embodiments, and advantages disclosed herein are only illustrative and are not considered to be elements or limitations of the appended claims, unless clearly stated in the claims. Similarly, reference to "the present invention" should not be interpreted as a summary of any inventive subject matter disclosed herein, and should not be considered to be elements or limitations of the appended claims, unless clearly stated in the claims.

[0075] As will be appreciated by those skilled in the art, the embodiments disclosed herein may be embodied as systems, methods, or computer program products. Therefore, the embodiments may take the form of complete hardware embodiments, complete software embodiments (including firmware, resident software, microcode, etc.), or embodiments combining software and hardware aspects, which may generally be collectively referred to herein as "circuits," "modules," or "systems." In addition, the embodiments described herein may take the form of computer program products contained in one or more computer-readable media, which contain computer-readable program code.

[0076] Program code embodied on a computer readable medium may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, RF, etc., or any suitable combination of the foregoing.

[0077] Computer program code for performing the operation of the embodiments of the present disclosure may be written in any combination of one or more programming languages, including object-oriented programming languages ​​such as Java, Smalltalk, C++, and traditional procedural programming languages ​​such as "C" programming language or similar programming languages. The program code may be executed entirely on a user's computer, partially on a user's computer, as an independent software package, partially on a user's computer and partially on a remote computer, or entirely on a remote computer or server. In the latter case, the remote computer may be connected to the user's computer through any type of network including a local area network (LAN) or a wide area network (WAN), or may be connected to an external computer (e.g., via the Internet using an Internet service provider).

[0078] Various aspects of the present disclosure are described herein with reference to the flowcharts or block diagrams of the methods, devices (systems) and computer program products of the embodiments proposed in the present disclosure. It should be understood that each box of the flowchart or block diagram and the combination of boxes in the flowchart or block diagram can be implemented by computer program instructions. These computer program instructions can be provided to a processor of a general-purpose computer, a special-purpose computer or other programmable data processing device to produce a machine, so that the instructions executed by the processor of the computer or other programmable data processing device create a method for implementing the function / behavior specified in the box of the flowchart or block diagram.

[0079] These computer program instructions may also be stored in a computer-readable medium, which may direct a computer, other programmable data processing apparatus, or other device to operate in a specific manner so that the instructions stored in the computer-readable medium produce an article of manufacture including instructions for implementing the functions / behaviors specified in the blocks of the flowchart or block diagram.

[0080] Computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other device so that a series of operational steps executed on the computer, other programmable apparatus, or other device produces a computer-implemented process, so that the instructions executed on the computer, other programmable data processing apparatus, or other device provide a process for implementing the functions / actions specified in the blocks of the flowchart or block diagram.

[0081] The flowcharts and block diagrams in the figure illustrate the possible architecture, functions and operations of the system, method and computer program product according to various embodiments of the present disclosure. In this regard, each square block in the flowchart or block diagram can represent a module, a fragment or a part of the code including one or more executable instructions for implementing the specified logical function. It should also be noted that in some alternative embodiments, the functions marked in the square blocks may not occur in the order marked in the figure. For example, depending on the functions involved, two consecutively shown square blocks can actually be executed substantially at the same time, or sometimes these square blocks can be executed in reverse order or out of order. It should also be noted that each square block of the block diagram or flowchart and the combination of the square blocks in the block diagram or flowchart can be implemented by a dedicated hardware-based system that performs a specified function or action or by a combination of dedicated hardware and computer instructions.

[0082] While the foregoing is directed to embodiments of the present disclosure, other and further embodiments of the disclosure may be devised without departing from the basic scope of the disclosure, and the scope of the disclosure is determined by the claims that follow.

Claims

1. A method comprising: downloading, by the device, a first portion of data into a buffer via a first network connection at a first download speed; Create a cache with an initial size; upon determining that the device is downloading data via a second network connection at a second download speed greater than the first download speed, downloading a second portion of data into the cache via the second network connection; as well as In response to determining that the fullness of the cache satisfies one or more criteria, the cache is expanded.

2. The method according to claim 1, wherein: The first portion of data and the second portion of data are a plurality of portion of data associated with a first data stream, and the method further includes: When it is determined that the device is downloading data at the second download speed, all subsequent partial data of the plurality of partial data are downloaded to the cache.

3. The method according to claim 2, further comprising: When it is determined that all the partial data of the plurality of partial data are downloaded to the cache: identifying a second data stream based at least in part on the first data stream; and At least a portion of data associated with the second data flow is downloaded into the cache.

4. The method according to claim 1, wherein: Determining that the device is downloading data at the second download speed includes determining that the second download speed exceeds a predefined threshold compared to the first download speed.

5. The method according to claim 4, wherein: Determining that the second download speed exceeds a predefined threshold includes comparing the second download speed with a historical download speed using a sliding window.

6. The method according to claim 1, wherein: The second portion of data is downloaded to the cache at the second download speed, and wherein both the first portion of data and the second portion of data are associated with a first bit rate of a plurality of bit rates.

7. The method according to claim 1, further comprising: In response to determining that a download session associated with the first portion of data and the second portion of data has ended, access to the data in the cache is blocked.

8. The method according to claim 7, wherein: Determining that the download session has ended includes determining that the device is not downloading data through the first network connection or through the second network connection, and the method further includes: In response to determining that the device is downloading data via at least one of the first network connection or the second network connection, access to the data in the cache is enabled.

9. A method comprising: downloading, by the device, a first portion of data into a buffer via a first network connection at a first download speed; upon determining that the device is downloading data via a second network connection at a second download speed greater than the first download speed, downloading a second portion of data into the cache via the second network connection; as well as In response to determining that a download session associated with the first portion of data and the second portion of data has ended, access to the data in the cache is blocked.

10. The method according to claim 9, wherein: The first portion of data and the second portion of data are a plurality of portion of data associated with a first data stream, and the method further includes: When it is determined that the device is downloading data at the second download speed, all subsequent partial data of the plurality of partial data are downloaded to the cache.

11. The method according to claim 10, further comprising: When it is determined that all the partial data of the plurality of partial data are downloaded to the cache: identifying a second data stream based at least in part on the first data stream; and At least a portion of data associated with the second data flow is downloaded into the cache.

12. The method according to claim 9, further comprising: establishing the cache having a first size; as well as In response to determining that the fullness of the buffer satisfies one or more criteria, the buffer is expanded to a second size.

13. The method according to claim 9, wherein: Determining that the device is downloading data at the second download speed includes determining that the second download speed exceeds a predefined threshold compared to the first download speed.

14. The method according to claim 13, wherein: Determining that the second download speed exceeds a predefined threshold includes comparing the second download speed with a historical download speed using a sliding window.

15. The method according to claim 9, wherein: The second portion of data is downloaded to the cache at the second download speed, and wherein both the first portion of data and the second portion of data are associated with a first bit rate of a plurality of bit rates.

16. The method according to claim 9, wherein: Determining that the download session has ended includes determining that the device is not downloading data through the first network connection or through the second network connection, and the method further includes: In response to determining that the device is downloading data via at least one of the first network connection or the second network connection, access to the data in the cache is enabled.

17. One or more non-transitory computer readable media collectively containing computer program code that, when executed by operation of one or more computer processors, performs operations comprising: downloading, by the device, a first portion of data into a buffer via a first network connection at a first download speed; Create a cache with an initial size; upon determining that the device is downloading data via a second network connection at a second download speed greater than the first download speed, downloading a second portion of data into the cache via the second network connection; as well as In response to determining that the fullness of the cache satisfies one or more criteria, the cache is expanded.

18. The one or more non-transitory computer readable media of claim 17, wherein: The first portion of data and the second portion of data are a plurality of portion of data associated with a first data stream, and the operation further includes: When it is determined that the device is downloading data at the second download speed, all subsequent partial data of the plurality of partial data are downloaded to the cache.

19. The one or more non-transitory computer readable media of claim 17, the operations further comprising: In response to determining that a download session associated with the first portion of data and the second portion of data has ended, access to the data in the cache is blocked.

20. The one or more non-transitory computer readable media of claim 19, wherein: Determining that the download session has ended includes determining that the device has not downloaded data through the first network connection or through the second network connection, and the operations further include: In response to determining that the device is downloading data via at least one of the first network connection or the second network connection, access to the data in the cache is enabled.