Stream selection for enhanced media streaming

Information

  • Patent Grant
  • 7949775
  • Patent Number
    7,949,775
  • Date Filed
    Thursday, August 7, 2008
    15 years ago
  • Date Issued
    Tuesday, May 24, 2011
    13 years ago
Abstract
The present disclosure relates to playback of video/audio streaming media data to provide a glitch-free experience. The system adapts the media stream to the user connection in order to provide the glitch-free experience. Stream selection can be made using a heuristics module located on the playback device that analyzes various aspects of the playback to make intelligent decisions about which media stream to download from a network.
Description
BACKGROUND

With the increasing popularity of playing streaming audio and video over networks such as the Internet, there is a need for optimizing the data transferred from a server to a client such that the client's experience is maximized even if network conditions during playback are inconsistent. Optimizing the client's experience involves making encoding decisions such that the video can be transferred and reconstructed with a minimal number of errors.


The term “streaming” is typically used to indicate that the data representing the media is provided by a host computer over a network to a playback device (i.e., a media playback computer implemented as any of a variety of conventional computing devices, such as a desktop PC, a notebook or portable computer a cellular telephone or other wireless communication device, a personal digital assistant (PDA), a gaming console, etc.) The client computer typically renders the streaming content as it is received from the host, rather than waiting for the entire file to be delivered.


The quality level is generally dictated by the bit rate specified for the encoded audio or video portions of the input stream. A higher bit rate generally indicates that a larger amount of information about the original audio or video is encoded and retained, and therefore a more accurate reproduction of the original input audio or video can be presented during video playback. Conversely, a lower bit rate indicates that less information about the original input audio or video is encoded and retained, and thus a less accurate reproduction of the original audio or video will be presented during video playback.


Generally, the bit rate is specified for encoding each of the audio and video based on several factors. The first factor is the network condition between the server and the client. A network connection that can transfer a high amount of data indicates that a higher bit rate can be specified for the input video that is subsequently transferred over the network connection. The second factor is the desired start-up latency. Start-up latency is the delay that a video playback tool experiences when first starting up due to the large amount of data that has to be received, processed, and buffered. Start-up latency can also occur after a seek operation, where the user selects variable positions in the streaming content to view. A third factor is the processing capabilities of the playback device. The fourth factor is the tolerance to glitching. Glitching occurs when the content is not displayed at the rate it was authored causing the playback device to run out of data to display. In most cases any amount of start-up latency or glitching is intolerable, and it is therefore desirable to optimize the bit rate specified such that the start-up latency and the glitching are minimized or eliminated.


SUMMARY

The present disclosure relates to playback of video/audio streaming media data to provide a glitch-free experience. The system adapts the media stream to the user connection in order to choose the most desirable stream to avoid glitches. For example, in the case where there is interference (e.g., a microwave being used near a wireless device), the quality of the media stream is lowered in order to avoid glitches. Playback criteria, such as a buffer level or a quality measurement of a segment, can by dynamically analyzed in order to determine a next media stream to download.


Stream selection can be made using a heuristics module located on the playback device that analyzes various aspects of the playback to make intelligent decisions about which media stream to download from a network.


The foregoing and other objects, features, and advantages of the invention will become more apparent from the following detailed description, which proceeds with reference to the accompanying figures.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 illustrates an exemplary environment suitable for sending streaming media content over a network from a host device to a playback device.



FIG. 2 illustrates an example encoder on the host device.



FIG. 3 illustrates example media streams having the same content at different fixed bit rates.



FIG. 4 illustrates an example media streams having the same content at variable bit rates.



FIG. 5 illustrates an example application for rendering streaming media content on the playback device wherein a heuristics module is in the same application as a media pipeline.



FIG. 6 illustrates an example application for rendering streaming media content on the playback device wherein the media pipeline is in a platform and the heuristics module is in a downloadable (e.g., plug-in) program.



FIG. 7 illustrates an exemplary computing environment.



FIG. 8 illustrates an exemplary media pipeline on the playback device.



FIG. 9 illustrates a detailed view of a downloadable program coupled to a network.



FIG. 10 is a flowchart of a method for rendering content with minimized glitches.



FIG. 11 is a flowchart of a method for using both buffer level and quality in determining which media stream to download from a server.



FIG. 12 is a flowchart of a method for dynamically modifying the quality level in determining which media stream to download from a server.



FIG. 13 is a detailed flowchart of a method for dynamically modifying quality.



FIG. 14 is a flowchart for determining a media stream to render using buffer levels.



FIG. 15 is an example of a buffer level verses time graph with specific levels shown.



FIG. 16 is an exemplary application for rendering streaming media data using a quality manager.



FIG. 17 is a flowchart of a method for using the quality manager to replace frames.



FIG. 18 illustrates safety and observation periods used by the quality manager.



FIGS. 19-20 illustrates network heuristics and resource heuristics that cooperate to decide on a bit rate to download.





DETAILED DESCRIPTION

As used in this application and in the claims, the singular forms “a,” “an” and “the” include the plural forms unless the context clearly dictates otherwise. Additionally, the term “includes” means “comprises.” Although the operations of some of the disclosed methods and apparatus are described in a particular, sequential order for convenient presentation, it should be understood that this manner of description encompasses rearrangement, unless a particular ordering is required by specific language set forth below. For example, operations described sequentially can in some cases be rearranged or performed concurrently.


Any of the methods described herein can be performed (at least in part) using software comprising computer-executable instructions stored on one or more computer-readable media. Furthermore, any intermediate or final results of the disclosed methods can be stored on one or more computer-readable media. It should be understood that the disclosed technology is not limited to any specific computer language, program, or computer. For instance, a wide variety of commercially available computer languages, programs, and computers can be used.



FIG. 1 illustrates an exemplary environment 100 which can be suitable for transmitting media content being streamed over a network 106 from a host computer device 102 to a playback computer device 104. The network 106 can be any of a variety of conventional network topologies and types (including optical, wired and/or wireless networks), using a variety of conventional network protocols (including public and/or proprietary protocols). The network 106 can include, for example, a home network, a corporate network, or the Internet, as well as possibly at least portions of one or more local area networks (LANs) and/or wide area networks (WANs) or telephone networks.


A host device 102 generally stores media content and streams media content to the playback device 104. The playback device 104 can receive streaming media content via the network 106 from host device 102 and plays it for a user. Additionally, the playback device 102 can request a desired bit rate from the host device, which offers multiple bit rates to download. Host device 102 may be implemented as any of a variety of conventional computing devices, including, for example, a desktop PC, a notebook or portable computer, a workstation, an Internet appliance, and combinations thereof. Playback device 104 may also be implemented as any of a variety of conventional computing devices, including, for example, a desktop PC, a notebook or portable computer, a workstation, an Internet appliance, a gaming console, a handheld PC, a cellular telephone or other wireless communications device, a personal digital assistant (PDA), a set-top box, and combinations thereof.


