Patent ID: 12225069

DETAILED DESCRIPTION OF CERTAIN EMBODIMENTS

Overview

Various embodiments provide tools and techniques for implementing encoding and decoding of media content streams, and, more particularly, to methods, systems, and apparatuses for implementing encoding and decoding of live adaptive bitrate media content streams.

In various embodiments, one or more first computing systems may divide a live media content stream into one or more segments, each segment might include a starting segment boundary and an ending segment boundary. The one or more first computing systems might encode the one or more segments of the live media content stream into one or more primary adaptive bitrate streams. The one or more first computing systems might also divide the one or more segments of the live media content stream into one or more subsegments. Each subsegment might be less than a length of a corresponding segment of the one or more segments. The one or more first computing systems might the encode the one or more subsegments into one or more secondary adaptive bitrate streams.

According to some embodiments, one or more second computing systems might receive a request for the live media content on a live channel. The one or more second computing systems might first request the one or more primary adaptive bitrate streams associated with the live media content. The one or more second computing systems might then determine that the one or more primary adaptive bitrate streams are not at a starting segment boundary. Based on a determination that the one or more primary adaptive bitrate streams are not at a starting segment boundary, the one or more second computing systems might request one or more secondary adaptive bitrate streams associated with the live media content. The one or more second computing systems might receive the one or more secondary adaptive bitrate streams including the one or more subsegments and decode the live media content associated with the one or more secondary bitrate streams.

In some cases, the one or more subsegments might have a different starting boundary than a corresponding starting segment boundary of a corresponding segment of the one or more segments and a same ending boundary as a corresponding ending segment boundary of the corresponding segment of the one or more segments. In some cases, the one or more subsegments may be continuous subsegments, discontinuous subsegments, overlapping subsegments, and/or the like.

Several advantages may be realized by implementing the embodiments described herein. For example, when requesting a live media content stream or a channel change between live media content channels, the lag or latency time between when the media content is requested and when the media content is displayed may be reduced. Additionally, when requesting a live media content stream or a channel change between live media content channels, the lag or latency time between live media content and the decoded media content may be reduced. In summary, all embodiments described in this disclosure make channel change of live channels faster without adding end-to-end delay to the viewer of the live media content stream. Further, in some embodiments, the one or more subsegments may be transmitted unencrypted, at a lower resolution, at a lower bitrate, or with a less efficient or older codec than the one or more segments. These and other aspects of the tools and techniques for implementing encoding and decoding of media content streams, and, more particularly, the methods, systems, and apparatuses for implementing encoding and decoding of live adaptive bitrate media content streams are described in greater detail with respect to the figures.

The following detailed description illustrates a few exemplary embodiments in further detail to enable one of skill in the art to practice such embodiments. The described examples are provided for illustrative purposes and are not intended to limit the scope of the invention.

In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the described embodiments. It will be apparent to one skilled in the art, however, that other embodiments of the present invention may be practiced without some of these specific details. In other instances, certain structures and devices are shown in block diagram form. Several embodiments are described herein, and while various features are ascribed to different embodiments, it should be appreciated that the features described with respect to one embodiment may be incorporated with other embodiments as well. By the same token, however, no single feature or features of any described embodiment should be considered essential to every embodiment of the invention, as other embodiments of the invention may omit such features.

Unless otherwise indicated, all numbers used herein to express quantities, dimensions, and so forth used should be understood as being modified in all instances by the term “about.” In this application, the use of the singular includes the plural unless specifically stated otherwise, and use of the terms “and” and “or” means “and/or” unless otherwise indicated. Moreover, the use of the term “including,” as well as other forms, such as “includes” and “included,” should be considered non-exclusive. Also, terms such as “element” or “component” encompass both elements and components comprising one unit and elements and components that comprise more than one unit, unless specifically stated otherwise.

Various embodiments described herein, while embodying (in some cases) software products, computer-performed methods, and/or computer systems, represent tangible, concrete improvements to existing technological areas, including, without limitation, encoding and decoding technology, live media content distribution technology, network provisioning technology, network configuration technology, and/or the like. In other aspects, certain embodiments can improve the functioning of user equipment or systems themselves (e.g., encoding and decoding technology, live media content distribution technology, network provisioning technology, network configuration technology, etc.), for example, by, dividing a live media content stream into one or more segments, each segment comprising a starting segment boundary and an ending segment boundary; encoding, using one or more primary encoders, the one or more segments of the live media content stream into one or more primary adaptive bitrate streams; dividing the one or more segments of the live media content stream into one or more subsegments, each subsegment being less than a length of a corresponding segment of the one or more segments; encoding, using the one or more secondary encoders, the one or more subsegments into one or more secondary adaptive bitrate streams; requesting one or more primary adaptive bitrate streams associated with the live media content from the one or more primary encoders; determining that the one or more primary adaptive bitrate streams are not at the starting segment boundary; based on a determination that the one or more primary adaptive bitrate streams are not at a starting segment boundary, requesting one or more secondary adaptive bitrate streams associated with the live media content from one or more secondary encoders; receiving the one or more secondary adaptive bitrate streams comprising the one or more subsegments; decoding the live media content associated with the one or more secondary bitrate streams; and and/or the like.

In particular, to the extent any abstract concepts are present in the various embodiments, those concepts can be implemented as described herein by devices, software, systems, and methods that involve specific novel functionality (e.g., steps or operations), such as, dividing the one or more segments of the live media content stream into one or more subsegments, each subsegment being less than a length of a corresponding segment of the one or more segments; requesting one or more primary adaptive bitrate streams associated with the live media content from the one or more primary encoders; determining that the one or more primary adaptive bitrate streams are not at the starting segment boundary; based on a determination that the one or more primary adaptive bitrate streams are not at a starting segment boundary, requesting one or more secondary adaptive bitrate streams associated with the live media content from one or more secondary encoders; receiving the one or more secondary adaptive bitrate streams comprising the one or more subsegments; decoding the live media content associated with the one or more secondary bitrate streams; and/or the like, to name a few examples, that extend beyond mere conventional computer processing operations. These functionalities can produce tangible results outside of the implementing computer system, including, merely by way of example, improved live media content distribution that is performed in an efficient real-time manner to reduce lag and latency when live media content is requested, to improve display of live media content, to improve requests for live media content channel changes, and/or the like, at least some of which may be observed or measured by customers and/or service providers.

In an aspect, a method may comprise, dividing, using a computing system, a live media content stream into one or more segments. In some cases, each segment might include a starting segment boundary and an ending segment boundary. The method may continue by encoding, using one or more primary encoders of the computing system, the one or more segments of the live media content stream into one or more primary adaptive bitrate streams; and dividing, using the computing system, the one or more segments of the live media content stream into one or more subsegments. Each subsegment may be less than a length of a corresponding segment of the one or more segments. The method may additionally include encoding, using one or more secondary encoders of the computing system, the one or more subsegments into one or more secondary adaptive bitrate streams.

In some embodiments, the one or more primary adaptive bitrate streams might be one or more continuous segments of the live media content stream. In various instances, the one or more secondary adaptive bitrate streams might include at least one of one or more continuous subsegments of the live media content stream or one or more discontinuous subsegments of the live media content stream.

Merely by way of example, in some cases, the one or more subsegments might have a different starting boundary than a corresponding starting segment boundary of a corresponding segment of the one or more segments and a same ending boundary as a corresponding ending segment boundary of the corresponding segment of the one or more segments. In some instances, the one or more subsegments might be two or more subsegments. Each subsegment of the two or more subsegments may have a different subsegment starting boundary than a next subsegment starting boundary of a next subsegment. In various embodiments, the next subsegment starting boundary of the next sub segment may occur a predetermined amount of time after a preceding subsegment starting boundary of a preceding subsegment. Alternatively, or additionally, each subsegment of the two or more subsegments may be encoded by a single encoder or a separate encoder of the one or more secondary encoders.

In some instances, the method might further include releasing, using the computing system, the one or more secondary encoders when the one or more sub segments reach the same ending boundary as the corresponding segment of the one or more segments.

According to some embodiments, the one or more subsegments may overlap the ending segment boundary of the one or more segments and/or the one or more subsegments may overlap a next starting segment boundary of a next segment of the one or more segments. In some cases, the one or more subsegments may be transmitted unencrypted. Alternatively, or additionally, the one or more subsegments may be transmitted at a lower bitrate than the one or more segments.

In another aspect, an apparatus might comprise at least one processor and a non-transitory computer readable medium communicatively coupled to the at least one processor. The non-transitory computer readable medium might have stored thereon computer software comprising a set of instructions that, when executed by the at least one processor, causes the apparatus to: receive a request for live media content on a live channel; request one or more primary adaptive bitrate streams associated with the live media content from one or more primary encoders, the one or more primary adaptive bitrate streams including one or more segments, each segment including a starting segment boundary and an ending segment boundary; determine that the one or more primary adaptive bitrate streams are not at a starting segment boundary; based on a determination that the one or more primary adaptive bitrate streams are not at a starting segment boundary, request one or more secondary adaptive bitrate streams associated with the live media content from one or more secondary encoders, the one or more secondary adaptive bitrate streams including one or more subsegments, and each subsegment being less than a length of a corresponding segment of the one or more segments; receive the one or more secondary adaptive bitrate streams including the one or more subsegments; and decode the live media content associated with the one or more secondary bitrate streams.

In some embodiments, the request for the one or more secondary adaptive bitrate streams associated with the live channel from one or more secondary encoders further includes requesting a secondary adaptive bitrate stream of the one or more secondary adaptive bitrate streams comprising a subsegment of the one or more subsegments with a starting subsegment boundary closest to a real-time display time of the live media content.

In various instances, the one or more subsegments include a different starting boundary than a corresponding starting segment boundary of a corresponding segment of the one or more segments and a same ending boundary as a corresponding ending segment boundary of the corresponding segment of the one or more segments. In some cases, the set of instructions, when executed by the at least one processor, further causes the apparatus to: determine that the one or more subsegments of the one or more secondary adaptive bitrate streams have reached the same ending boundary as the corresponding ending segment boundary of the corresponding segment; based on a determination that the one or more subsegments of the one or more secondary bitrate streams have reached the same ending boundary, switch from at least one of the one or more secondary adaptive bitrate streams to at least one of the one or more primary adaptive bitrate streams; receive the at least one primary adaptive bitrate stream comprising the one or more segments; and decode the live media content associated with the at least one primary adaptive bitrate stream.

In some instances, the one or more secondary adaptive bitrate streams comprising the one or more subsegments may be received with a first video codec and the one or more primary adaptive bitrate streams may be received with a second video codec different than the first video codec. In some cases, the one or more primary adaptive bitrate streams maybe generated with efficient/newer codec while the one or more secondary bitrate streams may be generated with less efficient codecs. The apparatus may be able to switch between codecs at any segment or subsegment boundary.

In some cases, the one or more subsegments might overlap the ending segment boundary of the one or more segments and/or the one or more subsegments may overlap a next starting segment boundary of a next segment of the one or more segments. When the one or more subsegments overlap the ending segment boundary of the one or more segments and/or the next starting segment boundary of the next segment of the one or more segments, the set of instructions, when executed by the at least one processor, might further cause the apparatus to: drop one or more overlapping subframes of the one or more subsegments, wherein the one or more overlapping subframes overlap between the one or more subsegments and the one or more segments. The one or more overlapping subframes may be dropped before the one or more overlapping subframes are decoded.

Alternatively, or additionally, when, the one or more subsegments overlap the ending segment boundary of the one or more segments and/or the next starting segment boundary of the next segment of the one or more segments, the set of instructions, when executed by the at least one processor, might further cause the apparatus to: receive at least one primary adaptive bitrate stream comprising the one or more segments; receive at least one secondary adaptive bitrate stream comprising the one or more subsegments; determine whether one or more overlapping subframes of the one or more subsegments are behind one or more real-time frames of the one or more segments; based on a determination that the one or more overlapping subframes of the one or more subsegments are behind the one or more real-time frames of the one or more segments, decode and display the one or more overlapping subframes faster to catch up to the one or more real-time frames of the one or more segments; and based on a determination that the one or more overlapping subframes of the one or more subsegments have caught up to the one or more real-time frames of the one or more segments, switch from at least one of the one or more secondary adaptive bitrate streams to at least one of the one or more primary adaptive bitrate streams.

Merely by way of example, in some cases, the set of instructions, when executed by the at least one processor, might further cause the apparatus to: determine whether one or more real-time frames of the one or more segments are not available; based on a determination that the one or more real-time frames of the one or more segments are not available, decode and display at least one of one or more subframes of the one or more subsegments slower until the one or more real-time frames are available or repeat one or more prior subframes of the one or more subsegments until the one or more real-time frames are available; and based on a determination that the one or more real-time frames are available, switch from at least one of the one or more secondary adaptive bitrate streams to at least one of the one or more primary adaptive bitrate streams.

In various embodiments, the one or more segments might include a header at the starting segment boundary. Each header may indicate one or more additional decodable segment boundaries indicating one or more additional locations within a corresponding segment where the apparatus can start decoding the live media content.

In yet another aspect, a system might comprise a first computing system, which might comprise one or more primary encoders, one or more secondary encoders, at least one first processor, and a first non-transitory computer readable medium communicatively coupled to the at least one first processor. The first non-transitory computer readable medium might have stored thereon computer software comprising a first set of instructions that, when executed by the at least one first processor, causes the first computing system to: divide a live media content stream into one or more segments, each segment including a starting segment boundary and an ending segment boundary; encode, using the one or more primary encoders, the one or more segments of the live media content stream into one or more primary adaptive bitrate streams; divide the one or more segments of the live media content stream into one or more subsegments, each subsegment being less than a length of a corresponding segment of the one or more segments; and encode, using the one or more secondary encoders, the one or more subsegments into one or more secondary adaptive bitrate streams.

