The present invention relates to systems and methods for streaming data such as video and audio to client devices. Some embodiments relate to systems and methods to increase the availability and reliability of such video and audio streams when delivered over Hypertext Transfer (or Transport) Protocol (“HTTP”) connections.
An increasing number of live and recorded video and audio programs are being delivered to users via the Internet. Thanks to advances in bandwidth availability, media compression and computing power, more and more users enjoy programs delivered to their mobile and other computing devices. Rather than downloading entire programs for viewing, it is becoming increasingly common to “stream” programs to users by transmitting video or audio data to user devices in a steady, continuous stream. A number of streaming protocols are commonly used, including HTTP Live Streaming promoted by Apple® and Smooth Streaming promoted by Microsoft®. These streaming protocols define how, for example, a stream including video, audio, and possibly other ancillary data (e.g. cue points, time code, and closed captioning) is to be packaged or segmented for distribution to client devices.
An example of a conventional processing system configured according to certain existing approaches is shown in
There is a need for methods, systems, apparatus, means and computer program products to provide high availability manifests for HTTP video streams. In general, as used herein, the term “high availability” refers to a video stream which does not have a single point of delivery failure with respect to the delivery of the segmented media files associated with the stream.
According to some embodiments, systems, methods, apparatus, and computer program code are provided to process video source data to generate a high availability segmented video stream for delivery to client devices. Pursuant to some embodiments, the video source data is packaged into a first segmented video stream and a second segmented video stream, and a first stream manifest file for the first segmented video stream and a second stream manifest file for the second segmented video stream are generated. A high availability stream manifest file is generated based on the first stream manifest file, the second stream manifest file and information associated with the availability of individual segments of the first and second segmented video streams. The segmented video stream data is then provided via the high availability stream manifest file to one or more client devices over one or more network connections.
As used herein, the phrases “video feed” or “video stream” may refer to any signal conveying information about a moving or still image, including audio and ancillary signals and including a High Definition-Serial Data Interface (“HD-SDI”) signal transmitted in accordance with the Society of Motion Picture and Television Engineers 292M standard. A “video feed” or “video stream” may also be or include data carrying an MPEG transport stream including compressed data via Asynchronous Serial Interface (“ASI”) or the like. Although HD signals may be described in some examples presented herein, note that embodiments may be associated with any other type of video feed, including a standard broadcast feed or a three dimensional image feed. Moreover, video feeds or received images might comprise, for example, an HD-SDI signal exchanged through a fiber cable or a satellite transmission.
Those skilled in the art, upon reading the following disclosure, will appreciate that features of the present invention may be used with similar desirable results for audio data streams or any time dependent type of data as well.
Features of some embodiments will now be described by reference to
For example, the distribution system 106 may include one or more standard web servers for delivering data streams and other files to the client devices. The distribution system 106 may be or include a content delivery network, an edge network, or the like. As will be described further below, the distribution system 106 delivers a series of media files and index files to the client devices 108 over HTTP connections. The client devices 108 may be any of a number of computing devices capable of receiving and displaying media information distributed by the distribution system 106 over the HTTP connections. For example, client devices 108 may include personal computers, handheld devices (such as mobile phones, iPads® or other tablet computers) Internet-connected televisions, or the like. Each of the client devices 108 operate client software (such as a Web Browser) to access and obtain data provided by the distribution system 106 (such as, for example, index files or stream manifest files based on a URL identifying a desired stream of media). The client devices 108 use information in the index files to identify the location of a series of media files in a stream and downloads each media file (or “chunk”) in sequence. Once the client device 108 has obtained a sufficient amount of downloaded data, the client device 108 presents or displays the sequence of media files to a user of the client device 108. As the client device 108 fetches the sequence of media files, it periodically checks the stream manifest to obtain the correct sequence of files.
Features of some embodiments will be described by reference to
The encoders 304, 314 deliver the MPEG-2 transport stream to packagers 306, 316 that read the encoded transport streams and divide or package them into a series of smaller stream packages which are stored as media files on a disk 308, 318 or storage area associated with each packager 306, 316. For example, the packagers 306, 316 may be configured to segment the stream into a series of small media files (or “chunks”) of substantially equal duration (e.g., such as 10 second chunks). Each smaller media file or segment is identified by a file name and is associated with an index file that is used to index or identify the set and sequence of chunks in the stream. The index is also used to track the availability and file location of each of the chunks. As described herein, each of the indexes generated by the packagers 306, 316 are referred to as “manifests”. Each of the streams has its own stream manifest 310, 320 which is updated as the video source data is received and processed.
Any number of stream manifest formats may be used. For example, each of the stream manifests 310, 320 may include information identifying the segment (or “chunk”) file location (e.g., which may be in a format such as http://url/segment_filename), as well as information identifying the segment length, information identifying the segments sequence number, and information specifying any encryption or other special formatting or processing required to play the segment. The manifest file may also specify any digital rights management controls associated with the stream. In some embodiments, each of the manifest files may be provided in a known format (e.g., such as an XML or other file type).
Each of the individual segment files produced by the packagers 306, 316 may be generated in a format such as the .ts file format (generated by MPEG-2 transport stream encoding). In the case where the media files being streamed are audio-only files, other formats may be used (for example, the files may be encoded using AAC audio or MP3 audio formats).
Pursuant to some embodiments, multiple stream manifests 310, 320 are generated for the same content. For example, as shown in
Unlike existing methods of streaming video data, embodiments provide a high availability manifest which allows multiple manifests or indexes to be generated and maintained for the same content from multiple packaging and encoding systems. Unlike prior approaches, embodiments of the present invention provide a high availability manifest that is updated in real time. The high availability provides a better experience for a user during distribution chain failures (which may, for example, impact one of the streams). In some embodiments, as will be described further below, the user experience and delivery of seamless and uninterrupted streams can be further improved through use of one or more sub-chunking processes.
The process 400 may, for example, be implemented by the processing system 104 of
Process 400 begins at 402 where a list of source media streams is identified. For example, referring to the system 300 of
Each stream 502, 504 includes a series of chunks or media files that, when played in sequence (where the sequence is identified as “1”, “2”, etc., where each individual chunk or media file is represented by a square, and where the active stream (i.e., the stream currently being received by the user) is bolded with an underlined chunk number such as “1”, “2”, etc.) enables a user operating a client device to watch a live video stream. As the video stream progresses over time, additional chunks are added to the stream.
In the embodiment depicted in
As the streams 502, 504 are encoded and packaged (using encoders 304, 314 and packagers 306, 316, for example) a manifest or index file is generated and updated for each stream (shown as stream A manifest 310 and stream B manifest 320 in
Processing continues at 408 where a chunk database associated with the HA service 330 is updated. The chunk database may be a file or storage location which identifies the location, duration, and sequencing of each of the chunks in each of the streams 502, 504. Processing continues at 410 where the HA service 330 determines whether the current stream (identified at 404) is active and whether the chunks associated with the stream are available. For example, if stream 502 was selected as the initial source (as indicated in
If processing at 410 indicates that the current stream is not active or that not all of the chunks 1-12 are available, processing continues at 414 where another packaged stream is selected as the active stream (at substantially the same time, in some embodiments, an alert or notification message may be transmitted at 416 to a monitoring system to alert the system or an operator that an issue need resolution). An example of an illustrative scenario in which processing may continue at 414 is shown by reference to
In some embodiments, to avoid disruptions or lags due to a gap between chunks in a sequence (associated with a gap of missing content between the chunks of the source streams, which is illustrated in
In some embodiments a replacement chunk may be generated in stream 604 (selected as the new active stream). The replacement chunk is generated based on the size of the gap or delay and is a combination of original chunks 6 and 7 and sized to eliminate the timing gap. The subsequent chunks in the sequence of stream 604 are generated in a similar manner to ensure that the user has a substantially seamless viewing experience. The modified chunks 6/7, etc., can be generated using any of a number of well-known video processing and clipping techniques.
In another illustrative embodiment of processing performed at 418, illustrated in
In general, each chunk or manifest file contains timing information such that the exact time represented by each chunk is known to the system. By using such timing information, a series of determinations regarding how to replace a missing chunk may be made. First, if a determination is made that a chunk is missing or unavailable, a check can be made to determine if an alternative stream with an aligned chunk is available. If so, that alternative stream and aligned chunk may be used. If not, a further determination may be made whether an alternative stream with a future chunk is available (e.g., missing some content less than some configurable amount). If so, that future chunk may be used. If not, a further determination may be made whether an alternative stream with repeated content is available. If so, that repeated content may be used. In this manner, multiple replacement options may be attempted in order to replace a missing chunk of content, reducing or substantially eliminating disruptions in viewing a stream of content.
The result is a process that allows the creation and delivery of a high availability segmented video stream. The process can run in a clustered configuration so that it is resilient to hardware issues. Further the process can store its state in a persistent fashion, allowing it to be restarted or migrated with little to no impact on users viewing the segmented video stream over HTTP connections.
The processing system 104 of
A number of embodiments of the invention are disclosed herein. These do not constitute a definition of all possible embodiments, and those skilled in the art will understand that the present invention is applicable to many other embodiments. Further, although the following embodiments are briefly described for clarity, those skilled in the art will understand how to make any changes, if necessary, to the above-described apparatus and methods to accommodate these and other embodiments and applications.
Although several illustrative chunking and sub-chunking methods have been described, other combinations of chunks may be used to reduce skipping or other issues in the stream delivered to a client. Moreover, although specific hardware and data configurations have been described herein, note that any number of other configurations may be provided in accordance with embodiments of the present invention. Further note that embodiments may be associated with any number of different types of broadcast, video, or audio programs.
The present invention has been described in terms of several embodiments solely for the purpose of illustration. Persons skilled in the art will recognize from this description that the invention is not limited to the embodiments described, but may be practiced with modifications and alterations limited only by the spirit and scope of the appended claims.
Number | Name | Date | Kind |
---|---|---|---|
8185612 | Arolovitch et al. | May 2012 | B1 |
8341255 | Gopalakrishnan | Dec 2012 | B2 |
8683013 | Major et al. | Mar 2014 | B2 |
8751679 | McHugh et al. | Jun 2014 | B2 |
8806193 | Swaminathan et al. | Aug 2014 | B2 |
8948249 | Sun et al. | Feb 2015 | B2 |
20100268836 | Jabri et al. | Oct 2010 | A1 |
20110087794 | Li et al. | Apr 2011 | A1 |
20120011270 | Priddle et al. | Jan 2012 | A1 |
20120042091 | McCarthy et al. | Feb 2012 | A1 |
20120117201 | Arolovitch et al. | May 2012 | A1 |
20120233228 | Barton et al. | Sep 2012 | A1 |
20120233522 | Barton et al. | Sep 2012 | A1 |
20120265856 | Major et al. | Oct 2012 | A1 |
20120284802 | Hierro et al. | Nov 2012 | A1 |
20130091249 | McHugh et al. | Apr 2013 | A1 |
20130142055 | Bao et al. | Jun 2013 | A1 |
20130163758 | Swaminathan et al. | Jun 2013 | A1 |
20130166906 | Swaminathan et al. | Jun 2013 | A1 |
20140198641 | Perkuhn et al. | Jul 2014 | A1 |
Number | Date | Country | |
---|---|---|---|
20140059243 A1 | Feb 2014 | US |