Abstract:
Systems and methods are provided herein relating to video editing and more particularly to stitching an insert video within a target video without transcoding. Through dynamically stitching a video, such as an advertisement, within a video, a content provider can transmit a stitched video instead of separate content videos and advertisement videos that a local uncontrolled video player would be responsible for combining and playing. Systems and methods herein provide for receiving a target video and an insert video and dynamically stitching the insert video within the target video to create a stitched video. The stitched video can then be transmitted that plays both the target video and the insert video within the target video, irrespective of the player on which a user views the stitched video.

Description:
TECHNICAL FIELD 
     This application relates to video editing, and more particularly to stitching a video within another video. 
     BACKGROUND 
     In streaming videos using a content provider controlled (CPC) video player, content providers can dynamically insert videos, such as an advertisement, using features embedded within the CPC video player. In sharp contrast to streaming videos using a CPC video player, many streaming video environments, such as when using a mobile device, use a video player not controlled by the content provider to stream video content hosted by the content provider. Without control of the video player, a content provider can face challenges in dynamically streaming videos with additional stitched-in video content. 
     One method to stitch video content within an existing video is to take a host video and an insert video and run both through a transcoder that can decode, re-encode and repackage the host video and the insert video as a new video. However, transcoding a large set of videos can be associated with expensive computational costs, particularly for a large scale content provider. In addition, when stitching a host video and an insert video, such as advertisement, the new video can quickly become stale. For example, an advertisement relating to an upcoming event or a temporary product may not be relevant for the full life cycle of the host video. Therefore, it would be useful to be able to dynamically stitch a video without being dependent on control of the video player or transcoding. 
     SUMMARY 
     The following presents a simplified summary of the specification in order to provide a basic understanding of some aspects of the specification. This summary is not an extensive overview of the specification. It is intended to neither identify key or critical elements of the specification nor delineate the scope of any particular embodiments of the specification, or any scope of the claims. Its sole purpose is to present some concepts of the specification in a simplified form as a prelude to the more detailed description that is presented in this disclosure. 
     Systems and methods disclosed herein relate to video stitching. A receiving component can receive an insert video and a target video. A stitching component can stitch the insert video and the target video, without transcoding, to generate a stitched video. A transmission component can transmit the stitched video. 
     The following description and the drawings set forth certain illustrative aspects of the specification. These aspects are indicative, however, of but a few of the various ways in which the principles of the specification may be employed. Other advantages and novel features of the specification will become apparent from the following detailed description of the specification when considered in conjunction with the drawings. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is an example block diagram of aspects relating to video stitching in accordance with implementations of this disclosure; 
         FIG. 2  illustrates a high-level functional block diagram of an example video stitching system in accordance with implementations of this disclosure; 
         FIG. 3  illustrates a high-level functional block diagram of an example video stitching system including an insertion timing component in accordance with implementations of this disclosure; 
         FIG. 4  illustrates a high-level functional block diagram of an example video stitching system including a synch component in accordance with implementations of this disclosure; 
         FIG. 5  illustrates a high-level functional block diagram of an example video stitching system including a sample table component in accordance with implementations of this disclosure; 
         FIG. 6  illustrates a high-level functional block diagram of an example video stitching system including a header update component in accordance with implementations of this disclosure; 
         FIG. 7  illustrates an example method for video stitching in accordance with implementations of this disclosure; 
         FIG. 8  illustrates an example method for video stitching including determining an insert time in accordance with implementations of this disclosure; 
         FIG. 9  illustrates a high-level functional block diagram of an example mobile device capable of video stitching in accordance with implementations of this disclosure; 
         FIG. 10  illustrates a high-level functional block diagram of an example mobile device capable of video stitching including a synch component in accordance with implementations of this disclosure; 
         FIG. 11  illustrates a high-level functional block diagram of an example mobile device capable of video stitching including a sample table component in accordance with implementations of this disclosure; 
         FIG. 12  illustrates a high-level functional block diagram of an example mobile device capable of video stitching including a header update component in accordance with implementations of this disclosure; 
         FIG. 13  illustrates an example block diagram of a computer operable to execute the disclosed architecture in accordance with implementations of this disclosure; and 
         FIG. 14  illustrates an example schematic block diagram for a computing environment in accordance with implementations of this disclosure. 
     
    
    
     DETAILED DESCRIPTION 
     The innovation is now described with reference to the drawings, wherein like reference numerals are used to refer to like elements throughout. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of this innovation. It may be evident, however, that the innovation can be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to facilitate describing the innovation. 
     Dynamically stitching an insert video into a host video can offer advantages in inserting videos, such as advertisements, within hosted video content. For example, a content provider may host thousands of videos and wish to place advertisements within the hosted videos when users are watching the hosted videos. A content provider may desire to continually update the content of the insert video (e.g., advertisements) and have it apply to an entire set of the hosted videos or a subset of the hosted videos. One approach is to take the host video and the insert video and run them both through a transcoder that can decode, re-encode and repackage the host video file to include the insert video. However, any time the content provider wished to change the content of the insert video, e.g., to update a stale advertisement or dynamically choose an insert video, such as an advertisement, based on the user who requests the video, the content provider would have to transcode the host video with the new insert video. The computational cost associated with transcoding a large set of videos can be high. 
     Systems and methods herein provide for dynamically stitching an insert video within a target video, e.g., while streaming over the hyper text transfer protocol (“HTTP”). The stitching occurs without transcoding. The stitching can occur upon a request for access to a target video by a user. For example, a user can request to view a target video; the system can receive an insert video and the target video, and dynamically stitch the insert video into the target video without transcoding. The system can allow a content provider to update the insert video, e.g., with advertisements or other content related to the user or related to the target video the user is requesting. The system can allow for updating the content of the insert video without transcoding. In some embodiments, the resulting stitched video is not stored. In other embodiments, systems and methods described herein provide for storage of a stitched video containing the insert video and the target video. 
     In one implementation, a mobile device can allow a user to combine two videos captured on and/or residing inside a data store associated with the mobile device. A user can edit a target video to include an insert video stitched into the target video. Thus a user can use a mobile device, which may not have sufficient computational power to transcode a new video, to stitch two videos together without transcoding. 
     In one implementation, both the target video and the insert video are MPEG-4 Part 14 (“MP4”) videos. MP4 videos are capable of being streamed over HTTP. In one such implementation, the insert video and the target video have identical resolutions and are generated using identical transcoder settings. In one implementation, both the target video and the insert video are 3GP videos. 3GP is a multimedia container format used on 3G mobile phones, but can also be played on some 2G and 4G phones. In other implementations, another video container format is employed for both the target video and the insert video. 
     One step in stitching a video is determining an insertion point on both the audio and video tracks of the target video. The insertion point can be in seconds or milliseconds, for example. In one implementation. the insert video is inserted at any point in the target video that is before an I-frame on the video channel. For example, the video channel of the target video can be searched for the closest I-frame to a desired insert time, e.g., using data inside a sample table time to sample (“stts”) atom and a sample table synch sample (“stss”) atom. The insert video can be inserted immediately before the I-frame if the video has no B-frames. Alternatively, the I-frame can be duplicated before and after the stitch. Once the insert point on the video channel, e.g., the video insert time, has been determined, the closest corresponding sample on the audio track can be used as an audio insert time. After a video insert time and associated audio insert time have been determined, the insert video can be stitched into the target video. In one implementation, two or more insert videos are stitched back to back into a target video. 
     Referring to  FIG. 1 , there is illustrated an example block diagram of aspects relating to video stitching in accordance with implementations of this disclosure. In  FIG. 1 , a target video  100  (also referred to herein as host media data (“mdat”)  100 ) includes segments  102 ,  104 ,  106 , and  108 . In this disclosure, segments may also be referred to as chunks. In this example, the host media data (“mdat”) is interleaved into one-second chunks. For example, segment  102  is the first one second of audio, segment  104  is the first one second of video, and segments  106  and  108  are time 1 S-2 S of audio and video, respectively. 
     In  FIG. 1 , a stitched video  150  (also referred to herein as constructed mdat  150 ) is also depicting, wherein an insert video  130  is incorporated into the target video  100 . In this example, the insert video  130  is inserted at a video insert time of 0.5 seconds and an audio insert time of 0.5 second. Byte offsets can be determined, wherein audio_offset and video_offset are the byte offsets of the audio and video samples, respectively, before which the insert video will be stitched, by looking at, at least in part, the sample table sizes (“stsz”), sample table sample to chunk map (“stsc”) and sample table chunk offset (“stco”) sample tables. Because of interleaving, it can be appreciated that audio_offset and video_offset may not occur at a fixed point, e.g., at the same byte offset, even if they occur at the same time. As the audio insert time is within a one-second audio chunk, segment  102 , and the video insert time is within a one-second video chunk, segment  104 , the segments are split to insert the insert video at 0.5 seconds. Specifically, audio segment  102  is split into audio segment  110  and  112 ; video segment  104  is split into video segment  120  and  122 . 
     Segment  110  denotes the first half second of audio segment  102 . In one implementation, segment  110  is determined by copying audio segment  102  up to audio_offset. 
     Segments  120  and  112  exist on either side of the insert video  130 . Segments  120  and  112  are sometimes referred to herein as remainders because they exist in (e.g., are inserted into) the stitched video in a different order than how they exist in the target video  100 . Segment  120  can be referred to as a “pre-stitch remainder” in that the first half of segment  104 , up to video_offset, is split and inserted prior to the insert video  130 . 
     After the pre-stitch remainder  120 , the insert video  130  (or media data (mdat) video  130 ) is inserted unmodified. After the insert video  130  is segment  112 . Segment  112  can be referred to as the “post-stitch remainder” in that the second half of segment  102 , after audio_offset, is inserted after the insert video  130 . Segment  122 , after video_offset, and segments  106 , and  108  can then be inserted after post-stitch remainder  112  in the order they existed within target video  100 . 
     In an alternate embodiment, not shown in  FIG. 1 , a partial audio segment can be used as a pre-stitch remainder and a partial video segment can be used as a post-stitch remainder. For example, an mdat could be constructed by first interleaving video segment  120  followed by audio segment  110  as a pre-stitch remainder, followed by insert video  130  in its entirety, followed by video segment  122  as a post-stitch remainder, followed by audio segment  112 , followed by remaining full segments  108  and  106 . 
     Along with creating a new mdat  150  of stitched video, sample tables of the stitched video can also be generated based on the sample tables associated with the target video and the insert video. A sample table can be updated for each track. For example, where there is one set of sample tables per track, a file with audio and video tracks will have two sets of tables, one set for audio and one set for video that are both also stitched. For the stts and stsz sample tables, the insert point can be identified from the sample index and the insert video sample tables can be inserted into the target video sample tables. Both the stts and the stsz use a run length, thus, a run can be split if the insert video was not inserted into the target video on a run boundary. 
     The stss atom associated with the insert video can be directly inserted into the stss of the target video and the new stss atom can be renumbered to reflect the insertion. For example, the insert video indices and those indices in the target video after the stitch can be renumbered. 
     The stco can also be updated and is related to the stsc. If the stitch occurred at a chunk boundary, then it may be necessary to split up the stsc atom and introduce another stco entry. A new stsc entry can be inserted and all entries can be renumbered after the stitch point. Stco entries up to min(audio_offset, video_offset) can remain the same. All the following stco entries can then be updated to reflect the interleaving change as well as shifting the offsets for the insert video&#39;s stco entries and the stco entries after the stitch. 
     In addition to updating the sample tables, the track and movie header durations can be updated. The insert video and the target video durations can be summed for each track and the headers associated with the stitched video can be updated accordingly. 
     Referring now to  FIG. 2 , there is illustrated a high-level functional block diagram of an example video stitching system  200  in accordance with implementations of this disclosure. 
     A receiving component  210  can receive an insert video  202  and a target video  201 . In one implementation, insert video  202  is stored within memory  204  in an insert video data store  206 . For example, insert video data store  206  can contain a plurality of insert videos relating to advertising, user desires, or any other content that is capable of being inserted into a target video. In one implementation, target video  201  is stored within memory  204  in a target video data store  208 . For example, target video data store  208  can store a set of hosted videos that can be accessed via the internet using HTTP. For example, the set of hosted videos could be related to a video sharing platform where users of the video sharing platform have uploaded videos the users desire the video sharing platform to host for others to view. In one implementation, receiving component  210  can receive a target video in response to an HTTP request by a user wishing to view the target video. Both insert video data store  206  and target video date store  208  can be located disparate from video stitching system  200  and accessed via a communications network by system  200 . For example, video stitching system  200  could access sets of insert videos and sets of target videos by connecting to a server that is communicatively coupled to server data stores that contain insert video data store  206  and/or target video data store  208 . 
     In one implementation, receiving component  210  can select an insert video  202  from insert video data store  206  based on the target video. For example, for a user that selected a target video relating to basketball, the system may select an insert video  202  from insert video data store  206  that is an advertisement for basketball shoes. In another example, an insert video can be tailored to a user who seeks to watch the target video based on, for example, location or other available information about the user. It can be appreciated that insert video can be selected based on advertising value, content supplementation, or other methods. 
     In an implementation, the insert video encoding and the target video are encoded using the same encoding settings. For example, both the insert video and the target video can be encoded using any codec supported by the MP4 container, using the same encoding settings. In another example, both the insert video and the target video can be encoded using any codec supported by the 3GP container, using the same encoding settings. 
     A stitching component  220  can stitch the insert video and the target video without transcoding to generate a stitched video. In one implementation, the stitching component can generate or duplicate an I-frame and insert the I-frame before and after the insert video. 
     A transmission component  230  can transmit the stitched video. For example, the stitched video can be transmitted using HTTP to a mobile device such as a smart phone, a tablet, an e-reader, a computer, a personal digital assistant, a personal media player, etc. It can be appreciated that because the stitched video is transmitted, the stitched video can be displayed on any video player capable of playing the file format of the stitched video. Video stitching system  200  does not need to be in control of the video player residing on the device that the stitched video is transmitted to in order for the stitched video to be capable of display. 
     Referring to  FIG. 3  there is illustrated a high-level functional block diagram of an example video stitching system including an insertion timing component  310  in accordance with implementations of this disclosure. Insertion timing component  310  can determine video insert time and audio insert time. For example, insertion timing component  310  can search the target video for the closest I-frame to a desired insert time using data inside the sample table time to sample (“stts”) and sample table synch sample (“stss”) atoms. A desired insert time can be based off the entire length of the video so that an effective time is chosen. For example, when using an advertisement as an insert video, it can be desirable to choose a time when the user viewing the stitched video is engaged in watching the video but not a time that is in the middle of a key scene in the video. Once the video insert time has been determined the closest corresponding sample on the audio channel can be used as an audio insert time. In some embodiments, the audio insert time is determined before the video insert time. It can be appreciated that the insertion timing component  310  can include functionality, as more fully described in this disclosure, for example, with regard to  FIG. 1 . 
     Referring to  FIG. 4  there is illustrated a high-level functional block diagram of an example video stitching system including a synch component  410  in accordance with implementations of this disclosure. Synch component  410  can determine a pre-stitch remainder or a post-stitch remainder. In one implementation, synch component  410  can determine both a pre-stitch remainder and a post-stitch remainder. 
     In one implementation, stitching component  220  can generate a stitched video based on a video insert time, an audio insert time, a pre-stitch remainder and a post-stitch remainder. For example, the stitched video can comprise full chunks of mdat data up to the video insert time. A partial chunk of the audio can be included up to the audio_offset. A pre-stitch remainder of a partial chunk of the video up to the video_offset can follow. Next the entirety of the insert video can be added. Then the post-stitch remainder of the remaining partial audio chunk after audio_offset can follow. Finally, the remaining partial video chunk after video_offset follows the post stitch remainder, followed by all remaining full audio and video chunks can be included. It can be appreciated that the pre-stitch remainder and the post-stitch remainder apply in a multiple track situation. If there is a single track, for example, then interleaving may be not applicable. It can be appreciated that the synch component  410  can include functionality, as more fully described in this disclosure, for example, with regard to  FIG. 1 . 
     Referring to  FIG. 5  there is illustrated a high-level functional block diagram of an example video stitching system including a sample table component  510  in accordance with implementations of this disclosure. Sample table component  510  can generate a stitched video sample table based upon inserting an insert video sample table into a host video sample table. In one implementation, the updated sample tables include at least one of a stts, stsz, stss, or stco atoms. In one implementation, there is one set of sample tables for each track, for example, when there are separate tracks for both audio and video or multiple audio tracks or multiple video tracks. It can be appreciated that the sample table component  510  can include functionality, as more fully described in this disclosure, for example, with regard to  FIG. 1 . 
     Referring to  FIG. 6  there is illustrated a high-level functional block diagram of an example video stitching system including a header update component  610  in accordance with implementations of this disclosure. Header update component  610  can generate a stitched video header based on the insert video and the target video. For example, in one implementation, the header update component  610  sums the insert video and the target video durations for each track and updates the headers associated with the stitched video accordingly. It can be appreciated that the header update component  610  can include functionality, as more fully described in this disclosure, for example, with regard to  FIG. 1 . 
       FIGS. 7-8  illustrate methods and/or flow diagrams in accordance with this disclosure. For simplicity of explanation, the methods are depicted and described as a series of acts. However, acts in accordance with this disclosure can occur in various orders and/or concurrently, and with other acts not presented and described herein. Furthermore, not all illustrated acts may be required to implement the methods in accordance with the disclosed subject matter. In addition, those skilled in the art will understand and appreciate that the methods could alternatively be represented as a series of interrelated states via a state diagram or events. Additionally, it should be appreciated that the methods disclosed in this specification are capable of being stored on an article of manufacture to facilitate transporting and transferring such methods to computing devices. The term article of manufacture, as used herein, is intended to encompass a computer program accessible from any computer-readable device or storage media. 
     Moreover, various acts have been described in detail above in connection with respective system diagrams. It is to be appreciated that the detailed description of such acts in the prior figures can be and are intended to be implementable in accordance with the following methods. 
       FIG. 7  illustrates an example method video stitching in accordance with implementations of this disclosure. At  702 , an insert video and a target video is received (e.g., by a receiving component). In one implementation, the insert video encoding and the target video encoding are the same. In one implementation, the insert video format and the target video format are MPEG-4. In one implementation, the insert video format and the target video format are 3GP. At  704 , the insert video is stitched (e.g., by a stitching component) into the target video without transcoding to generate a stitched video. In one implementation, an I-frame can be generated and inserted before and after the insert video. At  706 , the stitched video is transmitted (e.g., by a transmission component). For example, the stitched video can be transmitted using HTTP to a mobile device such as a smart phone, a tablet, an e-reader, a computer, a personal digital assistant, a personal media player, etc. It can be appreciated that the stitched video can be displayed on any video player capable of playing the file format of the stitched video. 
       FIG. 8  illustrates an example method for video stitching including determining an insert time in accordance with implementations of this disclosure. At  802 , an insert video and a target video is received (e.g., by a receiving component). At  804 , a video insert time and an audio insert time is determined (e.g., by an insertion timing component). At  806 , a pre-stitch remainder chunk or a post-stitch remainder chunk is determined (e.g., by a synch component). At  808 , the insert video is stitched (e.g., by a stitching component) with the target video, without transcoding, to generate a stitched video. For example, the insert video can be stitched with the target video, without transcoding, to generate a stitched video based on the video insert time, the audio insert time, the pre-stitch remainder and the post-stitch remainder. At  810 , the stitched video is transmitted (e.g., by a transmission component). 
     Referring to  FIG. 9 , there is illustrated a high-level functional block diagram of an example mobile device  900  capable of video stitching in accordance with implementations of this disclosure. An example mobile device can include a smart phone, a tablet, an e-reader, a laptop, a netbook, a personal digital assistant, a personal media player, etc. 
     An input component  910  can receive an insert video  902  and a target video  901 . In one implementation, insert video  902  and target video  901  can be received from a video data store  906  in memory  904 , which can be embedded inside mobile device  900  or coupled thereto. For example, a user of the mobile device may wish to combine two videos stored within video data store  906 , which may be a SIM card, for example. In one implementation, both the insert video and the target video are MPEG-4 videos. In one implementation, both the insert video and the target video are 3GP videos. In another implementation, both the insert video and the target video are the same resolution and encoded using the same encoding settings. 
     Interface component  920  can allow a user of the mobile device to select an insert time in the target video. In one implementation, the user can input a specific time in which they want the insert video to appear within the target video. In another implementation, the user can visually select an approximate point in the target video where he/she desires the insert video to be stitched. 
     Stitching component  930  can stitch the insert video into the target video at the insert time (or a nearby time) without transcoding to generate a stitched video. In one implementation, stitching component  930  generates or duplicates an I-frame and inserts the I-frame before and after the insert video. 
       FIG. 10  illustrates a high-level functional block diagram of an example mobile device  900  capable of video stitching including a synch component  1010  in accordance with implementations of this disclosure. Synch component  1010  can determine a pre-stitch remainder block and/or a post-stitch remainder block. In one implementation, stitching component  930  can generate the stitched video based on the insert time, the pre-stitch remainder and the post-stitch remainder. It can be appreciated that the synch component  1010  can include functionality, as more fully described in this disclosure, for example, with regard to  FIG. 1  and/or synch component  410 . 
       FIG. 11  illustrates a high-level functional block diagram of an example mobile device  900  capable of video stitching including a sample table component  1110  in accordance with implementations of this disclosure. Sample table component  1110  can generate a stitched video sample table based upon inserting an insert video sample table into a target video sample table. In one implementation, the stitched video sample table includes at least one of a stts, stsz, stss, or stco atoms. It can be appreciated that the sample table component  1110  can include functionality, as more fully described in this disclosure, for example, with regard to  FIG. 1  and/or sample table component  510 . 
       FIG. 12  illustrates a high-level functional block diagram of an example mobile device  900  capable of video stitching including a header update component  1210  in accordance with implementations of this disclosure. Header update component  1210  can generate a stitched video header based on the insert video and the target video. For example, in one implementation, the header update component  1210  sums the insert video and the target video durations for each track and updates the headers associated with the stitched video accordingly. It can be appreciated that the header update component  1210  can include functionality, as more fully described in this disclosure, for example, with regard to  FIG. 1  and/or header update component  610 . 
     Reference throughout this specification to “one implementation,” or “an implementation,” or “one embodiment,” or “an embodiment” means that a particular feature, structure, or characteristic described in connection with the implementation or embodiment is included in at least one implementation or one embodiment. Thus, the appearances of the phrase “in one implementation,” or “in an implementation,” or “in one embodiment,” or “in an embodiment” in various places throughout this specification can, but are not necessarily, referring to the same implementation or embodiment, depending on the circumstances. Furthermore, the particular features, structures, or characteristics may be combined in any suitable manner in one or more implementations or embodiments. 
     To the extent that the terms “includes,” “including,” “has,” “contains,” variants thereof, and other similar words are used in either the detailed description or the claims, these terms are intended to be inclusive in a manner similar to the term “comprising” as an open transition word without precluding any additional or other elements. 
     As used in this application, the terms “component,” “module,” “system,” or the like are generally intended to refer to a computer-related entity, either hardware (e.g., a circuit), a combination of hardware and software, or an entity related to an operational machine with one or more specific functionalities. For example, a component may be, but is not limited to being, a process running on a processor (e.g., digital signal processor), a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a controller and the controller can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers. Further, a “device” can come in the form of specially designed hardware; generalized hardware made specialized by the execution of software thereon that enables hardware to perform specific functions (e.g. generating interest points and/or fingerprints); software on a computer readable medium; or a combination thereof. 
     The aforementioned systems, circuits, modules, and so on have been described with respect to interaction between several components and/or blocks. It can be appreciated that such systems, circuits, components, blocks, and so forth can include those components or specified sub-components, some of the specified components or sub-components, and/or additional components, and according to various permutations and combinations of the foregoing. Sub-components can also be implemented as components communicatively coupled to other components rather than included within parent components (hierarchical). Additionally, it should be noted that one or more components may be combined into a single component providing aggregate functionality or divided into several separate sub-components, and any one or more middle layers, such as a management layer, may be provided to communicatively couple to such sub-components in order to provide integrated functionality. Any components described herein may also interact with one or more other components not specifically described herein but known by those of skill in the art. 
     Moreover, the words “example” or “exemplary” are used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects or designs. Rather, use of the words “example” or “exemplary” is intended to present concepts in a concrete fashion. As used in this application, the term “or” is intended to mean an inclusive “or” rather than an exclusive “or”. That is, unless specified otherwise, or clear from context, “X employs A or B” is intended to mean any of the natural inclusive permutations. That is, if X employs A; X employs B; or X employs both A and B, then “X employs A or B” is satisfied under any of the foregoing instances. In addition, the articles “a” and “an” as used in this application and the appended claims should generally be construed to mean “one or more” unless specified otherwise or clear from context to be directed to a singular form. 
     With reference to  FIG. 13 , a suitable environment  1300  for implementing various aspects of the claimed subject matter includes a computer  1302 . The computer  1302  includes a processing unit  1304 , a system memory  1306 , a codec  1305 , and a system bus  1308 . Codec  1305  can include video codecs such as MP4, 3GP, etc. and/or related audio codecs that can be used to encode, decode or transcode video and related audio. The system bus  1308  couples system components including, but not limited to, the system memory  1306  to the processing unit  1304 . The processing unit  1304  can be any of various available processors. Dual microprocessors and other multiprocessor architectures also can be employed as the processing unit  1304 . 
     The system bus  1308  can be any of several types of bus structure(s) including the memory bus or memory controller, a peripheral bus or external bus, and/or a local bus using any variety of available bus architectures including, but not limited to, Industrial Standard Architecture (ISA), Micro-Channel Architecture (MSA), Extended ISA (EISA), Intelligent Drive Electronics (IDE), VESA Local Bus (VLB), Peripheral Component Interconnect (PCI), Card Bus, Universal Serial Bus (USB), Advanced Graphics Port (AGP), Personal Computer Memory Card International Association bus (PCMCIA), Firewire (IEEE 1394), and Small Computer Systems Interface (SCSI). 
     The system memory  1306  includes volatile memory  1310  and non-volatile memory  1312 . The basic input/output system (BIOS), containing the basic routines to transfer information between elements within the computer  1302 , such as during start-up, is stored in non-volatile memory  1312 . By way of illustration, and not limitation, non-volatile memory  1312  can include read only memory (ROM), programmable ROM (PROM), electrically programmable ROM (EPROM), electrically erasable programmable ROM (EEPROM), or flash memory. Volatile memory  1310  includes random access memory (RAM), which acts as external cache memory. According to present aspects, the volatile memory may store the write operation retry logic (not shown in  FIG. 13 ) and the like. By way of illustration and not limitation, RAM is available in many forms such as static RAM (SRAM), dynamic RAM (DRAM), synchronous DRAM (SDRAM), double data rate SDRAM (DDR SDRAM), enhanced SDRAM (ESDRAM). 
     Computer  1302  may also include removable/non-removable, volatile/non-volatile computer storage media.  FIG. 13  illustrates, for example, a disk storage  1314 . Disk storage  1314  includes, but is not limited to, devices like a magnetic disk drive, solid state disk (SSD) floppy disk drive, tape drive, Jaz drive, Zip drive, LS-100 drive, flash memory card, or memory stick. In addition, disk storage  1314  can include storage media separately or in combination with other storage media including, but not limited to, an optical disk drive such as a compact disk ROM device (CD-ROM), CD recordable drive (CD-R Drive), CD rewritable drive (CD-RW Drive) or a digital versatile disk ROM drive (DVD-ROM). To facilitate connection of the disk storage devices  1314  to the system bus  1308 , a removable or non-removable interface is typically used, such as interface  1316 . 
     It is to be appreciated that  FIG. 13  describes software that acts as an intermediary between users and the basic computer resources described in the suitable operating environment  1300 . Such software includes an operating system  1318 . Operating system  1318 , which can be stored on disk storage  1314 , acts to control and allocate resources of the computer system  1302 . Applications  1320  take advantage of the management of resources by operating system  1318  through program modules  1324 , and program data  1326 , such as the boot/shutdown transaction table and the like, stored either in system memory  1306  or on disk storage  1314 . It is to be appreciated that the claimed subject matter can be implemented with various operating systems or combinations of operating systems. 
     A user enters commands or information into the computer  1302  through input device(s)  1328 . Input devices  1328  include, but are not limited to, a pointing device such as a mouse, trackball, stylus, touch pad, keyboard, microphone, joystick, game pad, satellite dish, scanner, TV tuner card, digital camera, digital video camera, web camera, and the like. These and other input devices connect to the processing unit  1304  through the system bus  1308  via interface port(s)  1330 . Interface port(s)  1330  include, for example, a serial port, a parallel port, a game port, and a universal serial bus (USB). Output device(s)  1336  use some of the same type of ports as input device(s)  1328 . Thus, for example, a USB port may be used to provide input to computer  1302 , and to output information from computer  1302  to an output device  1336 . Output adapter  1334  is provided to illustrate that there are some output devices  1336  like monitors, speakers, and printers, among other output devices  1336 , which require special adapters. The output adapters  1334  include, by way of illustration and not limitation, video and sound cards that provide a means of connection between the output device  1336  and the system bus  1308 . It should be noted that other devices and/or systems of devices provide both input and output capabilities such as remote computer(s)  1338 . 
     Computer  1302  can operate in a networked environment using logical connections to one or more remote computers, such as remote computer(s)  1338 . The remote computer(s)  1338  can be a personal computer, a server, a router, a network PC, a workstation, a microprocessor based appliance, a peer device, a smart phone, a tablet, or other network node, and typically includes many of the elements described relative to computer  1302 . For purposes of brevity, only a memory storage device  1340  is illustrated with remote computer(s)  1338 . Remote computer(s)  1338  is logically connected to computer  1302  through a network interface  1342  and then connected via communication connection(s)  1344 . Network interface  1342  encompasses wire and/or wireless communication networks such as local-area networks (LAN) and wide-area networks (WAN) and cellular networks. LAN technologies include Fiber Distributed Data Interface (FDDI), Copper Distributed Data Interface (CDDI), Ethernet, Token Ring and the like. WAN technologies include, but are not limited to, point-to-point links, circuit switching networks like Integrated Services Digital Networks (ISDN) and variations thereon, packet switching networks, and Digital Subscriber Lines (DSL). 
     Communication connection(s)  1344  refers to the hardware/software employed to connect the network interface  1342  to the bus  1308 . While communication connection  1344  is shown for illustrative clarity inside computer  1302 , it can also be external to computer  1302 . The hardware/software necessary for connection to the network interface  1342  includes, for exemplary purposes only, internal and external technologies such as, modems including regular telephone grade modems, cable modems and DSL modems, ISDN adapters, and wired and wireless Ethernet cards, hubs, and routers. 
     Referring now to  FIG. 14 , there is illustrated a schematic block diagram of a computing environment  1400  in accordance with the subject specification. The system  1400  includes one or more client(s)  1402 , which can include an application or a system that accesses a service on the server  1404 . The client(s)  1402  can be hardware and/or software (e.g., threads, processes, computing devices). The client(s)  1402  can house cookie(s), metadata, and/or associated contextual information by employing the specification, for example. 
     The system  1400  also includes one or more server(s)  1404 . The server(s)  1404  can also be hardware or hardware in combination with software (e.g., threads, processes, computing devices). The servers  1404  can house threads to perform, for example, receiving, stitching videos, generating sample tables, generating I-frames, generating headers, etc. in accordance with the subject disclosure. One possible communication between a client  1402  and a server  1404  can be in the form of a data packet adapted to be transmitted between two or more computer processes where the data packet contains, for example, an audio sample or descriptors associated with an audio sample. The data packet can include a cookie and/or associated contextual information, for example. The system  1400  includes a communication framework  1406  (e.g., a global communication network such as the Internet) that can be employed to facilitate communications between the client(s)  1402  and the server(s)  1404 . 
     Communications can be facilitated via a wired (including optical fiber) and/or wireless technology. The client(s)  1402  are operatively connected to one or more client data store(s)  1408  that can be employed to store information local to the client(s)  1402  (e.g., cookie(s) and/or associated contextual information). Similarly, the server(s)  1404  are operatively connected to one or more server data store(s)  1410  that can be employed to store information local to the servers  1404 . 
     The illustrated aspects of the disclosure may also be practiced in distributed computing environments where certain tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules can be located in both local and remote memory storage devices. 
     The systems and processes described above can be embodied within hardware, such as a single integrated circuit (IC) chip, multiple ICs, an application specific integrated circuit (ASIC), or the like. Further, the order in which some or all of the process blocks appear in each process should not be deemed limiting. Rather, it should be understood that some of the process blocks can be executed in a variety of orders that are not all of which may be explicitly illustrated herein. 
     What has been described above includes examples of the implementations of the present invention. It is, of course, not possible to describe every conceivable combination of components or methods for purposes of describing the claimed subject matter, but many further combinations and permutations of the subject innovation are possible. Accordingly, the claimed subject matter is intended to embrace all such alterations, modifications, and variations that fall within the spirit and scope of the appended claims. Moreover, the above description of illustrated implementations of this disclosure, including what is described in the Abstract, is not intended to be exhaustive or to limit the disclosed implementations to the precise forms disclosed. While specific implementations and examples are described herein for illustrative purposes, various modifications are possible that are considered within the scope of such implementations and examples, as those skilled in the relevant art can recognize. 
     In particular and in regard to the various functions performed by the above described components, devices, circuits, systems and the like, the terms used to describe such components are intended to correspond, unless otherwise indicated, to any component which performs the specified function of the described component (e.g., a functional equivalent), even though not structurally equivalent to the disclosed structure, which performs the function in the herein illustrated exemplary aspects of the claimed subject matter. In this regard, it will also be recognized that the innovation includes a system as well as a computer-readable storage medium having computer-executable instructions for performing the acts and/or events of the various methods of the claimed subject matter.