In some cases, the system might further include a second computing system, which might comprise at least one second processor and a second non-transitory computer readable medium communicatively coupled to the at least one second processor. The second non-transitory computer readable medium might have stored thereon computer software comprising a second set of instructions that, when executed by the at least one second processor, causes the second computing system to: receive a request for live media content on a live channel; request one or more primary adaptive bitrate streams associated with the live media content from one or more primary encoders; determine that the one or more primary adaptive bitrate streams are not at a starting segment boundary; based on a determination that the one or more primary adaptive bitrate streams are not at a starting segment boundary, request one or more secondary adaptive bitrate streams associated with the live media content from one or more secondary encoders; receive the one or more secondary adaptive bitrate streams comprising the one or more subsegments; and decode the live media content associated with the one or more secondary bitrate streams.

Various modifications and additions can be made to the embodiments discussed without departing from the scope of the invention. For example, while the embodiments described above refer to particular features, the scope of this invention also includes embodiments having different combinations of features and embodiments that do not include all of the above described features.

Specific Exemplary Embodiments

We now turn to the embodiments as illustrated by the drawings.FIGS.1-9illustrate some of the features of the method, system, and apparatus for implementing encoding and decoding of media content streams, and, more particularly, of methods, systems, and apparatuses for implementing encoding and decoding of live adaptive bitrate media content streams, as referred to above. The methods, systems, and apparatuses illustrated byFIGS.1-9refer to examples of different embodiments that include various components and steps, which can be considered alternatives or which can be used in conjunction with one another in the various embodiments. The description of the illustrated methods, systems, and apparatuses shown inFIGS.1-9is provided for purposes of illustration and should not be considered to limit the scope of the different embodiments.

With reference to the figures,FIG.1is a schematic diagram illustrating a system100for implementing encoding and decoding of live adaptive bitrate (“ABR”) media content streams, in accordance with various embodiments. Although lines and lightning bolts are used to denote communicative couplings and/or connections (e.g., wireless and/or wired connections) between devices, one or more intermediary devices (not shown) and/or networks (not shown) may be located between the one or more devices ofFIG.1.

In the non-limiting embodiment ofFIG.1, system100might comprise a first computing system(s)105and a corresponding database(s)110with which first computing system(s)105might be communicatively coupled. In some embodiments, system100might further include one or more primary encoders115and one or more secondary encoders120, and/or the like. Although the database(s)110, the one or more primary encoders115, and the one or more secondary encoders120are shown to be external to the first computing system105, the various embodiments are not so limited and the database(s)110, the one or more primary encoders115, and/or the one or more secondary encoders120might be disposed within the first computing system105. Additionally, although the one or more primary encoders115are designated as primary and the one or more secondary encoders120are designated as secondary, the one or more primary encoders115could also function as the one or more secondary encoders120and the one or more secondary encoders120could function as the one or more primary encoders115. Further, although the one or more primary encoders115are designated as primary and the one or more secondary encoders120are designated as secondary, the terms “primary” and “secondary” are merely used to differentiate between encoders and are not intended to indicate a preference for a particular encoder, an amount a particular encoder is used or requested, and/or the like. In some cases, the one or more primary encoders115, and/or the one or more secondary encoders120might be part of an encoder pool and be capable of being spun up when live media content is requested by one or more users or when live media content is currently being broadcast by a media content source(s)125.

In various instances, each of the one or more primary encoders115and/or each of the one or more secondary encoders120may be set up to perform a same encoding task for different live media content. In a non-limiting example, each of the one or more primary encoders115and/or each of the one or more secondary encoders120may be set up to encode different live media content streams using at least one of a particular resolution, a particular bitrate, a particular codec, and/or the like. Alternatively, each of the one or more primary encoders115and/or each of the one or more secondary encoders120may split up and perform one or more different encoding tasks or a series of different encoding tasks on the same live media content. In some instances, the live media content stream may be split into one or more different chunks or one or more different frames for parallel encoding by the one or more primary encoders115and/or the one or more secondary encoders120.

In some embodiments, the first computing system105might include, without limitation, a first processor (not shown) and a first memory (not shown). In some embodiments, the first computing system105may include, without limitation, one or more of a user device, a server computer, a server computer over a network, a cloud-based computing system, a cloud-based computing system over a network, or a distributed computing system, and/or the like.

System100might further comprise one or more media content sources125a-125n(collectively, media content sources125), each of which may be communicatively coupled to a corresponding database(s)130a-130n(collectively, databases130). The one or more media content sources125may be communicatively coupled to the first computing system105(or at least primary encoder(s)115and/or secondary encoder(s)120of the first computing system105), primary encoder(s)115, and/or secondary encoder(s)120via network(s)135,140, and/or145(through wireless and/or wired communications). The media content sources125might include, without limitation, one or more of a user device, a server computer, a server computer over a network, a content provider computer, a content provider computer over a network, a cloud-based computing system, a cloud-based computing system over a network, or a distributed computing system, and/or the like. In some cases, the first computing system105, the one or more primary encoders115, and/or the one or more secondary encoders120might be embodied or contained within the one or more content sources125.

According to some embodiments, system100might further comprise second computing system(s), user interface device(s), or user device(s)150(collectively, second computing system(s)150). The second computing system(s) may include, without limitation, one or more components155. The one or more components155might include, without limitation, at least one of one or more processors160, a memory (not shown), one or more decoders165, one or more displays170, and one or more speakers175, and/or the like. In alternative embodiments, one or more of the components155of the second computing system(s)150might be embodied as separate components that may each be in communication with one or more other components. For instance, system100might include, but is not limited to, one or more decoders165, one or more displays170, and/or one or more speakers175, and/or the like, and a second computing system150(optional), and/or the like, each of which might be stand-alone or separate components. In some cases, the second computing system(s)150may be, without limitation, at least one of a set-top box, a television, a server computer, a desktop computer, a laptop computer, a tablet computer, a smart phone, a cellphone, a mobile phone, a personal digital assistant, a remote-control device, a gaming console, or a portable gaming device, or any suitable device capable of communicating with first computing system(s)105, primary encoders115, secondary encoders120, and/or content sources125via a web-based portal, an application programming interface (“API”), a server, a software application (“app”), or any other suitable communications interface, or the like.

System100might further comprise network(s)135and140, which might communicatively couple at least one of the first computing system(s)105, the database(s)110, the primary encoder(s)115, the secondary encoder(s)120, the content source(s)125, the database(s)130, the second computing system150, and/or the components of the secondary computing system(s)150and/or the like. In various instances, the first computing system(s)105, the database(s)110, the primary encoder(s)115, the secondary encoder(s)120, the content sources125, the second computing system(s)150and/or the like may be communicatively coupled together within one or more service provider networks or one or more content provider networks. Alternatively, or additionally, the second computing system150may be located in a local area network.

The network(s)135and/or140might be service provider networks, content provider networks, local area networks, and/or the like. Each of the networks135and140might include, without limitation, one of a fiber network, an Ethernet network, a Token-Ring™ network, a wide-area network (“WAN”), a wireless wide area network (“WWAN”), a virtual private network (“VPN”), the Internet, an intranet, an extranet, a public switched telephone network (“PSTN”), an infra-red network, a wireless network operating under any of the IEEE 802.11 suite of protocols, the Bluetooth™ protocol known in the art, the Z-Wave protocol known in the art, the ZigBee protocol or other IEEE 802.15.4 suite of protocols known in the art, and/or any other wireless protocol, and/or any combination of these and/or other networks. In a particular embodiment, the network135or the network140might include an access network of the service provider (e.g., an Internet service provider (“ISP”)), or the like.

In some embodiments, system100might also comprise one or more telecommunications relay systems145, which might include, without limitation, one or more wireless network interfaces (e.g., wireless modems, wireless access points, and the like), one or more towers, one or more cellular towers, one or more satellites, and/or the like. The one or more telecommunications relay systems145might provide wired or wireless communications between the service provider (e.g., the first computing system(s)105, the primary encoder(s)115, the secondary encoder(s)120, the content source(s)125, etc.) and the second computing system(s)150.

In operation, the first computing system(s)105, the one or more primary encoders115, and/or the one or more secondary encoders120might receive a live and/or real-time media content stream from at least one of the one or more media content sources125(and/or corresponding database(s)130) via network(s)135,140, and/or145. The live and/or real-time media content stream represents the display of live content as it is occurring in real-time or near real-time and is different from “on-demand” content which is previously recorded. In various instances, the live and/or real-time media content stream may have a slight time delay (e.g., 0.5 seconds, 1 second, 2 seconds, 5 seconds, 10 seconds, and/or the like) between when the live content occurs and when the live content is displayed in the live media stream. The live and/or real-time media content stream might include live video content from at least one of one or more live sporting events, live newscasts, live video streams, live television programs, and/or the like. In some cases, the live media content stream may include one or more adaptive bitrate (“ABR”) streams. The ABR streams may include, but are not limited to, resolutions of 8K, 4K, high definition (“HD”), standard definition (“SD”), and/or the like. Each resolution of the ABR streams may also be distributed at different bitrates. In a non-limiting example, ABR streams may be transmitted at 5 Megabits per second (“Mbps”), 3 Mbps, 1 Mbps, 500 kilobits per second (“Kbps”), and/or the like.

The first computing system(s)105, the one or more primary encoders115, and/or the one or more secondary encoders120might receive the live media content stream in response to a request from the second computing system(s)150for the live media content stream. Alternatively, the first computing system105, the one or more primary encoders115, and/or the one or more secondary encoders120might receive the live media content stream from at least one of the one or more media content sources125(and/or corresponding database(s)130) when the live media stream is occurring or being broadcast regardless of whether the second computing system(s)150sends a request for the live media content stream.

In some instances, the first computing system(s)105and the one or more primary encoders115might receive a primary live media content stream and/or a primary live ABR media content stream from at least one of the one or more media content sources125(and/or corresponding database(s)130) and the first computing system(s)105and the one or more secondary encoders120might receive a secondary live media content stream and/or a secondary live ABR media content stream from at least one of the one or more media content sources125. Although the one or more primary ABR streams are designated as primary and the one or more secondary ABR streams are designated as secondary, the terms “primary” and “secondary” are merely used to differentiate between media content streams and are not intended to indicate a preference for a particular ABR stream, an amount a particular ABR stream is used or requested, and/or the like. Alternatively, in some embodiments, the first computing system105and/or the one or more primary encoders115might convert a live media content stream from the at least one of the one or more media content sources125(and/or corresponding database(s)130) into one or more primary live ABR media content streams and the first computing system105and/or the one or more secondary encoders120might convert the live media content stream and/or the one or more primary live ABR media content stream from at least one of the one or more media content sources125(and/or corresponding database(s)130) into one or more secondary live ABR media content streams.

In various embodiments, the first computing system(s)105, the one or more primary encoders115, and/or the one or more media content sources125might divide the live media content stream and/or the one or more primary live ABR media content streams into one or more segments. Each segment may be divided into various sizes based on a predetermined amount of time (e.g., 5 seconds, 10 seconds, 15 seconds, and/or the like). Each segment might include a starting segment boundary and an ending segment boundary. The starting segment boundary of each segment might indicate a start time where the live media content stream(s) and/or the one or more primary live ABR media content streams can be decoded by decoder(s)165of the second computing system(s)150. The ending segment boundary might indicate an end of the segment before the next decodable starting segment boundary of the one or more primary live ABR media content streams. The first computing system(s)105, the one or more primary encoders115, and/or the one or more media content sources125might then encode the one or more segments of the live media content stream into one or more primary live ABR media content streams.

In some instances, the first computing system(s)105, the one or more secondary encoders120, and/or the one or more media content sources125might divide the one or more segments of the live media content stream and/or the one or more primary live ABR media content streams into one or more subsegments. Each subsegment may be divided into various sizes based on a predetermined amount of time (e.g., 0.5 seconds, 1 second, 2 seconds, 5 seconds, 10 seconds, 15 seconds, and/or the like). Each subsegment may be less than a length of a corresponding segment of the one or more segments. In a non-limiting example, if a subsegment is 10 seconds in length, a subsegment may be 0.5 seconds, 1 second, 2 seconds, 5 seconds, 9 seconds, etc. Each subsegment might include a starting subsegment boundary and an ending subsegment boundary. The starting subsegment boundary of each subsegment might indicate a start time where the live media content stream(s) and/or the one or more secondary live ABR media content streams can be decoded by decoder(s)165of the second computing system(s)150. The ending subsegment boundary might indicate an end of the subsegment. The first computing system(s)105, the one or more secondary encoders120, and/or the one or more media content sources125might then encode the one or more subsegments of the live media content stream(s) and/or the one or more primary live ABR media content streams into one or more secondary live ABR media content streams.

In various cases, the one or more subsegments might have subsegment starting boundaries that are different than a corresponding starting segment boundary of a corresponding segment of the one or more segments. Alternatively, or additionally, the one or more subsegments might have a same ending subsegment boundary as a corresponding ending segment boundary of the corresponding segment of the one or more segments. Alternatively, in some embodiments, the one or more subsegments may overlap the ending segment boundary of the one or more segments and/or the one or more subsegments may overlap the next starting segment boundary of the next segment of the one or more segments.

Each secondary live ABR media content stream and/or each subsegment of each secondary live ABR media content stream may be encoded by a single encoder or a separate encoder of the one or more secondary encoders120. In other words, for each secondary live ABR media content stream, a corresponding separate or single encoder might be used to encode each secondary live ABR media content stream. In some cases, when the one or more subsegments reach an ending subsegment boundary, the one or more secondary encoders encoding the one or more secondary live ABR media content streams may be released back to an encoder pool.

In some embodiments, the one or more subsegments may be at least one of transmitted unencrypted, transmitted at a lower resolution, transmitted at a lower bitrate, or transmitted with a less efficient or older codec than the one or more segments.

