Patent Description:
However, existing buffering techniques utilize a static or fixed buffer even when interruptions or delays in wireless data service may exceed the buffer size and consequently cause a noticeable disruption in wireless data service. For example, when a user streaming video data on a user device encounters a disruption in service, they will experience a stoppage in the video the user was watching. Thus, existing buffering techniques in wireless data communication are susceptible to disruptions in the user experience as the user device moves between network zones of differing service quality.

<CIT> discloses a method for dynamically adjusting a size of a buffer of a receiving terminal based on a comparison of a signal quality metric associated with a wireless communication channel between the receiving terminal and a transmitting terminal to a signal quality threshold.

The detailed description is described with reference to the accompanying figures, in which the left-most digit(s) of a reference number identifies the figure in which the reference number first appears.

This disclosure is directed to dynamic predictive buffering in a wireless carrier network. Embodiments of the disclosure include both predicting a future sector that a device will travel through (e.g., based on prior device location data) and predicting a quality of service ("QoS") of wireless communications from a wireless carrier network in the future sector. The future sector prediction may include analyzing historical device mobility behavior based on both time and location data (i.e., from a global navigation satellite system ("GNSS")). The future sector QoS may include analyzing historical quality of service data for the future sector. For example, if a user's daily drive from home to work includes an area of known lower quality wireless coverage, and time/location data from a user device indicates that the user is driving from home to work, then it is likely they will encounter the known area of lower quality wireless coverage.

In embodiments of the disclosure, the buffer of content streamed to the user device may be adjusted when a future predicted QoS of wireless communication from a wireless carrier network might be different. In one embodiment, an additional buffer allocation is granted to the user device. This increase of the buffer occurs when both the predicted QoS of the wireless communication from the wireless carrier network in the future sector is below a threshold level, and when the existing QoS for the wireless carrier network is above a minimum threshold level (i.e., the current QoS is more favorable than the predicted future QoS). In one embodiment, adjusting the buffer includes decreasing the buffer allocation when the predicted QoS in the future sector is superior to the existing QoS. Therefore, a streaming buffer can be adjusted using dynamic predictive buffering to limit interruptions in streaming data when inferior QoS is predicted while also maintaining network efficiency when the predicted quality of service is sufficient to maintain a user's streaming experience.

In one illustrative example, if a user's daily commute to school includes a subway, historical device location data specific to the user's device may be utilized to predict a disruption in service when the user takes the subway. As such, the streaming buffer of the user device may be temporarily increased to hold more content (e.g., video data of a movie that the user is streaming) to preserve the user's experience.

The techniques described herein may be implemented in a number of ways. Example implementations are provided below with reference to the following <FIG>.

<FIG> illustrates an example architecture <NUM> including a user device <NUM> receiving data from a carrier network <NUM>. Carrier network <NUM> may facilitate cellular data communication such as voice calls, texts, and data. Example cellular data standards implemented by carrier network <NUM> for cellular data communications may include Enhanced Data Rates for GSM Evolution (EDGE), Wideband Code Division Multiple Access (W-CDMA), High Speed Packed Access (HSPA), Long Term Evolution (LTE), CDMA-<NUM> (Code Division Multiple Access <NUM>), and/or so forth. Example carrier network <NUM> includes a core network <NUM> that may provide telecommunication and data communication services to the user device <NUM>. For example, the core network <NUM> may connect the user devices (via base stations and backhaul <NUM>) to other telecommunication and data communication networks, such as the Internet <NUM> and the public switched telephone network (PSTN) <NUM>. In various embodiments, the core network <NUM> may include one or more servers <NUM> that implement network components. For example, the network components may include a serving GPRS support node (SGSN) that routes voice calls to and from the PSTN <NUM>, a Gateway GPRS Support Node (GGSN) that handles the routing of data communication between external packet switched networks and the core network <NUM>. The network components may further include a Packet Data Network (PDN) gateway (PGW) that routes data traffic between the GGSN and the Internet <NUM>. The network components may also include an Operations Support System (OSS) platform for managing network configuration, fault management, and provisioning of wireless carrier network <NUM>.

The wireless carrier network <NUM> may also include a radio access network including multiple base stations. The multiple base stations are responsible for handling voice and data traffic between multiple user devices, such as the user device <NUM>, and the core network <NUM>. In the illustrated embodiment of <FIG>, the base stations are in the form of eNodeB nodes <NUM>. Each eNodeB node <NUM> may include a base transceiver system (BTS) that communicates via an antenna system over an air-link with one or more user devices that are within range. The antenna system of an eNodeB node may include multiple antennas that are mounted on a radio tower to provide a coverage area that is referred to as a "cell. " The BTS may send RF signals to user devices and receive radio signals from user devices to facilitate wireless communication. Each eNodeB node <NUM> may be connected to core network <NUM> via backhaul connection <NUM>, as illustrated.