Host device 102 can make any of a variety of data available for streaming to playback device 104, including content, such as audio, video, text, images, animation, and the like. However, as used herein with respect to the exemplary embodiments described below, media content is intended to represent audio/video (A/V) content or just video content. Furthermore, references made herein to “media content”, “streaming media”, “streaming video”, “video content”, and any variation thereof are generally intended to include audio/video content. The term “streaming” is used to indicate that the data representing the media content is provided over a network 106 to a playback device 104 and that playback of the content can begin prior to the content being delivered in its entirety.



FIG. 2 illustrates an exemplary encoding tool (200) that can be implemented on the host device 102. The tool includes a segmenter (210) that accepts input video (205) and splits the input video into a plurality of segments each comprising a certain number of frames. Input video generally refers to a stream comprising both audio components and video components. In certain embodiments, the segments each comprise 60 frames. In other embodiments the segments can vary across a range of values such as comprising between 30 frames to 90 frames. The number of frames in the segment can be based on factors such as scene changes in the input video (205). For example, if a segment contains a scene change, the frames before the scene change could be drastically different than the frames after the scene change.


The segmenter (210) outputs the segments to a bit rate controller (215). The bit rate controller (215) analyzes each segment and selects bit rates for one or more bit rate layers for each of the segments. A bit rate layer is a layer comprising a specific bit rate used to encode the input video (205). The number of bit rate layers and their respective bit rates for each segment may be affected by factors associated with the segment such as the number of frames in the segment or the complexity of the input video (205) in the given segment. Additionally, the number of bit rate layers and their corresponding bit rates may be affected by factors not associated with the given segment such as limits on the size of the file or the maximum or minimum bandwidth of the network that the encoded input video (205) will be transferred through. In one embodiment, the bit rate controller (215) selects the bit rates for the bit rate layers for each of the segments independently from each of the other segments. Thus, a given segment may be encoded at the same or different bit rates as any other segment.


The segmenter (210) also outputs the segments to an encoder (220), and the bit rate controller (215) signals the bit rate layers for each segment to the encoder (220). The encoder (220) can encode according to a Windows Media Video or VC-1 format, MPEG-x format (e.g., MPEG-1, MPEG-2, or MPEG-4), H.26x format (e.g., H.261, H.262, H.263, or H.264), or other format. The encoder (220) may also be able to encode according to one or more audio standards such as WAV, FLAC, MP3, WMA, or some other standard. In some embodiments the encoder (220) encodes each segment as each bit rate layer and outputs a series of chunks in an encoded bit stream (225). Generally speaking, a chunk is a segment encoded as a particular bit rate layer. Thus, the encoder (220) can produce one or more chunks for each segment. In other embodiments, the encoder may encode the segment with less than all of the available bit rate layers. This may occur if, for example, a user defines a certain amount of time available for encoding, or conditions make certain bit rate layers un-necessary or undesirable.


As is well-understood in the art, the embodiment of FIG. 2 can be modified to encode a continuous media stream that is not divided into chunks. It is, however, desirable to be able to extract portions of the continuous media stream and to be able to logically define different portions of the media stream for extraction, if desired.


In certain embodiments, the encoding tool (200) may include a splitter (not shown) that splits the input video (205) into a separate video component and an audio component. In these embodiments, a separate segmenter, bit rate controller and encoder can be used to encode each of the video component and the audio component. The encoder for the video component can encode according to WMV or VC-1 format, MPEG-x format, H.26x format, or some other format. The encoder for the audio component can encode according to WAV, FLAC, MP3, WMA, or some other standard. Additionally, the segments for the video component and the segments for the audio component may be selected independently of each other. In this embodiment the segments of the video component may, but do not have to, comprise the same frames as the segments of the audio component.



FIG. 3 shows multiple bit rates 1-N for particular content generated by the encoding tool of FIG. 2. The content is identical at each bit rate, but the quality increases with higher bit rates. In the illustrated example, there are N bit rates shown, where N could be any number. In particular embodiments, N is equal to 4. Additionally, the media streams can be divided into segments (also called fragments or chunks). The fragments may range from two to five seconds each in certain embodiments, although any duration may be used. A particular example includes video segments that are 2 seconds in length and audio segments are 5 seconds in length. In the example of FIG. 3, the bit rates are substantially constant amounts (e.g., 1 kbps, 2 kbps, etc.).



FIG. 4 is an example of variable bit rates 400 that may also be used with any of the embodiments described herein and that is generated by the encoding tool. Variable bit rates allocate a different amount of data to a scene based on complexity. Some scenes require a lower bit rate, such as dark scenes with low levels of movement. Other scenes, such as action scenes, require a higher bit rate because the scenes are more complex. A lower complexity scene can be seen between 0 and 50 seconds and has a small bit rate distribution between the media streams. The higher complexity scenes have a high amount of bit rate distribution as seen at about 100 seconds. In a case with such variance in the bit rates, although the bit rate of one media stream may, on average, be the highest, that media stream's bit rate may fall below the maximum bit rate for other media streams. For purposes of illustration, the bit rates are classified as index 1, 2, 3, . . . N. The bit rates for index 1 and 2 are shown at 402, 404, respectively. At a time shown at 406, the bit rate for index 1 is about 1050 bps. However, as can be seen at a time shown at 404, index 2 is about 2000 bps, which is a higher bit rate than index 1 at time 406. Thus, although index 1 is always higher than index 2 at any particular point of time, over the entire time period, index 2 can peak above values of index 1.



FIG. 5 illustrates an application 502 loaded on a playback device for rendering content. The application 502 may be run on any desired playback device that renders a media stream, such as a gaming console, a cellular phone, a personal digital assistant, in a browser on a computer, etc. The application can include a network communication module 504, a source filter 506, a media pipeline 508, a UI rendering module 510, and a heuristics module 512. The network communication module 504 generally includes software to communicate with a network server from which the media content is streamed. Thus, it is a downloader to obtain the media stream from the network. One example network communication module includes software for implementing a hypertext transfer protocol when communicating with a Web server. Other well-known protocols can be used depending on the playback device. The network communications module chooses an appropriate bitrate of a media stream as directed by the heuristics module. The source filter 506 can be coupled to the network communication module in order to receive audio and video content from the network. The source filter extracts the core media data (by parsing the file, if necessary) and splits the audio and video into two streams for use by the media pipeline. An example media pipeline 508 is shown in FIG. 8 and is described more fully below. The source filter 506 can be included in the media pipeline or separated there from. In any event, the media pipeline decodes the audio and video streams and provides the decoded streams to the UI rendering module 510 for display. Alternatively, the media pipeline 508 can be coupled to a storage device (not shown) that persistently stores the uncompressed data stream. Any variety of media pipelines may be used. The heuristics module 512 monitors the network (via the network communication module 504) and the source filter to make intelligent decisions about which bit rate to request from the server in order to minimize glitches that are rendered on the playback device.