Additionally, in operation, the second computing system(s)150might receive a request to receive and display a live media content stream. The request might be, without limitation, an initial request (e.g., turning on a display device, opening an application, selecting a particular television show or program, and/or the like) to receive the live media content stream or a channel change request to change a channel to the live media content stream, and/or the like. The second computing system(s)150might send the request for the live media content stream to the first computing system105, the one or more primary encoders115, the one or more secondary encoders120, and/or the one or more media content sources125.

The second computing system(s)150might next determine that the live media content and/or one or more primary live ABR media content streams of the live media content are not at a starting segment boundary. Based on a determination that the media content and/or the one or more primary live ABR streams are not at a starting segment boundary, the second computing system(s)150might request one or more secondary live ABR streams containing one or more subsegments associated with the live media content from the one or more secondary encoders120. The request for the one or more secondary live ABR streams from one or more secondary encoders120might include requesting, using the second computing system(s)150, a secondary live ABR stream of the one or more secondary live ABR streams containing a subsegment of the one or more subsegments with a starting subsegment boundary closest to a real-time display time of the live media content.

By requesting the one or more secondary live ABR streams from one or more secondary encoders120, the lag or latency time between when the media content is requested and when the media content is displayed may be reduced because the second computing system(s)150does not need to wait until a next starting segment boundary of a next decodable segment of a primary live ABR stream becomes available. Additionally, by requesting the one or more secondary live ABR streams from one or more secondary encoders120, the lag or latency time between live media content and the decoded media content may be reduced because the second computing system(s)150can request one or more subsegments with a starting subsegment boundary closest to a real-time display time of the live media content without having to decode one or more segments of a primary live ABR stream from the starting boundary of the segment.

The second computing system(s)150may then receive, via network(s)135,140, and/or145, the one or more secondary live ABR streams comprising the one or more subsegments from the one or more secondary encoders120. In some cases, in order to receive the one or more secondary live ABR streams, the one or more secondary encoders120might push the one or more secondary live ABR streams to the second computing system(s)150. Alternatively, in order to receive the one or more secondary live ABR streams, the second computing system(s)150might pull the one or more secondary live ABR streams from the one or more secondary encoders120.

The second computing system(s) might next decode, using decoder(s)165, the one or more secondary live ABR streams comprising the one or more subsegments, and display, using the display(s)170, the live media content associated with the one or more subsegments of the one or more secondary live ABR streams.

In some instances, the second computing system(s)150might determine that the one or more subsegments of the one or more secondary live ABR streams have reached the same ending boundary as the corresponding ending segment boundary of the corresponding segment. Based on a determination that the one or more subsegments of the one or more secondary live ABR streams have reached the same ending boundary, the second computing system(s)150might switch from receiving at least one of the one or more secondary live ABR streams from the one or more secondary encoders120to receiving at least one of the one or more primary live ABR streams from the one or more primary encoders115. The second computing system(s)150might then receive the at least one primary live ABR stream comprising the one or more segments from the one or more primary encoders115, decode the live media content associated with the at least one primary live ABR streams stream, and display the live media content associated with the at least one primary live ABR streams stream. In some cases, in order to receive the one or more primary live ABR streams, the one or more primary encoders115might push the one or more primary live ABR streams to the second computing system(s)150. Alternatively, in order to receive the one or more primary live ABR streams, the second computing system(s)150might pull the one or more primary live ABR streams from the one or more primary encoders115.

In some cases, the one or more secondary live ABR streams may be one or more dedicated side-channels separate from the one or more primary live ABR streams. In some cases, the one or more secondary ABR streams may be one or more unicast channels and/or multicast channels while the one or more primary live ABR streams may be one or more multicast channels. In a non-limiting example, if the primary live ABR stream is not at a segment boundary, the second computing system(s)150may pull the one or more secondary ABR streams which may be one or more dedicated multicast or unicast side channels and switch to the primary live multicast ABR stream at a starting segment boundary of the primary live multicast ABR stream.

In some cases, the second computing system(s)150might pull the one or more secondary live ABR streams with a different codec compared to the one or more primary live ABR streams. In some cases, the one or more primary adaptive bitrate streams may be generated with a more efficient/newer codec while the one or more secondary bitrate streams may be generated with less efficient/older codecs. The second computing system(s)150may be configured to switch between codecs at any segment or subsegment boundary.

These and other functions of the system100(and its components) are described in greater detail below with respect toFIGS.2-7.

FIG.2is a schematic diagram illustrating an embodiment for implementing one or more adaptive bitrate streams205, in accordance with various embodiments.FIG.2is intended to provide an illustrative perspective with respect to the implementation of one or more adaptive bitrate streams205with one or more segments210, and is not limited to such functionalities, but may be applicable to some (if not all) of the functionalities described above with respect toFIG.1, or the like and below with respect toFIGS.3-7, or the like.

FIG.2depicts one or more live adaptive bitrate (“ABR”) streams205a,205b, and205c(collectively, ABR streams205) that may be transmitted between a first computing system(s) (e.g., first computing system(s)105ofFIG.1), encoder(s) (e.g., primary encoder(s)115and/or secondary encoder(s)120ofFIG.1), and/or content sources (e.g., content sources125ofFIG.1) and a second computing system(s) (e.g., second computing system(s), user interface device(s), or user device(s)150ofFIG.1) and/or decoder(s) (e.g., decoder(s)165ofFIG.1). As live media content is being broadcast, a first computing system, encoder(s), and/or content sources might convert the live media content stream into the one or more live ABR streams205.

In some embodiments, the one or more live ABR streams205may include, but are not limited to, formats or resolutions of 8K, 4K, high definition (“HD”), standard definition (“SD”), and/or the like. In a non-limiting example, live ABR stream205amay be a 4K ABR stream, live ABR stream205bmay be an HD ABR stream, and live ABR stream205cmay be an SD ABR stream. Each resolution of the one or more live ABR streams205may also be distributed at different bitrates. In a non-limiting example, live ABR streams205may be transmitted at 5 Megabits per second (“Mbps”), 3 Mbps, 1 Mbps, 500 kilobits per second (“Kbps”), and/or the like. Each live ABR stream205may also be associated with different codecs. The codecs may include, without limitation, H.263, H.264, H.265, H.266, MPEG-1, MPEG-2, VP8, VP9, AAC, AV1, MP3, MP4, Theora, and/or the like.

In various cases, each live ABR stream205may be divided into one or more segments210a,210b,210c, and210n(collectively, segments210). Each segment210may be divided into various sizes based on a predetermined amount of time (e.g., 5 seconds, 10 seconds, 15 seconds, and/or the like). Each segment might include a starting segment boundary215and an ending segment boundary220. In a non-limiting example, segment210amay have a starting segment boundary215aand an ending segment boundary220a. The starting segment boundary215of each segment210might indicate a start time when the live media content stream(s) and/or the one or more live ABR streams205can be decoded by decoder(s) of the second computing system(s). The ending segment boundary might indicate an end time of the segment before the starting boundary of the next decodable segment. In a non-limiting example, segment210amay have a starting time of T1and an ending time of T2.

In some instances, each segment210might start with an initial I-frame and/or header225indicating the start of time when and/or a starting boundary215where each segment210can be decoded by decoder(s) of the second computing system(s). The initial I-frame and/or header225might also indicate one or more additional times and/or additional boundaries230a-230cwithin each segment210indicating a location where each segment210might be decoded and/or a location where a second computing system(s) can start decoding each segment210. In a non-limiting example, segment210cmight additionally be decoded at230a,230b, and/or230c.

In various embodiments, the second computing system(s) may transition or switch between the one or more ABR streams205at any segment starting boundary215. For example, the second computing system(s) may switch between the one or more live ABR streams205to change a resolution (e.g., 8K, 4K, HD, SD, etc.), a bitrate (e.g., 100 Kbps, 500 Kbps, 1 Mbps, 5 Mbps, 10 Mbps, etc.), or a codec (e.g., H.263, H.264, H.265, H.266, MPEG-1, MPEG-2, VP8, VP9, AAC, AV1, MP3, MP4, Theora, etc.) of the one or more live ABR streams205.

In operation, a first computing system, one or more primary encoders, and/or one or more media content sources might convert a live media content stream into one or more live ABR streams205. The one or more live ABR streams205may then be divided into one or more segments210. Next, the one or more primary encoders might encode the one or more live ABR streams205for transmission to a second computing system(s).

The second computing system(s) might request the one or more live ABR streams205and receive the one or more live ABR streams205from the first computing system(s), one or more primary encoders, and/or one or more media content sources. Upon receipt of the one or more live ABR streams205from the one or more primary encoders, one or more decoders of the second computing system(s) might decode and display the live media content associated with the one or more live ABR streams205at a decodable starting boundary215of the one or more segments210.

In some cases, the decoders of the second computing system(s) may switch between the one or more ABR streams205at any segment starting boundary215. In various embodiments, when the second computing system(s) determines that an improved resolution, bitrate, or codec is available, the second computing system(s) may switch between the one or more live ABR streams205at the one or more starting segment boundaries215.

In a non-limiting example, as shown at line “A” ofFIG.2, if the second computing system(s) determines that 4K is available for a particular live media content stream, the second computing system(s) might switch between segment210aof ABR stream205cwhich may be an SD ABR stream to segment210bof ABR stream205awhich may be a 4K ABR stream at ending segment boundary220a, starting boundary215b, and time T3.

In various embodiments, a user of the second computing system(s) might request a live media content stream at a time Tn1and/or a time Tn2that is not at a segment boundary (e.g., a starting segment boundary215and/or an ending segment boundary220). This request is represented by line “B” or by line “C” inFIG.2. The request might be, without limitation, an initial request (e.g., turning on a display device, opening an application, and/or the like) to receive the live media content stream or a channel change request to change a channel to live media content stream, and/or the like.

In order to service a request when a live media content stream is not at a segment boundary, the second computing system(s) may determine that the live media content and/or the one or more ABR streams205are not at a starting segment boundary215. Based on a determination that the live media content and/or the one or more ABR streams205are not at a starting segment boundary215, the second computing system(s) may request the segment210from the starting segment boundary215, decode the segment210from the starting segment boundary215, and fast forward and/or speed up the display of the decoded segment until the decoded ABR stream205catches up with the real-time or live media content stream.

In a non-limiting example, when a user of the second computing system(s) requests a live media content stream at a time Tn1that is not at a segment boundary (represented by line “B”), the second computing system(s) may request the segment210bfrom the starting segment boundary215b, decode the segment210bfrom the starting segment boundary215b, and fast forward and/or speed up the display of the decoded segment210buntil the decoded ABR stream205bcatches up with the real-time live media content stream. In some cases, the fast forwarding and/or speeding up of the display of the decoded segment210bmay be imperceptible to a user of the second computing system. The fast forwarding and/or speeding up of the ABR stream205bmay be at 1.25 times, 2 times, and/or the like of the live media content stream. By fast forwarding and/or speeding up the display of the decoded segment210b, channel change or requests of live channels may be faster without adding end-to-end delay to the viewer of the live media content

Alternatively, in order to service a request when a live media content stream is not at a segment boundary, the second computing system(s) may determine that the live media content stream and/or the one or more ABR streams205are not at a starting segment boundary215. Based on a determination that the media content and/or the one or more ABR streams205are not at a starting segment boundary215, the second computing system(s) may request the segment210from the starting segment boundary215and process the initial I-frame and/or header225of the segment210to determine whether there are one or more additional decodable boundaries230within the one or more segments210. Based on a determination that there are one or more additional decodable boundaries230within the one or more segments210, the second computing system(s) may determine the additional decodable boundary that is closest to the real-time media content stream and decode and display the segment starting at the closest additional decodable boundary. In some cases, if the additional decodable boundary is still behind the real-time media content stream, the second computing system(s) may fast forward and/or speed up the display of the decoded segment until the decoded ABR stream catches up with the real-time media content stream.

In a non-limiting example, when a user of the second computing system(s), user interface device(s), or user device(s), and/or the like requests a live media content stream at a time Tn2that is not at a segment boundary (represented by line “C”), the second computing system(s) may process the initial I-frame and/or header225of the segment210cto determine whether there are one or more additional decodable boundaries230a-230cwithin the segment210c. Next, the second computing system(s) might determine the additional decodable boundary closest to the real-time media content stream. In this non-limiting example, the closest decodable boundary is230b. Based on a determination of the closest decodable boundary230b, the second computing system(s) may start decoding and start displaying the segment210cat the closest additional decodable boundary230b. In some cases, if the additional decodable boundary230bis still behind the real-time media content stream, the second computing system(s) may fast forward and/or speed up the display of the decoded segment210cuntil the decoded ABR stream205ccatches up with the real-time live media content stream. By requesting the additional decodable boundary230b, channel change or requests of live channels may be faster without adding end-to-end delay to the viewer of the live media content.

Alternatively, or additionally, one or more other methods for servicing a request when a live media content stream is not at a segment boundary, are described in greater detail below with respect toFIGS.3-5.

Turning toFIG.3,FIG.3is a schematic diagram illustrating an embodiment for implementing one or more primary adaptive bitrate streams305comprising one or more segments310and one or more secondary adaptive bitrate streams325comprising one or more subsegments330, in accordance with various embodiments.FIG.3is intended to provide an illustrative perspective with respect to the implementation of the one or more primary adaptive bitrate streams305and the one or more secondary adaptive bitrate streams325, and is not limited to such functionalities, but may be applicable to some (if not all) of the functionalities described above with respect toFIGS.1and2, or the like or below with respect toFIGS.1-7or the like.