In the illustrated embodiment, carrier network <NUM> may access media stored on media servers <NUM> via the Internet <NUM>. In an example, carrier network <NUM> facilitates streaming audio data from an album stored on media server <NUM> to user device <NUM>. In one example, carrier network <NUM> facilitates streaming video data from a movie or television series stored on media server <NUM> to user device <NUM>. In one embodiment (not illustrated), a content distribution network (CDN) is included in carrier network <NUM> and streaming media may be stored in the CDN. In this embodiment, carrier network <NUM> may facilitate the streaming of the media from the CDN to the user device(s) <NUM>. Those skilled in the art appreciate that CDNs may be implemented as servers to provide media content to users based on the geographic location of the user and reduce latency.

User device <NUM> may be a smartphone, a tablet computer, an embedded computer system, or any other device that is capable of using the wireless communication services that are provided by the carrier network <NUM>. In the illustrated embodiment, user device <NUM> is connected to eNodeB <NUM>(<NUM>) at an existing quality of service (QOS) <NUM> with a streaming buffer allocation <NUM>. As user device <NUM> moves among different cells in carrier network <NUM>, the streaming buffer allocation <NUM> may change to streaming buffer allocation <NUM> or <NUM>, for example, based on a predicted QOS <NUM> or <NUM> corresponding to a predicted path <NUM> of the user device <NUM>. Wireless networks are subject to quality degradation under a variety of conditions. These conditions may include: low signal strength, poor signal to noise ratio, interference, etc. This disclosure uses the terminology "quality of service" ("QoS") to refer to a qualitative or quantitative measure of the user experience, as a result of the wireless network conditions.

In <FIG>, while user device <NUM> has access to an existing QOS <NUM> provided by eNodeB <NUM>(<NUM>), the streaming buffer allocation <NUM> for user device <NUM> is above a standard streaming buffer allocation because a predicted QOS <NUM> that the user device <NUM> will encounter is known to be below an average quality of service. For ease of description, a "below average" quality of service may be referred to as "level <NUM>" throughout this disclosure, although many levels of QOS specificity may be implemented. The predicted QOS <NUM> may be predicted based on a predicted path <NUM> of user device <NUM>, which may be derived from prior device location data of user device <NUM>. In other words, the streaming buffer allocation <NUM> has been increased beyond a standard streaming buffer allocation because the predicted QOS of eNodeB <NUM>(<NUM>) is below average (level <NUM>). Increasing the streaming buffer allocation for user device <NUM> may maintain the streaming experience for a user of user device <NUM> while the user device <NUM> moves through a sector having a less than ideal QOS, such as the level <NUM> QOS provided by eNodeB <NUM>(<NUM>).

Also in <FIG>, while user device <NUM> has access to QOS <NUM> provided by eNodeB <NUM>(<NUM>), the streaming buffer allocation <NUM> for user device <NUM> is well above a standard streaming buffer allocation because a predicted QOS <NUM> that the user device <NUM> will encounter is known to be a significantly below average quality of service. For ease of description, a "significantly below average" quality of service may be referred to as "level <NUM>" throughout this disclosure, although many levels of QOS specificity may be implemented.

Still referring to <FIG>, while user device <NUM> has access to QOS <NUM> provided by eNodeB <NUM>(N), the streaming buffer allocation <NUM> for user device <NUM> drops back down to a standard streaming buffer allocation because a predicted QOS (not illustrated) that the user device <NUM> will encounter along predicted path <NUM> is known to be sufficient to sustain a streaming experience for user device <NUM>.

<FIG> is a block diagram showing various components of an example user device <NUM> that is configured to adjust a streaming buffer allocation based at least in part on a predicted quality of service of a predicted future sector that the user device will encounter. User device <NUM> is one illustrative example of user device <NUM>. The user device <NUM> may include a communication interface <NUM>, one or more sensors <NUM>, a user interface <NUM>, one or more processors <NUM>, and memory <NUM>. The communication interface <NUM> may include wireless and/or wired communication components that enable the electronic device to transmit or receive voice or data communication via the wireless carrier network <NUM>, as well as other telecommunication and/or data communication networks. The sensors <NUM> may include a proximity sensor, a compass, an accelerometer, altimeter, cameras, and/or a global positioning system (GPS) sensor. The compass, the accelerometer, and the GPS sensor may detect orientation, movement, and geolocation of the user device <NUM>.

The user interface <NUM> may enable a user to provide inputs and receive outputs from the user device <NUM>. The user interface <NUM> may include a data output device (e.g., visual display, audio speakers), and one or more data input devices. The data input devices may include, but are not limited to, combinations of one or more of keypads, keyboards, mouse devices, touch screens, microphones, speech recognition packages, and any other suitable devices or other electronic/software selection methods.

The memory <NUM> may be implemented using computer-readable media, such as computer storage media. Computer-readable media includes, at least, two types of computer-readable media, namely computer storage media and communications media. Computer storage media includes volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital optical disks or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other non-transmission medium that can be used to store information for access by a computing device. In contrast, communication media may embody computer-readable instructions, data structures, program modules, or other data in a modulated data signal, such as a carrier wave, or other transmission mechanism.

