Methods and devices for efficient adaptive bitrate streaming

Methods and systems for a content server to select sets of video streams having different encoding parameters for transmitting the sets of video streams to a media device are disclosed herein. In some embodiments, a method for transmitting video streams for a media program from a server to a media device includes: selecting, by the server, first encoding parameters including a first bitrate for a first set of video streams for the media program based on a first estimated bandwidth capacity for a network linking the server and the media device, transmitting the first set of video streams from the server to the media device, determining, by the server, second encoding parameters including a second bitrate for a second set of video streams for the media program, and transmitting the second set of video streams from the server to the media device.

BACKGROUND

Streaming of media over a network from a content server to a media device has been widely adopted for media consumption. Two network protocols used for media streaming include the user datagram protocol Internet protocol (“UDP IP”) and the transfer control protocol (“TCP”) IP. The UDP IP is often used for media streaming for relatively reliable networks, such as in-home streaming over wired connections. The TCP IP is often used for streaming over less reliable networks.

The HTTP-based live streaming protocol, used with the TCP IP, allows a content server to publish variant playlist files to media devices. A variant playlist file identifies multiple sets video streams for a media program, such as a movie, a television program, etc., where each set of video streams has unique encoding parameters (e.g., bit rates, resolutions, etc.) for the media program. The media devices may dynamically switch between the sets of video streams identified in the variant playlist file as the sets of video streams are transmitted from the content server to the media devices. The media devices may choose to receive an initial set of video streams identified in the variant playlist file based on initial network conditions, initial buffer conditions, etc. For example, the media devices may choose to receive a set of high definition video streams identified in the variant playlist file if the initial network conditions, the initial buffer conditions, etc., support the streaming of the high definition set of video streams. If the initial network conditions degrade or if the initial buffer conditions degrade, etc., then the media devices may choose to receive a set of low definition video streams identified in the variant playlist file. That is, the media device may dynamically choose different sets of video streams to receive from the content server where the different sets of video streams have different encoding parameters.

Selection and transmission of the sets of video streams are driven by the media devices. In response to a selection of a set of video streams identified in the variant playlist file, the content server passively transmits the set of video streams to the media device. The media device may have limited information about the overall system conditions (e.g., network conditions to other media devices) and hence might not select a set of video streams that is suitable for the current media device's network conditions. Further, some types of media devices select the highest resolution and highest bit-rate sets of video streams to receive. Typically the content server services multiple media devices, transmitting multiple sets of video streams to the media devices. If a media device requests a set of video streams with high resolution and high bit rate, then a large portion of content server resources or network bandwidth may have to be allocated in order to service that media device. Consequently, the other media devices serviced by the content server may experience degraded performance such as intermittent interruptions in the transmission of video streams.

DETAILED DESCRIPTION

Turning to the drawings, wherein like reference numerals refer to like elements, techniques of the present disclosure are illustrated as being implemented in a suitable environment. The following description is based on embodiments of the claims and should not be taken as limiting the claims with regard to alternative embodiments that are not explicitly described herein.

Described herein are techniques for a content server to select sets of video streams having different encoding parameters for transmitting the sets of video streams to a media device. In the following description, for purposes of explanation, numerous examples and specific details are set forth in order to provide a thorough understanding of particular embodiments. Particular embodiments as defined by the claims may include some or all of the features in these examples alone or in combination with other features described below and may further include modifications and equivalents of the features and concepts described herein.

FIG. 1depicts a video streaming system100according to one embodiment. The video streaming system100includes a content server105, a network115, a set of media devices120, and a transcoder element122. Content server105transmits sets of video streams to media devices120via network115. A set of video streams may be for a media program, such as a movie, a television program, etc. Each video stream in a set of video streams may be a short segment of video (e.g., two second, ten seconds, etc.). A set of video streams may include thousands of video streams for a media program, such as a two-hour movie. The sets of video streams may be provided to content server105from transcoder element122. Transcoder element122may include a number of transcoder resources123where each transcoder resource may provide a set of video streams having unique encoding parameters (e.g., a bit rate, a resolution, etc.). Network115may include the Internet, various intranets, etc. Network115may include wired links and wireless links. It is understood that the various references made herein to “media” and “video” include both video content and audio content.