FIG.3depicts one or more live primary adaptive bitrate (“ABR”) streams305that may be transmitted between a first computing system(s) (e.g., first computing system(s)105ofFIG.1), encoder(s) (e.g., primary encoder(s)115and/or secondary encoder(s)120ofFIG.1), and/or content sources (e.g., content sources125ofFIG.1) and a second computing system(s) (e.g., second computing system(s), user interface device(s), or user device(s)150ofFIG.1) and/or decoder(s) (e.g., decoder(s)165of FIG.1). As live media content is being broadcast, a first computing system, encoder(s), and/or content sources might convert the live media content stream into the one or more primary live ABR streams305. In some embodiments, the one or more primary live ABR streams305may include, but are not limited to, resolutions of 8K, 4K, high definition (“HD”), standard definition (“SD”), and/or the like. Each resolution of the one or more primary live ABR streams305may also be distributed at different bitrates. In some embodiments, the one or more primary live ABR streams305may be transmitted at 5 Megabits per second (“Mbps”), 3 Mbps, 1 Mbps, 500 kilobits per second (“Kbps”), and/or the like. Each primary live ABR stream305may also be associated with a codec. The codec may include, without limitation, H.263, H.264, H.265, H.266, MPEG-1, MPEG-2, VP8, VP9, AAC, AV1, MP3, MP4, Theora, and/or the like.

In various cases, each live primary ABR stream may be divided into one or more segments310a,310b, and310c(collectively, segments310). Each segment310may be divided into various sizes based on a predetermined amount of time (e.g., 5 seconds, 10 seconds, 15 seconds, and/or the like). Each segment310might include a starting segment boundary315and an ending segment boundary320. The starting segment boundary315of each segment310might indicate a start time when the live media content stream(s) and/or the one or more primary live ABR media content streams305can be decoded by decoder(s) of the second computing system(s). The ending segment boundary320might indicate an end time of the segment.

FIG.3further depicts one or more live secondary adaptive bitrate (“ABR”) streams325a-325i(collectively, live secondary adaptive bitrate (“ABR”) streams325) that may be transmitted between a first computing system(s), encoder(s), and/or content sources and a second computing system(s) and/or decoder(s). As live media content is being broadcast, the first computing system(s), encoder(s), and/or content sources, might convert the live media content stream and/or the one or more primary ABR streams305into the one or more secondary live ABR streams325. Although the one or more primary ABR streams305are designated as primary and the one or more secondary ABR streams325are designated as secondary, the terms “primary” and “secondary” are merely used to differentiate between media content streams and are not intended to indicate a preference for a particular ABR stream, an amount a particular ABR stream is used or requested, and/or the like. In some embodiments, the one or more secondary live ABR streams325may include, but are not limited to, formats or resolutions of 8K, 4K, high definition (“HD”), standard definition (“SD”), and/or the like. Each resolution of the one or more secondary ABR streams325may also be distributed at different bitrates. In some embodiments, the one or more secondary ABR streams325may be transmitted at 5 Megabits per second (“Mbps”), 3 Mbps, 1 Mbps, 500 kilobits per second (“Kbps”), and/or the like. Each secondary live ABR stream325may also be associated with a codec. The codec may include, without limitation, H.263, H.264, H.265, H.266, MPEG-1, MPEG-2, VP8, VP9, AAC, AV1, MP3, MP4, Theora, and/or the like.

In various cases, each live secondary ABR stream325may be divided into one or more subsegments330a-330i(collectively, subsegments330). Each secondary ABR stream325may contain only one subsegment330. Alternatively, each secondary ABR stream325may contain two or more subsegments330. The one or more subsegments330a-330irepresent different ways to implement the one or more subsegments330and are not limited to only the implementations shown inFIG.3.

Each subsegment330may be less than a length of a corresponding segment of the one or more segments310. Each subsegment330may be divided into various sizes based on a predetermined amount of time (e.g., 1 second, 2 seconds, 5 seconds, 9 seconds, and/or the like). In a non-limiting example, if segment210ais 10 seconds, then subsegment330amight be 8 seconds, subsegment330bmay be 5 seconds, and subsegment330cmay be 2 seconds, and/or the like.

In some instances, each subsegment330might include a starting subsegment boundary335and an ending subsegment boundary340. In a non-limiting example, subsegment330amay have a starting subsegment boundary335aand an ending subsegment boundary340a. The starting subsegment boundary335of each subsegment330might indicate a start time when the live media content stream(s) and/or the one or more secondary live ABR media content streams325can be decoded by decoder(s) of the second computing system(s). The ending subsegment boundary340might indicate an end time of the subsegment. In a non-limiting example, subsegment330dmay have a starting time of Tn1and an ending time of T3.

In various cases, the one or more subsegments330might have a different starting subsegment boundary335than a corresponding starting segment boundary315of a corresponding segment310creating one or more gaps345between the starting subsegment boundary335and a corresponding starting segment boundary315of a corresponding segment. Alternatively, or additionally, the one or more subsegments330might have a same ending boundary340as a corresponding ending segment boundary320of the corresponding segment310. Because there are one or more gaps345between the starting subsegment boundary335and a corresponding starting segment boundary315of a corresponding segment310, the one or more secondary live ABR streams325and/or one or more subsegments330may not be a continuous live media content stream and the one or more secondary live ABR streams325and/or one or more subsegments330be transmitted unencrypted by the one or more secondary encoders. Alternatively, or additionally, the one or more secondary live ABR streams325and/or one or more subsegments330may be transmitted at a lower resolution, a lower bitrate, and/or a less efficient or older codec than the one or more primary live ABR streams305and/or one or more segments310.

In a non-limiting example, subsegment330amight have a different starting subsegment boundary335athan a corresponding starting segment boundary315aof a corresponding segment310acreating a gap345between the starting subsegment boundary335aand a corresponding starting segment boundary315aof a corresponding segment310a. Alternatively, or additionally, the subsegment330amight have a same ending boundary340aas a corresponding ending segment boundary320aof the corresponding segment310a.

In some cases, a next subsegment starting boundary of a next subsegment may occur a predetermined amount of time after a preceding subsegment starting boundary of a preceding subsegment. In a non-limiting example, next subsegment starting boundary335bof a next subsegment330bmay occur a predetermined amount of time after a preceding subsegment starting boundary335aof a preceding subsegment330a. In this way, the one or more subsegments330of the one or more secondary ABR streams325may be staggered and allow faster retrieval of a live media content stream.

In some instances, each subsegment330might start with an initial I-frame and/or header350indicating the start of time when and/or a starting boundary335where each subsegment330can start being decoded by decoder(s) of the second computing system(s). The initial I-frame and/or header350might also indicate one or more additional times and/or additional boundaries355within each subsegment330where each subsegment310might start being decoded. In a non-limiting example, segment330imight additionally start being decoded at additional boundary355.

In some instances, each of the one or more live secondary ABR streams325may be encoded by a single or separate secondary encoder. Additionally, in various cases, when the one or more live secondary ABR streams325reach a corresponding ending segment boundary320, the single or separate secondary encoder may be released back to a pool of encoders until one or more new segments and/or subsegments need to be encoded.

In operation, a first computing system(s), one or more primary encoders, and/or one or more media content sources might convert a live media content stream into one or more primary live ABR streams305. The one or more primary live ABR streams305may then be divided into one or more segments310. Next, the one or more primary encoders might encode the one or more live primary ABR streams305for transmission to a second computing system(s).

The second computing system(s) might request the one or more primary live ABR streams305from the first computing system(s), one or more primary encoders, and/or one or more media content sources. In various embodiments, a user of the second computing system(s) might request a live media content stream at a time Tn1that is not at a segment boundary (e.g., a starting segment boundary315and/or an ending segment boundary320). This request is represented by line “A” inFIG.3.

In order to service a request when a live media content stream and/or a primary live ABR stream205is not at a segment boundary315and/or320, the second computing system(s) may determine that the media content and/or the one or more primary live ABR streams305are not at a starting segment boundary315. Based on a determination that the media content and/or the one or more primary live ABR streams305are not at a starting segment boundary, the second computing system(s) may determine whether there are one or more secondary ABR streams325available from one or more secondary encoders, first computing system(s), and/or media content sources. Based on a determination that there are one or more secondary ABR streams325available, the second computing system(s) may determine the one or more decodable subsegment starting boundaries335and/or additional boundaries355that are closest to the real-time media content stream. Next, the second computing system(s) may decode and display the subsegment330that has a starting subsegment boundary335and/or additional boundary355that is closest to the real-time media content stream. In some cases, if the secondary live ABR stream325is still behind the real-time media content stream, the second computing system(s) may fast forward and/or speed up the display of the decoded subsegment until the decoded secondary ABR stream catches up with the real-time media content stream. By requesting one or more secondary live ABR streams325, channel change or requests of live channels may be faster without adding end-to-end delay to the viewer of the live media content.

In a non-limiting example, represented by line “A” ofFIG.3, the second computing system(s) may receive a request for live media content at a start time of Tn1and determine that the media content and/or the primary live ABR stream305is not at a starting segment boundary315b. Based on a determination that the live media content stream and/or the primary live ABR stream305is not at a starting segment boundary315, the second computing system(s) may determine whether there are one or more secondary ABR streams325available from one or more secondary encoders, first computing system(s), and/or media content sources. Based on a determination that there are one or more secondary ABR streams325available, the second computing system(s) may determine the one or more decodable subsegment starting boundaries335that are closest to the real-time media content stream and decode and display the subsegment330dthat has a starting subsegment boundary335dthat is closest to the real-time media content stream. In some cases, if the secondary live ABR stream325dis still behind the real-time media content stream, the second computing system(s) may fast forward and/or speed up the display of the decoded subsegment330duntil the decoded secondary ABR stream325dcatches up with the real-time media content stream.

In various embodiments, the one or more decoders may switch between the one or more secondary ABR streams325at any ending subsegment boundary340and the one or more primary ABR streams at any segment starting boundary315. In some cases, the second computing system(s) may determine when the one or more subsegments330reach an ending subsegment boundary340and switch from the one or more secondary ABR streams325to the one or more primary ABR streams305. When the second computing system(s) switches from the one or more secondary ABR streams325to the one or more primary ABR streams305, the one or more secondary encoders may be released back to an encoder pool.

In a non-limiting example, represented by line “B” ofFIG.3, the second computing system(s) may determine when subsegment330dreaches ending subsegment boundary340d. Based on a determination that subsegment330dhas reached an ending subsegment boundary340d, the second computing system(s) may switch from the secondary ABR stream325dto the primary ABR stream305. In this way, the secondary ABR stream325acts as a dedicated side channel until the second computing system(s) can switch to the primary ABR stream305.

In some cases, the one or more secondary live ABR streams325and/or one or more subsegments330may be received by the second computing system(s) at a lower resolution, a lower bitrate, and/or a less efficient or older codec than the one or more primary live ABR streams305and/or one or more segments310. In some cases, based on a determination that subsegment330dreached ending subsegment boundary340d, the second computing system(s) may switch from the secondary ABR stream325dhaving a lower resolution, a lower bitrate, and/or a less efficient or older codec to the primary ABR stream305having a higher resolution, a higher bitrate, and/or a more efficient or new codec. By requesting a lower resolution, a lower bitrate, and/or a less efficient or older codec secondary live ABR stream, channel change or requests of live channels may be faster without adding end-to-end delay to the viewer of the live media content.

Alternatively, or additionally, one or more other methods for servicing a request when a live media content stream is not at a segment boundary, are described in greater detail below with respect toFIG.4.

Turning toFIG.4,FIG.4is a schematic diagram illustrating an embodiment for implementing one or more primary adaptive bitrate streams405comprising one or more segments410and one or more secondary adaptive bitrate streams425comprising one or more subsegments430, in accordance with various embodiments.FIG.4is intended to provide an illustrative perspective with respect to the implementation of the one or more primary adaptive bitrate streams405and the one or more secondary adaptive bitrate streams425, and is not limited to such functionalities, but may be applicable to some (if not all) of the functionalities described above with respect toFIGS.1,2,3, or the like or below with respect toFIGS.5,6, and7or the like.

FIG.4depicts one or more live primary adaptive bitrate (“ABR”) streams405that may be transmitted between a first computing system(s) (e.g., first computing system(s)105ofFIG.1), encoder(s) (e.g., primary encoder(s)115and/or secondary encoder(s)120ofFIG.1), and/or content sources (e.g., content sources125ofFIG.1) and a second computing system(s) (e.g., second computing system(s), user interface device(s), or user device(s)150ofFIG.1) and/or decoder(s) (e.g., decoder(s)165ofFIG.1). As live media content is being broadcast, the first computing system, encoder(s) and/or content sources (e.g., content sources125ofFIG.1), might convert the live media content stream into the one or more primary ABR streams405. In some embodiments, the one or more primary ABR streams405may include, but are not limited to, resolutions or formats of 8K, 4K, high definition (“HD”), standard definition (“SD”), and/or the like. Each resolution of the one or more primary ABR streams405may also be distributed at different bitrates and/or different codecs.

In various cases, each primary live ABR stream405may be divided into one or more segments410a,410b, and410c(collectively, segments410). Each segment410may be divided into various sizes based on a predetermined amount of time (e.g., 5 seconds, 10 seconds, 15 seconds, and/or the like). Each segment410might include a starting segment boundary415and an ending segment boundary420. The starting segment boundary415of each segment410might indicate a start time when the live media content stream(s) and/or the one or more primary live ABR media content streams405can be decoded by decoder(s) of the second computing system(s). The ending segment boundary420might indicate an end time of the segment410.

FIG.4further depicts one or more live secondary adaptive bitrate (“ABR”) streams425a-425cthat may be transmitted between a first computing system(s) (e.g., first computing system(s)105ofFIG.1), encoder(s) (e.g., primary encoder(s)115and/or secondary encoder(s)120ofFIG.1), and/or content sources (e.g., content sources125ofFIG.1) and a second computing system(s) (e.g., second computing system(s), user interface device(s), or user device(s)150ofFIG.1) and/or decoder(s) (e.g., decoder(s)165ofFIG.1). As live media content is being broadcast, the first computing system, encoder(s), content sources might convert the live media content stream and/or the one or more primary ABR streams405into the one or more secondary ABR streams425. The one or more secondary ABR streams425may be one or more side-channels separate from the one or more primary ABR streams405. In some embodiments, the one or more secondary ABR streams425may include, but are not limited to, resolutions of 8K, 4K, high definition (“HD”), standard definition (“SD”), and/or the like. Each resolution of the one or more secondary ABR streams425may also be distributed at different bitrates and/or different codecs.