The user device <NUM> may also include wireless radio <NUM> and other device hardware <NUM>. The wireless radio <NUM> may include hardware components that enable the user device <NUM> to perform telecommunication and data communication with carrier network <NUM>, Wi-Fi networks, and/or Bluetooth enabled devices. The device hardware <NUM> may include other hardware that is typically located in a mobile telecommunication device. For example, the device hardware <NUM> may include signal converters, transceivers, antennas, hardware decoders and encoders, graphic processors, a SIM card slot, and/or the like that enable the user device <NUM> to execute applications and provide telecommunication and data communication functions. The SIM <NUM> may be an integrated circuit chip that is inserted into the SIM card slot of the user device <NUM>, or an embedded SIM that is hardwired into the circuit board of the user device <NUM>.

The one or more processors <NUM> and the memory <NUM> of the user device <NUM> may implement an operating system <NUM>, device software <NUM>, and/or one or more applications <NUM>. The various software and applications may include routines, program instructions, objects, and/or data structures that perform particular tasks or implement particular abstract data types. The operating system <NUM> may include components that enable the user device <NUM> to receive and transmit data via various interfaces (e.g., user controls, communication interface <NUM>, and/or memory input/output devices). The operating system <NUM> may also process data using the one or more processors <NUM> to generate outputs based on inputs that are received via the user interface <NUM>. For example, the operating system <NUM> may provide an execution environment for the execution of the applications <NUM>. The operating system <NUM> may include a presentation component that presents the output (e.g., display the data on an electronic display, store the data in memory, transmit the data to another electronic device, etc.).

The operating system <NUM> may include an interface layer that enables applications to interface with the wireless radios <NUM> and/or the communication interface <NUM>. The interface layer may comprise public APIs, private APIs, or a combination of both public APIs and private APIs. Additionally, the operating system <NUM> may include other components that perform various other functions generally associated with an operating system. The device software <NUM> may include software components that enable the user device to perform functions. For example, the device software <NUM> may include basic input/output system (BIOS), Boot ROM, or a bootloader that boots up the user device <NUM> and executes the operating system <NUM> following power up of the device.

The applications <NUM> may include applications that provide utility, entertainment, and/or productivity functionalities to a user of the user device <NUM>. For example, the applications <NUM> may further include electronic mail applications, remote desktop applications, web browser applications, navigation applications, office productivity applications, audio streaming applications, video streaming applications, and/or so forth.

Memory <NUM> includes client buffer allocation manager <NUM>. In the illustrated embodiment, client buffer allocation manager <NUM> includes prior device location data <NUM>, instant device location data <NUM>, sector prediction engine <NUM>, cell quality data <NUM>, a QOS Prediction Engine <NUM>, Existing QOS data <NUM>, threshold data <NUM>, buffer adjustment engine <NUM>, and streaming buffer <NUM>. In <FIG>, the calculation of the streaming buffer is performed by the user device <NUM>.

Prior device location data <NUM> may include locations of the user device <NUM> and the times that the user device <NUM> was at the locations. Client buffer allocation manager <NUM> may receive locations and/or corresponding time stamps of the user device from sensors <NUM> via location link <NUM>. The locations may be derived from GPS sensors or compasses of sensors <NUM>. Client buffer allocation manager <NUM> may also receive prior device location data <NUM> from servers <NUM> of carrier network <NUM> via wireless radios <NUM> and data link <NUM> in some embodiments. Hence, the prior device location data <NUM> may include hundreds or thousands of prior device locations with corresponding times. In an embodiment, the prior device location data <NUM> includes at least a first pairing and a second pairing, where the first pairing including a first location and a first time that a device was at the first location and the second pairing including a second location and second time that the device was at the second location.

Instant device location data <NUM> may include the instant location (and time) of the user device. The instant location of the user device may be derived from a GPS sensor of the user device or a Wi-Fi signal that is received by the user device that can be mapped to a location, for example.

Sector prediction engine <NUM> is coupled to receive prior device location data <NUM> and instant device location data <NUM> and provide predicted sector data to QOS prediction engine <NUM> based at least in part on the prior device location data <NUM> and the instant device location data <NUM>. Referring now to <FIG>, a user device may generally travel from a home of a user in sector <NUM>(<NUM>) to work in sector <NUM>(<NUM>) on Monday, Wednesday, and Friday mornings taking path <NUM>. On Tuesdays and Thursdays afternoons, a user device may generally travel from a home of a user in sector <NUM>(<NUM>) to school in sector <NUM>(<NUM>) taking path <NUM>. Prior device location data <NUM> may include a data log that reflects the user's habit to travel with a user device (e.g., <NUM>/<NUM>) along path <NUM> on Monday, Wednesday, and Friday mornings and to travel path <NUM> on Tuesday and Thursday afternoons. Path <NUM> travels through sectors <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>) and path <NUM> travels through sectors <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>).

