Buffering data on high-bandwidth networks
By introducing buffering and cache mechanisms into streaming media devices, dynamically adjusting the buffer size and using high-bandwidth network for pre-downloading, the buffering and interruption problems of streaming media devices in dynamic network environments are solved, and more stable streaming media output is achieved.
Patent Information
- Application Number
- JP2021170653
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2020-11-04
- Filing Date
- 2021-10-19
- Publication Date
- 2025-02-07
- Estimated Expiration
- 2041-10-19
AI Technical Summary
In the dynamic network environment, streaming media devices have difficulty optimizing the bit rate, resulting in output interruption or buffering when the download speed changes, especially under high bandwidth but unstable 5G connections, buffering and interrupts occur frequently.
By introducing buffering and cache mechanisms into streaming devices, dynamically adjusting buffer sizes and using high-bandwidth networks for pre-downloading, ensuring data is additionally cached when high-bandwidth connections are available, avoiding buffering and interruption.
Effectively utilize intermittent connections of high-bandwidth networks, reduce interruption and buffering of streaming media output, and improve the stability and continuity of streaming media systems.
Smart Images

Figure 0007626551000001 
Figure 0007626551000002 
Figure 0007626551000003
Abstract
Description
background
[0001] Some systems download media in separate segments. Each segment is then output sequentially. However, if the download speed changes significantly, the streaming device may choose a suboptimal bitrate for the next segment. Intermittent and sporadic connection losses may cause the next segment to fail to download in time, resulting in buffering and dropouts in the media output. [Brief description of the drawings]
[0002] So that the above aspects may be accomplished and understood in detail, a more particular description of the embodiments described herein briefly outlined above may be had by reference to the accompanying drawings, in which:
[0003] It should be noted, however, that since other equally effective embodiments are possible, the appended drawings depict typical embodiments and are therefore not to be considered limiting.
[0004] [Figure 1] 1 illustrates a system including a streaming device configured to adaptively buffer data over a network connection having dynamic bandwidth, according to some embodiments disclosed herein.
[0005] [Diagram 2] 1 illustrates a system including a streaming device configured to utilize buffers and caches to dynamically buffer data over a network connection having dynamic bandwidth, according to some embodiments disclosed herein.
[0006] [Diagram 3] 1 is a flow diagram illustrating a method for dynamically reacting to shifts in network connectivity according to certain embodiments disclosed herein.
[0007] [Figure 4] 1 is a flow diagram illustrating a method for streaming media segments under dynamic network conditions according to certain embodiments disclosed herein.
[0008] [Diagram 5] 4 is a flow diagram illustrating a method for downloading data under dynamic network conditions, according to certain embodiments disclosed herein.
[0009] [Figure 6A] ~ [Figure 6B] 1 is a block diagram of a computing device configured to stream data in dynamic network conditions, according to some embodiments disclosed herein. Detailed Description
[0010] In various systems, data is downloaded and buffered in memory for immediate or subsequent output. For example, to stream video data, the video may be downloaded to a buffer in memory and then output from the buffer for display. The buffer allows the system to pre-download some data before outputting it, to prevent stutters or pauses in the output. For example, some systems download media in separate segments and store each segment in a buffer. Each segment is then output sequentially from the buffer.
[0011] Some systems utilize adaptive bitrate solutions to improve the streaming process. In such systems, the streaming platform provides streams at different bitrates (e.g., 10 megabits per second, 15 megabits per second, etc.). The streaming device can then choose which bitrate to download based on its own network conditions. For example, the streaming device can measure the speed at which it downloads a video file in order to determine the appropriate bitrate to request when downloading the next portion of the video.
[0012] However, if the download speed changes significantly, the streaming device may select a non-optimal bitrate for the next segment. For example, the device may normally use a first network connection to download media, but may be able to intermittently receive a much higher speed connection. Using this higher speed to select the next bitrate would cause the device to select a higher bitrate than the original connection speed could sustain.
[0013] DETAILED DESCRIPTION OF THE DRAWINGS The present disclosure provides systems, devices, and methods for reacting to dynamic and shifting connections in order to improve the operation of devices that use dynamic networks to download or upload data. In some examples, the present disclosure uses media streaming. However, it should be understood that the present disclosure is readily applicable to a wide variety of applications involving downloading or uploading data.
[0014] In some embodiments, a computing device can download (or upload) data using a network connection at an initial speed. If the available bandwidth increases (either on the same connection or on a second network connection), the device can use bursts of this speed to download (or upload) additional data than it could otherwise download (or upload) within a time frame. In one embodiment, if the device was using a certain initial bitrate, quality, or other indicator of the amount of data being downloaded or uploaded, the device continues to use the same bitrate. The purpose is to ensure that processing is not interrupted when that high-speed connection is available for an extended period of time.
[0015] For example, a mobile device may utilize a 4G connection to download a segment of media in a streaming environment. The device may select a bitrate to stream based on the speed (also known as bandwidth) of the 4G connection. Increasingly, higher speed networks (such as mmWave 5G) are being deployed. These networks offer very high bandwidth, but the connections are sporadic and intermittent. For example, mmWave 5G connections often require line of sight to a radio tower. This makes this high bandwidth connection unstable and temporary. Therefore, this high speed connection should not be utilized in determining the bitrate to request for subsequent segments. Additionally, memory buffers are often quite limited, which can quickly fill up and waste the high speed connection.
[0016] In embodiments of the present disclosure, streaming devices can take advantage of this intermittent connection by allocating a separate cache or temporarily increasing the size of their buffers so that they can use the higher speed connection to download additional data, thereby reducing stream interruptions and improving the overall operation of the streaming system by allowing the device to take advantage of the intermittent higher speed connection.
[0017] 1 illustrates a system 100 including a streaming device 105 configured to adaptively buffer data over a network connection having 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, examples of which include a smartphone, tablet, laptop, or other device capable of downloading or streaming data using a wireless network.
[0018] In some embodiments, networks 110A-B may be associated with different bandwidths or other characteristics. For example, in one embodiment, network 110A may be a 4G or 3G cellular network having a relatively limited bandwidth (and thus a relatively limited download speed), while network 110B is a high-bandwidth network (such as a WiFI connection or a 5G network).
[0019] Although two networks 110A-B are shown for conceptual clarity, embodiments of the present disclosure may be utilized with any number of separate networks, including a single network. For example, embodiments of the present disclosure may be used to enable a streaming device 105 to react to dynamic network conditions as it shifts between three or more networks. Similarly, embodiments disclosed herein may be used to enable a streaming device 105 to react to shifting conditions on a single network connection.
[0020] In one embodiment, the higher bandwidth network 110B may be sporadic or intermittent compared to the others, but is not reliably available to the streaming device 105. However, when available, the network 110B may be used to download large amounts of data in a short time due to its high bandwidth. In some embodiments, the streaming device 105 may download data (e.g., video data) from the content server 115, typically over the network 110A. In some embodiments, the streaming device 105 may, in its execution, use adaptive bitrate logic to select a bitrate variant to request from the content server 115, the selection being based at least in part on the available bandwidth or download speed over the network 110A.
[0021] In some embodiments, streaming device 105 temporarily buffers this downloaded data in a buffer in memory. The media is then output from the buffer. In many embodiments, the buffer is relatively limited in size. Thus, streaming device 105 typically downloads portions of the data (e.g., media segments) over network 110A just before they are needed for output / display.
[0022] In one embodiment, if streaming device 105 determines that a higher bandwidth connection is available (e.g., via network 110B), it may dynamically react and take advantage of these higher speeds. In one embodiment, streaming device 105 determines that the higher speeds are available based on determining that the device's current connection is classified or labeled as a connection at a given higher speed. For example, when connected via network 110A, streaming device 105's connection may be classified as "4G," while network 110B is classified as "5G."
[0023] In some embodiments, the streaming device 105 identifies a faster connection by evaluating how quickly 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 rate (e.g., for the current segment or portion of data) along with a sliding window of past download rates (e.g., for the past 60 seconds, or the past 10 segments or portions of data). If the current download rate exceeds this past rate by some predefined criterion, the streaming device 105 may determine that it is on a high bandwidth connection. In embodiments, the criterion may include a multiplier threshold (e.g., at least twice as fast), a minimum rate (e.g., at least 100 megabits per second), an increase threshold (e.g., at least 50 megabits per second faster than the past rate), etc.
[0024] In at least one embodiment, the streaming device 105 can identify a high-bandwidth connection based on previous connections. For example, in one such embodiment, the streaming device 105 can utilize location services to identify and record its current location whenever a high-bandwidth network 110B is available. Then, based on the current location or movement of the streaming device 105, the streaming device 105 can determine that the network 110B will likely become available in the future (e.g., within 10 seconds or other predetermined time). In response, the streaming device 105 can begin preparing for a high-speed connection, as described below.
[0025] In one embodiment, when the streaming device 105 determines that it is using a higher bandwidth connection, it begins downloading data from the content server 115 to an uncapped cache or buffer. In some embodiments, this cache is located in a secondary memory (e.g., a hard drive (HD), a solid state drive (SSD), a ROM, a flash memory, a fixed or removable storage medium, etc.) of the streaming device 105, commonly referred to as "auxiliary memory" or "storage". The original buffer, on the other hand, is located in a primary memory (e.g., a random access memory (RAM)) of the streaming device 105, commonly referred to as "main memory" or simply "memory". As commonly used and known in the art, the term "memory" may refer to what is described herein as "primary memory". On the other hand, the term "storage" may refer to what is described herein as "secondary memory". Typically, primary memory is tightly coupled to the processing unit of the system (e.g., RAM), allowing for faster access times. However, this direct coupling often requires that the size of the primary memory be kept relatively limited. In contrast, secondary memory typically does not have such direct access, resulting in slower access times compared to primary memory. However, the secondary memory can generally be significantly larger than the primary memory. In another embodiment, if there is enough free space in the primary memory (e.g., in a high memory system), the streaming device 105 can expand the size of the memory buffer or establish a second buffer or cache in the primary memory.
[0026] In some embodiments, streaming device 105 downloads data to this cache at the same bitrate that it used to download the data previously. For example, if streaming device 105 was originally using a 10 megabits per second stream from content server 115, streaming device 105 will continue to request the 10 megabit stream even if network 110B can support a much higher bitrate.
[0027] Downloading this data to an uncapped cache allows the streaming device 105 to take advantage of the higher speeds to download more additional data than it would otherwise be able to use. For example, rather than buffering a capped amount of data (e.g., the next 60 seconds of video or the next 5 segments), the streaming device 105 can continue to download as much data as it can into its cache using the faster network 110B.
[0028] In one embodiment, when the original memory buffer is empty (e.g., all previously downloaded segments have been output), the streaming device 105 begins outputting data from the cache, which may include transferring data to and outputting from memory, or directly from storage.
[0029] In some embodiments, the streaming device 105 may continue to download data to a cache (rather than to the original buffer) until some predetermined 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 rate to detect a drop back to the original connection, as described above (e.g., by comparing the current rate to a sliding window of past rates over the past N segments or seconds).
[0030] In one embodiment, the streaming device 105 may then continue to output data from the cache until the cache is empty (e.g., until all of the downloaded data has been output). In one embodiment, the streaming device 105 may revert to the original streaming paradigm (e.g., downloading some amount of data to a buffer) when the cache is close to empty (e.g., when the amount of data remaining to be output from the cache falls below a predetermined threshold).
[0031] In some embodiments, streaming device 105 is downloading or streaming from a predefined pool of data. For example, all of the segments or portions of data may correspond to a given episode, movie, podcast, or other media. In one embodiment, if streaming device 105 downloaded all available data to a cache before network 110B was lost (e.g., the entire episode was downloaded), it may stop downloading additional data and simply output data from the cache.
[0032] In some embodiments, the streaming device 105 may maintain this downloaded cache so that the streaming device 105 can later 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 such an embodiment, when the user ends the stream, the streaming device 105 may delete the cached data or otherwise mark it as unavailable and may request the streaming device 105 to re-stream the media.
[0033] In some embodiments, the streaming device 105 is configured to download additional data from other streams when the first stream is completed. For example, if the streaming device 105 is streaming a given episode from a program, the streaming device 105 may start downloading the next episode when the given episode completes downloading. This allows the streaming device 105 to pre-fetch the additional data. In an embodiment, the streaming device 105 may use any suitable logic to determine which data streams to download. For example, in an embodiment, the streaming device 105 or content server 115 utilizes a predefined sequence or list of media (e.g., an episode list) and requests / provides the next. In another embodiment, the streaming device 105 or content server 115 uses other customization logic to suggest media to the user to select which data to download next.
[0034] In at least one embodiment, the streaming device 105 can track whether pre-downloaded media has actually been consumed. In some embodiments, the streaming device 105 monitors what data or segments have actually been output from its cache for its execution. The streaming device 105 may 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 based solely on the data that was downloaded. Similar logic can be applied to embodiments in which the streaming device 105 pre-fetches subsequent episodes or media.
[0035] In some embodiments, the streaming device 105 can pre-fetch other defined media in addition to or instead of downloading media from the stream to the cache. For example, the streaming device 105 may use the high bandwidth network 110B to download advertisements or other predefined media to the cache in addition to or instead of pre-fetching segments of requested media. This allows the streaming device 105 to output this data seamlessly. For example, in a live streaming environment, there may be no media available to pre-download to the cache. However, the streaming device 105 may use a high bandwidth connection to pre-download advertisements or other media to the cache. This data can be output later as appropriate. In one embodiment, the streaming device 105 can monitor which advertisements or other media have actually been output / consumed and send this information to the content server 115 or other system.
[0036] In at least one embodiment, streaming device 105 may selectively use high-bandwidth network 110B to download other data or variants that would not otherwise be downloaded. For example, streaming device 105 may be streaming data at a first bitrate on the original connection, but streaming device 105 may stream one or more segments to the cache at a higher bitrate when network 110B is available. As another example, if streaming device 105 is streaming audio-only media, streaming device 105 may download some associated videos to the cache if a high-bandwidth connection is available.
[0037] In some embodiments, when the streaming device 105 is downloading data to the cache, the cache can grow or expand as needed, i.e., the cache has no upper limit. For example, some initial size can be defined when the cache is created, but the streaming device 105 can grow the cache as it is downloading data until it reaches some predefined maximum or the storage runs out of space. By utilizing an uncapped buffer for sporadic high bandwidth connections, the streaming device 105 can greatly improve the streaming environment.
[0038] 2 illustrates a system 200 including a streaming device 105 configured to utilize buffers and caches to dynamically buffer data over a network connection having dynamic bandwidth, according to some embodiments disclosed herein. In the illustrated embodiment, the streaming device 105 downloads media segments 215 from a content server 115. As illustrated, these segments 215 are sequential portions of data within a given media stream and are downloaded and output sequentially.
[0039] In the illustrated embodiment, streaming device 105 includes a buffer 205 and a cache 210. In at least one embodiment, buffer 205 is located in memory, while cache 210 is located in storage. In some embodiments, cache 210 may simply correspond to additional space in memory. In yet another embodiment, cache 210 is not a separate data structure, but is implemented by extending the upper limit of buffer 205.
[0040] In one embodiment, the buffer 205 has a limited (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 may be dynamically expanded as data is downloaded. For example, if the cache becomes full and a high bandwidth connection is available, the streaming device 105 may expand the cache to allow it to grow and store more segments 215.
[0041] In embodiments, the streaming device 105 may download segments 215 to the buffer 205 during normal use. As segments 215 are output from the buffer 205, they are deleted or otherwise marked as "used," allowing the streaming device 105 to download subsequent segments 215 to 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 to the cache 210. That is, the streaming device 105 may download segments 215 that it has not yet obtained (whether output or not) to the cache 210 rather than to the buffer 205.
[0042] Once the last segment 215 in the buffer 205 has been output (segment 215C in the illustrated embodiment), the streaming device 105 begins outputting subsequent segments 215 from the cache 210. In some embodiments, this involves sequentially transferring the segments 215 from the cache 210 to the buffer 205 or another portion of memory, and then outputting them from memory.
[0043] In one embodiment, as long as the high-bandwidth connection is available, the streaming device 105 continues to download segments 215 to the cache 210. If the high-bandwidth connection becomes unavailable and the streaming device 105 reverts to using the initial connection, the streaming device 105 may pause downloading until all (or nearly all) of the data in the cache 210 has been consumed.
[0044] For example, when the streaming device 105 determines that a certain amount of data remains in the cache 210 (e.g., three more segments 215 to be output), the streaming device 105 may begin the original streaming process to download subsequent segments 215 to the buffer 205. When a high-bandwidth connection becomes available again, the streaming device 105 may again begin downloading data to the cache 210. This allows the streaming device 105 to seamlessly transition between connections having different bandwidths / speeds.
[0045] 3 is a flow diagram illustrating a method 300 of dynamically reacting to shifts in network connectivity 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) to a buffer (e.g., in memory) at an initial rate. For example, the streaming device may stream the segments to the buffer over a first wireless connection associated with a first bandwidth / rate. In some embodiments, the streaming device further downloads data associated with the initial bitrate (e.g., a 10 megabit stream).
[0046] The method 300 then continues to block 310, where the streaming device determines whether a burst connection is available. In embodiments, a burst connection is a relatively high bandwidth or high speed connection made available to the streaming device. For example, a burst connection may correspond to a 5G connection. In another embodiment, a burst connection may correspond to a higher download speed over the same original connection.
[0047] In one embodiment, the streaming device determines whether a burst connection is available based on the label or classification that the current connection indicates. In another embodiment, the streaming device compares the current or most recent download speed with the past download speed (e.g., over the previous 5 segments or 60 seconds). If the current speed exceeds some predefined threshold compared to the original speed (or theoretically without comparing to the initial speed), the streaming device can determine that a burst connection is available.
[0048] If a burst connection is not available, method 300 returns to block 305, whereby the streaming device continues to stream data through the buffer as normal. If the streaming device determines that a burst connection is available, method 300 continues to block 315, where the streaming device creates a cache (or decides to start using an existing cache) that will be used to download data through the burst connection. In one embodiment, this includes allocating a portion of memory or storage for the data. In one embodiment, the cache is larger than the buffer (or is uncapped and can grow as needed).
[0049] Method 300 then continues to block 320. Here, the streaming device begins downloading data (e.g., subsequent segments of media) to the cache using the burst connection. In embodiments, the burst connection is associated with a higher speed or bandwidth, allowing the streaming device to download additional segments immediately, rather than waiting until just before the additional segments are needed for output. In at least one embodiment, the streaming device continues to download data associated with the same stream or bitrate. That is, if the streaming device has been downloading a given stream, variant, or bitrate, the streaming device can continue to use the same stream, variant, or bitrate when downloading to the cache. This allows the streaming device to seamlessly move back and forth between the buffer and the cache (and between the initial connection and the burst connection).
[0050] At block 325, the streaming device determines whether a burst connection is still available. If so, method 300 returns to block 320. This allows the streaming device to continue downloading data at a high rate until a burst connection is no longer available or some other criteria is met. As noted above, the criteria may include determining whether the entire media (e.g., the entire program) has been downloaded, etc. In at least one embodiment, the streaming device may have the right to download a predetermined maximum amount of data to the cache. For example, based on a license or other criteria, the streaming device may be permitted to pre-download some predetermined amount of data (e.g., up to 50 segments or 10 minutes).
[0051] Returning to block 325, if the streaming device determines that the burst connection is no longer available, method 300 returns to block 305 to stream data into the buffer using the initial connection. In at least one embodiment, rather than immediately beginning streaming at the initial rate, as discussed above, the streaming device may wait until the cache is empty (or nearly empty).
[0052] Beneficially, the method 300 allows streaming devices to smoothly transition between different connection modes, while taking full advantage of temporary burst connections to pre-download data to the cache.
[0053] 4 is a flow diagram illustrating a method 400 for streaming media segments in dynamic network conditions, according to some embodiments disclosed herein. In one embodiment, the method 400 is performed by a streaming device (e.g., streaming device 105). In one embodiment, the method 400 corresponds specifically to streaming media segments (as compared to more general data), and further details of such an embodiment are provided. The method 400 begins at block 405, where the streaming device selects a segment bit rate for streaming.
[0054] For example, using adaptive bitrate logic, a streaming device can determine which bitrate to utilize based in part on the bandwidth available to the streaming device or the current download speed. As referred to herein, a given bitrate may alternatively be referred to as a "variant," "stream," etc. In embodiments, selecting a bitrate includes selecting a particular version or variant of the media to download. Higher bitrates are often associated with higher quality video / audio, but also require higher bandwidth to download reliably. Thus, a streaming device can select a bitrate that ensures reliable streaming at the highest possible quality.
[0055] At block 410, the streaming device downloads segments of media associated with the selected bit rate to a buffer. These buffered segments are then output sequentially, as described above. At block 415, the streaming device determines whether the media download is complete. For example, if the streaming device is streaming a movie, the streaming device may determine whether the last media segment of the movie has been downloaded. If so, method 400 ends at block 420. That is, in this manner, in the illustrated embodiment, the streaming device stops downloading if it is still using the initial connection when the current stream ends.
[0056] If the streaming device determines that the streaming of the media has not finished, method 400 continues at block 425. At block 425, the streaming device determines whether a burst connection is available, as described above. If a burst connection is not available, method 400 returns to block 410. This allows the streaming device to continue streaming data at the selected initial bit rate over the initial connection. If the streaming device determines that a burst connection is available, method 400 continues at block 430.
[0057] At block 430, the streaming device downloads subsequent segments of the media to a cache. In one embodiment, this cache may be located in storage or any suitable location. The cache may be larger than the buffer and may be associated with an uncapped or unlimited size, or both. In the illustrated embodiment, these segments may be downloaded at a higher download rate (due to the higher bandwidth of the burst connection), but the streaming device continues to download segments of the same bitrate / variant. This allows subsequent segments to be downloaded uninterrupted using the original connection, even if the burst connection is suddenly lost (e.g., due to its temporary and unstable nature).
[0058] At block 435, the streaming device determines whether the selected media (e.g., the episode or movie being streamed) has finished downloading. If not, method 400 continues to block 445. If the streaming device has finished downloading the current media, method 400 proceeds to block 440. Now, the streaming device identifies the next media. In one embodiment, the streaming device queries a content server or provider to do this. The content server can then determine the next media to stream (e.g., using a defined sequence of media, using predictive algorithms to suggest media to the user, etc.). This allows the streaming device to pre-cache media for the next stream the user may want to watch. Method 400 then continues to block 445.
[0059] At block 445, the streaming device determines whether a burst connection is still available. If so, method 400 returns to block 430 to continue downloading segments to the cache at the increased rate. If a burst connection is not available, method 400 returns to block 410 to continue streaming using the original connection. In at least one embodiment, as described above, the streaming device may pause downloading until the cache is consumed.
[0060] Additionally, in some embodiments, if the streaming device has started downloading another media stream (e.g., the next episode of a series), method 400 may terminate rather than continue downloading segments from the next media unless the streaming device has actually started consuming the next media, i.e., the streaming device will not continue downloading the second media on the initial connection unless the user has finished the first media and started outputting the second media.
[0061] 5 is a flow diagram illustrating a method 500 for downloading data under dynamic network conditions, according to some embodiments disclosed herein. Method 500 begins at block 505, where a device (e.g., streaming device 105) downloads a first portion of data to a buffer at a first download rate. At block 510, the device outputs the first portion of data from the buffer. Method 500 then continues to block 515, where upon determining that the device is downloading data at a second download rate that is faster than the first download rate, the device decides to use the cache for one or more subsequent portions of the data and downloads a second portion of the data to the cache. At block 520, upon determining that the buffer is empty, the device outputs the second portion of the data from the cache.
[0062] 6A is a block diagram of a computing device 600A configured to stream data in dynamic network conditions, according to some embodiments disclosed herein. In one embodiment, the computing device 600A is a streaming device 105. Although shown as a physical device, in embodiments, the computing device 600A may be implemented as a virtual device or service, or across several devices (e.g., in a cloud environment). As shown, the computing device 600A comprises a processor 605, a memory 610, a storage 615, an I / O interface 620, and a network interface 625. In the illustrated embodiment, the processor 605 reads and executes programming instructions stored in the memory 610, as well as stores and reads application data present in the storage 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 provided, generally representing a random access memory. Storage 615 may be any combination of memory or storage components, examples of which include, but are not limited to, disk drives, flash-based storage devices, etc. It may also include fixed storage devices, removable storage devices, or a combination of both, examples of which include fixed disk drives, removable memory cards, cache, optical storage, network attached storage (NAS), or storage area networks (SAN).
[0063] In some embodiments, I / O devices 635 (such as a mouse, keyboard, monitor, touch screen, etc.) are connected via I / O interface 620. Additionally, via network interface 625, computing device 600A may be communicatively coupled (directly or indirectly) with one or more other devices and components, such as a content server, via one or more networks.
[0064] In the illustrated embodiment, storage 615 includes a data cache 650A. In embodiments, data cache 650A is typically used to store a portion of the data that is downloaded at a burst rate, as described above. In some embodiments, data cache 650A is unlimited and can expand to store any amount of data. For example, as long as a burst connection is available, computing device 600A may continue to download segments into data cache 650A, growing it as needed.
[0065] As shown, memory 610 includes a data buffer 645. Streaming application 640 is shown residing in storage 615. Although depicted as software, in embodiments, the functionality of streaming application 640 may be implemented using hardware, software, or a combination of hardware and software. Memory 610 may be used to temporarily store streaming application 640. On the other hand, a processor executes the instructions of streaming application 640 at run time. In one embodiment, the size of data buffer 645 is fixed. Streaming application 640 is generally configured to perform one or more embodiments disclosed herein. For example, streaming application 640 may stream data (e.g., from a content server) to data buffer 645 when a regular connection is available. When a burst rate is available, streaming application 640 may begin streaming data to data cache 650A.
[0066] 6B is a block diagram of an alternative computing device 600B configured to stream data in dynamic network conditions, according to some embodiments disclosed herein. In the illustrated embodiment, rather than using storage 615 to accommodate the cache, computing device 600B includes both a data buffer 645 and a data cache 650B in memory 610. In one embodiment, as described above, streaming application 640 can stream data to data buffer 645. When burst rates are available, in the illustrated embodiment, streaming application 640 streams data to data cache 650B in memory 610. That is, rather than allocating a cache in storage 615, the system allocates a cache in memory 610. In at least one embodiment, rather than allocating another data cache 650B, streaming application 640 can instead expand the size of data buffer 645 when new data is downloaded at burst rates.
[0067] In one embodiment, the streaming application 640 downloads data to the data cache 650B until the burst connection is no longer available. In some embodiments, when the data cache 650B reaches a predetermined size (i.e., a predetermined amount of data has already been downloaded to the data cache 650B), the streaming application 640 can allocate another cache in the storage 615 and continue downloading data.
[0068] In this disclosure, various embodiments are referenced. However, it should be understood that the disclosure is not limited to the specific embodiments described. Instead, any combination of the following configurations and elements, whether related to various embodiments or not, is contemplated for carrying out and practicing the teachings provided herein. Furthermore, when an element of an embodiment is described in the form of "at least one of A and B," it can be understood that an embodiment including only element A, including only element B, and including elements A and B are respectively contemplated. Furthermore, while some embodiments may achieve advantages over other possible solutions or the prior art, whether or not a particular advantage is achieved by a given embodiment does not limit the disclosure. Thus, the aspects, configurations, embodiments, and advantages disclosed herein are merely exemplary and are not considered elements or limitations of the appended claims unless expressly recited in the claims. Similarly, references to the "invention" are not to be construed as generalizations of the subject matter disclosed herein, and are not to be considered elements or limitations of the appended claims unless expressly recited in the claims.
[0069] As will be appreciated by those skilled in the art, the embodiments described herein may be embodied as a system, method, or computer program product. Accordingly, the embodiments may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, microcode, etc.), or an embodiment combining software and hardware aspects, all of which are collectively referred to herein as a "circuit," "module," or "system." Furthermore, the embodiments described herein may take the form of a computer program product embodied in one or more computer readable medium(s) having computer readable program code embodied therein.
[0070] The program code embodied on the computer readable medium may be transmitted using any suitable medium, including but not limited to wireless, wired, fiber optic cable, RF, or the like, or any suitable combination thereof.
[0071] Computer program code for carrying out the operations 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 the "C" programming language or similar programming languages. The program code may run entirely on the user's computer, or partially on the user's computer, as a standalone software package, partially on the user's computer and partially on a remote computer, or entirely on a remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer via 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).
[0072] Aspects of the present disclosure are described herein with reference to flowchart illustrations or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the present disclosure. It can be understood that each block of the flowchart illustrations or block diagrams, and combinations of blocks in the flowchart illustrations or block diagrams, can be implemented by computer program instructions. These computer program instructions can be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus forming a machine, such that the instructions, executed via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions / acts specified in the blocks of the flowchart illustrations or block diagrams.
[0073] These computer program instructions may also be stored on a computer-readable medium that can direct a computer, other programmable data processing apparatus, or other device to function in a particular manner, such that the instructions stored on the computer-readable medium form an article of manufacture including instructions that implement the functions / acts specified in the flowchart or block diagram blocks.
[0074] Also, computer program instructions may be loaded into a computer, other programmable data processing apparatus, or other device and cause the computer, other programmable data processing apparatus, or other device to execute a series of operational steps to generate a computer-implemented process, whereby the instructions executing on the computer, other programmable data processing apparatus, or other device provide a process for performing the functions / operations specified in the flowchart or block diagram blocks.
[0075] The flowchart diagrams and block diagrams in the figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present disclosure. In this regard, each block in the flowchart diagrams or block diagrams represents a module, segment, or portion of code, which may include one or more executable instructions for performing a specified logical function. It should also be noted that in some alternative implementations, the functions noted in the blocks may occur in a different order than the order noted in the figures. For example, two blocks shown in succession may in fact be executed substantially simultaneously, or may be executed in the reverse order or out of order, depending on the functionality involved. It should also be noted that each block in the block diagrams or flowchart diagrams, and combinations of blocks in the block diagrams or flowchart diagrams, may be executed by a special-purpose hardware-based system that performs a particular function or operation, or a combination of special-purpose hardware and computer instructions.
[0076] While the forgoing is directed to embodiments of the present disclosure, other and further embodiments of the present disclosure may be made without departing from the basic scope thereof, which is defined by the following claims.
Claims
1. downloading, by the device, a first portion of data associated with a first data stream to a buffer at a first download rate; outputting a first portion of the data from the buffer; In response to determining that the device is downloading data at a second download rate that is faster than the first download rate, determining to use a cache for one or more subsequent portions of the data; downloading a second portion of data associated with the same first data stream to the cache; and upon determining that the buffer is empty, outputting a second portion of the data from the cache; A method that allows the cache to grow while data is being downloaded, and allows the cache to output downloaded data even if the data download is interrupted.
2. 10. The method of claim 1, further comprising the step of downloading a third portion of the data to a buffer upon determining that the device is not downloading the data at the second download rate.
3. the first and second portions of data being portions of data associated with the first data stream; 10. The method of claim 1, further comprising the step of downloading all subsequent portions of the data from the plurality of portions of the data to the cache upon determining that the device is downloading the data at the second download rate.
4. Upon determining that all of the pieces of data have been downloaded to the cache, identifying a second data stream based at least in part on the first data stream; The method of claim 3 , further comprising downloading at least a portion of the data associated with the second data stream to the cache.
5. The device downloads a first portion of the data using the first network; 2. The method of claim 1, wherein determining that the device is downloading data at a second download rate comprises determining that the device has begun downloading data using a second network.
6. 2. The method of claim 1, wherein determining that the device is downloading data at a second download rate comprises determining that the second download rate exceeds a predetermined threshold as compared to the first download rate.
7. 7. The method of claim 6, wherein determining that the second download rate exceeds a predetermined threshold comprises comparing the second download rate to a past download rate using a sliding window.
8. A second portion of the data is downloaded to the cache at a second download rate; The method of claim 1 , wherein the first portion of data and the second portion of data are both associated with a first bit rate of a plurality of bit rates.
9. A non-transitory computer readable medium containing computer program code, the computer program code performing operations when executed by operation of one or more computer processors comprising: downloading, by the device, a first portion of data associated with a first data stream to a buffer at a first download rate; outputting a first portion of the data from the buffer; In response to determining that the device is downloading data at a second download rate that is faster than the first download rate, determining to use a cache for one or more subsequent portions of the data; downloading a second portion of data associated with the same first data stream to the cache; and upon determining that the buffer is empty, outputting a second portion of the data from the cache; A non-transitory computer-readable medium in which a cache can be expanded while data is being downloaded and in which the cache can output downloaded data even if the data download is interrupted.
10. The operation includes:
10. The computer-readable medium of claim 9, further comprising the step of downloading a third portion of the data to the buffer upon determining that the device is not downloading the data at the second download rate.
11. the first and second portions of data being portions of data associated with the first data stream; The operation includes:
10. The computer readable medium of claim 9, further comprising, upon determining that the device is downloading the data at the second download rate, downloading any subsequent portions of the data from the plurality of portions of the data to the cache.
12. The operation includes: Upon determining that all of the pieces of data have been downloaded to the cache, identifying a second data stream based at least in part on the first data stream; The computer-readable medium of claim 11 , further comprising downloading at least a portion of the data associated with the second data stream to a cache.
13. The device downloads a first portion of the data using the first network; 10. The computer-readable medium of claim 9, wherein determining that the device is downloading data at a second download rate comprises determining that the device has begun downloading data using a second network.
14. 10. The computer-readable medium of claim 9, wherein determining that the device is downloading data at a second download rate includes determining that the second download rate exceeds a predetermined threshold as compared to the first download rate.
15. one or more computer processors; A storage medium containing a program, the operations which the program performs when executed by one or more computer processors include: downloading, by the system, a first portion of data associated with a first data stream to a buffer at a first download rate; outputting a first portion of the data from the buffer; In response to determining that the system is downloading data at a second download rate that is faster than the first download rate, determining to use a cache for one or more subsequent portions of the data; downloading a second portion of data associated with the same first data stream to the cache; and upon determining that the buffer is empty, outputting a second portion of the data from the cache; A system comprising: a storage medium, the cache being expandable when data is being downloaded, and the cache being able to output downloaded data even if the data download is interrupted.
16. The operation includes:
16. The system of claim 15, further comprising the step of downloading a third portion of the data to the buffer if the system determines that the data is not downloading at the second download rate.
17. the first and second portions of data being portions of data associated with the first data stream; The operation includes:
16. The system of claim 15, further comprising the step of downloading any subsequent portions of the data from the plurality of portions of the data to the cache upon determining that the system is downloading the data at the second download rate.
18. The operation includes: Upon determining that all of the pieces of data have been downloaded to the cache, identifying a second data stream based at least in part on the first data stream; 20. The system of claim 17, further comprising downloading at least a portion of the data associated with the second data stream to the cache.
19. The system downloads a first portion of the data using a first network; 16. The system of claim 15, wherein determining that the system is downloading data at a second download rate includes determining that the system has begun downloading data using a second network.
20. Further comprising a memory; A buffer is an allocated portion of memory, 16. The system of claim 15, wherein the cache is an allocated portion of the storage medium.
Citation Information
Patent Citations
Multimedia content distribution via WLAN-enabled areas
JP2006508621A
Client-side stream switching
JP2011523298A
Streaming reproduction device, streaming reproduction method, computer program and recording medium
JP2012080417A
Predictive Adaptive Media Streaming
JP2015515788A
SYSTEM AND METHOD FOR ADAPTIVE SWITCHING AMONG MULTIPLE CONTENT DELIVERY NETWORKS DURING ADAPTIVE BIT RATE STREAMING - Patent application
JP2020511811A