In various cases, each live secondary ABR stream425may be divided into one or more subsegments430a-430s(collectively, subsegments430). Each secondary ABR stream425may contain only one subsegment430. Alternatively, each secondary ABR stream425may contain two or more subsegments430. The one or more subsegments430a-430srepresent different ways to implement the one or more subsegments430and are not limited to only the implementations shown inFIG.4.

Each subsegment430may be less than a length of a corresponding segment of the one or more segments410. Each subsegment430may be divided into various sizes based on a predetermined amount of time (e.g., 1 second, 2 seconds, 5 seconds, 9 seconds, and/or the like).

In some instances, each subsegment430might include a starting subsegment boundary435and an ending subsegment boundary440. The starting subsegment boundary435of each subsegment430might indicate a start time when the live media content stream(s) and/or the one or more secondary live ABR media content streams425can be decoded by decoder(s) of the second computing system(s). The ending subsegment boundary440might indicate an end time of the subsegment.

In some cases, the one or more subsegments430may be one or more continuous subsegments that evenly or unevenly divide into the one or more segments410. In a non-limiting example, if segment410ais 10 seconds, then subsegment430amight be 3.33 seconds, subsegment430bmay be 3.33 seconds, and subsegment430cmay be 3.33 seconds, and/or the like. In another non-limiting example, if segment410ais 10 seconds, then subsegment430amight be 2 seconds, subsegment430bmay be 3 seconds, and subsegment430cmay be 5 seconds, and/or the like.

In some instances, the one or more subsegments430might have a first subsegment with a same starting subsegment boundary435as a corresponding starting segment boundary415of a corresponding segment410and a second subsegment with a same ending subsegment boundary440as a corresponding ending segment boundary420of a corresponding segment410. In a non-limiting example, a first subsegment430amight have a same starting subsegment boundary435aas a corresponding starting segment boundary415aof a corresponding segment410aand a second subsegment430cmight have a same ending subsegment boundary440cas a corresponding ending segment boundary420aof a corresponding segment410a.

In some instances, one or more continuous subsegments may not have a first subsegment with a same starting subsegment boundary435as a corresponding starting segment boundary415of a corresponding segment410and/or a second subsegment with a same ending subsegment boundary435as a corresponding ending segment boundary420of a corresponding segment410. In a non-limiting example, continuous subsegments430hand430imay not have a first subsegment430hwith a same starting subsegment boundary435has a corresponding starting segment boundary415aof a corresponding segment410aand/or a second subsegment430iwith a same ending subsegment boundary440ias a corresponding ending segment boundary420aof a corresponding segment410a.

In some instances, one or more continuous subsegments may not have a first subsegment with a same starting subsegment boundary435as a corresponding starting segment boundary415of a corresponding segment410and may have a second subsegment with a same ending subsegment boundary440as a corresponding ending segment boundary420of a corresponding segment410. In a non-limiting example, one or more continuous subsegments may not have a first subsegment430jwith a same starting subsegment boundary435jas a corresponding starting segment boundary415bof a corresponding segment410band may have a second subsegment430kwith a same ending subsegment boundary440kas a corresponding ending segment boundary420bof a corresponding segment410b.

In various embodiments, not shown, one or more continuous subsegments may have a first subsegment with a same starting subsegment boundary435as a corresponding starting segment boundary415of a corresponding segment410and may not have a second subsegment with a same ending subsegment boundary440as a corresponding ending segment boundary420of a corresponding segment410.

Alternatively, in some cases, the one or more subsegments430may be one or more discontinuous subsegments that are located between the starting segment boundary415and the ending segment boundary420. In a non-limiting example, discontinuous subsegments430nand430omight be located between the starting segment boundary415aand the ending segment boundary420aof segment410a. In some cases, at least one of the discontinuous subsegments may have a same starting subsegment boundary435and/or a same ending subsegment boundary440as a corresponding segment410. In some instances, one or more discontinuous subsegments may not have a first subsegment with a same starting subsegment boundary435as a corresponding starting segment boundary415of a corresponding segment410and/or a second subsegment with a same ending subsegment boundary435as a corresponding ending segment boundary420of a corresponding segment410.

In some instances, one or more discontinuous subsegments may not have a first subsegment430with a same starting subsegment boundary435as a corresponding starting segment boundary415of a corresponding segment410and may have a second subsegment with a same ending subsegment boundary440as a corresponding ending segment boundary420of a corresponding segment410. In a non-limiting example, one or more discontinuous subsegments430pand430qmay not have a first subsegment430pwith a same starting subsegment boundary435pas a corresponding starting segment boundary415bof a corresponding segment410band may have a second subsegment430qwith a same ending subsegment boundary440qas a corresponding ending segment boundary420bof a corresponding segment410b.

Alternatively, in other instances, the one or more continuous subsegments and/or discontinuous subsegments may overlap a starting boundary415of a next segment or an ending boundary420of a corresponding segment of the one or more segments410. In a non-limiting example, subsegment430foverlaps the ending segment boundary420bof segment410band/or the starting segment boundary415of the next segment410c, sub segment430moverlaps the ending segment boundary420cof segment410cand/or the starting segment boundary of the next segment (not shown), and subsegment430soverlaps the ending segment boundary420cof segment410cand/or the starting segment boundary of the next segment (not shown).

In some instances, the one or more continuous and/or discontinuous subsegments may be transmitted unencrypted by the one or more secondary encoders. Alternatively, or additionally, the one or more secondary live ABR streams425and/or one or more subsegments430may be transmitted at a lower resolution, a lower bitrate, and/or a less efficient or older codec than the one or more primary live ABR streams405and/or one or more segments410.

In some instances, each of the one or more secondary live ABR streams425may be encoded by a single or separate secondary encoder. Additionally, in various cases, when the one or more secondary live ABR streams425reach a corresponding ending subsegment boundary440, the single or separate secondary encoder may be released back to a pool of encoders until one or more new segments and/or subsegments need to be encoded. Alternatively or additionally, one or more continuous subsegments may be encoded by a same encoder. In a non-limiting example, subsegments430a-430gmay be encoded by the same encoder.

In operation, a first computing system(s), one or more primary encoders, and/or one or more media content sources might convert a live media content stream into one or more primary live ABR streams405. The one or more primary live ABR streams405may then be divided into one or more segments410. Next, the one or more primary encoders might encode the one or more live primary ABR streams405for transmission to a second computing system(s) and/or a decoder(s).

The second computing system(s) might request the one or more primary live ABR streams405from the one or more primary encoders. In various embodiments, a user of the second computing system(s) might request a live media content stream at a time that is not at a segment boundary (e.g., a starting segment boundary415and/or an ending segment boundary420).

In order to service a request when a live media content stream and/or a primary live ABR stream405is not at a segment boundary415and/or420, the second computing system(s) may determine that the media content and/or the one or more primary live ABR streams405are not at a starting segment boundary415. Based on a determination that the media content and/or the one or more primary live ABR streams405are not at a starting segment boundary, the second computing system(s) may determine whether there are one or more secondary ABR streams425available from one or more secondary encoders. Based on a determination that there are one or more secondary ABR streams425available, the second computing system(s) may determine one or more decodable subsegment starting boundaries435that are closest to the real-time media content stream and decode and display the subsegment430that has a starting subsegment boundary435that is closest to the real-time media content stream. In some cases, if the secondary live ABR stream425is still behind the real-time media content stream, the second computing system(s), user interface device(s), or user device(s), and/or the like may fast forward and/or speed up the display of the decoded subsegment until the decoded secondary ABR stream425catches up with the real-time media content stream.

In a non-limiting example, represented by line “A” ofFIG.4, the second computing system(s) may receive a request for live media content at a start time of Tn1and determine that the media content and/or the primary live ABR stream405is not at a starting segment boundary415b. Based on a determination that the media content and/or the primary live ABR stream405is not at a starting segment boundary415, the second computing system(s) may determine whether there are one or more secondary ABR streams425available from one or more secondary encoders. Based on a determination that there are one or more secondary ABR streams425, the second computing system(s) may determine the one or more decodable subsegment starting boundaries435that are closest to the real-time media content stream and decode and display the subsegment430e,430k, and/or430qthat has a starting subsegment boundary435e,435k, and/or435qthat is closest to the real-time media content stream. In some cases, if the secondary live ABR stream425ais still behind the real-time media content stream, the second computing system(s) may fast forward and/or speed up the display of the decoded subsegment430euntil the decoded secondary ABR stream425acatches up with the real-time media content stream.

In various embodiments, the one or more decoders may switch between the one or more secondary ABR streams425at any starting subsegment boundary435and/or ending subsegment boundary440and the one or more primary ABR streams at any starting segment boundary415. In some cases, the second computing system(s) may determine when the one or more subsegments430reach an ending subsegment boundary440and switch from the one or more secondary ABR streams425to the one or more primary ABR streams405. In some cases, the second computing system(s) may determine when the one or more subsegments430reach a same ending subsegment boundary440as a same starting segment boundary415of a corresponding segment and switch from the one or more secondary ABR streams425to the one or more primary ABR streams405. When the second computing system(s) switches from the one or more secondary ABR streams425to the one or more primary ABR streams405, the one or more secondary encoders may be released back to an encoder pool.

In some instances, the one or more subsegments430may overlap a starting boundary415of a next segment or an ending boundary420of a corresponding segment the one or more segments410. Based on a determination that the one or more subsegments430overlap a starting boundary415of a next segment or an ending boundary420of a corresponding segment, the second computing system(s) may determine one or more overlapping subframes of the one or more subsegments overlapping one or more segment frames of the next segment of the one or more segments. The second computing system(s) may determine that the one or more frames of the subsegment and the segment overlap based on a time or a timestamp associated with each frame in the segment and the subsegment. In some cases, the second computing system(s) may drop the one or more overlapping subframes of the one or more subsegments430and/or the one or more overlapping segment frames of the next segment. The one or more overlapping subframes and/or segment frames may be dropped before or after the one or more overlapping subframes and/or segment frames are decoded.

In a non-limiting example, subsegment430fmay overlap a starting boundary415cof a next segment410cor an ending boundary420bof a corresponding segment410b. Based on a determination that the subsegment430foverlaps a starting segment boundary415cof a next segment410cor an ending segment boundary420bof a corresponding segment410b, the second computing system(s) may determine one or more overlapping subframes of subsegment430fand/or overlapping segment frames of the next segment410c. In some cases, the decoder may drop the one or more overlapping subframes of subsegment430fand/or the one or more overlapping segment frames of the next segment410c. In some cases, the decoder may drop the one or more overlapping subframes of subsegment430fand/or the one or more overlapping segment frames of the next segment410cbased on a determination that the overlapping subframes of subsegment430fand/or the one or more overlapping segment frames of the next segment410care the same.

In some cases, when or after the second computing system(s) requests a secondary live ABR stream425that is closest to a real-time media content stream, the second computing system(s) might also request at least one primary live ABR stream405comprising the next segment of the one or more segments410when it becomes available. Alternatively, the second computing system(s) may determine that the at least one primary live ABR stream405comprising the next segment of the one or more segments410will not be available before or when the one or more subsegments430reach an ending subsegment boundary440.

When the at least one primary live ABR stream405comprising the next segment of the one or more segments410becomes available, the second computing system(s) might receive at the least one primary live ABR stream405comprising the next segment of the one or more segments410. In some cases, the secondary live ABR stream425may be at an ending subsegment boundary440and the primary live ABR stream405might be at a starting segment boundary415. In those cases, the second computing system(s) might switch from the secondary live ABR stream425to the primary live ABR stream405at the ending subsegment boundary440and the starting segment boundary415. In a non-limiting example, a second computing system(s) might currently be displaying subsegment430kand request the next segment410cof the primary live ABR stream405. The second computing system(s) might switch from the secondary ABR stream425bto the primary ABR stream405at the ending subsegment boundary440kand the starting segment boundary415c.

Alternatively, in other cases, when the at least one primary live ABR stream405comprising the next segment of the one or more segments410becomes available, the second computing system(s) may determine that the one or more subsegments430currently being decoded overlap a starting boundary415of a next segment or an ending boundary420of a corresponding segment of the one or more segments410. In some cases, the one or more secondary live ABR streams425may be synchronized (e.g., streaming the same frames in the segment410and the subsegment430at the same time) and/or desynchronized (e.g., not streaming the same frames in the subsegment430and the next segment510at the same time) with the one or more primary live ABR streams405and the second computing system(s) may drop the one or more synchronized and/or desynchronized overlapping subframes of the one or more subsegments430or the one or more synchronized and/or desynchronized overlapping segment frames of the next segment and switch to the at least one primary ABR stream405.

In some embodiments, if the second computing system(s) is currently decoding subsegment430f, the second computing system(s) may determine whether one or more subframes of the subsegment430fare ahead of or behind the one or more segment frames of the next segment410c. Based on a determination that the subsegment430fis ahead of the one or more segment frames of the next segment410c, the second computing system(s) might slow down the display of the subsegment430fand/or speed up the decoding of the next segment410cuntil the next segment410ccatches up to the sub segment430fOnce the segment410ccatches up to the subsegment430f, the decoder may switch from the secondary live ABR stream425to the primary live ABR stream405.

Alternatively, based on a determination that the subsegment430fis behind the one or more segment frames of the next segment410c, the second computing system(s) might speed up the decoding and display of the subsegment430funtil the subsegment430fcatches up to the segment410c. Once the subsegment430fcatches up to the segment410c, the second computing system(s) may switch from the secondary live ABR stream425to the primary live ABR stream405. In some cases, the second computing system(s) might speed up the decoding and display of the subsegment430funtil the subsegment430freaches ending subsegment boundary440f, switch to the next segment410c, and speed up decoding and display of the next segment410cuntil the next segment410ccatches up to the real-time media content.