Having access to both prior device location data <NUM> and instant device location data <NUM>, sector prediction engine <NUM> may predict that a user device will travel through sector <NUM>(<NUM>) when the user device has already travelled through sector <NUM>(<NUM>) and <NUM>(<NUM>) on a Monday morning. Hence, sector prediction engine <NUM> may pass sector <NUM>(<NUM>) to QOS prediction engine <NUM> as sector prediction data, in that example. Similarly, sector prediction engine <NUM> may predict that a user device will travel through sector <NUM>(<NUM>) when the user device has already travelled through sector <NUM>(<NUM>) and <NUM>(<NUM>) on a Tuesday afternoon. Hence, sector prediction engine <NUM> may pass sector <NUM>(<NUM>) to QOS prediction engine <NUM> as sector prediction data, in that example.

<FIG> also illustrates a user device traveling along path <NUM> through sectors <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>) from the user's home to a sporting event at a stadium. Even if the user device rarely, or has never travelled along path <NUM>, sector prediction engine <NUM> may still predict that the user device will encounter sector <NUM>(<NUM>) based on the direction of travel established by the vector formed by travelling from sector <NUM>(<NUM>) to <NUM>(<NUM>). Hence, even a limited amount of prior device location data <NUM> may be useful to predict a sector that will be encountered by a user device.

Returning to <FIG>, QOS prediction engine <NUM> receives the sector prediction data from sector prediction engine <NUM>. Using the sector prediction data, the QOS prediction engine <NUM> may query cell quality data <NUM> to receive a quality of service metric data for a "cell" that provides wireless coverage to the future sector predicted by the sector prediction engine <NUM>. Cell quality data <NUM> may include a table of cell identifiers with their corresponding Key Performance Indicators (KPIs). Based on the sector prediction data and the quality of service metric, QOS prediction engine <NUM> may determine a predicted quality of service of wireless communications from a wireless carrier network in the future sector and pass the predicted quality of service to buffer adjustment engine <NUM>. A "sector" may be defined as a physical location such as a GPS coordinate. One or more "cells" of a wireless carrier network may provide coverage to a sector.

In <FIG>, buffer adjustment engine <NUM> receives existing QOS data <NUM>, threshold level of service quality <NUM>, and the predicted quality of service from sector prediction engine <NUM>. The existing QOS data <NUM> may be determined by receiving QOS data from wireless radio <NUM> via data link <NUM>.

In one embodiment, the buffer adjustment engine <NUM> adjusts the streaming buffer <NUM> based at least in part on the predicted quality of service of the wireless communication from the wireless carrier network in the future sector. If the predicted quality of service in the future sector is significantly below average (level <NUM>), increasing the streaming buffer <NUM> to buffer the streaming content onto the user device <NUM> prior to experiencing level <NUM> QOS may be useful to prevent disruption to the streaming content. If the predicted quality of service in the future sector is excellent (e.g., level <NUM>), increasing the streaming buffer may not be necessary since the excellent QOS in the future sector is unlikely to disrupt the streaming experience. If the predicted quality of service in the future sector is excellent (level <NUM>), the streaming buffer may be decreased for network efficiency purposes. When the streaming buffer <NUM> is adjusted, user device <NUM> may communicate the adjustment to wireless carrier network <NUM>.

In one embodiment, adjusting streaming buffer <NUM> includes adjusting a high-water mark and a low-water mark in a read-ahead buffer of memory <NUM>. The high-water mark and a low-water mark in the read-ahead buffer may be set with regard to memory size or with regard to the seconds of media content that will be read ahead.

In one embodiment, the buffer adjustment engine <NUM> increases streaming buffer <NUM> by an additional buffer allocation when the predicted quality of service of the wireless communication from the wireless carrier network in the future sector is below the threshold level of service quality <NUM> and the existing QOS from the wireless carrier network is above the threshold level of service quality <NUM>. In one particular illustrative example, the predicted quality of service in the predicted future sector is "significantly below average" (level <NUM>) and the existing QOS <NUM> is average (level <NUM>). Therefore, it would be potentially advantageous to take advantage of the existing quality of service (level <NUM>) to stream media content to a user device prior to entering the predicted quality service that is significantly below average (level <NUM>) so that the streaming experience is not interrupted. However, if a user device is simply moving from an excellent QOS (level <NUM>) to an above average QOS (level <NUM>), increasing the streaming buffer <NUM> may not be necessary because no disruption in streaming service would be expected/predicted. Therefore, buffer adjustment engine <NUM> may only increase streaming buffer <NUM> when the QOS of the predicted sector is below a threshold level of service <NUM> (e.g., level <NUM>) and the existing QOS is at or above the threshold level, in one embodiment.

<FIG> is a block diagram showing various components of an example server(s) <NUM> within carrier network <NUM> that is configured to collect and store data for facilitating adjusting a buffer allocation of streaming buffer <NUM> based at least in part on a predicted quality of service of a predicted future sector that the user device will encounter. <FIG> and <FIG> may illustrate an embodiment where a user device performs a significant portion of the operations and analysis to adjust a buffer allocation of streaming buffer <NUM> and server <NUM> provides data to user device <NUM> to support the operation and analysis. In contrast, <FIG> may illustrate an embodiment where a server <NUM> perform the majority of the operation and analysis to determine a buffer allocation to a streaming buffer, which leverages the power and processing resources of the server.