FIG. 6 illustrates another possible environment used to render content on the playback device 104. The lowest layer (not shown) is an operating system executing on the playback device. A platform 602 is an executable file that is downloaded one time from a web server and remains resident on the playback device 104. The platform 602 includes a media pipeline 604 that is explained further below in FIG. 8, a simple source module 606, and a UI rendering module 608 used to render the media stream. A download management program 610 is typically downloaded each time a website is accessed and includes a managed source 612 and a heuristics module 614, which include the intelligence to make decisions about a desired bit rate to download from the host device 102. The purpose of the simple source 606 is to communicate with the managed source 612. Both the managed source 612 and the heuristics module 614 are described further below. The download management program 610 and platform 602 are part of an application 620 that is loaded in a browser 622.



FIG. 7 illustrates a generalized example of a suitable computing environment 700 in which several of the described embodiments may be implemented. The computing environment 700 is not intended to suggest any limitation as to scope of use or functionality, as the techniques and tools may be implemented in diverse general-purpose or special-purpose computing environments.


With reference to FIG. 7, the computing environment 700 includes at least one processing unit 710 and memory 720. Similar computing devices may be used as either the host device 102 or the playback device 104. This most basic configuration 730 is included within a dashed line. The processing unit 710 executes computer-executable instructions and may be a real or a virtual processor. In a multi-processing system, multiple processing units execute computer-executable instructions to increase processing power. The memory 720 may be volatile memory (e.g., registers, cache, RAM), non-volatile memory (e.g., ROM, EEPROM, flash memory, etc.), or some combination of the two.


A computing environment may have additional features. For example, the computing environment 700 includes storage 740, one or more input devices 750, one or more output devices 760, and one or more communication connections 770. An interconnection mechanism (not shown) such as a bus, controller, or network interconnects the components of the computing environment 700. Typically, operating system software (not shown) provides an operating environment for other software executing in the computing environment 700, and coordinates activities of the components of the computing environment 700.


The storage 740 may be removable or non-removable, and includes magnetic disks, magnetic tapes or cassettes, CD-ROMs, DVDs, or any other medium which can be used to store information and which can be accessed within the computing environment 700. The storage 740 stores instructions for the software 780 implementing the video encoder and/or decoder.


The input device(s) 750 may be a touch input device such as a keyboard, mouse, pen, or trackball, a voice input device, a scanning device, or another device that provides input to the computing environment 700. The input device(s) 750 may be a sound card, video card, TV tuner card, or similar device that accepts audio or video input in analog or digital form, or a CD-ROM or CD-RW that reads audio or video samples into the computing environment 700. The output device(s) 760 may be a display, printer, speaker, CD-writer, or another device that provides output from the computing environment 700.


The communication connection(s) 770 enable communication over a communication medium to another computing entity. The communication medium conveys information such as computer-executable instructions, audio or video input or output, or other data in a modulated data signal. A modulated data signal is a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media include wired or wireless techniques implemented with an electrical, optical, RF, infrared, acoustic, or other carrier.


The techniques and tools can be described in the general context of computer-readable media. Computer-readable media are any available media that can be accessed within a computing environment. By way of example, and not limitation, with the computing environment 700, computer-readable media include memory 720, storage 740, communication media, and combinations of any of the above.


The techniques and tools can be described in the general context of computer-executable instructions, such as those included in program modules, being executed in a computing environment on a target real or virtual processor. Generally, program modules include routines, programs, libraries, objects, classes, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The functionality of the program modules may be combined or split between program modules as desired in various embodiments. Computer-executable instructions for program modules may be executed within a local or distributed computing environment.


For the sake of presentation, the detailed description uses terms like “produce” and “encode” to describe computer operations in a computing environment. These terms are high-level abstractions for operations performed by a computer, and should not be confused with acts performed by a human being. The actual computer operations corresponding to these terms vary depending on implementation. Generally, the computing environment 700 can be used as the playback device 104.



FIG. 8 shows an example of the media pipeline 804 in more detail. The illustrated media pipeline is only an example of a possible media pipeline that can be used. In this example, a source filter 800 is included in the media pipeline and is coupled to the network to receive audio and video content from the network. The source filter can extract the core media data (by parsing the file, if necessary) and can split the audio and video into two streams. Two decoders 806, 808 can be used to decompress the encoded audio and video, respectively. Two transform modules 810, 812 can transform the decompressed audio and video signals. The transform operations can include a variety of operations, such as changing color space, changing scale, adding special effects, etc. Finally, sinks 814, 816 can be used to transmit the content to the audio and video drivers, respectively.



FIG. 9 shows the download management program 610 in more detail. The managed source 612 reads data from the network (e.g., Internet), parses the data received from the network (e.g., removes header information) and communicates with the heuristics module about which of multiple streams to download from a server on the network. The heuristics module 614 instructs the managed source 612 which bit rate to pull next.


The content can be divided into segments (called chunks) that are generally 2-5 seconds each. The chunks are available at multiple bit rates. After a predetermined period of time, the quality and bit rate are reevaluated to ensure a glitch-free display of the media stream. The content need not be divided into segments. Rather, the media stream can be continuous with an understanding of logical or actual entry points into the media stream.



FIG. 10 shows a flowchart of a method for downloading one of multiple media streams. In process block 1000, the playback device 104 can dynamically analyze playback criteria. Thus, the playback device can analyze the playback criteria while the media stream is being rendered. The playback criteria can relate to one or more of the following factors:

    • 1) fast start-up;
    • 2) the current and/or historical bandwidth of the network;
    • 3) the current and/or historical bandwidth of the playback device;
    • 4) the capabilities of the playback device; and
    • 5) buffer levels and/or quality of the media stream.


In process block 1002, the playback device 104 can determine, based on an analysis of the playback criteria, which of multiple available media streams to retrieve from a server computer coupled to the playback device. Finally, in process block 1004, the playback device 104 can render the media stream with minimized glitches due to making intelligent choices about which bit rate to download. A playback system is glitch free when the renderer does not run out of data to play. Another reason for a glitch is that the content is not being displayed at the rate it was authored.



FIG. 11 is a flowchart of a method for choosing which media stream to download from a server computer using buffer levels and quality of the media stream being displayed. In process block 1100, the buffer level of the playback device and quality are monitored. In process block 1102, based on the monitoring of the buffer level and quality, the heuristics module makes intelligent choices about which media stream to request from the server. In process block 1104, the playback device receives the media stream from the server in order to provide a display with minimized glitches.



FIG. 12 is a flowchart of a method showing how both quality and buffer levels are used to determine a next chunk of a media stream to download. In process block 1200, the quality level is selected for the next media data (e.g., chunk) to download. In process block 1202, a determination is made whether the quality level could result in the buffer on the playback device to fall below a predetermined threshold (e.g., 5 seconds of playback). If so, decision block 1204 is answered in the affirmative and a new quality level is dynamically chosen (process block 1206). If the buffer levels will be maintained above the predetermined threshold, then in process block 1208, the media stream (e.g., a chunk) is downloaded from the server.



FIG. 13 provides a detailed example of a particular embodiment that can be used by the heuristic module in order to render content. The algorithm can be designed to select a bitrate stream for the next playback chunk. Some of the goals of the algorithm can include:


1) Provide a glitch-free experience so that the client playback device does not run out of data in its buffer while streaming.