Content server105may include a set of processors105aand a non-transitory computer-readable storage medium (memory)105b. Memory105bmay store instructions, which the set of processors105amay execute to carry out various embodiments described herein. Content server105may include a number of computer devices that share a domain. Each media device120may include a set of processors120aand a non-transitory computer-readable storage medium (memory)120b. Memory120bmay store instructions, which the set of processors120amay execute to carry out various embodiments described herein.

Each media device120may also include a buffer-management module120cand a receive buffer120d. Receive buffer120dreceives video packets for a set of video streams transmitted from content server105to media device120for a media program. The video packets may be retrieved by the set of processors120afrom receive buffer120das media device120consumes the video packets. As used herein, encoded content such as video packets may be divided into fixed-duration segments (e.g., chunks). The segments or chunks are typically between two and ten seconds in duration, although they may be longer or shorter. In some embodiments, shorter segments reduce coding efficiency, while larger segments impact speed to adapt to changes in network throughput.

In some embodiments, receive buffer120dincludes three buffer sections130a,130b, and130c. First buffer section130amay be for video packets that media device120has received from content server105but has not consumed for media play. Media device120may have acknowledged receipt of the video packets in first buffer section130ato content server105via an acknowledgment. Buffer-management module120cmay monitor the rate at which video packets in first buffer section130aare retrieved for consumption by media device120.

Second buffer section130bmay be for video packets that media device120has received from content server105but has not consumed for media play. Media device120may not have sent acknowledgments to content server105for the video packets in second buffer section130b. Portions of second buffer section130bmay be categorized as portion of first buffer section130aas acknowledgments for video packets in second buffer section130bare transmitted to content server105from media device120. Buffer-management module120cmay track the portions of second buffer section130bthat are categorized as a portion of first video buffer130awhen media device120sends an acknowledgment to content server105for acknowledging receipt of the video packets in second buffer section130b.

Third buffer section130cmay be available for receipt of video packets. Buffer management module120cmay monitor third buffer section130cto determine when third buffer section130creceives video packets and when third buffer section130cis categorized as a portion of second buffer section130b. Portions of first buffer section130amay be categorized as a portion of third buffer section130bas video packets from first buffer section130aare consumed. That is, the portion of first buffer section130afor which video packets are consumed may receive new video packets from content server105.

The sizes of first, second, and third buffer sections130athrough130ctogether define the maximum buffer size for video packet buffering according to some embodiments. The maximum buffer size may be allocated by media device120when opening an initial connection with content server105. The maximum buffer size typically remains unchanged after the allocation.

The sizes of first, second, and third buffer sections130athrough130cmay vary relative to each other as video packets are received and consumed by media device120. As described briefly above, the size of first buffer section130amay vary depending on the rate at which the set of processors120aretrieves video packets from first buffer section130a. Variation of the size of the first buffer section130aaffects the sizes of second and third buffer sections130band130c. For example, if media device120retrieves video packets from first buffer section130aat a relatively high rate, first buffer section130amay be relatively small, and second and third buffers sections130band130cmay be relatively large, as a result. Alternatively, if media device120retrieves video packets from first buffer section130aat a relatively low rate, first buffer section130amay be relatively large, and second and third buffers sections130band130cmay be relatively small, as a result.

The combined size of second and third buffer sections130band130cdefines a “current window size.” According to some embodiments, media device120transmits the current window size to content server105in each communication (e.g., acknowledgment, request, etc.) that media device120sends to content server105. The current window size informs content server105of the maximum number of video packets (e.g., TCP IP segments) that content server105may transmit to media device120before media device120transmits another communication (e.g., an acknowledgment) to content server105. According to some embodiments, the current window size is transmitted in a header of each communication packet (e.g., TCP IP packet header) sent from media device120to content server105. In an initial communication transmitted by media device120to content server105, media device120may transmit an initial current window size and in subsequent communications may transmit updated current window sizes when the current window size changes from the initial window size. Content server105may store and track the current window size of media device120.