In <FIG>, server(s) <NUM> may include a communication interface <NUM>, one or more processors <NUM>, memory <NUM>, and hardware <NUM>. The communication interface <NUM> may include wireless and/or wired communication components that enable the server(s) <NUM> to transmit data to and receive data from other networked devices. The hardware <NUM> may include additional user interface, data communication, or data storage hardware. For example, the user interfaces may include a data output device (e.g., visual display, audio speakers), and one or more data input devices. The data input devices may include, but are not limited to, combinations of one or more of keypads, keyboards, mouse devices, touch screens that accept gestures, microphones, voice or speech recognition devices, and any other suitable devices.

The memory <NUM> may be implemented using computer-readable media, such as computer storage media. Computer-readable media includes, at least, two types of computer-readable media, namely computer storage media and communications media. Computer storage media includes volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD), high-definition multimedia/data storage disks, or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other non-transmission medium that can be used to store information for access by a computing device. In contrast, communication media may embody computer-readable instructions, data structures, program modules, or other data in a modulated data signal, such as a carrier wave, or other transmission mechanism. In various embodiments, the processors <NUM> and the memory <NUM> of the server(s) <NUM> may execute a policy engine <NUM>, a gateway <NUM>, as well as other components of the core network <NUM>. Server(s) <NUM> may have access to media servers <NUM> to provide streaming content to user devices <NUM>/<NUM>.

In the illustrated embodiment, memory <NUM> includes prior device location data <NUM> and cell quality data <NUM>. In one embodiment, Key Performance Indicators (KPIs) of performance and coverage of carrier network <NUM> are collected by the OSS of the carrier network <NUM> and the KPIs may be included in cell quality data <NUM>. Each different user device on carrier network <NUM> may contribute to reporting the KPIs to carrier network <NUM>. Thus, carrier network <NUM> may maintain cell quality data <NUM> for each cell in the carrier network <NUM> and the cell quality data <NUM> may be accessed by user device <NUM> for purposes of determining a predicted QOS in a future sector that is provided coverage by a given cell in carrier network <NUM>. Prior device location data <NUM> may also be stored in memory <NUM> and all or a portion of prior device location data <NUM> may be provided to user device <NUM> for purposes of determining a predicted QOS in a future sector that is provided coverage by a given cell in carrier network <NUM>. In one embodiment, prior device location data <NUM> and cell quality data <NUM> are made available through an Application Programming Interface (API) to the user device <NUM>.

In one embodiment, the user device <NUM> sends server <NUM> a cell identifier that identifies the cell that is currently providing cellular service to the user device. User device <NUM> may also send the server <NUM> an N-<NUM> cell identifier and an N-<NUM> cell identifier, where N is the current cell, N-<NUM> is the previous cell to provide cellular service, and N-<NUM> is the cell prior to N-<NUM> that provided cellular service to user device <NUM>. Server <NUM> may respond with providing to the user device <NUM> all the neighboring cells and their neighbors along with the cell quality data <NUM> of each of the neighboring cells and/or the neighbors of the neighboring cells.

<FIG> is a block diagram showing various components of an example server(s) <NUM> within a carrier network <NUM> configured to adjust a buffer allocation based at least in part on a predicted quality of service of a predicted future sector that the user device will encounter. As previously described, <FIG> shows a server-side embodiment where the buffer allocation of streaming buffer <NUM> is dynamically adjusted based on operations and/or analysis performed in large part by server(s) <NUM> in carrier network <NUM>. This may save battery life of user device <NUM>/<NUM> and/or be a more efficient use of network resources. For example, the size of the streaming buffer <NUM> could be transmitted to user device <NUM>/<NUM> over the carrier network and the user device <NUM> could manage the stream of media content based on the size of the streaming buffer <NUM> calculated by server(s) <NUM>.

In <FIG>, server(s) <NUM> may include communication interface <NUM>, one or more processors <NUM>, memory <NUM>, and hardware <NUM>. The memory <NUM> may be implemented using computer-readable media, such as computer storage media. Computer-readable media includes, at least, two types of computer-readable media, namely computer storage media and communications media. Computer storage media includes volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD), high-definition multimedia/data storage disks, or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other non-transmission medium that can be used to store information for access by a computing device. In contrast, communication media may embody computer-readable instructions, data structures, program modules, or other data in a modulated data signal, such as a carrier wave, or other transmission mechanism. In various embodiments, the processors <NUM> and the memory <NUM> of the server(s) <NUM> may execute policy engine <NUM>, gateway <NUM>, as well as other components of the core network <NUM>. Server(s) <NUM> may have access to media servers <NUM> to provide streaming content to user devices <NUM>/<NUM>.

Memory <NUM> includes server buffer allocation manager <NUM>. In the illustrated embodiment, server buffer allocation manager <NUM> includes prior device location data <NUM>, instant device location data <NUM>, sector prediction engine <NUM>, cell quality data <NUM>, a QOS Prediction Engine <NUM>, Existing QOS data <NUM>, threshold data <NUM>, buffer adjustment engine <NUM>, and streaming buffer <NUM>. In <FIG>, the calculation of the streaming buffer is performed by the server(s) <NUM>.