Alternatively, when the at least one primary live ABR stream405comprising the next segment of the one or more segments410is not available, the second computing system(s) may slow down display of the one or more subsegments430until the next segment becomes available. Alternatively, the second computing system(s) may repeat one or more prior subframes of the one or more subsegments430until the one or more live or real-time frames of the next segment are available. In various instances, the live and/or real-time frames may have a slight time delay (e.g., 0.5 seconds, 1 second, 2 seconds, 5 seconds, 10 seconds, and/or the like) between when the live content occurs and when the live frame is displayed in the live media stream. In a non-limiting example, the second computing system(s), user interface device(s), or user device(s), and/or the like may be currently decoding subsegment430i. The second computing system(s), user interface device(s), or user device(s), and/or the like may determine that segment410bwill not be available by the time subsegment430ireaches the ending subsegment boundary440i. Based on a determination that that segment410bwill not be available by the time subsegment430ireaches the ending subsegment boundary440i, second computing system(s) may slow down display of the subsegment430iuntil the segment410bbecomes available or repeat display of one or more prior subframes of the subsegment430iuntil the one or more real-time frames of the next segment are available. Once the segment410bbecomes available, the decoder may switch from the secondary ABR stream425bto the primary ABR stream405.

Alternatively, or additionally, one or more other methods for servicing a request when a live media content stream including advertisements is not at a segment boundary, are described in greater detail below with respect toFIG.5.

Turning toFIG.5,FIG.5is a schematic diagram illustrating an embodiment500for implementing advertisements in one or more primary adaptive bitrate streams505comprising one or more segments510and/or one or more secondary adaptive bitrate streams525comprising one or more subsegments530, in accordance with various embodiments.FIG.5is intended to provide an illustrative perspective with respect to the implementation of the one or more primary adaptive bitrate streams505and the one or more secondary adaptive bitrate streams525, and is not limited to such functionalities, but may be applicable to some (if not all) of the functionalities described above with respect toFIGS.1,2,3,4, or the like or below with respect toFIGS.6and7, or the like.

FIG.5depicts one or more live primary adaptive bitrate (“ABR”) streams505that may be transmitted between a first computing system(s) (e.g., first computing system(s)105ofFIG.1), encoder(s) (e.g., primary encoder(s)115and/or secondary encoder(s)120ofFIG.1), and/or content sources (e.g., content sources125ofFIG.1) and a second computing system(s) (e.g., second computing system(s), user interface device(s), or user device(s)150ofFIG.1) and/or decoder(s) (e.g., decoder(s)165ofFIG.1).

In various cases, each primary live ABR stream505may be divided into one or more segments510a,510b, and510c(collectively, segments410). In some cases, the primary ABR stream505might include one or more advertising segments510b. Each segment510might include a starting segment boundary515and an ending segment boundary520. In some cases, the starting segment boundary515bof the advertisement segment510bmight indicate a start time of one or more advertisements in the one or more primary live ABR streams505and/or the one or more secondary live ABR streams525.

FIG.5further depicts one or more live secondary adaptive bitrate (“ABR”) streams525aand525b(collectively, secondary live ABR streams525) that may be transmitted between a first computing system(s), encoder(s), and/or content sources and a second computing system(s) and/or decoder(s). As live media content is being broadcast, the first computing system, encoder(s), and/or content sources might convert the live media content stream and/or the one or more primary live ABR streams505into the one or more secondary live ABR streams525. The one or more secondary ABR streams525may be one or more side-channels separate from the one or more primary ABR streams505.

In various cases, each live secondary ABR stream525may be divided into one or more subsegments530a-530n(collectively, subsegments530). In some cases, one or more advertisement subsegments530d-530fand/or530kand5301, and/or the like might be one or more advertising subsegments. Each subsegment530may be less than a length of a corresponding segment of the one or more segments510.

In some instances, each subsegment530might include a starting subsegment boundary535and an ending subsegment boundary540. The starting subsegment boundary535of each subsegment530might indicate a start time when the live media content stream(s) and/or the one or more secondary live ABR media content streams525can be decoded by decoder(s) of the second computing system(s). The ending subsegment boundary540might indicate an end time of the subsegment530.

In operation, a first computing system, one or more primary encoders, and/or one or more media content sources might convert a live media content stream into one or more primary live ABR streams505. The one or more primary live ABR streams505may then be divided into one or more segments510. Next, the one or more primary encoders might encode the one or more live primary ABR streams505for transmission to a second computing system(s). In some cases, the one or more primary encoders might encode one or more advertisement segments510binto the one or more live primary ABR streams505. Alternatively, or additionally, one or more secondary encoders might encode one or more advertisement subsegments530d-530fand/or530kand5301into the one or more live secondary ABR streams525for transmission to the second computing system(s).

The second computing system(s) might request the one or more primary live ABR streams505from the one or more primary encoders. In various embodiments, a user of the second computing system(s) might request a live media content stream at a time that is not at a segment boundary (e.g., a starting segment boundary515and/or an ending segment boundary520). The request might be, without limitation, an initial request (e.g., turning on a display device, opening an application, and/or the like) to receive the live media content stream or a channel change request to change a channel to a live media content stream, and/or the like. Alternatively, the second computing system(s) might request one or more advertisement subsegments530d-530fand/or530kand5301from one or more secondary ABR streams525when the primary ABR stream505reaches an advertisement starting boundary515b. The one or more advertisement subsegments530d-530fand/or530kand5301might be one or more local advertisements, one or more national advertisements, one or more international advertisements, and/or the like.

In order to service a request when a live media content stream and/or a primary live ABR stream505is not at a segment boundary515and/or520and/or when the primary ABR stream505reaches an advertisement starting segment boundary515b, the second computing system(s) may determine whether there are one or more secondary ABR streams525available from one or more secondary encoders. Based on a determination that there are one or more secondary ABR streams525, the second computing system(s) may determine the one or more decodable subsegment starting boundaries535that are closest to the real-time media content stream and decode and display the subsegment530that has a starting subsegment boundary535that is closest to the real-time media content stream.

In some instances, an advertisement subsegment530fmay overlap a starting boundary515cof a next segment510cor an ending boundary520bof a corresponding segment510bof the one or more segments510. Based on a determination that the advertisement subsegment530foverlaps a starting boundary515cof a next segment510cor an ending boundary520bof a corresponding segment510bof the one or more segments510, the second computing system(s) may determine one or more overlapping subframes of the advertisement subsegment530foverlapping one or more segment frames of the next segment510c. The second computing system(s) may determine that the one or more frames of the advertisement subsegment530fand the next segment510coverlap based on a time or a timestamp associated with each segment and subsegment. In some cases, the second computing system(s) may drop the one or more overlapping subframes of the advertisement subsegment530fand/or the one or more segment frames of the next segment510c. The one or more overlapping subframes and/or segment frames may be dropped before or after the one or more overlapping subframes and/or segment frames are decoded.

In some cases, when the second computing system(s) requests a secondary ABR stream525that is closest to a real-time media content stream, the second computing system might also request at least one primary ABR stream505comprising the next segment of the one or more segments510when it becomes available. Alternatively, the second computing system(s) may determine that the at least one primary live ABR stream505comprising the next segment of the one or more segments410will not be available before or when the one or more advertisement subsegments530d-530fand/or530kor530lreach an ending subsegment boundary540d-540fand/or540kor540l.

When the at least one primary ABR stream505comprising the next segment510cof the one or more segments510becomes available, the second computing system(s) might receive at the least one primary ABR stream505comprising the next segment510cof the one or more segments510. In some cases, the secondary ABR stream525may be at an ending subsegment boundary540and the primary ABR stream505might be at a starting segment boundary515(not shown). In those cases, the second computing system(s) might switch from the secondary ABR stream525to the primary ABR stream505at the ending subsegment boundary and the starting segment boundary.

Alternatively, in other cases, when the at least one primary ABR stream505comprising the next segment of the one or more segments510becomes available, the second computing system(s) may determine that the advertisement subsegment530fcurrently being decoded overlaps a starting boundary515cof a next segment510cor an ending boundary520bof a corresponding segment510bof the one or more segments510. In some cases, the one or more secondary ABR streams525may be synchronized (e.g., streaming the same frames in the advertisement subsegment530fand the next segment510cat the same time) and/or desynchronized (e.g., not streaming the same frames in the advertisement subsegment530fand the next segment510cat the same time) with the one or more primary ABR streams505. The second computing system(s) may drop the one or more synchronized and/or desynchronized overlapping subframes of the advertisement subsegment530for the one or more synchronized and/or desynchronized overlapping segment frames of the next segment510cand switch to the at least one primary ABR stream505.

Alternatively, the second computing system(s) may determine whether one or more subframes of the advertisement subsegment530fare behind the one or more segment frames of the next segment510c. In other words the live media content may available, but the advertisement has not finished and is still being broadcast. Based on a determination that the advertisement subsegment530fis behind the one or more segment frames of the next segment510c, the second computing system(s) might speed up the decoding and display of the advertisement subsegment530funtil the advertisement subsegment530fcatches up to the segment510c. Once the advertisement subsegment530fcatches up to the segment510c, the second computing system(s) may switch from the secondary ABR stream525to the primary ABR stream505. In some cases, the second computing system(s) might speed up the decoding and display of the advertisement subsegment530funtil the advertisement subsegment530freaches ending subsegment boundary540f, switch to the next segment510c, and speed up decoding and display of the segment510cuntil the next segment510ccatches up to the real-time media content.

Alternatively, when the at least one primary ABR stream505comprising the next segment510cof the one or more segments510is not available (e.g., when the advertisement is finished before the live media content is available), the second computing system(s) may slow down display of the one or more subsegments until the next segment becomes available. Alternatively, the second computing system(s) may repeat one or more prior subframes of the one or more subsegments until the one or more real-time frames of the next segment are available. In a non-limiting example, the second computing system(s) may be currently decoding and displaying advertisement subsegment5301. The second computing system(s) may determine that segment510cwill not be available by the time advertisement subsegment5301reaches the ending subsegment boundary5401. Based on a determination that that segment510cwill not be available by the time advertisement subsegment5301reaches the ending subsegment boundary5401, second computing system(s) may slow down display of the advertisement subsegment5301until the next segment510cbecomes available or repeat one or more prior subframes of the subsegment5301until the one or more real-time frames of the next segment510care available. Once the next segment510cbecomes available, the second computing system(s) may switch from the secondary ABR stream525bto the primary ABR stream505.

FIG.6is a flow diagram illustrating a method600for implementing encoding of live adaptive bitrate media content streams, in accordance with various embodiments. While the techniques and procedures are depicted and/or described in a certain order for purposes of illustration, it should be appreciated that certain procedures may be reordered and/or omitted within the scope of various embodiments. Moreover, while the method600illustrated byFIG.6can be implemented by or with (and, in some cases, are described below with respect to) the systems, examples, or embodiments100,200,300,400, and500ofFIGS.1,2,3,4, and5, respectively (or components thereof), such methods may also be implemented using any suitable hardware (or software) implementation. Similarly, while each of the systems, examples, or embodiments100,200,300,400, and500ofFIGS.1,2,3,4, and5, respectively (or components thereof), can operate according to the method600illustrated byFIG.6(e.g., by executing instructions embodied on a computer readable medium), the systems, examples, or embodiments100,200,300,400, and500ofFIGS.1,2,3,4, and5can each also operate according to other modes of operation and/or perform other suitable procedures.

In the non-limiting embodiment ofFIG.6, method600, may comprise, at optional block605, receiving, using computing system, a live media content stream from a media content source.

In some embodiments, the computing system might include, without limitation, a first processor and a first memory. In some embodiments, the computing system may include, without limitation, one of a user device, a server computer, a server computer over a network, a cloud-based computing system, a cloud-based computing system over a network, or a distributed computing system, and/or the like. In various cases, the media content sources might include, without limitation, one of a user device, a server computer, a server computer over a network, a content provider computer, a content provider computer over a network, a cloud-based computing system, a cloud-based computing system over a network, or a distributed computing system, and/or the like. The live media content stream might be a live video content stream and/or the like.

At block610, method600may comprise dividing, using a computing system, a live media content stream into one or more segments. Each segment may be divided into various sizes based on a predetermined amount of time (e.g., 5 seconds, 10 seconds, 15 seconds, and/or the like). Each segment might include a starting segment boundary indicating a start time when the live media content stream(s) and/or the one or more primary live adaptive bitrate (“ABR”) media content streams can be decoded by decoder(s) of the second computing system(s) and an ending segment boundary indicating an end time of the decodable segment.

In some cases, at block615, method600might include dividing, using the computing system, the one or more segments of the live media content stream into one or more subsegments. Each subsegment may be less than a length of a corresponding segment of the one or more segments. Each subsegment may be divided into various sizes based on a predetermined amount of time (e.g., 1 second, 2 seconds, 5 seconds, 9 seconds, and/or the like). In a non-limiting example, if a corresponding segment is 10 seconds, then a first subsegment might be 8 seconds, a second subsegment may be 5 seconds, and a third subsegment may be 2 seconds, and/or the like.

In some instances, each subsegment might include a starting subsegment boundary and an ending subsegment boundary. In some cases, the starting subsegment boundary of each subsegment might indicate a start time when the subsegment, the live media content stream(s), and/or the one or more secondary live ABR media content streams can be decoded by a decoder(s) of a second computing system(s), user interface device(s), or user device(s), and/or the like. The ending subsegment boundary might indicate an end time of the segment.

