The foregoing and other objects, features and advantages of the present application will be apparent from the following more particular description of preferred embodiments, as illustrated in the accompanying drawings in which like reference characters refer to the same parts throughout the different views. The drawings are not necessarily to scale, with emphasis instead being placed upon illustrating example embodiments, principles and concepts.
The following disclosure includes several useful embodiments for efficiently processing a received data stream (e.g., a live feed) and inserting corresponding sets of pointers (e.g., references, indexes, etc.) The pointers enable navigation amongst the data stream.
For example, each set of pointers inserted into a received data stream eventually includes pointer values that point to other locations (e.g., other segments) within the data stream. However, initially, the pointer values in a respective set of pointers can be set to null values because an address or respective index to other segments or other sets of pointers in the data stream may not be known until a respective following one or more segments are received from the live feed. In other words, a newly created set of pointers cannot point to future index values in the data stream until after knowing a respective length of corresponding one or more following segments associated with the data stream. As new segments of data are received from an original data stream such as a live feed, a processing function herein backfills the null pointer values in the set of pointers with appropriate values to the newly received segments or set of pointers.
As will be discussed, backfilling pointer values previously inserted into the data stream enables a respective user viewing the data stream to initiate navigation amongst the data stream and potentially view a live feed with little or no delay. Accordingly, embodiments herein include a system that converts a received data stream (e.g., a raw data stream of video information) initially with no corresponding set of pointers to a respective data stream including “up-to-date” navigation (e.g., fast forwarding and/or rewind) pointers.
In the context of the present example, communication system 100 (e.g., a data streaming system) includes data stream manager 105-1, network 150, and multiple user domains 190 (e.g., home environments) for viewing video information, listening to audio information, etc. In one embodiment, data stream manager 105-1 includes a data stream parser 110, buffer 130 (that stores a current set of pointers 120-X and content segment 125-X), repository 180, and data stream distribution manager 145. Each of the user domains 190 can include a respective display screen 192 (e.g., television, computer system, media player, etc.) and set top box 194.
According to one implementation, a respective user (e.g., subscriber) associated with a user domain 190-1 provides input signals 196-1 to a respective set top box 194-1 for purposes of controlling streaming of video and/or audio information to be played back by a respective media player 192-1 (e.g., television, video player, music player, etc.). In such an implementation, a respective set top box 194-1 communicates input control signals 196-1 received from the respective users over network 150 to data stream distribution manager 145 of data stream manager 105-1.
Based on commands received from a respective user over network 150, data stream distribution manager 145 streams the appropriate data associated with a selected stream from repository 180 or buffer 130 to the respective user domain 190. Accordingly, each home environment can include a relatively simple set top box 194 that enables a respective user to receive (e.g., streaming data) and transmit (e.g., input commands) over network 150. In one embodiment, the data stream manager 105-1 can be considered a centralized location that processes and distributes many data streams depending on user requests.
One purpose of data stream manager 105-1 is to enable users at domains 190 to view respective data streams in real-time or as near a real-time manner as possible. Based on input, respective users can navigate amongst a respective data stream using navigation (e.g., fast forward and rewind) functionality. The term live feed includes any pre-recorded information as well as live broadcasts received from a remote source that has not yet been completely processed by the data stream manager 105-1. An object of one embodiment is to insert sets of pointers into a live feed for local storage as well as forward contents of the data stream 102 over network 150 to users.
As discussed above, initially, pointer values in a respective set of pointers inserted into a received data stream (e.g., live feed such as a pre-recorded video information) can be set to null values because an address or respective index to other segments or other sets of pointers in the data stream may not be known until a following segment or future segments have been received from data stream 102. That is, a set of pointers associated with a newly received segment of a live feed data stream 102 cannot point to future index values in the data stream until after knowing a respective length of corresponding one or more following segments of data stream 102.
As successive segments of data are received from an original live data stream, a processing function herein backfills the null pointer values in the set of pointers with appropriate values to the newly received segments or set of pointers. As will be discussed, backfilling null or temporary pointer values previously inserted into the data stream enables a respective user viewing the data stream to initiate navigation amongst the data stream and potentially view a live feed with little or no delay. Accordingly, a system herein converts a received data stream (e.g., a raw data stream of video information) initially with no corresponding set of pointers to a respective data stream including “up-to-date” navigation (e.g., fast forwarding and/or rewind) pointers.
Upon receipt of data stream 102 (e.g., a live feed) as shown in
As will be discussed further in this specification, a set of pointers can include pointers that point to future segments in the data stream as well as pointers to segments earlier in the data stream. The forward pointers in a given set of pointers are initially set to null values because, at a time of initial processing, it is not yet known what the value of the forward pointers will be until future segments are received by the data stream manager 105-1. Accordingly, upon receipt of each new segment of data stream 102, the data stream manager 105-1 creates a respective set of null pointers in buffer 130 for yet to be received portions of data stream 102. Since a position of previous segments in data stream 102 is already known, the data stream manager 105-1 can immediately fill in the backward-looking pointers into set of pointers 120-X in lieu of populating the set of pointers 120-X with null pointer values. Upon transferring a recently received segment of data stream 102 and corresponding set of pointers from buffer 130 to repository 180, data stream manager 105-1 notifies the data stream distribution manager 145 that the new segment can be streamed to a respective one or more user over network 150.
In one embodiment, the pointers support transitions into or out of play and pause modes. Part of a set of pointers can include pointers for forward and reverse pictures as well as contain a respective pointer for a current picture for completeness of all possible navigation commands. A so-called current pointer can be used to start playing from or as a location to stop playing at. The current pointer also can be used to loop on itself when in pause where the stream keeps going back to the start of the current picture once the picture has been displayed. Fast forward and rewind can be considered a moving pause; it is just a matter of what picture is displayed or from a PTP point of view, what pointer is chosen to jump to.
As discussed above and further in this disclosure, the forward pointers in a so-called PTP (e.g., metadata including a set of pointers) get updated after the PTP and its corresponding GOP (Group Of Pictures) gets written to memory, and the latency time to start playing an ingesting content is dramatically reduced due to the fact that we can start writing the content to BFD memory even before the first complete picture has been ingested and analyzed.
According to embodiments herein, the current pointer and reverse pointers of the PTP never need to be updated in the same way as the forward pointers because the ingest analyzer knows about the past and present but not the future at a respective time of the initially writing a portion of the stream to memory. Accordingly, techniques herein enable a user to be able to pause, rewind, fast forward, and play much sooner (or closer to a tip of a live feed).
At cycle time T1 (e.g., a first processing cycle), data stream manager 105-1 receives segment 1 from data stream 102 and stores segment 1 in corresponding buffer 130. For example, data stream manager 105-1 stores segment 1 in segment 125-X of buffer 130. As discussed above, segment 1 can represent a logical grouping of most recently received data (e.g., a group of sequentially displayed video pictures) associated with a live feed received from a remote source.
For segment 1, data stream manager 105-1 creates a corresponding set of pointers 120-X to include FPT1 (e.g., forward pointer 1), FPT2, and FPT3. The number of forward pointers can vary depending on the respective application from a single pointer to many pointers.
Upon creation of set of pointer PS1, the data stream manager 105-1 initially sets FPT1, FPT2, and FPT3 in PS1 to a null value such as zero because it is not yet specifically known which future segment the pointers in PS1 will point. After creating set of pointers PS1 in buffer (e.g., as set of pointer 125-X, where X=1), the data stream manager 105-1 transfers the set of pointers PS1 and corresponding segment 1 to repository 180. After this initial processing, the data stream distribution manager 145 of data stream manager 105-1 can potentially stream segment 1 out to corresponding viewers at domains 190 that happen to be requesting display of data stream 102 in as near real-time as possible on a respective media player. The data stream manager 105-1 may impart a small delay (e.g., 0.25 to 1.0 seconds due to processing) in a path from the source generating the data stream 102 and target recipients such as respective users at domains 190.
During cycle time T2 (e.g., a second segment processing cycle), the data stream manager 105-1 transfers initial contents (e.g., set of pointers PS1 in set of pointers 120-X and segment 1 in segment 125-X) of buffer 130 into repository 180.
After flushing buffer 130 of its content, data stream manager 105-1 then stores a next received segment (e.g., segment #2) associated with data stream 102 into buffer 130. The data stream manager 105-1 repeats the above process of creating a respective set of pointers associated with segment #2. For example, the data stream manager 105-1 creates a new set of pointers for each newly received segment.
Each forward pointer in a respective newly created set of pointers eventually is backfilled to reference future segments of data stream 102 stored in repository 180. Again, since the values of the pointers are initially unknown at a time of creating a respective set of pointers, the data stream manager 105-1 sets respective pointer values to zero (e.g., a null value not pointing to a valid location in stored data stream 140. For example, at time T1, data stream manager 105-1 sets FPT1, FPT2, and FPT3 of set of pointer PS1 to null values such as zero because it is not yet know of a location of future segments in repository 180. At time T2, data stream manager 105-1 sets FPT1, FPT2, and FPT3 of set of pointer PS2 to null values such as zero because it is not yet know of a location of future segments in repository 180. At time T3, data stream manager 105-1 sets FPT1, FPT2, and FPT3 of set of pointer PS3 to null values such as zero because it is not yet know of a location of future segments in repository 180, and so on.
Note that data stream manager 105-1 can update pointer values for previously created sets of pointers associated with corresponding received segments. For example, during cycle T2, the data stream manager 105-1 can backfill set of pointers PS1 to point to future segment 2 of data stream 102 because, at this later point in time, it is known where set of pointers PS2 and/or segment 2 will be stored in repository 180. In other words, during cycle time T2, data stream manager 105-1 sets FPT1, FPT2, and FPT3 of set of pointers PS1 to respective address values of corresponding locations where set of pointers PS2 reside in the data stream 140 stored in repository 180. During cycle time T3, data stream manager 105-1 sets FPT1, FPT2, and FPT3 of set of pointers PS1 to respective address values of corresponding locations where set of pointers PS2 and PS3 reside in the data stream 140 stored in repository 180. In cycle T3, the data stream manager 105-1 also sets FPT1, FPT2, and FPT3 of set of pointers PS2 to respective address values of corresponding locations where set of pointers PS3 reside in the data stream 140 stored in repository 180. By cycle time T10, the data stream manager 105-1 completely backfills set of pointers PS1 to final pointer values. For example, FPT1 points to a respective storage location associated with segment 2, FPT2 points to a respective storage location associated with segment 4, FPT3 points to a respective storage location associated with segment 10, and so on.
Note that
As shown in
Accordingly, embodiments herein include a technique of modifying one or more pointers in a respective data stream to point to: i) an address associated with the future storage regions (e.g., FPT1 associated with PS1 can be modified to point to the storage region that stores set of pointers PS2 and corresponding segment 2), ii) a set of pointers associated with a future segment (e.g., FPT1 associated with PS1 can point to set of pointers PS2), and/or iii) a following segment in a data stream (e.g., FPT1 associated with PS1 can point to future segment 2).
In one embodiment, a respective forward pointer in a corresponding set of pointers points to a beginning address location of the set of pointers associated with a following segment. For example, as shown in
Referring again to
However, as discussed above, eventually, the data stream manager 105-1 receives enough future segments of the data stream 102 and is able to backfill appropriate values associated with the sets of pointers. For example, by time cycle T10, the data stream manager 105-1 is able to create a final set of pointer values for PS1 associated with segment 1. By cycle T11, the data stream manager 105-1 is able to create a final set of pointer values for set of pointer PS2 and corresponding segment 2, and so on.
Accordingly, embodiments herein include a technique of maintaining multiple segments of data as a respective stream of data including corresponding inserted sets of pointers. Each of the respective sets of pointers inserted into a data stream includes pointers to multiple locations within the respective stream. As will be discussed further in this specification, the pointers enable a respective user to skip to different locations in the respective stream of data.
More specifically, data stream manager 105-1 creates and inserts sets of pointers into received data stream 102 that is stored as data stream 402 in repository 180. However, the data stream manager 105-1 does not backfill appropriate pointer values in the set of pointers until the data stream manager 105-1 is able to create final pointer values for each pointer in a respective set of pointers. For example, up until cycle T10, the pointer values in set of pointer PS1 includes all null values of zero. At cycle T10, the data stream manager 105-1 backfills FPT1, FPT2, and FPT3 with respective address values pointing to future set of pointers and/or segments. At cycle time T11, the data stream manager 105-1 backfills set of pointer PS2. At cycle time T12, the data stream manager 105-1 backfills pointer values associated with set of pointer PS3, and so on.
As discussed herein, data stream manager 105-1 enables a respective user to fast-forward to a “tip” of a respective live ingest (e.g., data stream 102) by jumping over “null pointers” (those which have not yet been filled in yet). Conversely, the data stream manager 105-1 enables a user to jump back from the tip to a set of pointers which have been filled in created for a respective data stream 102. This can be accomplished by have two additional pointers called “last address” and “last completed address.” Each time a data segment is loaded, “last address” is updated to this value. Each time a set of pointers is completed, “last completed address” is updated to this value.
During fast-forward, the algorithm such as functionality provided by the data stream manager 105-1 eventually reaches a segment where the forward-pointers have not been completed. At this point, the code jumps to “last address” (which is the live tip of data stream 102), and drops to normal play.
If the user is at the live play tip, the rewind pointers have yet to be filled in. As expected, in this case, the algorithm can jump back to “last completed address” and begin to rewind from there. Accordingly, a respective user can view a live tip (or near live tip) of data stream 102 and also execute rewind capabilities with respect to stored portions of the data stream 102.
Referring briefly again to
Assume that a respective user at environment 190-1 generates input 196-1 (e.g., via a remote control device) to fast forward a current viewing point associated with stored data stream 140 in repository 180. Data stream distribution manager 145 receives this command over network 150 and thereafter uses the forward pointers in a respective data stream 140 to jump ahead and stream data from a different location in data stream 140 over network 150 to the user. Forward pointers FPT1 enable a first rate of fast forwarding, forward pointers FPT2 enable a second rate of fast forwarding, forward pointers FPT3 enable a third rate of fast forwarding, and so on. Of course the user is unable to fast forward viewing of a respective data stream 102 beyond a current position of a live or current feed such as data stream 102 being received and processed by data stream manager 105-1.
Insertion of pointers into a received data stream enable a respective user to control a rate of viewing the streaming data approximately up to a current position of the live feed such as closer to the real-time feed received by the data stream manager 105-1. This small amount of delay can occur as a result of the data stream manager 105-1 processing a most recently received segment of the data stream 102 while data stream distribution manager 145 feeds a previously processed segment to the respective user (or users) over network 150.
In one embodiment, network 150 represents a network such the Internet, a wide area network, a local area network, etc. Accordingly, the data stream manager 105-1 acts as a centralized location that manages streaming of data to multiple different locations such as environments 190.
As shown, data stream manager 105-1 can be implemented in a respective computer system including a processor 113 and corresponding software code (e.g., scheduler application 140-1) to carry out the embodiments discussed in this specification. As an alternative to an embodiment as shown in
As shown in
As shown, memory system 312 is encoded with a data stream manager application 142-1 supporting the functionality of inserting pointer values into streaming data and amending the pointer values as new segments of the streaming data are received and processed. Data stream manager application 142-1 can be embodied as software code such as data and/or logic instructions (e.g., code stored in the memory or on another computer readable medium such as a disk) that support processing functionality according to different embodiments described herein. During operation, processor 313 accesses memory system 312 via the interconnect 311 in order to launch, run, execute, interpret or otherwise perform the logic instructions of the data stream manager application 142-1. Execution of data stream manager application 142-1 produces processing functionality in data stream manager process 142-2. In other words, the data stream manager process 142-2 represents one or more portions of the data stream manager 105-1 as discussed above in
It should be noted that the data stream manager application 142-1 executed in computer system 310 is represented in
It should also be noted that example configurations herein include the data stream manager application 142-1 itself (i.e., the un-executed or non-performing logic instructions and/or data). The data stream manager application 142-1 may be stored on a computer readable medium (such as a floppy disk), hard disk, or optical medium. The data stream manager application 142-1 may also be stored in a memory system 312 such as in firmware, read only memory (ROM), or, as in this example, as executable code in, for example, Random Access Memory (RAM). In addition to these embodiments, it should also be noted that other embodiments herein include the execution of data stream manager application 142-1 in processor 313 as the scheduler process 142-2. Thus, those skilled in the art will understand that the data communication device may include other processes and/or software and hardware components to carry out functionality described herein.
In step 710, the data stream manager 105-1 initiates allocation of a first storage region in repository 180 to maintain a set of pointers associated with a first received segment of streaming data 102.
In step 720, the data stream manager 105-1 initiates allocation of a second storage region in repository 180 to maintain a set of pointers associated with a second segment of the streaming data. A location such as an address of the second storage region for storing respective pointers depends at least in part on a length associated with the first segment of streaming data.
In step 730, the data stream manager 105-1 initiates modification to the set of pointers (e.g., one or more pointers) associated with the first storage region depending on the length associated with the first segment. In other words, the data stream manager 105-1 initiates modification to the set of pointers associated with the first storage region to reference the second storage region in repository 180. In one embodiment, the data stream manager 105-1 achieves this end by backfilling pointer values in the sets of pointers depending on lengths of the future received segments.
In step 810, the data stream manager 105-1 receives a first segment of streaming data (e.g., a live feed such as pre-recorded video stream).
In step 820, the data stream manager 105-1 allocates a first storage region in repository 180 to store the first segment and a respective set of pointers (e.g., PS1) associated with the first segment.
In step 830, the data stream manager 105-1 initially assigns the respective set of pointers associated with the first segment to null values (e.g., meaningless values such as zeros).
In step 840, the data stream manager 105-1 receives a second segment of streaming data. For example, the data stream manager 105-1 receives the second segment after completing processing associated with the first segment.
In step 850, the data stream manager 105-1 allocates a second storage region in repository 180 to store the second segment and a respective set of pointers. In one embodiment, a respective location (e.g., address) of the second storage region depends at least in part on a length associated with the first segment of streaming data because the set of pointers associated with the second region is stored (e.g., address-wise) after the first segment but before the second segment.
In step 860, the data stream manager 105-1 initially assigns the respective set of pointers associated with the second segment to null values.
In step 910 of flowchart 800-2 shown in
In step 920, the data stream manager 105-1 receives a third segment of streaming data.
In step 930, the data stream manager 105-1 allocates a third storage region to store the third segment and a respective set of pointers (e.g., a third set of pointers). In one embodiment, a respective location (e.g., address) of the third storage region (e.g., third set of pointers) depends at least in part on a length associated with the second segment of streaming data. The set of pointers associated with the third region is stored (e.g., address-wise) after the second segment but before the third segment of streaming data.
In step 940, the data stream manager 105-1 initially assigns the respective set of pointers associated with the third segment to null values.
In step 950, the data stream manager 105-1 backfills a pointer (e.g., overwrites a null value or outdated value) in the respective set of pointers associated with the first segment to a respective value pointing to (e.g., indexing) the third storage region. In other words, in one embodiment, the data stream manager 105-1 modifies or updates a pointer (in the set of pointers associated with the first segment) to an address in the second storage region. In one embodiment, the data stream manager 105-1 can update a respective pointer value to point to a start address associated with the second storage region.
In step 960, the data stream manager 105-1 backfills a pointer in the respective set of pointers associated with the second segment to a respective value pointing to (e.g., indexing) the third storage region. In other words, in one embodiment, the data stream manager 105-1 modifies or updates a pointer (in the set of pointers associated with the second segment) to an address in the third storage region. The data stream manager 105-1 can update a respective pointer value to point to a start address associated with the third storage region.
As discussed, techniques herein are well suited for use in applications such as backfilling pointer values inserted into streaming data. However, it should be noted that configurations herein are not limited to use in such applications and thus configurations herein and deviations thereof are well suited for other applications as well.
While this invention has been particularly shown and described with references to preferred embodiments thereof, it will be understood by those skilled in the art that various changes in form and details may be made therein without departing from the spirit and scope of the invention as defined by the appended claims. Such variations are intended to be covered by the scope of this invention. As such, the foregoing description of embodiments of the invention is not intended to be limiting. Rather, any limitations to embodiments of the invention are presented in the following claims.