According to further embodiments, content server105may estimate a current bandwidth capacity of network links of network115linking content server105and media device120. Content server105may determine current bandwidth capacity via a variety of methods. For example, content server105may determine the amount of time it takes for the media device120to respond to each transmission that content server105sends to media device120. Specifically, media device120may transmit an acknowledgment for each transmission received from content server105. Content server105may determine a round-trip time from the time of transmission to the time of receiving an acknowledgement. Based on the round-trip time and how much data were transmitted, content server105may estimate the current bandwidth capacity between content server105and media device120. Content server105may use additional information for estimating the current bandwidth capacity, such as the transmission bandwidth of content server105.

In some embodiments, content server105may estimate the current bandwidth capacity by measuring the current bandwidth for each transmission that content server105sends to media device120. In some embodiments, the current bandwidth is compared against a current bitrate for each transmission that content server105sends to media device120. When the current bitrate is greater than that supportable by the current bandwidth, content server105decreases the current bitrate by setting a transcoder adjustment factor. When the current bitrate is less than supportable by the current bandwidth, content server105increases the current bitrate using the transcoder adjustment factor. As used herein, the transcoder adjustment factor is a fudge factor that accounts for the fact that when sent a command to create a certain outcome, a transcoder may not necessarily produce the desired certain outcome.

Content server105may generate a number of playlist files140for the sets of video streams that may be provided by transcoder resources123. Each playlist file140may include uniform resource identifiers (“URIs”) for the video streams generated by transcoder resource123. Each playlist file140is for a set of video streams having unique encoding parameters (e.g., bit rate, resolution, etc.) according to one embodiment. The encoding parameters for resolution may include QVGA, HVGA, VGA, 480p30, and 720p30 resolutions. The encoding parameters for bitrate may be from 200 Kbps to 5 Mbps, for example. For example, a first playlist file140may be for a first set of video streams for a media program having encoding parameters of 480p30 resolution and a 3 Mbps bit rate, a second playlist file140may be for a second set of video streams for the media program having 720p30 resolution and a 3 Mbps bit rate, a third playlist file140may be for a third set of video streams for the media program having 720p30 resolution and a 5 Mbps bit rate, etc.

While content server105provides a set of video streams for a media program to media device120, content server105may change the particular set of video streams that content server105transmits to media device120where the two sets of video streams may have different encoding parameters (e.g., resolutions, bit rates, etc.). For example, as content server105provides a set of video streams for a media program to media device120, content server105may change the particular set of video streams transmitted to media device120to change the resolution and the bit rates of the set of video streams to adjust to changes in the current window size of receive buffer120dor the current bandwidth capacity of networks links linking content server105and media device120.

According to some embodiments, if the current bandwidth capacity between content server105and media device120is reduced, content server105may switch from transmitting high bit rate (e.g., 3 Mbps rate) video streams to transmitting lower bit rate (e.g., 500 Kbps) video streams to accommodate the reduced current bandwidth capacity. Content server105may also switch from transmitting a high resolution (e.g., 720p30) set of video streams to transmitting a lower resolution (e.g., VGA) set of video streams. Conversely, if the current bandwidth capacity between content server105and media device120increases, content server105may switch from transmitting a low bit rate (e.g., 500 Kbps) set of video streams to transmitting a higher bit rate (e.g., 2 Mbps) set of video streams to accommodate the increased current bandwidth capacity. Content server105may also switch from transmitting a low resolution (e.g., VGA) set of video streams to transmitting a higher resolution (e.g., 720p30) set of video streams.