Prior device location data <NUM> may include locations of the user device <NUM>/<NUM> and the times that the user device was at the locations. Server buffer allocation manager <NUM> may receive locations and/or corresponding time stamps from the user devices. The locations may be derived from GPS sensors or compasses of sensors <NUM> of the user device <NUM>. Prior device location data <NUM> may include hundreds or thousands of prior device locations with corresponding times. In an embodiment, the prior device location data <NUM> includes at least a first pairing and a second pairing, where the first pairing including a first location and a first time that a device was at the first location and the second pairing including a second location and second time that the device was at the second location.

Instant device location data <NUM> may include the instant location (and time) of a user device, such as user device <NUM>. Server Buffer Allocation Manager <NUM> may have to request the instant device location data <NUM> from user device <NUM> prior to calculating a size of streaming buffer <NUM>. The instant location of the user device may be derived from a GPS sensor of the user device <NUM> or a Wi-Fi signal that is received by the user device that can be mapped to a location, for example.

Sector prediction engine <NUM> is coupled to receive prior device location data <NUM> and instant device location data <NUM> and provide predicted sector data to QOS prediction engine <NUM> based at least in part on the prior device location data <NUM> and the instant device location data <NUM>. QOS prediction engine <NUM> receives the sector prediction data from sector prediction engine <NUM>, in the illustrated embodiment. Using the sector prediction data, the QOS prediction engine <NUM> may query cell quality data <NUM> to receive a quality of service metric data for a "cell" that provides wireless coverage to the future sector predicted by the sector prediction engine <NUM>. Based on the sector prediction data and the quality of service metric, QOS prediction engine <NUM> may determine a predicted quality of service of wireless communications from wireless carrier network <NUM> in the future sector and pass the predicted quality of service to buffer adjustment engine <NUM>.

In <FIG>, buffer adjustment engine <NUM> receives existing QOS data <NUM>, threshold level of service quality <NUM>, and the predicted quality of service from sector prediction engine <NUM>. The existing QOS data <NUM> may be determined by receiving QOS data from user device <NUM> as measured by wireless radio <NUM>.

In one embodiment, buffer adjustment engine <NUM> adjusts the streaming buffer <NUM> based at least in part on the predicted quality of service of the wireless communication from the wireless carrier network in the future sector. When the streaming buffer <NUM> is adjusted, the size of streaming buffer <NUM> may be communicated to user device <NUM>/<NUM>.

In one embodiment, the buffer adjustment engine <NUM> increases streaming buffer <NUM> by an additional buffer allocation when the predicted quality of service of the wireless communication from the wireless carrier network in the future sector is below the threshold level of service quality <NUM> and the existing QOS from the wireless carrier network is above the threshold level of service quality <NUM>.

<FIG> illustrates example buffer allocations as they relate to predicted data interruptions from a carrier network. A standard buffer allocation <NUM> of streaming buffer <NUM> may be <NUM> megabytes in a streaming video context, for example. The illustrated buffer allocations and streaming buffer <NUM> of <FIG> may be applicable to buffer allocations <NUM>, <NUM>, <NUM> and streaming buffers <NUM> and <NUM>. While a predicted quality of service in a predicted future sector is satisfactory (e.g., above a given threshold), the standard buffer allocation <NUM> is assigned to streaming buffer <NUM> in <FIG>. It is understood by those skilled in the art that the "standard" buffer allocations may differ depending on the category of media being streamed. For example, the standard buffer allocation may be larger for video streaming than it would be for audio streaming.

If a short-term interruption is predicted (based on QOS service of predicted future sector or predicted future sectors), the buffer allocation of streaming buffer <NUM> may be increased to a short-term interruption allocation size <NUM>. If a mid-term interruption is predicted (based on QOS service of predicted future sector or predicted future sectors), the buffer allocation of streaming buffer <NUM> may be increased to a mid-term interruption allocation size <NUM>. Similarly, if a long-term interruption is predicted (based on QOS service of predicted future sector or predicted future sectors), the buffer allocation of streaming buffer <NUM> may be increased to a long-term interruption allocation size <NUM>. Finally, if a total absence of coverage is predicted, (based on QOS service of predicted future sector or predicted future sectors), the buffer allocation of streaming buffer <NUM> may be increased to an offline allocation size <NUM>.

<FIG> is a flow diagram of an example process <NUM> for adjusting a buffer allocation based at least in part on a predicted quality of service of a predicted future sector that the user device will encounter. Process <NUM> is illustrated as a collection of blocks in a logical flow chart, which represents a sequence of operations that can be implemented in hardware, software, or a combination thereof. In the context of software, the blocks represent computer-executable instructions that, when executed by one or more processors, perform the recited operations. Generally, computer-executable instructions may include routines, programs, objects, components, data structures, and the like that perform particular functions or implement particular abstract data types. The order in which the operations are described is not intended to be construed as a limitation, and any number of the described blocks can be combined in any order and/or in mirror to implement the process.

