The subject matter disclosed in this application generally relates to the field of digital content distribution and, more specifically, to providing an integrated digital content by stitching multiple video streams and dynamically inserting break segments such as advertisements and/or public announcements.
Today, with the ubiquity of multimedia digital content such as video streams that are available from the Internet, consumers spend some time watching video streams on client devices as well as watching traditional television. However, due to restrictions (e.g., content size and/or content length) of websites from which the multimedia digital content is available, video streams are oftentimes available as short segments of a full-length episode. For example, a 40-minute television episode can be fragmentized into eight 5-minute segments. Traditionally, there are several issues associated with watching short video segments on a client device. First, to play a full-length episode, the client device has to stream each individual segment. Therefore, the transition between video segments is not seamless as the video player has to buffer each new stream when the previous one has ended. Second, to transition from one segment to the next one in the sequence, the client device has to know the URL to the file for each video segment. This increases the complexity of the client application.
Therefore, there is a need in the art to provide systems and methods for improving users' viewing experience. Accordingly, it is desirable to provide methods and systems that overcome these and other deficiencies of the related art.
In accordance with the disclosed subject matter, systems, methods, and computer readable media are disclosed for providing streamed video to client devices.
Disclosed subject matter includes, in one aspect, a computerized method. The method includes receiving, by a first server, a request from a client device to receive streamed video. The method includes retrieving, by the first server, first metadata representing the streamed video, wherein the first metadata includes offset information for one or more breaks in the streamed video, wherein each break contains one or more break segments. The method includes requesting, by the first server from a second server, second metadata for the one or more break segments. The method includes receiving, by the first server from the second server, the second metadata for the one or more break segments. The method includes creating, by the first server, a playlist for the streamed video by stitching the second metadata into the first metadata at one or more locations indicated by the first metadata. The method includes providing, by the first server, the playlist to the client device.
Disclosed subject matter includes, in another aspect, an apparatus. The apparatus includes one or more processors. The apparatus includes a memory storing a program that, when executed, causes the one or more processors to receive a request from a client device to receive streamed video. The program, when executed, causes the one or more processors to retrieve first metadata representing the streamed video, wherein the first metadata includes offset information for one or more breaks in the streamed video, wherein each break contains one or more break segments. The program, when executed, causes the one or more processors to request, from a first server, second metadata for the one or more break segments. The program, when executed, causes the one or more processors to receive, from the first server, the second metadata for the one or more break segments. The program, when executed, causes the one or more processors to create a playlist for the streamed video by stitching the second metadata into the first metadata at one or more locations indicated by the first metadata. The program, when executed, causes the one or more processors to provide the playlist to the client device.
Disclosed subject matter includes, in yet another aspect, a non-transitory computer readable medium comprising executable instructions. The instructions are operable to cause an apparatus to receive a request from a client device to receive streamed video. The instructions are operable to cause the apparatus to retrieve first metadata representing the streamed video, wherein the first metadata includes offset information for one or more breaks in the streamed video, wherein each break contains one or more break segments. The instructions are operable to cause the apparatus to request, from a first server, second metadata for the one or more break segments. The instructions are operable to cause the apparatus to receive, from the first server, the second metadata for the one or more break segments. The instructions are operable to cause the apparatus to create a playlist for the streamed video by stitching the second metadata into the first metadata at one or more locations indicated by the first metadata. The instructions are operable to cause the apparatus to provide the playlist to the client device.
Before explaining example embodiments consistent with the present disclosure in detail, it is to be understood that the disclosure is not limited in its application to the details of constructions and to the arrangements set forth in the following description or illustrated in the drawings. The disclosure is capable of embodiments in addition to those described and is capable of being practiced and carried out in various ways. Also, it is to be understood that the phraseology and terminology employed herein, as well as in the abstract, are for the purpose of description and should not be regarded as limiting.
These and other capabilities of embodiments of the disclosed subject matter will be more fully understood after a review of the following figures, detailed description, and claims.
It is to be understood that both the foregoing general description and the following detailed description are explanatory only and are not restrictive of the claimed subject matter.
Various objects, features, and advantages of the disclosed subject matter can be more fully appreciated with reference to the following detailed description of the disclosed subject matter when considered in connection with the following drawings.
In the following description, numerous specific details are set forth regarding the systems and methods of the disclosed subject matter and the environment in which such systems and methods may operate, in order to provide a thorough understanding of the disclosed subject matter. It will be apparent to one skilled in the art, however, that the disclosed subject matter may be practiced without such specific details, and that certain features, which are well known in the art, are not described in detail in order to avoid complication of the disclosed subject matter. In addition, it will be understood that the embodiments described below are only examples, and that it is contemplated that there are other systems and methods that are within the scope of the disclosed subject matter.
The disclosed subject matter is directed to improved systems, methods, and computer readable media for providing streamed video to client devices. In some embodiments, the streamed video is composed of multiple shorter video streams (segments) and dynamically inserted break segments. The segments can be assembled together into a linear playlist. In some embodiments, other suitable types of playlist can also be created. Each individual segment represents a single piece of transcoded content hosted on a server (as a non-limiting example, the server can be a content delivery network). In some embodiments, the streamed video can be a full-length television episode, multiple television episodes, or a subset of a television episode. In some embodiments, the streamed video can be any other suitable content. In some embodiments, the break segment can be an advertisement segment, a public announcement, or any other suitable content.
In some embodiments, the streamed video is compatible with Apple's Hypertext Transfer Protocol (HTTP) Live Streaming (HLS) adaptive streaming protocol (incorporated fully herein by reference and which may be found, for example at https://tools.ietf.org/html/draft-pantos-http-live-streaming-13?), and any associated HLS .m3u8 manifest files and .ts chunks can be generated by transcoding service and delivered by a server such as a content delivery network or a stitching server. Because the streamed video can include multiple segments, and each segment may have a corresponding HLS .m3u8 manifest file, to simplify and improve users' viewing experience, the disclosed subject matter implements a server-side playlist stitcher that converts the multiple HLS .m3u8 manifest files for the streamed video (which can be a partial episode, a whole episode, or multiple episodes) into a single HLS .m3u8 manifest file. In some embodiments, the streamed video can be compatible with a non-standard version of the HLS protocol or any other suitable streaming protocols.
The disclosed embodiments can be implemented in a networked computing environment.
Each client device 106 can communicate with the stitching_server 104 to send data to, and receive data from, the stitching server 104 across the communication network 102. Each client device 106 can be directly coupled to the stitching server 104. Additionally, each client device 106 can be connected to the stitching server 104 via any other suitable devices, communication networks, or combination thereof. For example, each client device 106 can be coupled to the stitching server 104 via one or more routers, switches, access points, and/or communication network (as described below in connection with communication network 102). A client device 106 can include, for example, a desktop computer, a mobile computer, a tablet computer, a cellular device, a smartphone, television, or any computing systems that are capable of performing computation. The client device 106 can include a module that is configured to enable a user to request a particular episode of a media item. In some embodiments, the client device 106 can also be referred to as a media playing device. In some embodiments, the client device 106 can be an HLS complaint HLS player. In some embodiments, the client device 106 can be a Portico media player provided by Net2TV.
The stitching server 104 can receive a request from a client device 106 to receive streamed video. The stitching server 104 can then retrieve first metadata representing the streamed video. The first metadata includes offset information for one or more breaks in the streamed video, and each break contains one or more break segments. The stitching server 104 can request and receive from the secondary content server 114 second metadata for the one or more break segments. The stitching server 104 can create a playlist for the streamed video by stitching the second metadata into the first metadata at one or more locations indicated by the first metadata. The stitching server 104 can then provide the playlist to the client device 106. In some embodiments, the stitching server 104 can also be referred to as a stitcher, a playlist stitcher, and/or a playlist stitching server. The stitching server 104 can be coupled to one or more physical storage media and/or one or more cloud storage media, which can be configured to store data for the stitching server 104.
The secondary content server 114 can provide second metadata for the one or more break segments. The second metadata can be stitched into a playlist by the stitching server 104.
The impression server 116 can track each time the one or more break segments are played, in whole or in part, by the client device 106.
The stitching server 104, the secondary content server 114, and the impression server 116 can operate using operating system (OS) software. In some embodiments, the OS software is based on a Linux software kernel and runs specific applications in the stitching server 104, the secondary content server 114, and/or the impression server 116, such as monitoring tasks and providing protocol stacks. The OS software allows resources to be allocated separately for control and data paths. For example, certain packet accelerator cards and packet services cards are dedicated to performing routing or security control functions, while other packet accelerator cards/packet services cards are dedicated to processing network traffic. As network requirements change, hardware resources can be dynamically deployed to meet the requirements in some embodiments.
The communication network 102 can include the Internet, a cellular network, a telephone network, a computer network, a packet switching network, a line switching network, a local area network (LAN), a wide area network (WAN), a global area network, or any number of private networks currently referred to as an Intranet, and/or any other network or combination of networks that can accommodate data communication. Such networks may be implemented with any number of hardware and software components, transmission media and network protocols. While
In step 202, the stitching server 104 receives a request from a client device 106 to receive streamed video. In some embodiments, the request can be sometimes referred to as a client call. In some embodiments, the streamed video can be a full-length episode, multiple episodes, or a subset of an episode. In some embodiments, the request may identify either a unique ID for an episode, which is used when a specific episode ID is known. Alternatively, the request may identify a provider and/or channel name to identify a particular channel, when only the channel that is to be played is known. When a channel is identified, the client device may also optionally include a parameter episode=n to specifies the nth episode in the channel. In some embodiments, the default value for episode is 0. In some embodiments, the request can include a starting offset, which indicates that the client device 106 only requests the portion of the streamed video after the starting offset. The computerized process 200 then proceeds to step 204.
In step 204, the stitching server 104 retrieves first metadata representing the streamed video. The first metadata includes offset information for one or more breaks in the streamed video, and each break contains one or more break segments.
In step 206, the stitching server 104 requests, from the secondary content server 114, second metadata for the one or more break segments. Each break segment can be an advertisement segment, a public announcement, and/or other suitable content. A break segment can be referred to as an advertisement break or an ad break when the content of the break segment is an advertisement. The computerized process 200 then proceeds to step 208.
In step 208, the stitching server 104 receives, from the secondary content server 114, the second metadata for the one or more break segments. In some embodiments, the second metadata includes a plurality of second links, such that at least one of the plurality of second links corresponds to each of the one or more break segments. The computerized process 200 then proceeds to step 210.
In step 210, the stitching server 104 creates a playlist for the streamed video by stitching the second metadata into the first metadata at one or more locations indicated by the first metadata. In some embodiments, the playlist is compatible with the HLS protocol. The computerized process 200 then proceeds to step 212.
In step 212, the stitching server 104 provides the playlist to the client device 106. In some embodiments, the playlist can include different versions based on the bandwidth of network connection.
In some embodiments, the client device 106 may request an episode with a starting offset. For example, the client device 106 may request the episode described in
In step 302, the client device 106 makes a request to the stitching server 104 for a streamed video. Step 302 is similar to step 202 of the computerized process 200 described in connecting with
In step 304, the stitching server 104 determines the first segment for the requested streamed video. For example, the client device 106 may request a television episode that is 50 minutes in full-length. Sometimes the requested television episode may be available from a content delivery network, the stitching server 104, or a local cache in multiple shorter segments. As a non-limiting example, there can be ten 5-minute long segments that are corresponding to the requested television episode. The stitching server then identifies the first segment among the ten segments. In some embodiments, the request also includes a starting offset to indicate a range of the streamed video. For example, the request may be for the 50-minute television episode discussed in the earlier example, but only for the last 45 minutes. In this example, the first segment can be the second segment of the original full-length television episode. Furthermore, the segments also include the advertisement, public announcement, and/or other suitable content that are inserted in the one or more segment breaks. The computerized process 300 then proceeds to step 306.
In step 306, the stitching server 104 creates an empty stitched manifest file. The stitched manifest file corresponds to the requested streamed video, such as an episode. The computerized process 300 then proceeds to step 308.
In step 308, the stitching server 104 reads one or more manifest files that correspond to a segment of the requested streamed video. In some embodiments, the manifest file includes one or more links corresponding to the segment that is referred to in this step. In some embodiments, the manifest file is compatible with the HLS adaptive streaming protocol and is in the .m3u8 format with .ts chunks. If the stitched manifest file is empty, then the segment referred to in step 308 is generally the first segment that is determined in step 304. If the first segment has been read by the stitching server 104, then the segment referred to in step 308 is generally the segment that is determined in step 318. The computerized process 300 then proceeds to step 310.
In step 310, the stitching server 104 extracts segment tags from the one or more manifest files that are read in step 308. In some embodiments, a segment tag can be metadata that corresponds to a segment of the requested streamed video, such as, for example, a link to the segment. The stitching server 104 then appends the segment tags to the bottom of the stitched manifest file. The computerized process 300 then proceeds to step 312.
In step 312, the stitching server 104 determines whether or not the last segment of the requested streamed video has been reached. If the last segment has been reached, the computerized process 300 then proceeds to step 314; otherwise the computerized process 300 proceeds to step 318.
In step 318, the stitching server 104 determines the next segment for the requested streamed video. In some embodiments, the next segment can be the next video segment in sequence. In some embodiments, if a segment break is scheduled after the previous segment, then the next segment can be an advertisement, a public announcement, and/or any other suitable content. The computerized process 300 then proceeds to step 308.
In step 314, the stitching server 104 can additionally modify the stitched manifest file to comply with one or more streaming protocols. For example, in some embodiments, the stitching server modifies the stitched manifest file for HLS compliance. The computerized process 300 then proceeds to step 316.
In step 316, the stitching server 104 returns the stitched manifest file to the client device 106. The stitched manifest file is also referred to as a playlist in this invention.
In step 402, the viewer requests an episode from a client device 106. In this particular example, the client device 106 is a Portico media player provided by Net2TV, but any other suitable client devices are also within the spirit of the current invention. The computerized process 400 then proceeds to step 404.
In step 404, the Portico media player requests the stitched HLS stream for the episode. The request is sent to the stitching server 104. The computerized process 400 then proceeds to step 406.
In step 406, the stitching server 104 finds first metadata for the episode. The first metadata includes offset information for one or more breaks in the streamed video, and each break contains one or more break segments. The computerized process 400 then proceeds to step 408.
In step 408, the stitching server 104 requests advertisement and/or advertisement metadata from secondary content server 114. In this example, the secondary content server 114 is compatible with Video Ad Serving Template (“VAST”) and is referred to as a VAST-calling server. The computerized process 400 then proceeds to step 410.
In step 410, the VAST-calling server may optionally execute business rules that specify one or more criteria for an advertisement, and makes a VAST request to an advertisement platform. A non-limiting example of an advertisement platform is LiveRail. The computerized process 400 then proceeds to step 412.
In step 412, the advertisement platform makes VAST requests to one or more advertisement agencies. Non-limiting examples of advertisement agencies include Tremor, YuMe, and Samsung. The computerized process 400 then proceeds to step 414.
In step 414, the advertisement platform returns advertisements found by the one or more advertisement agencies to the VAST-calling server. In some embodiments, the advertisements can be selected, at least partially, based on one or more of the following criteria: whether or not the advertisement is related to the requested episode; the length of the advertisements; and the sponsors of the advertisements. Although
In step 416, the VAST-calling server returns an advertisement response to the stitching server. In some embodiments, the advertisement response is metadata representing one or more advertisements found in the previous steps. In some embodiments, the metadata includes one or more links to the one or more advertisements. The computerized process 400 then proceeds to step 418.
In step 418, the stitching server 104 stitches the advertisement segments and the video segments into a playlist. The stitching process is described in detail in connection with
In step 420, the client device 106 launches the requested episode based on the playlist. In some embodiments, the client device 106 is a HLS compatible video player, such as the Portico media player. In some embodiments, the advertisement metadata also includes one or more links (the one or more links are also referred to as advertisement impressions) that can be used by the client device 106 to notify an advertisement server, such as the secondary content server 114 or the impression server 116, each time an advertisement is played, in whole or in part, by the client device 106.
The interfaces 504-508 provide an input and/or output mechanism for communication. In some cases, the interfaces 504-508 can be used to communicate within the computing system. For example, the processor 502 can use one of the interfaces 504-508 to communicate with memory 503. In other cases, the interface 504-508 can be used to communicate over a network. The interfaces 504-508 enable communication with other computing systems, such as the stitching server 104, the secondary content server 114, and/or the impression server 116, as well as other network nodes in the communication network 102. The interfaces 504-508 can be implemented in hardware to send and receive signals in a variety of mediums, such as optical, copper, and wireless, and in a number of different protocols, some of which may be non-transient.
In some embodiments, the processor 502 can include one or more cores and can accommodate one or more threads to run various programs, applications, and modules, including the stitching module 510.
The stitching module 510 can be configured to cause one or more processors to receive a request from a client device to receive streamed video. The stitching module 510 can be configured to cause one or more processors to retrieve first metadata representing the streamed video, wherein the first metadata includes offset information for one or more breaks in the streamed video, wherein each break contains one or more break segments. The stitching module 510 can be configured to cause one or more processors to request, from a first server, second metadata for the one or more break segments. The stitching module 510 can be configured to cause one or more processors to receive, from the first server, the second metadata for the one or more break segments. The stitching module 510 can be configured to cause one or more processors to create a playlist for the streamed video by stitching the second metadata into the first metadata at one or more locations indicated by the first metadata. The stitching module 510 can be configured to cause one or more processors to provide the playlist to the client device.
In some embodiments, the stitching module 510 can also be configured to cause one or more processors to receive a request for a stitched playlist or a range of a stitched playlist, where a playlist is a collection of episodes such as described in
In some embodiments, the module 510 can be implemented in software stored in the memory 503. The memory 503 can be a non-transitory computer readable medium, flash memory, a magnetic disk drive, an optical drive, a programmable read-only memory (PROM), a read-only memory (ROM), or any other memory or combination of memories. The software can run on a processor 502 capable of executing computer instructions or computer code. The processor 502 might also be implemented in hardware using an application specific integrated circuit (ASIC), programmable logic array (PLA), field programmable gate array (FPGA), or any other integrated circuit. The processor also communicates with the memory and interfaces to communicate with other devices. The processor can be any applicable processor such as a system-on-a-chip that combines a CPU, an application processor, and flash memory.
The following sections describe how the stitching process is implemented by programming codes in some embodiments. Specifically, the programming codes are described in connection with Net2TV platform and are compatible with HLS protocol. However, the current invention can also be implemented by any other suitable streaming protocols and on any other suitable platforms. Further, Appendix A shows an exemplary file for a stitched episode, and Appendix B shows an application program interface (API) of a stitching server. Both Appendix A and Appendix B are incorporated herein in their entireties.
In the Net2TV system, the top level file is named playlist.m3u8 in one embodiment and is reached by its full pathname. For example,
In one embodiment, advertisements are selected dynamically by a server-side VAST-calling system for each defined break, which can also be referred to as an Ad Break. The results from the VAST server contain similar uniform resource locators (URLs) to top-level manifest files. For example,
In one embodiment, instead of making requests to the content delivery network for each .m3u8 file, and playing each of the segments in the episode individually (as in the prior art approach), a HLS compliant HLS player can request a single stitched HLS stream from Net2TV's playlist stitching server. The Net2TV playlist stitcher then determines the set of required manifest files and either requests the manifest files from the content delivery network, or retrieves the manifest files from a local cache. After obtaining the manifest files, the stitcher then repackages the response before sending the response back to the client device.
For the client device to play a single, stitched episode, the client makes a call to the playlist stitching server. In one embodiment, the client call may identify a unique ID for an episode, which is used when a specific episode id is known. Alternatively, the client call may identify a provider and channelName to identify a particular channel, when only the channel that is to be played is known. When a channel is identified, the client device may also optionally include a parameter episode=n to specifies the nth episode in the channel. The default value for episode is 0.
In one embodiment, the response to either call is a .JSON object (MIME application/json) that points to a stitched top-level .m3u8 file, information about each stitched advertisement, and other relevant information.
In a preferred embodiment, the structure for the returned .JSON object is shown below:
In the example object shown above, episode.hls is the URL for the top-level .m3u8 manifest file for the stitched stream. The episode.segmentSize indicates the size (in seconds) of each .ts chunk in the HLS stream. The episode.startingOffset indicates (in seconds) the starting time for the start of the HLS stream. In this example, the HLS stream starts with a timestamp of 5 seconds.
In prior art systems, the client would know when to trigger an ad-viewing event, because it would know when it was playing each advertisement. However, once the advertisements are stitched into the media content to create one stream, the client is unable to distinguish between advertisement content and episode content. In order for the client application to know when to trigger an event to indicate the playing of an advertisement, it must obtain additional information from the server. In some embodiments, this information is provided by the server in the form of an adbreaks array, which informs the client of the time offset for each event, for each advertisement, in each adbreak, and the appropriate URL to call for each such event.
In one embodiment, each entry in the episode.adbreaks array contains the following data:
In one embodiment, the ads.events object is the same as the events returned by the VAST-calling server—it lists the standard set of advertisement impressions with a list of tracking URLs for each impression. For example,
In one embodiment, the episode.adbreaks array contains all the information needed by the client application running on the client device to fire event triggers when advertisements are played. The client application is responsible for calling the event URLs at the right offset in the stream.
In one embodiment, the episode's duration is the sum of the durations of the video segments in the episode, excluding the advertisement time. The offset values in the adbreaks array is the starting offset of the adbreak in the episode. When it comes to calculating stream offset and playhead position, the adbreak duration is effectively zero. The advertisement duration is included in this data so the client can calculate the playhead's position within the advertisement so as to ensure that it fires an “event URL” at the correct time. In one embodiment, the event URL is a simple HTTP GET request that is sent to the logging servers for the advertiser that provided the advertisement. When an advertiser receives the HTTP GET request, it knows that a video has been started. Each advertisement can be associated with one or more events, to indicate such things as when the player has played the first quartile of the advertisement, when the player has played half the advertisement, when the player has played three quarters of the advertisement, and when the player has played the complete advert. Standards defining when event URLs can be triggered based on advertisement viewing are promulgated by the Interactive Advertising Bureau, and include such documents as the “Digital Video Ad Impression Measurement Guidelines” (Formerly titled “Broadband Video Commercial Measurement Guidelines”), updated December 2009, and the “Interactive Audience Measurement and Advertising Campaign Reporting and Audit Guidelines, Global Version,” Version 6.0b, September 2004, which are incorporated herein by reference.
In one embodiment, the stitching server takes the following optional query parameters, which must be used at the correct situation:
In one embodiment, for the /episode/stitched/:provider/:channelName.json URL, following parameters can be used:
In some embodiments, the stitching server can additionally or alternatively take the following query parameters:
In one embodiment, if the viewer chooses to play an episode from the start, the client device makes a simple request to the stitching server URL. For example, for episode id 5335a9b284a74500000429fb, the request to the stitching server URL can be: http://playlist.portico.net2.tv/episode/stitched/5335a9b284a74500000429fb.json?clientID=Roku-3100X—13C25M003577-BF8B&clientVersion=1.5. This returns the data for the stitched stream, advertisement breaks and/or other suitable content as described in this invention.
In one embodiment, if the viewer chooses to resume playback of an episode (/episode/stitched/:episodid.json), the client device makes the same request to the stitching server URL. The client is then responsible for setting the starting offset when playback is started.
In one embodiment, if the viewer chooses to resume playback of a channel (/episode/stitched/:provider/:channeljson) the client device can append ?resume=true to the URL. The server will look up the last known playhead position for the named client for the given channel. The last known position will be returned in the .json response as
Note that passing ?resume=true will override the ?episode=n parameter if set.
In one embodiment, to resume playback after seeking, the client device needs to make a request for a new stitched stream. This is because the logic for deciding how to present advertisements that may have been sought in the past resides with the server. For example, if the viewer was watching at offset 310 and then sought to offset 715: http://playlist.portico.net2.tv/episode/stitched/5335a9b284a74500000429fb.json?clientID=Roku-3100X—13_C25M003577-BF8B&clientVersion=1.5&seekFrom=310&seekTo=715, the playlist stitcher will then see that an Ad Break has been skipped, and will return a new stitched HLS stream that starts with an advert.
In one embodiment, depending on the client device, this new stitched stream may or may not be shortened to just the manifest information for the new position through to the end.
In one embodiment, the HLS streams are terminated at the end of the episode with the HLS segment EXT-X-ENDLIST.
In one embodiment, the stitched stream makes use of the #EXT-X-DISCONTINUITY HLS tag. This tag can be inserted in the stream between video segments and advertisement segments to indicate to the HLS player that there's a new video with discontinuous timestamps. The device's HLS player must support #EXT-X-DISCONTINUITY tag, otherwise playback may be corrupted at the video segment boundaries.
Using the episode/stitched information, the video player can display the position of ad breaks in a playbar. For example,
The stitching server will continue to support the old 1.0-style API for compatibility with existing Philips television firmware. This API works in conjunction with Net2TV's proprietary HLS stitcher that works by presenting a range of HLS manifest information.
The URL is as follows:
An exemplary usage would be:
If the viewer chooses to resume an episode instead of playing from the beginning, for example, resume from offset 125, then the request can be:
In this way, the playlist stitching server can stitch segments and advertisements together for a single playlist across multiple episodes, without having to generate a long single .m3u8 file for the entire playlist.
Although the disclosed subject matter has been described and illustrated in the foregoing exemplary embodiments, it is understood that the present disclosure has been made only by way of example, and that numerous changes in the details of implementation may be made without departing from the spirit and scope, which is limited only by the claims which follow.
A “server,” “client,” “agent,” “module,” “interface,” and “host” is not software per se and includes at least some tangible, non-transitory hardware that is configured to execute computer readable instructions. In addition, the phrase “based on” does not imply exclusiveness—for example, if X is based on A, X can also be based on B, C, and/or D.
This application relates to and claims priority under 35 U.S.C. §119(e) to U.S. Provisional Patent Application No. 62/050,026, filed on Sep. 12, 2014, which is hereby incorporated herein by reference in its entirety.
Number | Date | Country | |
---|---|---|---|
62050026 | Sep 2014 | US |