According to some embodiments, if the current window size for receive buffer120dis lowered by media device120as media device120receives a set of video streams for a media program, content server105may switch from transmitting a high bit rate (e.g., 3 Mbps rate) set of video streams to transmitting a lower bit rate (e.g., 500 Kbps) set of video streams to accommodate the reduced current window size. On the other hand, if the current window size for receive buffer120dis increased by media device120as media device120receives a set of video streams, content server105may switch from transmitting a low resolution set of video streams to transmitting a higher resolution set of video streams to accommodate the increased current bandwidth capacity. Content server105may similarly switch from transmitting high or low resolution sets of video streams to transmitting lower or higher resolution sets of video streams, respectively, to adjust to reduced or increased current window sizes. Content server105may change the set of video streams transmitted to media device120at packet boundaries, key frame boundaries, or other locations in the media program where a change in the set of video streams is least likely to be noticed by a user.

In accordance with the present disclosure, the set of video streams chosen by content server105for transmission may have encoding parameters including a first bitrate, where the encoding parameters are based on a first estimated bandwidth capacity for a network linking the server105and the media device120. Thereby, media device120may consume a set of video streams that are delivered at a resolution, bitrate, etc., that are suited for the current bandwidth capacity. According to an alternative embodiment, the encoding parameters may be set to a level lower than is permitted by the current bandwidth capacity. This provides some headroom, allowing for the current bandwidth capacity to drop lower, yet still ensure that the transmission of the set of video streams continues without unexpected degradation, pauses, dropped video packets, etc.

According to some embodiments, content server105may dynamically request that the set of video streams provided to content server105from transcoder element122have the encoding parameters determined by content server105. According to one embodiment, content server105may dedicate one transcoder resource123included in transcoder element122to media device120. The dedicated transcoder resource123may then provide the set of video streams to content server105for subsequent transmission to media device120.

In some embodiments, content server105determines second encoding parameters including a second bitrate for a second set of video streams. This information is sent to the transcoder resource123to generate the second set of video streams on demand. Media device120may consume the second set of video streams that are delivered at a resolution, bitrate, etc., that are suited for the current bandwidth capacity.

In some embodiments, the first and second video streams include a plurality of video packets that are formed from one or more predetermined segment sizes and that are configured to be received by and stored in receive buffer120dof media device120. The second encoding parameters may be determined based on the number of video packets in the first set of video streams that has been received by the media device120. For example, the number of video packets in the first set of video streams that has been received by media device120determines the fullness of receive buffer120d. In addition, the second encoding parameters may be determined further based on the download rate at which the number of video packets in the first set of video streams have been received by the media device120.

In some embodiments, the download rate at which the number of video packets in the first set of video streams has been received by the media device120is determined by content server105. Content server105may determine the desired subsequent media bitrates and resolutions based on the download rate, on the fullness of the receive buffer120d, and on a minimum time duration for unstalled playback of video streams. The minimum time duration for unstalled playback is herein defined as the minimum media duration buffered by the media device120(e.g., 2 to 4 seconds).

In some embodiments, if the estimated download rate is greater than zero, then content server105determines whether a new bitrate is greater than a maximum allowable bitrate. The maximum allowable bitrate is herein defined as the combination of the highest bitrate and resolution used to support best viewing experience of a specific media device120and may be preset by content server105. If the new bitrate is greater than the maximum allowable bitrate, then content server105dials down the bitrate for the second set of video streams with a corresponding second bitrate for the second set of video streams. If the new bitrate is less than the maximum allowable bitrate, content server105determines the second bitrate for the second set of video streams based on the predetermined segment size.

In some embodiments, if the estimated download rate is less than zero, then content server105determines a new segment size for the second set of video streams and the corresponding second bitrate for the second set of video streams. In this scenario, a pre-created alternative media representation is used. If this alternative media segment is unavailable, a low bitrate audio-only stream is served to the media device120.

In general, if the estimated download rate is greater than zero and content server105determines a new segment size for the second set of video streams, then the new segment size is greater than the previous segment size, e.g., the segment size has been increased. Similarly, if the download rate is less than zero, then the new segment size is less than the previous segment size, e.g., the segment size has been decreased.