In various cases, the one or more subsegments might have a different starting subsegment boundary than a corresponding starting segment boundary of a corresponding segment creating one or more gaps between the starting subsegment boundary and a corresponding starting segment boundary of a corresponding segment. Alternatively, or additionally, the one or more subsegments might have a same ending boundary as a corresponding ending segment boundary of the corresponding segment. Because there are one or more gaps between the starting subsegment boundary and a corresponding starting segment boundary of a corresponding segment, the one or more secondary live adaptive bitrate streams and/or one or more subsegments may not be a continuous live media content stream and the one or more secondary live adaptive bitrate streams and/or one or more subsegments be transmitted unencrypted by the one or more secondary encoders. Alternatively, or additionally, the one or more secondary live adaptive bitrate streams and/or one or more subsegments may be transmitted at a lower bitrate than the one or more primary live adaptive bitrate streams and/or one or more segments.

In other cases, a first subsegment of the one or more subsegments might have a same starting subsegment boundary as a corresponding starting segment boundary of a corresponding segment and a second subsegment of the one or more subsegments might have a same ending subsegment boundary as a corresponding ending segment boundary of a corresponding segment. Alternatively, or additionally, the one or more subsegments might have a same starting boundary as a corresponding starting segment boundary of the corresponding segment and a different ending subsegment boundary as a corresponding ending segment boundary of a corresponding segment.

In some instances, a first subsegment of the one or more subsegments might overlap a starting subsegment boundary of a corresponding starting segment boundary of a corresponding segment.

At block625, method600may comprise, encoding, using one or more secondary encoders of the computing system, the one or more subsegments of the live media content stream into one or more secondary adaptive bitrate streams. In various embodiments, each subsegment and/or secondary adaptive bitrate stream may be encoded by a single and separate secondary encoder. When a subsegment of the one or more subsegments reaches an ending subsegment boundary, the method600, at block630might continue by releasing, using the computing system, the one or more secondary encoders. In some cases, the one or more secondary encoders might be released back to an encoder pool.

FIGS.7A-7D(collectively,FIG.7) are flow diagrams illustrating a method700for implementing decoding of live adaptive bitrate media content streams, in accordance with various embodiments. Method700ofFIG.7may be independent of or used in conjunction with method600ofFIG.6. Method700ofFIG.7Acontinues ontoFIG.7Bfollowing the circular marker denoted, “A.” Method700ofFIG.7Aalternatively or additionally continues ontoFIG.7CorFIG.7Dfollowing the circular marker denoted, “B” and/or the circular marker denoted, “C.”

Method700might begin at block702by receiving, with a computing system, a request for live media content. The request might be, without limitation, an initial request (e.g., turning on a display device, opening an application, selecting a particular television show or program, and/or the like) to receive the live media content stream or a channel change request to change a channel to live media content stream, and/or the like. The second computing system might send the request for the live media content stream to one or more primary encoders, one or more secondary encoders, and/or a one or more media content sources.

In some cases, the second computing system(s) may include, without limitation, at least one of one or more processors, a memory (not shown), one or more decoders, one or more displays, and one or more speakers, and/or the like. In some cases, the computing system may be, without limitation, at least one of a set-top box, a television, a server computer, a desktop computer, a laptop computer, a tablet computer, a smart phone, a cellphone, a mobile phone, a personal digital assistant, a remote-control device, a gaming console, or a portable gaming device, or any suitable device capable of communicating with one or more encoders and/or content sources via a web-based portal, an application programming interface (“API”), a server, a software application (“app”), or any other suitable communications interface, or the like.

Method700might continue onto optional block704. At optional block704, method700might comprise requesting, with the computing system, one or more primary adaptive bitrate streams associated with the live media content from one or more primary encoders. The one or more primary adaptive bitrate streams might include one or more segments. Each segment may be divided into various sizes based on a predetermined amount of time (e.g., 5 seconds, 10 seconds, 15 seconds, and/or the like). Each segment might include a starting segment boundary indicating a start time when the live media content stream(s) and/or the one or more primary live adaptive bitrate (“ABR”) media content streams can be decoded by decoder(s) of the second computing system(s) and an ending segment boundary indicating an end time of the decodable segment.

At block706, method700might include determining, with the computing system, that the one or more primary adaptive bitrate streams are not at the starting segment boundary. Based on a determination, that the one or more primary adaptive bitrate streams are not at a starting segment boundary, at block708, method700might include requesting, with the computing system, one or more secondary adaptive bitrate streams associated with the live media content from one or more secondary encoders. The one or more secondary adaptive bitrate streams might include one or more subsegments.

Each subsegment may be less than a length of a corresponding segment of the one or more segments. Each subsegment may be divided into various sizes based on a predetermined amount of time (e.g., 1 second, 2 seconds, 5 seconds, 9 seconds, and/or the like). In a non-limiting example, if a corresponding segment is 10 seconds, then a first subsegment might be 8 seconds, a second subsegment may be 5 seconds, and a third subsegment may be 2 seconds, and/or the like.

In some instances, each subsegment might include a starting subsegment boundary and an ending subsegment boundary. In some cases, the starting subsegment boundary of each subsegment might indicate a start time when the subsegment, the live media content stream(s), and/or the one or more secondary live ABR media content streams can be decoded by a decoder(s) of a second computing system(s), user interface device(s), or user device(s), and/or the like. The ending subsegment boundary might indicate an end time of the segment.

In various cases, the one or more subsegments might have a different starting subsegment boundary than a corresponding starting segment boundary of a corresponding segment creating one or more gaps between the starting subsegment boundary and a corresponding starting segment boundary of a corresponding segment. Alternatively, or additionally, the one or more subsegments might have a same ending boundary as a corresponding ending segment boundary of the corresponding segment. Because there are one or more gaps between the starting subsegment boundary and a corresponding starting segment boundary of a corresponding segment310, the one or more secondary live adaptive bitrate stream and/or one or more subsegments may not be a continuous live media content stream and the one or more secondary live adaptive bitrate stream and/or one or more subsegments be transmitted unencrypted by the one or more secondary encoders. Alternatively, or additionally, the one or more secondary live adaptive bitrate stream and/or one or more subsegments may be transmitted at a lower bitrate than the one or more primary live adaptive bitrate stream and/or one or more segments.

In other cases, a first subsegment of the one or more subsegments might have a same starting subsegment boundary as a corresponding starting segment boundary of a corresponding segment and a second subsegment of the one or more subsegments might have a same ending subsegment boundary as a corresponding ending segment boundary of a corresponding segment. Alternatively, or additionally, the one or more subsegments might have a same starting boundary as a corresponding starting segment boundary of the corresponding segment and a different ending subsegment boundary as a corresponding ending segment boundary of a corresponding segment.

In some instances, a first subsegment of the one or more subsegments might overlap a starting subsegment boundary of a corresponding starting segment boundary of a corresponding segment.

Method700might continue at block710by receiving, with the computing system, the one or more secondary adaptive bitrate streams comprising the one or more subsegments. Next, at block712, the method700might decode, with the computing system the live media content associated with the one or more secondary bitrate streams. Additionally, the method700, at block714, might include displaying, with the computing system, the live media content associated with the one or more secondary bitrate streams.

Method700either may continue onto the process at one of optional block716inFIG.7B, optional block724inFIG.7C, or optional block738inFIG.7D, by following the circular marker denoted, “A.”

Turning toFIG.7B, at optional block716(following either the circular marker denoted, “A,” inFIG.7A), method700may comprise determining, using the computing system, that the one or more subsegments of the one or more secondary adaptive bitrate streams have reached a same ending boundary as the corresponding ending segment boundary of the corresponding segment. In some embodiments, based on a determination that the one or more subsegments of the one or more secondary adaptive bitrate streams have reached the same ending boundary, method700, at optional block718, might include switching, using the computing system, from at least one of the one or more secondary adaptive bitrate streams to at least one of the one or more primary adaptive bitrate streams. At optional block720, method700might comprise receiving, using the computing system, the at least one primary adaptive bitrate stream comprising the one or more segments. At optional block722, method700might include decoding and displaying, using the computing system, the live media content associated with the at least one primary adaptive bitrate stream.

Referring toFIG.7C(following the circular marker denoted, “B” inFIG.7A), method700may continue, at optional block724, by requesting and receiving, using the computing system, a next segment of the primary adaptive bitrate stream. Next, the method700, at block726might determine, using the computing system, whether one or more subsegments overlap a next starting segment boundary of the next segment of the one or more segments.

Based on a determination that the one or more subsegments overlap the next starting segment boundary of the next segment of the one or more segments, at optional block728, the method700might include switching, using the computing system, from at least one of the one or more secondary adaptive bitrate streams to at least one of the one or more primary adaptive bitrate streams. In some cases, the computing system might switch from at least one of the one or more secondary adaptive bitrate streams to at least one of the one or more primary adaptive bitrate streams at the starting segment boundary of the next segment of the one or more primary adaptive bitrate streams.

At optional block730, the method700might further comprise dropping, using the computing system, one or more overlapping subframes of the one or more subsegments overlapping the next starting segment boundary of the next segment of the one or more segments. In some cases, the one or more overlapping subframes may be dropped before the one or more overlapping subframes are decoded. Alternatively, the one or more overlapping subframes may be dropped after the one or more overlapping subframes are decoded.

Alternatively, or additionally, based on a determination that the one or more subsegments overlap the next starting segment boundary of the next segment of the one or more segments, at optional block732, the method700might determine, using the computing system, whether one or more overlapping subframes of the one or more subsegments are behind one or more live or real-time frames of the next segment. In various instances, the live and/or real-time frames may have a slight time delay (e.g., 0.5 seconds, 1 second, 2 seconds, 5 seconds, 10 seconds, and/or the like) between when the live content occurs and when the live frame is displayed in the live media stream. Based on a determination that the one or more overlapping subframes of the one or more subsegments are behind the one or more real-time frames of the next segment, method700, at block734might decode and display the one or more overlapping subframes faster to catch up to the one or more real-time frames of the next segment. Additionally, based on a determination that the one or more overlapping subframes of the one or more subsegments have caught up to the one or more real-time frames of the next segment, at optional block736, method700might switch from the one or more secondary adaptive bitrate streams to the one or more primary adaptive bitrate streams.

Alternatively, with reference toFIG.7D(following the circular marker denoted, “C” inFIG.7A), method700may comprise, at optional block738, requesting, using the computing system, a next segment of the primary adaptive bitrate stream. At optional block740, the method700might include determining, using the computing system, whether one or more real-time frames of the one or more segments of the primary adaptive bitrate stream are not available. Based on a determination that the one or more real-time frames of the one or more segments are not available, at optional block742, method700might include, decoding and/or displaying, using the computing system, at least one of one or more subframes of the one or more subsegments slower until the one or more real-time frames are available or repeat one or more prior subframes of the one or more subsegments until the one or more real-time frames are available. Next, based on a determination that the one or more real-time frames are available, at optional block744, the method700might include switching, using the computing system, from at least one of the one or more secondary adaptive bitrate streams to at least one of the one or more primary adaptive bitrate streams.

Exemplary System and Hardware Implementation

FIG.8is a block diagram illustrating an exemplary computer or system hardware architecture, in accordance with various embodiments.FIG.8provides a schematic illustration of one embodiment of a computer system800of the service provider system hardware that can perform the methods provided by various other embodiments, as described herein, and/or can perform the functions of computer or hardware system (e.g., first computing system(s)105, primary encoder(s)115, secondary encoder(s)120, content source(s)125, second computing system(s)150, decoder(s)165, display(s)170, speaker(s)175, etc.), as described above. It should be noted thatFIG.8is meant only to provide a generalized illustration of various components, of which one or more (or none) of each may be utilized as appropriate.FIG.8, therefore, broadly illustrates how individual system elements may be implemented in a relatively separated or relatively more integrated manner.

The computer or hardware system800—which might represent an embodiment of the computer or hardware system (e.g., first computing system(s)105, primary encoder(s)115, secondary encoder(s)120, content source(s)125, second computing system(s)150, decoder(s)165, display(s)170, speaker(s)175, etc.), described above with respect toFIGS.1-7—is shown comprising hardware elements that can be electrically coupled via a bus805(or may otherwise be in communication, as appropriate). The hardware elements may include one or more processors810, including, without limitation, one or more general-purpose processors and/or one or more special-purpose processors (such as microprocessors, digital signal processing chips, graphics acceleration processors, and/or the like); one or more input devices815, which can include, without limitation, a mouse, a keyboard, and/or the like; and one or more output devices820, which can include, without limitation, a display device, a printer, and/or the like.

The computer or hardware system800may further include (and/or be in communication with) one or more storage devices825, which can comprise, without limitation, local and/or network accessible storage, and/or can include, without limitation, a disk drive, a drive array, an optical storage device, solid-state storage device such as a random access memory (“RAM”) and/or a read-only memory (“ROM”), which can be programmable, flash-updateable, and/or the like. Such storage devices may be configured to implement any appropriate data stores, including, without limitation, various file systems, database structures, and/or the like.

The computer or hardware system800might also include a communications subsystem830, which can include, without limitation, a modem, a network card (wireless or wired), an infra-red communication device, a wireless communication device and/or chipset (such as a Bluetooth™ device, an 802.11 device, a WiFi device, a WiMax device, a WWAN device, cellular communication facilities, etc.), and/or the like. The communications subsystem830may permit data to be exchanged with a network (such as the network described below, to name one example), with other computer or hardware systems, and/or with any other devices described herein. In many embodiments, the computer or hardware system800will further comprise a working memory835, which can include a RAM or ROM device, as described above.

The computer or hardware system800also may comprise software elements, shown as being currently located within the working memory835, including an operating system840, device drivers, executable libraries, and/or other code, such as one or more application programs845, which may comprise computer programs provided by various embodiments (including, without limitation, hypervisors, VMs, and the like), and/or may be designed to implement methods, and/or configure systems, provided by other embodiments, as described herein. Merely by way of example, one or more procedures described with respect to the method(s) discussed above might be implemented as code and/or instructions executable by a computer (and/or a processor within a computer); in an aspect, then, such code and/or instructions can be used to configure and/or adapt a general purpose computer (or other device) to perform one or more operations in accordance with the described methods.