2) Use the available network bandwidth to deliver the highest quality audio/video experience.


3) Provide consistent video quality when the user's bandwidth is stable.


First, it is desirable to obtain the current user bandwidth (e.g., bits per second) and the current buffer level (e.g., by milliseconds). In order to find the best sustainable quality (i.e., the target quality), it is desirable to predict the end buffer size and minimum buffer size for a predetermined number of chunks (e.g., 60 chunks). This predetermined number can be configurable. Assuming each chunk is 2 seconds long, the 60 chunks results in 120 seconds of video playback (of course other time durations and chunk numbers can be used). Predicting the end buffer and minimum buffer size ensures the client has a safe buffer for glitch-free media playback. Looking ahead for a predetermined number of chunks allows the end-user to see consistent video qualities for the next few minutes. Once the target quality is obtained, a selection is made on which media stream to download depending on which media stream has quality that most closely matches the target quality. The source filter can then download the selected chunk for future playback. This procedure is repeated for each chunk which has a different time during playback so that if the bandwidth changes, the source filter can dynamically choose the appropriate chunks for later playback.


The following shows example code illustrating how to select the next video/audio chunk.














Function PredictBuffer( _in bandwidth, _in ProposedQuality,


_out minimumbuffer, _out endbuffer )


{


 endbuffer = Current buffer size


 minimumbuffer = endbuffer;


 for( chunkindex = currentindex to next 60 chunks)


 {


  scan all streams for chunkindex, find the chunk with a nearest video


quality to ProposedQuality


  endbuffer = Endbuffer + (chunkduration − ( chunksize/bandwidth ))


  if( endbuffer < minimumbuffer )


   minimumbuffer = endbuffer;


  }


 }









In process block 1300, the variables for sustainable quality and nonsustainable quality are initialized. In process block 1302, a prediction is made for the buffer size. A midpoint between the sustainable and nonsustainable variables is used. In decision block 1304, if the minimum buffer size is more than a first predetermined period of time (e.g., 5 seconds) and the end buffer is greater than a second predetermined period of time (e.g., 15 seconds) then in block 1306, the quality is sustainable and the variable for sustainable quality is calculated as the midpoint between the nonsustainable and the sustainable variables. If decision block 1304 is answered in the negative, then in process block 1308, the quality is not sustainable and the variable for non-sustainability is set as the midpoint between the variables for sustainable and nonsustainable. In decision block 1310, a check is made to determine if the variable for non-sustainability less sustainability is greater than 1. If no, then the sustainable quality variable is used indicating that the two variables are close together. If yes, then the procedure starts over again in process block 1302.


Thus, an iterative process is used to determine the next chunk of data to download that has target quality. The goal is to keep the quality the same for a predetermined number of chunks to keep video quality stable.


Returning briefly to FIG. 4, the quality manager can decide to choose a lower quality bit rate during the period between times 0-50 seconds because the bit rate distribution is low. Thus, when bit rate distribution is low, the highest bit rate requires more time to download, but does not offer much higher quality than streams with a lower bit rate. On the other hand, at time 100 seconds, there is a wide distribution of bit rates and it may be desirable to select the highest bit rate to ensure high quality. This highest bit rate may exceed the available bandwidth of the network, but the quality manager sacrifices by choosing to conserve time by downloading lower bit rates than the available bandwidth during low complexity scenes so that more time can be spent downloading higher complexity scenes. Thus, the quality manager makes intelligent decisions to maintain relatively constant quality by downloading a media stream that is lower than it is capable of downloading during low-complexity scenes to conserve bandwidth for higher complexity scenes. By so doing, the bit rates that exceed the available bandwidth can be used.



FIG. 14 is a flowchart of a method regarding how the heuristics module chooses a bit rate to download based on buffer levels. In process block 1400, the playback device 104 is capable of pulling content from a server at any one of multiple bit rates over the Internet. In process block 1402, the heuristics module monitors the buffer level that is stored on the playback device (e.g., the buffer can be maintained in the managed source 312). There are variations in the rate at which data is received from the network, due to noise, etc. Thus, it is desirable to ensure that the buffer in maintained at a level so that the renderer does not run out of data and create a glitch. The buffer is maintained in a safety zone having a high and low threshold. If the buffer begins to drop due to network bandwidth, then a lower rate can be selected to return the buffer to the safety zone. If the buffer is full, then the heuristics module can select a higher bit rate to optimize quality. In process block 1404, the heuristics module selects the bit rate so that the buffer level is maintained in the safety zone between high and low limits.


There are multiple options for monitoring buffer levels including monitoring the number of bytes in the buffer and monitoring the amount of time remaining to render. It is desirable at start-up to select a low bit rate in order for the buffer to reach the safety zone. After that, the selected bit rate can be increased to improve quality.



FIG. 15 is a graph showing the buffer levels as a function of time. A slope 1502 is used to determine the rate at which the buffer levels are rising and falling. Based on this slope, a determination can be made on the next bit rate to download. For example, if the slope is decreasing rapidly, it may be desirable to drop the bit rate more quickly. In the specific example of FIG. 15, the high and low limits are shown as a duration of time remaining to render (i.e., 17 and 12 seconds). If the buffer is at the maximum level or above, higher quality chunks can be downloaded for future rendering because the playback device is not struggling to keep up. Conversely, if the buffer is at the lower limit or below, lower quality chunks can be downloaded in order to increase the buffer levels. Keeping the buffer between threshold limits ensures glitches are minimized or eliminated.


To increase the bit rate, the heuristics module can also take into account the historic bit rate that was acceptable in addition to the buffer levels. In order to maintain the historic data, the heuristics module can monitor the time and size of a file that was downloaded in order to determine the actual bandwidth from the client perspective.


Taking quality into consideration is particularly advantageous when variable bit rates are available. Thus, rather than having bit rates that are relatively constant, variable bit rates relate to content that is not encoded at a fixed bit rate. But variable bit rates provide additional challenges in that if the heuristics module selected the second index level of bit rates, it may be different than the second level was at a previous point in time. In such a case, it is possible to allocate lower bandwidth for quality (e.g., low motion) scenes and higher bandwidth for high quality (e.g., high motion) scenes. Thus, the heuristics module can take into account quality and size in making a determination about what stream to choose.


Many past models maintained the bit rate below the bandwidth of the network. However, when taking quality into consideration, low quality scenes can be utilized by lowering the bit rate in order to reach a high buffer level. Then for high quality scenes, a bit rate can be used that is higher than the bandwidth. The high quality scene will take longer to download, but with the buffer at a high level, the playback device has sufficient time to download the high quality segments.



FIG. 16 shows a browser 1600 on the playback device 104. An application 1602 includes a download management program 1604 and a platform 1606. The application is similar to that previously described, but a quality manager 1608 is part of the heuristics module 1610. The quality manager 1608 monitors the playback device 104 to determine if any frames are being dropped during playback. For example, it is possible that the CPU on the playback device 104 is too slow to decode the frames or process the frames resulting in frames being dropped. The quality manager 1608 monitors the number of frames that the media pipeline 1612 is presenting. If the frame rate drops below a desired threshold (not due to the network), then it assumes there is a blockage somewhere on the playback device 104 and temporarily banes the current bit rate. By switching to a lower bit rate, the CPU processing time is less and frames should not be dropped. After a period of time, the quality manager 1608 can try to switch back to the bit rate that was banned in order to determine if conditions have changed to allow for the higher bit rate.