Content server105may generate a playlist file140for the set of video streams for transmission to media device120. If content server105determines that a different set of video files having different encoding parameters are to be transmitted to media device120, content server105may generate a new playlist file140for the different set of video files. Different playlist files140may include different lists of URIs for different sets of video streams for the media program. The video streams identified in one playlist file140have the same encoding parameters (resolution, bit rate, etc.). Content server105may include playlist file140in each transmission that content server105transmits to media device120. If the current bandwidth capacity from content server105to media device120changes or if the current window size of receive buffer120dchanges, then content server105may determine a different set of video streams to transmit to media device120based on the changes. The different set of video streams have different encoding parameters (e.g., higher or lower resolution, higher or lower bit rate, etc.) which may be better suited for the changes to the current bandwidth capacity or the changes to the current window size. Content server105may request that the transcoder element122provides the different set of video streams to content server105. Content server105may transmit a different playlist file140for the different set of video streams to media device120so that media device120may retrieve the different video streams.

In some embodiments, each media device in the set of media devices120may be prohibited from selecting encoding parameters for its downloads. This prevents any one media device120from selecting encoding parameters that could consume network bandwidth and content server resources to the detriment of the other media devices120. Instead, content server105may control the sets of video streams that each media device120receives. The content server105may also perform load balancing based on current bandwidth capacities for all of the media devices120and may load balance based on the current buffer windows of all of the media devices120where each media device120might not know the current buffer windows of other media devices120.

According to some embodiments, content server105may track the current bandwidth capacities or the current window sizes of a number of media devices120. Content server105may determine a playlist file to transmit to each media device120based on the current bandwidth capacity or on the current window size for the media device120. Content server105may dedicate one transcoder resource123to a number of media devices120, where transcoder resource123may provide a number (e.g., five, ten, fifteen, etc.) of sets of video streams having different encoder parameters.

In some embodiments, the current bandwidth for the first set of video streams is determined by estimating the bandwidth using a fraction of the predetermined media chunk size in the first set of video streams. The fraction of the predetermined segment size is adaptable based on the total chunk size. For example, it may be anywhere from 10% to 100% of the total chunk size.

According to some embodiments, content server105may dynamically change the temporal lengths of the video streams transmitted to media device120based on the current bandwidth capacity, the current window size, or other information. For example, content server105may create and transmit initial playlist file140that includes URIs for ten-second video streams and may thereafter generate and transmit a subsequent playlist file140that includes URIs for three-second video streams based on the current bandwidth capacities or the current window sizes to provide optimal transmission of the set of video streams to media device120. As described above, content server105may generate and transmit the subsequent playlist file140dynamically as a set of video streams is transmitted and as conditions change for the current bandwidth capacity. Dynamic changes to playlist files140may include changes in the temporal lengths of the video streams. For example, the initial playlist file may include an initial number of identifiers for a first set of video streams that are each ten seconds in length, and the subsequent playlist file may include a larger number of identifiers for a second set of video stream that are each three seconds in length.

FIG. 2depicts a high-level flow diagram of a method200for transmitting sets of video streams for a media program from content server105to media device120according to some embodiments. The high-level flow diagram represents an example embodiment, and those of skill in the art understand that various steps of the high-level flow diagram may be combined or added without deviating from the scope and the purview of the embodiment.

At205, content server105selects first encoding parameters for a first set of video streams for the media program (e.g., a movie, a TV show, etc.). The first encoding parameters include a first bitrate, among other things. Content server105selects the first encoding parameters based on a first estimated bandwidth capacity for network115linking content server105and media device120. Content server105may select the first encoding parameters to optimally use the first estimated bandwidth capacity for transmitting the set of video streams to media device120.

At210, content server105begins transmitting the first set of video streams to media device120across network115. The set of video stream may be transmitted from content server105to media device120based on requests for the video streams transmitted from media device120to content server105where the requests may include identifiers (e.g., URIs) included in playlist file140for the set of video streams. The current bandwidth capacity of network115may change based on a variety of conditions, such as changing network traffic. The first current window size of receive buffer120dmay also change based on a variety of conditions, such as media device120performing other operations.

At215, content server105determines (and selects) the second encoding parameters for a second set of video streams for the media program. The second encoding parameters include a second bitrate, among other things. Content server105may select the second encoding parameters based on the fullness of receive buffer120d. Content server105may select the second encoding parameters additionally based on the download rate at which the number of video packets in the first set of video streams has been received by media device120.