A set of these instructions and/or code might be encoded and/or stored on a non-transitory computer readable storage medium, such as the storage device(s)825described above. In some cases, the storage medium might be incorporated within a computer system, such as the system800. In other embodiments, the storage medium might be separate from a computer system (i.e., a removable medium, such as a compact disc, etc.), and/or provided in an installation package, such that the storage medium can be used to program, configure, and/or adapt a general purpose computer with the instructions/code stored thereon. These instructions might take the form of executable code, which is executable by the computer or hardware system800and/or might take the form of source and/or installable code, which, upon compilation and/or installation on the computer or hardware system800(e.g., using any of a variety of generally available compilers, installation programs, compression/decompression utilities, etc.) then takes the form of executable code.

It will be apparent to those skilled in the art that substantial variations may be made in accordance with specific requirements. For example, customized hardware (such as programmable logic controllers, field-programmable gate arrays, application-specific integrated circuits, and/or the like) might also be used, and/or particular elements might be implemented in hardware, software (including portable software, such as applets, etc.), or both. Further, connection to other computing devices such as network input/output devices may be employed.

As mentioned above, in one aspect, some embodiments may employ a computer or hardware system (such as the computer or hardware system800) to perform methods in accordance with various embodiments of the invention. According to a set of embodiments, some or all of the procedures of such methods are performed by the computer or hardware system800in response to processor810executing one or more sequences of one or more instructions (which might be incorporated into the operating system840and/or other code, such as an application program845) contained in the working memory835. Such instructions may be read into the working memory835from another computer readable medium, such as one or more of the storage device(s)825. Merely by way of example, execution of the sequences of instructions contained in the working memory835might cause the processor(s)810to perform one or more procedures of the methods described herein.

The terms “machine readable medium” and “computer readable medium,” as used herein, refer to any medium that participates in providing data that causes a machine to operate in a specific fashion. In an embodiment implemented using the computer or hardware system800, various computer readable media might be involved in providing instructions/code to processor(s)810for execution and/or might be used to store and/or carry such instructions/code (e.g., as signals). In many implementations, a computer readable medium is a non-transitory, physical, and/or tangible storage medium. In some embodiments, a computer readable medium may take many forms, including, but not limited to, non-volatile media, volatile media, or the like. Non-volatile media includes, for example, optical and/or magnetic disks, such as the storage device(s)825. Volatile media includes, without limitation, dynamic memory, such as the working memory835. In some alternative embodiments, a computer readable medium may take the form of transmission media, which includes, without limitation, coaxial cables, copper wire, and fiber optics, including the wires that comprise the bus805, as well as the various components of the communication subsystem830(and/or the media by which the communications subsystem830provides communication with other devices). In an alternative set of embodiments, transmission media can also take the form of waves (including without limitation radio, acoustic, and/or light waves, such as those generated during radio-wave and infra-red data communications).

Common forms of physical and/or tangible computer readable media include, for example, a floppy disk, a flexible disk, a hard disk, magnetic tape, or any other magnetic medium, a CD-ROM, any other optical medium, punch cards, paper tape, any other physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, any other memory chip or cartridge, a carrier wave as described hereinafter, or any other medium from which a computer can read instructions and/or code.

Various forms of computer readable media may be involved in carrying one or more sequences of one or more instructions to the processor(s)810for execution. Merely by way of example, the instructions may initially be carried on a magnetic disk and/or optical disc of a remote computer. A remote computer might load the instructions into its dynamic memory and send the instructions as signals over a transmission medium to be received and/or executed by the computer or hardware system800. These signals, which might be in the form of electromagnetic signals, acoustic signals, optical signals, and/or the like, are all examples of carrier waves on which instructions can be encoded, in accordance with various embodiments of the invention.

The communications subsystem830(and/or components thereof) generally will receive the signals, and the bus805then might carry the signals (and/or the data, instructions, etc. carried by the signals) to the working memory835, from which the processor(s)805retrieves and executes the instructions. The instructions received by the working memory835may optionally be stored on a storage device825either before or after execution by the processor(s)810.

As noted above, a set of embodiments comprises methods and systems for implementing encoding and decoding of media content streams, and, more particularly, methods, systems, and apparatuses for implementing encoding and decoding of live adaptive bitrate media content streams.FIG.9illustrates a schematic diagram of a system900that can be used in accordance with one set of embodiments. The system900can include one or more user computers, user devices, or customer devices905. A user computer, user device, or customer device905can be a general purpose personal computer (including, merely by way of example, desktop computers, tablet computers, laptop computers, handheld computers, and the like, running any appropriate operating system, several of which are available from vendors such as Apple, Microsoft Corp., and the like), cloud computing devices, a server(s), and/or a workstation computer(s) running any of a variety of commercially-available UNIX™ or UNIX-like operating systems. A user computer, user device, or customer device905can also have any of a variety of applications, including one or more applications configured to perform methods provided by various embodiments (as described above, for example), as well as one or more office applications, database client and/or server applications, and/or web browser applications. Alternatively, a user computer, user device, or customer device905can be any other electronic device, such as a thin-client computer, Internet-enabled mobile telephone, and/or personal digital assistant, capable of communicating via a network (e.g., the network(s)910described below) and/or of displaying and navigating web pages or other types of electronic documents. Although the exemplary system900is shown with two user computers, user devices, or customer devices905, any number of user computers, user devices, or customer devices can be supported.

Certain embodiments operate in a networked environment, which can include a network(s)910. The network(s)910can be any type of network familiar to those skilled in the art that can support data communications using any of a variety of commercially-available (and/or free or proprietary) protocols, including, without limitation, TCP/IP, SNA™ IPX™ AppleTalk™, and the like. Merely by way of example, the network(s)910(similar to network(s)135,140, and/or145ofFIG.1, or the like) can each include a local area network (“LAN”), including, without limitation, a fiber network, an Ethernet network, a Token-Ring™ network, and/or the like; a wide-area network (“WAN”); a wireless wide area network (“WWAN”); a virtual network, such as a virtual private network (“VPN”); the Internet; an intranet; an extranet; a public switched telephone network (“PSTN”); an infra-red network; a wireless network, including, without limitation, a network operating under any of the IEEE 802.11 suite of protocols, the Bluetooth™ protocol known in the art, and/or any other wireless protocol; and/or any combination of these and/or other networks. In a particular embodiment, the network might include an access network of the service provider (e.g., an Internet service provider (“ISP”)). In another embodiment, the network might include a core network of the service provider, and/or the Internet.

Embodiments can also include one or more server computers915. Each of the server computers915may be configured with an operating system, including, without limitation, any of those discussed above, as well as any commercially (or freely) available server operating systems. Each of the servers915may also be running one or more applications, which can be configured to provide services to one or more clients905and/or other servers915.

Merely by way of example, one of the servers915might be a data server, a web server, a cloud computing device(s), or the like, as described above. The data server might include (or be in communication with) a web server, which can be used, merely by way of example, to process requests for web pages or other electronic documents from user computers905. The web server can also run a variety of server applications, including HTTP servers, FTP servers, CGI servers, database servers, Java servers, and the like. In some embodiments of the invention, the web server may be configured to serve web pages that can be operated within a web browser on one or more of the user computers905to perform methods of the invention.

The server computers915, in some embodiments, might include one or more application servers, which can be configured with one or more applications accessible by a client running on one or more of the client computers905and/or other servers915. Merely by way of example, the server(s)915can be one or more general purpose computers capable of executing programs or scripts in response to the user computers905and/or other servers915, including, without limitation, web applications (which might, in some cases, be configured to perform methods provided by various embodiments). Merely by way of example, a web application can be implemented as one or more scripts or programs written in any suitable programming language, such as Java™, C, C#™ or C++, and/or any scripting language, such as Perl, Python, or TCL, as well as combinations of any programming and/or scripting languages. The application server(s) can also include database servers, including, without limitation, those commercially available from Oracle™, Microsoft™, Sybase™ IBM™, and the like, which can process requests from clients (including, depending on the configuration, dedicated database clients, API clients, web browsers, etc.) running on a user computer, user device, or customer device905and/or another server915. In some embodiments, an application server can perform one or more of the processes for implementing encoding and decoding of media content streams, and, more particularly, for implementing encoding and decoding of live adaptive bitrate media content streams, as described in detail above. Data provided by an application server may be formatted as one or more web pages (comprising HTML, JavaScript, etc., for example) and/or may be forwarded to a user computer905via a web server (as described above, for example). Similarly, a web server might receive web page requests and/or input data from a user computer905and/or forward the web page requests and/or input data to an application server. In some cases, a web server may be integrated with an application server.

In accordance with further embodiments, one or more servers915can function as a file server and/or can include one or more of the files (e.g., application code, data files, etc.) necessary to implement various disclosed methods, incorporated by an application running on a user computer905and/or another server915. Alternatively, as those skilled in the art will appreciate, a file server can include all necessary files, allowing such an application to be invoked remotely by a user computer, user device, or customer device905and/or server915.

It should be noted that the functions described with respect to various servers herein (e.g., application server, database server, web server, file server, etc.) can be performed by a single server and/or a plurality of specialized servers, depending on implementation-specific needs and parameters.

In certain embodiments, the system can include one or more databases920a-920n(collectively, “databases920”). The location of each of the databases920is discretionary: merely by way of example, a database920amight reside on a storage medium local to (and/or resident in) a server915a(and/or a user computer, user device, or customer device905). Alternatively, a database920ncan be remote from any or all of the computers905,915, so long as it can be in communication (e.g., via the network910) with one or more of these. In a particular set of embodiments, a database920can reside in a storage-area network (“SAN”) familiar to those skilled in the art. (Likewise, any necessary files for performing the functions attributed to the computers905,915can be stored locally on the respective computer and/or remotely, as appropriate.) In one set of embodiments, the database920can be a relational database, such as an Oracle database, that is adapted to store, update, and retrieve data in response to SQL-formatted commands. The database might be controlled and/or maintained by a database server, as described above, for example.

According to some embodiments, system900might further comprise a computing system925(similar to first computing system105ofFIG.1, or the like) and corresponding database(s)930(similar to database(s)110ofFIG.1, or the like). System900might further comprise one or more encoder(s)935(similar to primary encoder(s)115and secondary encoder(s)120ofFIG.1, or the like). System900might also comprise media content source(s)940(similar to the one or more media content sources125ofFIG.1, or the like) and corresponding database(s)945(similar to database(s)130ofFIG.1, or the like). User devices905aand905bmay also be one or more second computing system(s) (similar to second computing system(s), user interface device(s), or user device(s)150ofFIG.1, or the like). Each user device905aand905bmay include one or more decoder(s)950(similar to decoder(s)165ofFIG.1, or the like). In some cases, the one or more decoder(s)950might be separate from the user devices905aand905b.

In operation, one or more first computing systems925may divide a live media content stream, from one or more content sources940, into one or more segments. Each segment might include a starting segment boundary and an ending segment boundary. The one or more first computing systems925might encode, using encoder(s)935, the one or more segments of the live media content stream into one or more primary adaptive bitrate streams. The one or more first computing systems925might also divide the one or more segments of the live media content stream into one or more subsegments. Each subsegment might be less than a length of a corresponding segment of the one or more segments. The one or more first computing systems925might the encode, using encoder(s)935, the one or more subsegments into one or more secondary adaptive bitrate streams.

According to some embodiments, one or more user devices905aand905bmight receive a request for the live media content on a live channel. The user devices905aand905bmight first request the one or more primary adaptive bitrate streams associated with the live media content. The user devices905aand905bmight then determine that the one or more primary adaptive bitrate streams are not at a starting segment boundary. Based on a determination that the one or more primary adaptive bitrate streams are not at a starting segment boundary, the user devices905aand905bmight request one or more secondary adaptive bitrate streams associated with the live media content. The user devices905aand905bmight receive the one or more secondary adaptive bitrate streams including the one or more subsegments and decode, using decoder(s)950, the live media content associated with the one or more secondary bitrate streams.

In some cases, the one or more subsegments might have a different starting boundary than a corresponding starting segment boundary of a corresponding segment of the one or more segments and a same ending boundary as a corresponding ending segment boundary of the corresponding segment of the one or more segments. In some cases, the one or more subsegments may be continuous subsegments, discontinuous subsegments, overlapping subsegments, and/or the like.

These and other functions of the system900(and its components) are described in greater detail above with respect toFIGS.1-7.

While certain features and aspects have been described with respect to exemplary embodiments, one skilled in the art will recognize that numerous modifications are possible. For example, the methods and processes described herein may be implemented using hardware components, software components, and/or any combination thereof. Further, while various methods and processes described herein may be described with respect to particular structural and/or functional components for ease of description, methods provided by various embodiments are not limited to any particular structural and/or functional architecture but instead can be implemented on any suitable hardware, firmware and/or software configuration. Similarly, while certain functionality is ascribed to certain system components, unless the context dictates otherwise, this functionality can be distributed among various other system components in accordance with the several embodiments.

Moreover, while the procedures of the methods and processes described herein are described in a particular order for ease of description, unless the context dictates otherwise, various procedures may be reordered, added, and/or omitted in accordance with various embodiments. Moreover, the procedures described with respect to one method or process may be incorporated within other described methods or processes; likewise, system components described according to a particular structural architecture and/or with respect to one system may be organized in alternative structural architectures and/or incorporated within other described systems. Hence, while various embodiments are described with—or without—certain features for ease of description and to illustrate exemplary aspects of those embodiments, the various components and/or features described herein with respect to a particular embodiment can be substituted, added and/or subtracted from among other described embodiments, unless the context dictates otherwise. Consequently, although several exemplary embodiments are described above, it will be appreciated that the invention is intended to cover all modifications and equivalents within the scope of the following claims.