FIG. 17 shows another feature of the quality manager 1608. In process block 1700, content is downloaded at a first bit rate and stored in a buffer on the playback device 104, such as a buffer stored in the managed source. In process block 1702, the quality manager 1608 monitors the number of frames being dropped by the media pipeline 1612. In process block 1704, if the number of frames falls below a desired threshold, the quality manager 1608 selects a more suitable chunk, which might be a lower bit rate, a lower complexity, or another criteria. In process block 1706, frames already downloaded at the higher bit rate are replaced with frames downloaded at the lower bit rate. Thus, if 20 seconds of content is already loaded in the buffer at a high bit rate, it is preferable to not continue to lose frames for the next 20 seconds. Instead, some segments of the same content already downloaded at the high bit rate are re-downloaded at the lower bit rate. As much content as possible is replaced while maintaining the buffer levels in order to continually reduce the number of frames lost. Thus, the quality manager has the ability to lower the bit rate (or resolution) of content in response to detection of bottlenecks in the system.


The number of levels that the bit rate drops depends on the number of frames being dropped. FIG. 18 shows a graphical representation wherein the Y-axis is the bit rates being played and the X-axis shows time. For a first period of time, a bit rate shown at 1800 is played and an acceptable number of frames are dropped. Thus, the heuristics module can switch to a higher bit rate shown at 1802. If the playback device 104 cannot handle the higher bit rate, it generally is not instantaneous that frames are dropped. Rather, it takes a period of time. Thus, there is a safety period 1806 whereby the number of frames being dropped is monitored. In an observation period 1808 there are a number of parameters analyzed, such as CPU utilization, frames dropped, etc. It is during the observation period that the quality manager 1608 decides to ban the higher bit rate and switch back to the lower bit rate 1810. Each change in bit rate brings a new safety period and observation period.



FIG. 19 shows how the heuristics module chooses an acceptable bit rate. Both a network heuristics module 1900 and resource heuristics module 1902 operate independently. The network heuristics module 1900 monitors network bandwidth, while the resource heuristics module 1902 monitors the playback device 104. Other parameters might also be used, such as memory usage or CPU utilization. Both the network heuristics module and the resource heuristics module read and write to a table 1904 of acceptable bit rates. Where both modules agree on an acceptable bit rate can be considered an intersection point in the table, which is selected as the ideal bit rate. Thus, the network heuristics and resource heuristics cooperate to determine an ideal bit rate.



FIG. 20 is a flowchart of a method showing the network heuristics and resource heuristics cooperating together. In process block 2000, the client resources are monitored to determine the optimal bit rate. In process block 2002, the network resources are monitored to determine the optimal bit rate. In process block 2004, based on the client resources as monitored by the resource heuristics and the network resources as monitored by the network heuristics, a determination is made to select the optimal bit rate that is suitable to both.


Thus, the quality manager monitors, in real time, some parameters (such as rendered and/or dropped frames per second) and utilizes those as input to a heuristics module that will automatically disable the video resolutions that cannot be appropriately processed, and select those (smaller resolutions) that would give a better user experience.


It should be noted that the parameters described herein can be user-modifiable and stored in a configuration file. For example, the buffer threshold levels can be set in the configuration file. Such a configuration file can be stored on a server or a client.


Those skilled in the art will recognize that although the media streams are generally described as being downloaded in chunks, the media stream can be instead a continuous stream with actual or logical entry points to be able to extract portions of the stream. As such, the media stream can be divided into virtual fragments. Such a continuous media stream can be used with any embodiments described herein.


Additionally, different characteristics of the media streams can be used for proper rendering. Such characteristics can be provided in a number of ways to the playback device. The characteristics can include one or more of the following: bit rate, quality, resolution, duration, etc.


In view of the many possible embodiments to which the principles of the disclosed invention may be applied, it should be recognized that the illustrated embodiments are only preferred examples of the invention and should not be taken as limiting the scope of the invention. Rather, the scope of the invention is defined by the following claims. We therefore claim as our invention all that comes within the scope of these claims.

Claims
  • 1. A method of rendering a media stream on a playback device, comprising: dynamically analyzing playback criteria while rendering the media stream using a network heuristics module that monitors network bandwidth and a resource heuristics module that monitors the playback device;based on the analysis, determining, in the playback device, which of multiple available media streams to retrieve from a network in order to minimize glitches during the playback, the multiple available media streams being the same content encoded at different bit rates, the analysis including agreeing on a encoded bit rate through intersection of acceptable encoded bit rates for both the network heuristics module and the resource heuristics module;retrieving the determined media stream from the network; andrendering the media stream with minimized glitching.
  • 2. The method of claim 1, wherein the playback criteria includes a buffer level used during playback or a quality measurement of a segment.
  • 3. The method of claim 2, wherein the buffer level relates to a number of bytes in a buffer or an amount of time remaining in the buffer to playback.
  • 4. The method of claim 1, wherein the different bit rates are constant bit rates or variable bit rates.
  • 5. The method of claim 1, wherein the playback device includes one of the following: a computer, a mobile phone, a gaming console, and a television; and wherein the network is the Internet.
  • 6. The method of claim 1, wherein the media stream is divided into fragments of a specified time duration.
  • 7. The method of claim 1, wherein the dynamic analysis occurs in a download management program that is a plug-in to a browser and that is dynamically loaded each time a website is accessed.
  • 8. The method of claim 1, wherein the playback criteria includes analyzing empirical data obtained during the playback.
  • 9. The method of claim 8, wherein the empirical data includes current and historical network bandwidths.
  • 10. The method of claim 8, wherein the empirical data includes a speed with which the playback device displays content.
  • 11. A method of rendering a media stream on a playback device, comprising: selecting, from the playback device, a bit rate associated with the media stream to download from a network;storing the media stream in a buffer on the playback device;monitoring a buffer level of data stored in the buffer; andmodifying, in the playback device, the selected bit rate to download based on the buffer level in order to minimize glitches in rendering the media stream, wherein the buffer level has predetermined high and low limits that are used in modifying the selected bit rate, and the selected rate is further determined through monitoring bandwidth of the network.
  • 12. The method of claim 11, wherein the buffer level relates to a number of bytes in a buffer or an amount of time remaining in the buffer to playback.
  • 13. The method of claim 11, further including monitoring the quality level and using the quality level to select the bit rate.
  • 14. A method of rendering a media stream on a playback device, comprising: selecting, from the playback device, a bit rate associated with a media stream to download from a network, the selected bit rate being one of multiple bitrates associated with a same content;downloading and storing the content on the playback device;rendering the media stream on the playback device;monitoring a rate at which the media stream is being rendered;modifying the bit rate downloaded from the network based on the monitored rate at which the media stream is being rendered;for content already downloaded to the playback, replacing the content by re-downloading the content at a different bitrate in order to improve quality on the playback device.
  • 15. The method of claim 14, wherein modifying the bit rate includes lowering the bit rate if the rate at which the media stream is rendered falls below a predetermined threshold.
  • 16. The method of claim 14, wherein monitoring includes using a quality manager to monitor a number of frames that a media pipeline in the playback device is rendering.
  • 17. The method of claim 14, further including selecting a new bit rate by using an intersection point between a bit rate selected by a network heuristics module and a resource heuristics module.