At220, content server105begins transmitting the second set of video streams to media device120. The quality of the media program consumed by media device120may increase and decrease with the different sets of video streams transmitted to media device120. However, because the sets of video streams are selected based on bandwidth capacity of network115, the video streams may be optimized for the current conditions, and the sets of video streams may be transmitted with little or no network packets being dropped and with little or no interruption of consumption of the sets of video streams by media device120.

According to some embodiments, content server105receives the first current window size and the second window size in transmissions transmitted from media device120. The transmissions may be initial transmissions to establish a transmission session, acknowledgments for received transmissions, etc. Media device120may include information for current window size in each transmission (acknowledgement) that media device120sends to content server105.

Method200may be executed a number of times simultaneously by content server105for a number of media devices120. Content server105may track current window sizes and current bandwidth capacities for the number of media devices120and may change the set of video streams transmitted to each media device120in the number of media devices independently based on the current window size and the current bandwidth capacity for each media device120. That is, content server105may chose encoding parameters for the sets of video streams to optimize the transmissions of the sets of video streams. According to an alternative embodiment, method200and other embodiments described herein are executed in whole or in part by a proxy server that is a server gateway between content server105and media device120.

FIG. 3depicts software elements of content server105. Content server105may include a playlist-file controller300for storing playlist files140in memory105band for reading playlist files140from memory105b. Content server105may include a transmission analyzer305for extracting information for current window size from transmissions received by content server105from media device120. Content server105may also include a network-bandwidth analyzer315that estimates the current bandwidth capacity between content server105and media device120. Network-bandwidth analyzer315may include a round-trip analyzer320that determines round-trip times of sets of transmissions transmitted between content server105and media device120. Network-bandwidth analyzer315may determine current bandwidth capacity of network links of network115linking content server105and media device120based on the round-trip times generated by round-trip analyzer320.

Transmission analyzer305may provide the current window size to a playlist-generation module325, and network-bandwidth analyzer315may provide the current bandwidth capacity to playlist-generation module325. Playlist-generation module325may use the current window size and the current bandwidth capacity to determine a set of video streams to transmit to media device120where the set of video streams has a set of encoding parameters for the current bandwidth capacity and for the current window size of receive buffer120d. Playlist-generation module325may also generate playlist file140for the set of video streams. The generated playlist file140is stored in memory by playlist-file controller300. Content server105configures the transcoder resources123accordingly to generate the desired media chunks.

An example implementation follows. In some embodiments, a method to measure the bandwidth at the TCP-IP level at “sub-segment” intervals is disclosed. This gives the server105the benefit to pro-actively act upon changing network bandwidth. Additionally, based on the estimated buffer depth or buffer fullness and on a transcoder adjustment factor, a new segment bitrate is determined. A command is sent to the transcoder elements122and the content server105is configured accordingly to generate the corresponding playlist information.

In some embodiments, the following methods can be used in both a one-to-one adaptive bitrate transcoding and one-to-many adaptive bitrate statistical multiplexing scenarios. The following methods adopt the common principle of rapid fall during bitrate downshift and slow, gradual rise during bitrate upshift. Also, in general, the methods can change segment durations less frequently, e.g., once for multiple segment durations.

The following terms are defined for ease in explanation of Method 1:

•   BWestimatedis the estimated bandwidth.•   RcurrentBitrateis the bitrate of the current chunk.•   BWprojectedis the projected bandwidth.•   RnewBitrateis the bitrate used for the next chunk.#define MAX_ALLOWABLE_BITRATE6000 // in bits per second (bps)#define MAX_BITRATE_WITH_XCODE_FUDGE_FACTOR5200 //bpsBWestimated= getCurrentBandwidth( );if(BWestimated<= RcurrentBitrate){// a coarse estimation of client buffer based on empirical dataBWprojected= BWestimated>> 1;// a rapid fall and coarse estimation of transcoder fudge factorBWprojected= BWprojected>> 1;if(RcurrentBitrate<= MAX_ALLOWABLE_BITRATE)RnewBitrate= RcurrentBitrate= BWprojected;} else{if(RcurrentBitrate< MAX_ALLOWABLE_BITRATE){// 12.5% is the step sizeBWprojected= RcurrentBitrate+ (RcurrentBitrate>>3);// transcoder fudge factor of 33%if(BWestimated> (BWprojected+ BWprojected/3))// increase with transcoder fudge factorRnewBitrate= RcurrentBitrate= BWprojected;} else{RnewBitrate= MAX_BITRATE_WITH_XCODE_FUDGE_FACTOR;RcurrentBitrate=MAX_BITRATE_WITH_XCODE_FUDGE_FACTOR;}}