In block <NUM>, prior device location data (e.g., <NUM> or <NUM>) is accessed. The prior device location data may include locations and times that the device was at the locations.

In block <NUM>, a future sector that the device will travel through is predicted based at least in part on the prior device location data.

In block <NUM>, a predicted quality of service of wireless communications from a wireless carrier network in the future sector is determined.

In block <NUM>, a streaming buffer of the streaming content is increased by an additional buffer allocation when the predicted quality of service of the wireless communication from the wireless carrier network in the future sector is below a threshold level of service quality and an existing quality of service from the wireless carrier network is at or above the threshold level.

In one embodiment, when the predicted quality of service of the wireless communication in the future sector is below the threshold level of service quality and the existing quality of service is above the threshold, process <NUM> may further include buffering additional streaming data of the streaming content into the additional buffer allocation and wirelessly streaming the additional streaming data from a wireless carrier network to the device before the device enters the future sector. The additional streaming data may be accessed from media servers <NUM> by carrier network <NUM>, for example.

In one embodiment, process <NUM> includes accessing a cell quality data set (e.g., <NUM>) where the cell quality data set includes quality of service metric data for cells in the wireless carrier network, predicting a wireless interruption time from the wireless carrier network based at least in part on the cell quality data set, and adjusting the additional buffer allocation based on the predicted wireless interruption time.

In one embodiment, process <NUM> includes measuring, with the device, KPIs of cells in the wireless carrier network that communicated with the device and populating a cell quality data set (e.g., <NUM>) with the KPIs. Hence, in one embodiment, the cell quality data set may be generated by the device itself. In another embodiment, the cell quality data set is received (at least in part) from a server within carrier network <NUM>. The cell quality data set may include KPIs of particular cells in the wireless carrier network, measurement times of the KPIs, and a cell identifier that identifies the cell for which the KPIs was measured. Determining the predicted quality of service of the future sector may include querying the cell quality data set for the KPIs associated with the cells in the wireless carrier network that has wireless coverage in the future sector.

In one embodiment, determining the predicted quality of service of the future sector further includes querying, by the device, a cell quality data set stored on the device and requesting augmented cell data from the wireless carrier network when omitted cells of the wireless carrier network that cover the future sector are omitted from the cell quality data set stored on the device. Omitted cells may be cells that the user device has not logged KPIs for or does not have KPIs for the omitted cells stored locally on the user device. Process <NUM> may further include receiving augmented cell data from the wireless carrier network where the augmented cell data includes KPIs of the omitted cells. Process <NUM> may further include augmenting the cell quality data set with augmented cell data.

As described above, the buffer allocation of a streaming buffer may be increased in order to prevent a streaming disruption when a future sector is predicted to have problematic wireless coverage. Additionally, the buffer allocation may subsequently be decreased when a future sector is predicted to have satisfactory wireless coverage as utilizing oversized streaming buffers when coverage is satisfactory is inefficient when a user is changing the streaming content (e.g., skipping a song in audio media or fast-forwarding video media). In one embodiment, process <NUM> further includes receiving additional device location data that includes at least a subsequent location and a subsequent time that the device was at the subsequent location where the subsequent time is subsequent to the times of the prior device location data. A second predicted quality of service is predicted in a second future sector subsequent to determining the predicted quality of service in the future sector and the streaming buffer of the streaming content is decreased by a second buffer allocation when the second predicted quality of service in the second future sector is above a second threshold level of service quality.

In the invention, determining the predicted quality of service of wireless communication from the wireless carrier network in the future sector includes sending a query to a cell quality data set and receiving a query response from the cell quality data set. Time-of-day data is included in the query. The cell quality data set includes quality of service metric data for cells in the wireless carrier network. The query response includes the quality of service metric data for a cell in the future sector and the quality of service metric data for the cell is specific to historical time-of-day quality of service for the cell. In this way, the prediction of the QOS of wireless communication in a future sector is specific to a time of day. For example, during rush hour traffic, the quality of service along a highway may be poor because of network congestion, whereas during midday, the QOS is satisfactory.

In one embodiment, the prior device location data includes at least a first pairing and a second pairing where the first pairing includes a first location and a first time that the device was at the first location and the second pairing includes a second location and a second time that the device was at the second location. In one embodiment, the streaming content includes at least one of video content or audio content.

In one embodiment, a mobile device includes a cellular data communication interface, processing logic, and a memory. The cellular data communication interface may include an antenna to facilitate cellular communication with a wireless carrier network. The processing logic may be coupled to the cellular data communication interface and the memory may be coupled to the processing logic. The term "processing logic" in this disclosure may include one or more processors, microprocessors, multi-core processors, and/or Field Programmable Gate Arrays (FPGAs) to execute operations disclosed herein. In some embodiments, memories (not illustrated) are integrated into the processing logic to store instructions to execute operations and/or store data. Processing logic may include analog or digital circuitry to perform the operations disclosed herein. A memory" or "memories" described in this disclosure may include volatile or non-volatile memory architectures.