CROSS-REFERENCE TO RELATED APPLICATIONS

This application claims the benefit of U.S. Provisional Patent Application No. 61/057,759, filed on May 30, 2008, and U.S. Provisional Patent Application No. 61/057,755, filed May 30, 2008. Both applications are hereby incorporated in their entirety.

US Referenced Citations (391)
Number Name Date Kind
4051470 Esteban et al. Sep 1977 A
4454546 Mori Jun 1984 A
4493091 Gundry Jan 1985 A
4706260 Fedele et al. Nov 1987 A
4802224 Shiraki et al. Jan 1989 A
4849812 Borgers et al. Jul 1989 A
4937036 Beard et al. Jun 1990 A
4954892 Asai et al. Sep 1990 A
5043919 Callaway et al. Aug 1991 A
5089889 Sugiyama Feb 1992 A
5091782 Krause et al. Feb 1992 A
5136377 Johnston et al. Aug 1992 A
5223949 Honjo Jun 1993 A
5235618 Sakai et al. Aug 1993 A
5258836 Murata Nov 1993 A
5262964 Bonsall et al. Nov 1993 A
5266941 Akeley et al. Nov 1993 A
5317672 Crossman et al. May 1994 A
5335299 Atkinson Aug 1994 A
5394170 Akeley et al. Feb 1995 A
5398069 Huang et al. Mar 1995 A
5400371 Natarajan Mar 1995 A
5412430 Nagata May 1995 A
5414796 Jacobs et al. May 1995 A
RE34965 Sugiyama Jun 1995 E
5422676 Herpel et al. Jun 1995 A
5448297 Alattar et al. Sep 1995 A
5457495 Hartung Oct 1995 A
RE35093 Wang et al. Nov 1995 E
5467086 Jeong Nov 1995 A
5467134 Laney et al. Nov 1995 A
RE35158 Sugiyama Feb 1996 E
5533052 Bhaskar Jul 1996 A
5539466 Igarashi et al. Jul 1996 A
5570363 Holm Oct 1996 A
5579430 Grill et al. Nov 1996 A
5586200 Devaney et al. Dec 1996 A
5602959 Bergstrom et al. Feb 1997 A
5623424 Azadegan et al. Apr 1997 A
5650860 Uz Jul 1997 A
5654760 Ohtsuki Aug 1997 A
5661755 Van De Kerkhof et al. Aug 1997 A
5666161 Kohiyama et al. Sep 1997 A
5666461 Igarashi et al. Sep 1997 A
5678002 Fawcett et al. Oct 1997 A
5686964 Tabatabai et al. Nov 1997 A
5699476 Van Der Meer Dec 1997 A
5701164 Kato et al. Dec 1997 A
5724453 Ratnakar et al. Mar 1998 A
5742735 Eberlein et al. Apr 1998 A
5745738 Ricard Apr 1998 A
5754974 Griffin et al. May 1998 A
5764807 Pearlman Jun 1998 A
5764814 Chen et al. Jun 1998 A
5787203 Lee et al. Jul 1998 A
5796438 Hosono Aug 1998 A
RE35910 Nagata et al. Sep 1998 E
5802213 Gardos Sep 1998 A
5819215 Dobson et al. Oct 1998 A
5825310 Tsutsui Oct 1998 A
5835149 Astle Nov 1998 A
5835495 Ferriere Nov 1998 A
5845243 Smart et al. Dec 1998 A
5867230 Wang et al. Feb 1999 A
5874995 Naimpally et al. Feb 1999 A
5884039 Ludwig et al. Mar 1999 A
5886276 Levine et al. Mar 1999 A
5903892 Hoffert et al. May 1999 A
5926226 Proctor et al. Jul 1999 A
5933451 Ozkan et al. Aug 1999 A
5946419 Chen et al. Aug 1999 A
5949489 Nishikawa et al. Sep 1999 A
5952943 Walsh et al. Sep 1999 A
5963258 Nishikawa et al. Oct 1999 A
5970173 Lee et al. Oct 1999 A
5970175 Nishikawa et al. Oct 1999 A
5974184 Eifrig et al. Oct 1999 A
5982305 Taylor Nov 1999 A
5986712 Peterson et al. Nov 1999 A
5987376 Olson et al. Nov 1999 A
5990945 Sinha et al. Nov 1999 A
5990960 Murakami et al. Nov 1999 A
5995151 Naveen et al. Nov 1999 A
6000053 Levine et al. Dec 1999 A
6002439 Murakami et al. Dec 1999 A
6006241 Purnaveja et al. Dec 1999 A
RE36507 Iu Jan 2000 E
6014706 Cannon et al. Jan 2000 A
6029126 Malvar Feb 2000 A
6040863 Kato Mar 2000 A
6041345 Levi et al. Mar 2000 A
6049630 Wang et al. Apr 2000 A
6058362 Malvar May 2000 A
6072831 Chen Jun 2000 A
6073153 Malvar Jun 2000 A
6075768 Mishra Jun 2000 A
6081554 Lee et al. Jun 2000 A
6088392 Rosenberg Jul 2000 A
RE36822 Sugiyama Aug 2000 E
6097759 Murakami et al. Aug 2000 A
6108382 Gringeri et al. Aug 2000 A
6111914 Bist Aug 2000 A
6115689 Malvar Sep 2000 A
6141053 Saukkonen Oct 2000 A
6154495 Yamaguchi et al. Nov 2000 A
6160846 Chiang et al. Dec 2000 A
6167162 Jacquin et al. Dec 2000 A
6182034 Malvar Jan 2001 B1
6188794 Nishikawa et al. Feb 2001 B1
6192075 Jeng et al. Feb 2001 B1
6208761 Passagio et al. Mar 2001 B1
6212232 Reed et al. Apr 2001 B1
6215820 Bagni et al. Apr 2001 B1
6223162 Chen et al. Apr 2001 B1
6226407 Zabih et al. May 2001 B1
6240380 Malvar May 2001 B1
RE37222 Yonemitsu et al. Jun 2001 E
6243497 Chiang et al. Jun 2001 B1
6259739 Kondo Jul 2001 B1
6259810 Gill et al. Jul 2001 B1
6275531 Li Aug 2001 B1
6278735 Mohsenian Aug 2001 B1
6292585 Yamaguchi et al. Sep 2001 B1
6304928 Mairs et al. Oct 2001 B1
6307973 Nishikawa et al. Oct 2001 B2
6311209 Olson et al. Oct 2001 B1
6320825 Bruekers et al. Nov 2001 B1
6324216 Igarashi et al. Nov 2001 B1
6332003 Matsuura Dec 2001 B1
6339794 Bolosky et al. Jan 2002 B2
6351226 Saunders et al. Feb 2002 B1
6370502 Wu et al. Apr 2002 B1
6404813 Haskell et al. Jun 2002 B1
6421738 Ratan et al. Jul 2002 B1
6421739 Holiday Jul 2002 B1
6441754 Wang et al. Aug 2002 B1
6466987 Bolosky et al. Oct 2002 B2
6473409 Malvar Oct 2002 B1
6490554 Endo et al. Dec 2002 B2
6493388 Wang Dec 2002 B1
6496601 Migdal et al. Dec 2002 B1
6501798 Sivan Dec 2002 B1
6522693 Lu et al. Feb 2003 B1
6539124 Sethuraman et al. Mar 2003 B2
6560636 Cohen et al. May 2003 B2
6573905 MacInnis et al. Jun 2003 B1
6573915 Sivan et al. Jun 2003 B1
6574593 Gao et al. Jun 2003 B1
6614442 Ouyang et al. Sep 2003 B1
6625321 Li et al. Sep 2003 B1
6628712 Le Maguet Sep 2003 B1
6646195 Puryear Nov 2003 B1
6654417 Hui Nov 2003 B1
6654419 Sriram et al. Nov 2003 B1
6683987 Sugahara Jan 2004 B1
6697072 Russell et al. Feb 2004 B2
6704813 Smirnov et al. Mar 2004 B2
6728317 Demos Apr 2004 B1
6732071 Lopez-Estrada et al. May 2004 B2
6745364 Bhatt et al. Jun 2004 B2
6754715 Cannon et al. Jun 2004 B1
6760598 Kurjenniemi Jul 2004 B1
6763374 Levi et al. Jul 2004 B1
6785331 Jozawa et al. Aug 2004 B1
6789123 Li et al. Sep 2004 B2
6792449 Colville et al. Sep 2004 B2
6798364 Chen et al. Sep 2004 B2
6810083 Chen et al. Oct 2004 B2
6819714 Yamada et al. Nov 2004 B2
6836791 Levi et al. Dec 2004 B1
6862402 Kim Mar 2005 B2
6876703 Ismaeil et al. Apr 2005 B2
6895050 Lee May 2005 B2
6934677 Chen et al. Aug 2005 B2
6937770 Oguz et al. Aug 2005 B1
6961631 Puryear Nov 2005 B1
6968364 Wong et al. Nov 2005 B1
6974901 Puryear Dec 2005 B2
6980695 Mehrotra Dec 2005 B2
7016409 Unger Mar 2006 B2
7023915 Pian Apr 2006 B2
7027982 Chen et al. Apr 2006 B2
7046805 Fitzhardinge et al. May 2006 B2
7054365 Kim et al. May 2006 B2
7054774 Batterberry et al. May 2006 B2
7072973 Newson et al. Jul 2006 B1
7107606 Lee Sep 2006 B2
7143030 Chen et al. Nov 2006 B2
7146313 Chen et al. Dec 2006 B2
7149247 Sullivan Dec 2006 B2
7151749 Vega-Garcia et al. Dec 2006 B2
7162533 Klemets Jan 2007 B2
7174384 Cheung Feb 2007 B2
7174385 Li Feb 2007 B2
7176957 Ivashin et al. Feb 2007 B2
7184959 Gibbon Feb 2007 B2
7190670 Varsa et al. Mar 2007 B2
7206822 Levi et al. Apr 2007 B2
7206854 Kauffman et al. Apr 2007 B2
7248740 Sullivan Jul 2007 B2
7260525 Chen et al. Aug 2007 B2
7263482 Chen et al. Aug 2007 B2
7266613 Brown et al. Sep 2007 B1
7283881 Puryear Oct 2007 B2
7283966 Zhang et al. Oct 2007 B2
7286748 Srinivasan et al. Oct 2007 B2
7296063 Levi et al. Nov 2007 B2
7302490 Gupta et al. Nov 2007 B1
7313236 Amini et al. Dec 2007 B2
7313755 Rahman et al. Dec 2007 B2
7342924 Levi et al. Mar 2008 B2
7343291 Thumpudi et al. Mar 2008 B2
7346007 Curcio et al. Mar 2008 B2
7348483 Puryear Mar 2008 B2
7359955 Menon et al. Apr 2008 B2
7360230 Paz et al. Apr 2008 B1
7365752 Xie Apr 2008 B2
7383180 Thumpudi et al. Jun 2008 B2
7391717 Klemets et al. Jun 2008 B2
7392316 Klemets et al. Jun 2008 B2
7401221 Adent et al. Jul 2008 B2
7409145 Antoun et al. Aug 2008 B2
7424730 Chou Sep 2008 B2
7433746 Puryear Oct 2008 B2
7444419 Green Oct 2008 B2
7451229 Klemets et al. Nov 2008 B2
7466721 Levi et al. Dec 2008 B2
7472198 Gupta et al. Dec 2008 B2
7480382 Dunbar et al. Jan 2009 B2
7483532 Alkove et al. Jan 2009 B2
7492769 Klemets Feb 2009 B2
7493644 Tanskanen Feb 2009 B1
7505485 Sullivan et al. Mar 2009 B2
7528314 Puryear May 2009 B2
7536469 Chou et al. May 2009 B2
7538267 Puryear May 2009 B2
7552227 Wang Jun 2009 B2
7554922 Vega-Garcia et al. Jun 2009 B2
7558472 Locket et al. Jul 2009 B2
7565429 Fernandez Jul 2009 B1
7581255 Alkove et al. Aug 2009 B2
7603387 Gates et al. Oct 2009 B2
7631015 Gupta et al. Dec 2009 B2
7633005 Puryear Dec 2009 B2
7644172 Stewart et al. Jan 2010 B2
7663049 Puryear Feb 2010 B2
7667121 Puryear Feb 2010 B2
7672743 Messer et al. Mar 2010 B2
7673306 Puryear Mar 2010 B2
7673315 Wong et al. Mar 2010 B1
7676495 Qian Mar 2010 B2
7684566 Oliveira et al. Mar 2010 B2
7720908 Newson et al. May 2010 B1
7725557 Klemets et al. May 2010 B2
7761609 Srinivasan et al. Jul 2010 B1
7769880 Paka et al. Aug 2010 B2
7783772 Klemets Aug 2010 B2
7783773 Wu et al. Aug 2010 B2
7809851 Klemets Oct 2010 B2
7839895 Sullivan et al. Nov 2010 B2
7860996 Musayev et al. Dec 2010 B2
20020012394 Hatano et al. Jan 2002 A1
20020073084 Kauffman et al. Jun 2002 A1
20020095332 Doherty et al. Jul 2002 A1
20020114388 Ueda Aug 2002 A1
20020122491 Karcewicz et al. Sep 2002 A1
20020136406 Fitzhardinge et al. Sep 2002 A1
20020143556 Kadatch Oct 2002 A1
20020154693 Demos Oct 2002 A1
20020168066 Li Nov 2002 A1
20020176624 Kostrzewski et al. Nov 2002 A1
20020194608 Goldhor Dec 2002 A1
20030055995 Ala-Honkola Mar 2003 A1
20030061607 Hunter et al. Mar 2003 A1
20030093530 Syed May 2003 A1
20030110236 Yang et al. Jun 2003 A1
20030113026 Srinivasan et al. Jun 2003 A1
20030115041 Chen Jun 2003 A1
20030115042 Chen Jun 2003 A1
20030115050 Chen Jun 2003 A1
20030115051 Chen Jun 2003 A1
20030115052 Chen Jun 2003 A1
20030125932 Wang et al. Jul 2003 A1
20030172131 Ao Sep 2003 A1
20030236905 Choi et al. Dec 2003 A1
20030236906 Klemets et al. Dec 2003 A1
20040042549 Huang et al. Mar 2004 A1
20040098748 Bo et al. May 2004 A1
20040117427 Allen et al. Jun 2004 A1
20040131340 Antoun et al. Jul 2004 A1
20040136457 Funnell et al. Jul 2004 A1
20040141651 Hara et al. Jul 2004 A1
20040172478 Jacobs Sep 2004 A1
20040268397 Dunbar et al. Dec 2004 A1
20050002453 Chang et al. Jan 2005 A1
20050015259 Thumpudi et al. Jan 2005 A1
20050015528 Du Jan 2005 A1
20050016363 Puryear Jan 2005 A1
20050024487 Chen Feb 2005 A1
20050036759 Lin et al. Feb 2005 A1
20050047503 Han et al. Mar 2005 A1
20050066063 Grigorovitch et al. Mar 2005 A1
20050076039 Ludwig et al. Apr 2005 A1
20050076136 Cho Apr 2005 A1
20050084015 Han et al. Apr 2005 A1
20050084166 Boneh et al. Apr 2005 A1
20050105815 Zhang et al. May 2005 A1
20050117641 Xu et al. Jun 2005 A1
20050123058 Greenbaum Jun 2005 A1
20050135484 Lee Jun 2005 A1
20050157784 Tanizawa et al. Jul 2005 A1
20050204385 Sull et al. Sep 2005 A1
20050207734 Howell Sep 2005 A1
20050234731 Sirivara et al. Oct 2005 A1
20050234858 Torii et al. Oct 2005 A1
20050246384 Foehr et al. Nov 2005 A1
20050254508 Aksu et al. Nov 2005 A1
20050254584 Kim et al. Nov 2005 A1
20050267994 Wong et al. Dec 2005 A1
20060015637 Chung Jan 2006 A1
20060026294 Virdi et al. Feb 2006 A1
20060029065 Fellman Feb 2006 A1
20060062302 Yin et al. Mar 2006 A1
20060088094 Cieplinski et al. Apr 2006 A1
20060126713 Chou et al. Jun 2006 A1
20060136597 Shabtai et al. Jun 2006 A1
20060156363 Wu et al. Jul 2006 A1
20060165166 Chou et al. Jul 2006 A1
20060184697 Virdi Aug 2006 A1
20060218264 Ogawa et al. Sep 2006 A1
20060235883 Krebs et al. Oct 2006 A1
20060242080 Van Dyke et al. Oct 2006 A1
20060242315 Nichols Oct 2006 A1
20060248570 Witwer Nov 2006 A1
20060282566 Virdi et al. Dec 2006 A1
20070006064 Colle Jan 2007 A1
20070038873 Oliveira et al. Feb 2007 A1
20070058926 Virdi Mar 2007 A1
20070078768 Dawson Apr 2007 A1
20070083886 Kauffman et al. Apr 2007 A1
20070097816 Van Gassel May 2007 A1
20070100891 Nee May 2007 A1
20070192789 Medford Aug 2007 A1
20070204321 Shen et al. Aug 2007 A1
20070274383 Yu et al. Nov 2007 A1
20070276954 Chan et al. Nov 2007 A1
20080022005 Wu et al. Jan 2008 A1
20080037954 Lee Feb 2008 A1
20080046939 Lu et al. Feb 2008 A1
20080060029 Park et al. Mar 2008 A1
20080086570 Dey et al. Apr 2008 A1
20080091838 Miceli Apr 2008 A1
20080172441 Speicher Jul 2008 A1
20080195744 Bowra Aug 2008 A1
20080195761 Jabri et al. Aug 2008 A1
20080201386 Maharajh et al. Aug 2008 A1
20080211901 Civanlar et al. Sep 2008 A1
20080256085 Lee et al. Oct 2008 A1
20080312923 Crinon et al. Dec 2008 A1
20090007171 Casey et al. Jan 2009 A1
20090043657 Swift et al. Feb 2009 A1
20090043906 Hurst et al. Feb 2009 A1
20090049186 Agnihotri et al. Feb 2009 A1
20090055417 Hannuksela Feb 2009 A1
20090076904 Serena Mar 2009 A1
20090089401 Zhang et al. Apr 2009 A1
20090132356 Booth et al. May 2009 A1
20090132599 Soroushian et al. May 2009 A1
20090132721 Soroushian et al. May 2009 A1
20090199236 Barrett et al. Aug 2009 A1
20090254672 Zhang Oct 2009 A1
20090279605 Holcomb et al. Nov 2009 A1
20090282162 Mehrotra et al. Nov 2009 A1
20090282475 George et al. Nov 2009 A1
20090297123 Virdi et al. Dec 2009 A1
20090300145 Musayev et al. Dec 2009 A1
20090300204 Zhang et al. Dec 2009 A1
20090319681 Freelander et al. Dec 2009 A1
20090328124 Khouzam et al. Dec 2009 A1
20100011119 Knowlton et al. Jan 2010 A1
20100058061 Folta et al. Mar 2010 A1
20100080290 Mehrotra Apr 2010 A1
20100114921 Bocharov et al. May 2010 A1
20100135636 Zhang et al. Jun 2010 A1
20100153988 Takai et al. Jun 2010 A1
20100158101 Wu et al. Jun 2010 A1
20100180011 Sood et al. Jul 2010 A1
20100189183 Gu et al. Jul 2010 A1
20100191974 Dubhashi et al. Jul 2010 A1
20100235472 Sood et al. Sep 2010 A1
20100235528 Bocharov et al. Sep 2010 A1
Foreign Referenced Citations (8)
Number Date Country
0397402 Nov 1990 EP
0526163 Feb 1993 EP
62 213 494 Sep 1987 JP
6 078 298 Mar 1994 JP
10 056 644 Feb 1998 JP
2008-523687 Jul 2008 JP
WO 0036753 Jun 2000 WO
WO 2007058515 May 2007 WO
Related Publications (1)
Number Date Country
20090300203 A1 Dec 2009 US
Provisional Applications (2)
Number Date Country
61057755 May 2008 US
61057759 May 2008 US