The following terms are defined for ease in explanation of Method 2:

•  Tcreateis the time it takes to transcode the media chunk.•  TchunkDurationis the duration of the new chunk.•  TdownloadRateis the estimated time to download the media chunk being created.•  BtotalAvailableBitsis the total available bits to create the new media chunk.•  XcodeSpeedFactor is the speed of transcoding. This could be real-time orfaster than real-time.//Based on the device, the following value is set.#define MIN_TIME_DURATION_FOR_UNSTALLED_PLAYBACK   3 // in secondsfunction compute estimated TdownloadRate( ){BWestimated= getCurrentBandwidth( );bufferDepth = getClientBufferDepth( );Tcreate= TchunkDuration(in secs)/XcodeSpeedFactor;TdownloadRate= bufferDepth −MIN_TIME_DURATION_FOR_UNSTALLED_PLAYBACK − Tcreate;if(TdownloadRate> 0){BtotalAvailableBits= TdownloadRate× BWestimated;RnewBitrate= BtotalAvailableBits/ TchunkDuration;if(RnewBitrate> (MAX_ALLOWABLE_BITRATE<<1)){TchunkDuration++;computeTdownloadRate( );exit;}} else{// decrease TchunkDurationTchunkDuration−−;if(TchunkDuration> 0){computeTdownloadRate( );exit;}if(alternate representation available){// configure packager to publish alternate representation chunksRnewBitrate= lowestPermisableBitrate(withAltRep);TchunkDuration= lowestCorrespondingChunkDuration(withAltRep);} else{// playback stall detected// use lowest permissible bitrate, could be audio-only tooRnewBitrate= lowestPermissibleBitrate(withoutAltRep);// would be 1 second for video. Can be > 1 second for audio onlyTchunkDuration= lowestCorrespondingChunkDuration(withoutAltRep);}}}sendCommand2Transcoder (fudgeFactor, RnewBitrate, TchunkDuration);

Both the above methods use a measurement window for bandwidth estimation as described below in Method 3. As used herein, the measurement window is the minimum number of bytes to be downloaded by the media device120, after which the content server105makes the bandwidth calculation. It is defined by total chunk size

The KscaleFactoris for 2-second long segments. This KscaleFactormight change with varying segment durations. A benefit of this method is that it is not necessary to wait until the entire segment is downloaded to compute the bandwidth capacity. Instead an adaptive algorithm is used where the measurement window is a function of the BtotalChunkSizeand KscaleFactor. As illustrated in Method 3, the measurement window (size in bytes) changes for different total chunk sizes. For example, if the total chunk size is greater than 600 KB and less than 750 KB, the scale factor is 2 (e.g., the measurement window=BtotalChunkSize/KscaleFactor). Hence, for varying chunk sizes, the scale factor changes, and accordingly the measurement window (size in bytes) adapts.

In some embodiments, the device profile is also considered in the decision-making in both Method 1 and 2 approaches. This supports optimized streaming for the device and promotes an appropriate MAX_ALLOWABLE_BITRATE to avoid playback stalls.

In view of the many possible embodiments to which the principles of the present discussion may be applied, it should be recognized that the embodiments described herein with respect to the drawing figures are meant to be illustrative only and should not be taken as limiting the scope of the claims. Therefore, the techniques as described herein contemplate all such embodiments as may come within the scope of the following claims and equivalents thereof.