The memory of the mobile device may include instructions that, when executed, cause the mobile device to perform operations including accessing prior device location data that includes locations of the mobile device and times that the mobile device was at the locations. Further operations may include predicting a future sector that the mobile device will travel through based at least in part on the prior device location data, determining a predicted quality of service of wireless communications from the wireless carrier network in the future sector, and measuring with the mobile device an existing quality of service from the wireless carrier network. locations of the mobile device and times that the mobile device was at the locations. The streaming buffer of the mobile device may be increased by an additional buffer allocation when the predicted quality of service of the wireless communication from the wireless carrier network in the future sector is below a threshold level of service quality and the existing quality of service from the wireless carrier network is at or above the threshold level.

In one embodiment, the memory of the mobile device further includes instructions that when executed by the mobile device include accessing a cell quality data stored in the memory, predicting a wireless interruption time, and transmitting a buffer adjustment request to the wireless carrier network based on the predicted wireless interruption time. The cell quality data set may include quality of service metric data for cells in the wireless carrier network. The wireless interruption time may be predicted based at least in part on the cell quality data set.

In one embodiment, when the predicted quality of service of the wireless communication in the future sector is below the threshold level of service quality and the existing quality of service is above the threshold level, the memory of the mobile device includes further instruction that, when executed, cause the mobile device to perform further operations including receiving addition streaming data of streaming content into the additional buffer allocation of the streaming buffer. The additional streaming data may be received from the wireless carrier network (e.g., network <NUM>). Therefore, once the streaming buffer allocation is increased, the additional buffer allocation may be filled with additional streaming data from a wireless carrier network that has access to the streaming media.

In one embodiment, increasing the streaming buffer of the streaming content includes transmitting a buffer increase request to the wireless carrier network.

As described with respect to <FIG>, one or more computing devices on a wireless carrier network may perform a significant amount of processing in some embodiments. In one embodiment, one or more computing devices of the wireless carrier network includes one or more processors and memory having stored instructions that when executed by the one or more processors, cause the one or more processors to perform operations including: accessing prior device location data that includes locations of a device and times the device was at the locations; predicting a future sector that the device will travel through based at least in part on the prior device location data; determining a predicted quality of service of wireless communications from the wireless carrier network in the future sector; receiving, from the device, an existing quality of service from the wireless carrier network; and adjusting a streaming buffer of streaming content based at least in part on the predicted quality of service of the wireless communication from the wireless carrier network in the future sector.

In one embodiment, adjusting the streaming buffer of the streaming content includes increasing the streaming buffer of the mobile device by an additional buffer allocation when the predicted quality of service of the wireless communication from the wireless carrier network in the future sector is below a threshold level of service quality and the existing quality of service from the wireless carrier network is above the threshold level.

In one embodiment, adjusting the streaming buffer of the streaming content includes decreasing the streaming buffer of the streaming content by a buffer allocation when the predicted quality of service in the future sector is above the existing quality of service.

In one embodiment, the prior device location data is sent to the one or more computing devices by the device and the prior device location data includes a first prior cell identifier representing a first prior cell that provided the wireless communication to the device at a first time and a second prior cell identifier representing a second prior cell that provided the wireless communication to the device at a second time prior to the first time.

In one embodiment, determining the predicted quality of service of the wireless communications from the wireless carrier network further includes: receiving, from the device, an existing cell identifier representative of the existing cell that provides the existing quality of service to the device; accessing key performance indicators (KPIs) of neighbor cells of the wireless carrier network that are neighbors to the existing cell, wherein the neighbor cells provide wireless data coverage in the future sector; and generating the predicted quality of service based at least in part on the KPIs of the neighbor cells.

Claim 1:
A computer-implemented method of buffering streaming content, the computer-implemented method comprising:
accessing prior device location data (<NUM>; <NUM>) including locations of a device (<NUM>; <NUM>) and times that the device was at the locations;
predicting a future location that the device will travel through based at least in part on the prior device location data;
determining a predicted quality of service (<NUM>; <NUM>) of wireless communications from a wireless carrier network (<NUM>) in the future location, wherein the predicted quality of service is specific to a time of day, and wherein determining the predicted quality of service comprises:
sending a query to a cell quality data set (<NUM>; <NUM>), wherein time-of-day data is included in the query, and wherein the cell quality data set includes quality of service metric data for cells in the wireless carrier network; and
requesting augmented cell data from the wireless carrier network when omitted cells of the wireless carrier network that cover the future location are omitted from the cell quality data set;
receiving the augmented cell data from the wireless carrier network, wherein the augmented cell data includes key performance indicators, KPIs, of the omitted cells; and
augmenting the cell quality data set with the augmented cell data;
receiving a query response from the cell quality data set, wherein the query response includes the quality of service metric data for a cell in the future location and the quality of service metric data for the cell is specific to historical time-of-day quality of service for the cell; and
increasing a streaming buffer (<NUM>; <NUM>; <NUM>) of streaming content by an additional buffer allocation when the predicted quality of service of the wireless communication from the wireless carrier network in the future location is below a threshold level of service quality (<NUM>; <NUM>) and an existing quality of service (<NUM>) from the wireless carrier network at the current location of the device is above the threshold level.