Video advertising insertion using multiple processes
A system for video advertising insertion is presented. In one example, the system includes a transport stream interface to receive multiple video program channels in at least one first video transport stream. The system also includes at least one hardware processor that executes a host process to initiate a plurality of instance processes to execute concurrently, wherein each of the instance processes is assigned a distinct subset of the channels. Each of the instance processes analyzes the at least one first video transport stream to determine advertisement insertion points of the distinct subset of the channels, and inserts at least some of the plurality of video advertisements into the distinct subset of the channels based on the advertisement insertion points and an advertising schedule. The transport stream interface is also to transmit the channels with the inserted video advertisements in at least one second video transport stream.
Latest ADGORILLA LLC Patents:
Aspects of the present disclosure relate generally to video advertising insertion technology and, more specifically, to a multiple-process video advertising insertion system.
BACKGROUNDTelevision or video distribution systems, such as terrestrial (“over the air”), cable, and satellite television systems, provide many programs (e.g., television series, news programs, movies, sporting events, and like) by way of multiple program channels that deliver such programming simultaneously. An important aspect of these television distribution systems is the revenue generated by advertising (e.g., commercials) presented in conjunction with the television programs of interest, as such revenue is often necessary to make the production and distribution of such programming possible.
In some environments, locally-oriented advertising may be inserted into at least some of the video programs, often as a replacement for nationally-oriented advertisements initially placed in the programs. To insert the local advertising, the various program channels may be received into a router that is also in communication with an advertisement server via a communication network. The router may then retrieve advertisements from the advertisement server and insert the advertisements into the programs before retransmitting the programs over their respective channels via one or more communication connections to televisions, television set-top boxes, and the like.
Given the amount of video and audio data often associated with the video program channels, the router may require significant processing power to insert the local advertising at appropriate points in time of the various programs while avoiding processing bottlenecks that may cause data loss or interruption of service, such as, for example, video data buffer overruns and/or underruns. However, the purchase or lease costs typically associated with high-performance processing hardware may be beyond the financial reach of many television distribution systems that serve smaller viewer markets.
It is with these observations in mind, among others, that aspects of the present disclosure were conceived.
SUMMARYOne aspect of the present disclosure involves a system and method for inserting video advertisements into multiple video program channels of at least one first video transport stream based on an advertising schedule. A host process may initiate multiple instance processes to execute concurrently on one or more processors, wherein each of the instance processes may be assigned a distinct subset of the multiple video program channels. Each of the instance processes may analyze the first video transport stream to determine advertisement insertion points of the subset of video program channels assigned to the instance process, and may insert at least some of the advertisements into the assigned subset of video program channels based on the advertisement insertion points and the advertising schedule. The multiple video program channels may then be transmitted with the inserted video advertisements in at least one second video transport stream. Other potential aspects of the present disclosure are described in greater detail below.
Exemplary embodiments are illustrated in referenced figures of the drawings. The embodiments and figures disclosed herein are intended to be considered illustrative rather than limiting. The use of the same reference numerals in different drawings indicates similar or identical items.
Aspects of the present disclosure involve a computing system and methodology for inserting advertising, such as local advertising, into a transport stream carrying some form of programming signal such that the programming and the advertising may be provided to a viewer system.
As is described more fully below, the video advertisement insertion system 100, in some examples, may be configured to receive at least one transport stream carrying one or more channels of video programs, to insert video advertisements within the programs (e.g., as replacements for other advertisements or content provided in the at least one transport stream, and then transmit the one or more transport streams with the inserted advertisements by way of a communication network or connection to a television, television set-top box, or other component capable of storing and/or presenting the associated video content. (Generally, in the discussion provided herein, a transport stream carrying video information may be referred to as a “video transport stream,” although such a transport stream may carry audio information and other forms of data in addition to video information.) Further, in some embodiments, each of the received channels may be allocated or assigned to a particular one of the multiple instance processes 104 executing concurrently or simultaneously on the video advertisement insertion system 100. Consequently, various tasks performed during the advertisement insertion process, including, but not limited to, management of memory allocated to each of the instance processes 104, may occur on a process-by-process basis, thus decomposing such tasks into smaller, shorter tasks, thereby possibly facilitating a shorter response time to service other, more time-critical or time-intensive tasks, such as the filling and emptying of data buffers carrying data associated with the input transport streams 130 and the output transport streams 132, or executing garbage collection routines. These and other advantages will be recognized from the discussion set out herein.
Continuing with
In one embodiment, the one or more input transport streams 130 are received from a programming source, such as a terrestrial or cable television station or network, a satellite television distribution system, or a cable television head-end. The one or more output transport streams 132 may be transmitted to a cable television head-end or other television distribution system, or more directly to one or more electronic devices capable of decoding and/or displaying the video and/or audio content of the output transport streams 132, such as, for example, televisions, television set-top boxes, smartphones, desktop computers, laptop computers, tablet computers, and gaming systems. The transport stream interface 118, in one example, may include interfacing circuitry for Asynchronous Serial Interface (ASI) over a coaxial connection and for Internet Protocol (IP) over Ethernet (e.g., Gigabit Ethernet) connections, although the transport stream interface 118 may be configured for compatibility with other networks or communication protocols. Further, the transport stream interface 118 may include one or more physical ports by which wired or wireless connections to a communication network may be made to receive and transmit the transport streams 130, 132. Additionally, such physical ports may be bidirectional so that one or more of the input transport streams 130 and the output transport streams 132 may be received or transmitted using the same physical port.
In addition, the transport stream interface 118 may include or be associated with one or more input buffers to receive and store data from the input transport streams 130, as well as one or more output buffers to store and subsequently transfer data for the output transport streams 132.
The network interface 120 may be configured to communicate with a traffic and billing server 140 that may provide, for example, video advertisement scheduling information and a plurality of video advertisements to be inserted into video programs or channels of the input transport streams 130. The scheduling information, in one embodiment, may include information for each video advertisement regarding particular acceptable days and/or times during which the video advertisement may be shown, as well as the particular program channel into which the video advertisement is to be inserted. In other examples, the scheduling information may include particular limitations or restrictions regarding the scheduling of the advertisement, such as a particular geographical area within in which the advertisement is to be viewed.
In other examples, the network interface 120 may be coupled to other servers or systems instead of, or in addition to, the traffic and billing server 140. In some examples, the network interface 120 may provide information to the traffic and billing server 140 as to which advertisements were actually inserted and distributed into the output transport streams 132 for presentation to viewers so that the advertisers may be billed appropriately.
In some examples, the network interface 120 may be an Ethernet connection (e.g., a Gigabit Ethernet connection) for communicating over a local area network (LAN), a wide area network (WAN) (e.g., the Internet), or another network. In one example, the network interface 120 may be integrated within the transport stream interface 118 so that one or more physical connections, such as an Ethernet connection, may be employed for the transport streams 130, 132, the video advertisements, and the scheduling information.
The data storage unit 122 may be configured to store information included within, or generated from, the input transport streams 130 and the output transport streams 132. Also stored in the data storage unit 122 may be the advertisements and/or the scheduling information retrieved from the traffic and billing server 140 via the network interface 120, in some embodiments. The data storage unit 122 may include one or more types of data storage media, including, but not limited to, hard disk drive media, optical disk media, flash memory, DRAM, SRAM, and other types of recordable non-volatile and volatile memory. Also, while the data storage unit 122 is depicted in
Executing on one or more hardware processors (not shown in
After execution initiation, the host process 102 may initiate the instance processes 104, which may be client instances of the host process 102 that execute concurrently or simultaneously with each other, and with the host process 102. In one example, an equal or near-equal number of different or distinct program channels of the one or more input transport streams 130 may be assigned to each of the instance processes 104 to distribute the processing of the program channels substantially evenly across the instance processes 104. In other examples in which some of the program channels may require more processing than other (e.g., high definition program channels, sports channels, and action movie channels), fewer such program channels may be assigned to an instance process 104 compared to channels carrying less-demanding content. In one example, the host process 102 may communicate with the instance processes 104 using named pipes or other inter-process communication mechanisms.
In one embodiment, the instance processes 104 may employ a plurality of individual execution threads configured to execute concurrently or simultaneously with other execution threads of the same instance process 104 or of other instance processes 104. Each of the instance processes 104 may perform several operations, possibly by way of the execution threads, including, but not limited to, de-multiplexing the input transport streams 130 into individual channel streams, analyzing the individual channel streams to determine potential advertisement insertion points in the individual channels, inserting video advertisements at the determined insertion points of the channels, and re-multiplexing the channels into output transport streams 132 for transmission via the transport stream interface 118. In some examples, one or more of these operations may be performed by way of individual modules such as a transport stream analysis module 112 and a video advertisement insertion module 114. The operation of these modules 112, 114 is discussed further with respect to
In one implementation, the operating system that executes atop the hardware of the video advertisement insertion system 100 may be a desktop edition, server edition, or other form of Microsoft® Windows®. Accordingly, the host process 102 may be initiated as a Windows® service that starts once the operating system begins execution, and may operate in the background as long as the operating system continues to operate. Once executing, the host process 102 may then initiate each of the instance processes 104 as client processes of the host process 102. In one example, the instance processes 104 may be not executed as Windows® services, but may communicate with the other portions of the system 100 via the host process 102.
Continuing with this same example, the host process 102 and the instance processes 104 may be configured to operate within the Microsoft® Windows® .NET Framework, which provides substantial support by way of preexisting code libraries for various common services, such as exception handling and memory management. Accordingly, each instance process 104 may access and implement functions related to these services, such as garbage collection (e.g., de-allocation of previously allocated, but no longer used, memory in the instance process 104), as they relate to that particular instance process 104. By employing garbage collection, and possibly other functions, on a process-by-process basis, as opposed to across the entire video advertisement insertion system 100, such functions may be decomposed into more frequent, but shorter, tasks, thus possibly reducing response time of the instance processes 104 to attend to time-critical tasks, such as data buffer operations involving the input transport streams 130 and the output transports streams 132. In some examples, a continuous execution time of approximately one second or less for each instance process 104 before relinquishing control to another instance process 104 or the host process 102 facilitates timely buffer data management and other process-related duties. In one example, limiting execution times in such a manner may be facilitated by the host process 102 initiating a sufficient number of instance processes 104 such that each continuous execution of each instance process 104, including garbage collection and other functions associated with that instance process 104, consumes one second or less of time.
To access such functions by way of the .NET Framework, the host process 102 and the instance processes 104 may be written in a programming language that effectively interfaces with the libraries that provide or enhance the functionality discussed above, such as, for example, C# (pronounced “C-sharp”). However, other operating systems, software frameworks, and programming languages providing such functionality may be employed in other embodiments.
In one example, the video advertisement insertion system 100, including the various components described above, may be configured to reside within an enclosure that adheres to a rack-mountable electronics standard, such as the 19-inch rack standard often employed in the electronics industry. In one particular embodiment, the enclosure may be a 4 U (rack unit) rack-mountable chassis.
Each instance process 104, to which a particular subset of the program channels carried on the input transport streams 130 may be assigned, may then process portions of data from the input transport streams 130 that carry those specific channels. For example, the instance process 104 may analyze those input transport streams 132 to determine advertisement insertion points that are available for those channels (operation 206). Based on the determined insertion points, and on the retrieved video advertisement schedule, the instance process 104 may insert the appropriate advertisements into those channels for which the instance process 104 has responsibility (operation 208). Each of the instance processes 104 may perform other functions as well, such as de-multiplexing of the input transport streams 130 into single-channel transport streams for the those channels assigned to the instance process 104, re-multiplexing of the single-channel streams transport streams into the output transport streams 132, memory management (e.g., memory allocation and garbage collection) for the instance process 104, and the like.
After the video advertisements are inserted, the transport stream interface 118 may transmit the program channels with the inserted advertisements as the output transports streams 132 (operation 210).
While the operations 202-210 are depicted as operations performed in a particular sequence, the operations 202-210 may be performed as part of a pipelined operation structure in which the operations 202-210 are performed repeatedly or continually, with the input transport streams 130 and the output transport streams 132 being received and transmitted in a continual manner. Further, each of the operations 206, 208 performed by each of the instance processes 104 may be performed in a concurrent or simultaneous manner on different program channels, or different sets of program channels, possibly by way of individual execution threads running in one or more of the instance processes 104.
An example of the DPI packets conforms to the Society of Cable Telecommunications Engineers 35 (SCTE 35) standard. According to that standard, the DPI packets may define “in” points and “out” points for both the audio and video of the particular program channel, in which an in point indicates a point in the original audio or video packet stream at which the audio or video of the advertisement or other program may start to replace the original audio or video. Conversely, an out point indicates a point in the original audio or video packet stream at which the audio or video of the advertisement or other program ceases its replacement of the original audio or video. The in points and out points may be specified in the DPI packets by way of presentation time stamps (PTSes), which are values of a reference clock (e.g., a 27 megahertz (MHz) reference clock) that are also carried in the audio and video packets of the same program channel. In many cases, DPI packets are received eight to ten seconds ahead of the audio and video packets corresponding to the in points and out points specified in the DPI packets.
Other types of information may be carried in other packet types. For example, one packet type may carry a Program Association Table (PAT) that identifies each of the programs or channels available in its corresponding input transport stream 130 by way of a unique program number. Each identified program or channel may also be associated with a Program Map Table (PMT) carried in other packet types, with the PMT specifying the PIDs for the audio, video, and DPI packets for that program or channel. Based on this information, the instance process 104 to which this channel is assigned may identify and analyze the DPI packets to determine the insertion points (e.g., the in points and out points) for that channel.
As shown in
The instance process 104 may then perform its transport stream analysis 320 to determine the insertion points (e.g., the in points and out points) specified in the DPI packets of each of the single-channel transport streams 312. Using the video advertisements and the video advertisement schedule previously retrieved, the instance process 104 may perform video advertisement insertion 330 on each of the single-channel transport streams 312 based on the determined insertion points. In one example, the instance process 104 selects a video advertisement of an appropriate length that may replace the original video and audio of the single-channel transport stream 312 between an in point and an out point of the single-channel transport stream 312. The insertion of one or more advertisements results in a single-channel transport stream 332 with inserted advertisements for each of the channels assigned to this particular instance process 104.
Each of the instance processes 104 may then perform stream re-multiplexing 340 on the single-channel transports streams 332 that carry the inserted advertisements into one or more multiple-channel transport streams 344, which are the output transport streams 132 transmitted by the transport stream interface 118. In this example, all of the single-channel transports streams 332 are processed and re-multiplexed into one multiple-channel transport stream 344 by a single instance process 104. In other examples, the single-channel transports streams 332 may be generated by multiple instance processes 104, with those processes sharing the particular I/O port that is to carry the multiple-channel transport stream 344 to perform the stream re-multiplexing 340.
Also in this example, instance process 410 includes execution threads 411, 412, and 413; instance process 420 includes execution threads 421, 422, and 423; and instance process 430 includes execution threads 431, 432, and 433. While each instance process 410, 420, and 430 is explicitly depicted as having three execution threads, fewer or greater numbers of threads may be employed in each instance process 410, 420, and 430, and different numbers of threads may be employed in each of the instance processes 410, 420, and 430. Each of the execution threads may be configured to perform one or more particular operations associated with its respective instance process 410, 420, and 430. For example, in the instance process 410, the first thread 411 may perform the de-multiplexing the input transport streams 130 for the channels assigned to the instance process 410, the second thread 412 may perform the re-multiplexing of those channels, and the third thread 413 may perform the transport stream analysis and video ad insertion noted above. Still other threads may perform other operations, such as the grooming and clamping of the transport streams, as mentioned above. In another example, each thread 411, 412, and 413 may perform all operations associated with a particular channel assigned to the instance process 410. Other allocations of duties or operations to each of the threads 411, 412, and 413 may be utilized in other examples.
While the insertion operations discussed above have explicitly been explained as advertisement insertions, the video advertisement insertion system 100, and other embodiments discussed herein, may instead or additionally insert any other type of audio and/or video programming, such as, for example, entire programs of a half-hour in length or longer.
The processor 902 may include one or more internal levels of cache (not shown in
The memory 906 may include one or more memory cards and control circuits (not depicted in
According to one embodiment, the above methods may be performed by the computer system 900 in response to the processor 902 executing one or more sequences of one or more instructions contained in the main memory 906A. These instructions may be read into main memory 906A from another machine-readable medium capable of storing or transmitting information in a form (e.g., software, processing application) readable by a machine (e.g., a computer). Execution of the sequences of instructions contained in the main memory 906A may cause the processor 902 to perform the process operations described herein.
A machine-readable media may take the form of, but is not limited to, non-volatile media and volatile media. Non-volatile media may include a mass storage device 908 and volatile media may include dynamic storage devices. Common forms of machine-readable media may include, but are not limited to, magnetic storage media (e.g. hard disk drive); optical storage media (e.g. Compact Disc Read-Only Memory (CD-ROM) and Digital Versatile Disc Read-Only Memory (DVD-ROM)), magneto-optical storage media; read-only memory (ROM); random access memory (RAM, such as static RAM (SRAM) and dynamic RAM (DRAM)); erasable programmable memory (e.g., erasable programmable read-only memory (EPROM) and electrically erasable programmable read-only memory (EEPROM)); flash memory; or other types of media suitable for storing computer or processor instructions.
Embodiments disclosed herein include various operations that are described in this specification. As discussed above, the operations may be performed by hardware components and/or may be embodied in machine-executable instructions, which may be used to cause a general-purpose or special-purpose processor programmed with the instructions to perform the operations. Alternatively, the operations may be performed by a combination of hardware, software, and/or firmware.
The performance of one or more operations described herein may be distributed among one or more processors, not only residing within a single machine, but deployed across a number of machines. In some examples, the one or more processors or processor-implemented modules may be located in a single geographic location (e.g., within a home environment, an office environment, or a server farm). In other embodiments, the one or more processors or processor-implemented modules may be distributed across a number of geographic locations.
As used herein, the term “or” may be construed in either an inclusive or exclusive sense. Moreover, plural instances may be provided for resources, operations, or structures described herein as a single instance. Additionally, boundaries between various resources, operations, modules, engines, and data stores may be arbitrary, and particular operations are illustrated in a context of specific illustrative configurations. In general, structures and functionality presented as separate resources in the examples configurations may be implemented as a combined structure or resource. Similarly, structures and functionality presented as a single resource may be implemented as separate resources.
While the present disclosure has been described with reference to various embodiments, these embodiments are illustrative, and the scope of the disclosure is not limited to such embodiments. Various modifications and additions can be made to the exemplary embodiments discussed herein without departing from the scope of the disclosure. For example, while the embodiments described above refer to particular features, the scope of this disclosure also includes embodiments having different combinations of features, as well as embodiments that do not include all of the described features. Accordingly, the scope of the disclosure is intended to embrace all such alternatives, modifications, and variations, together with all equivalents thereof.
Claims
1. A system for video advertising insertion, the system comprising:
- a transport stream interface to receive multiple video program channels in at least one first video transport stream;
- a network interface to access an advertising schedule and a plurality of video advertisements;
- a data storage unit to store the advertising schedule and the plurality of video advertisements received via the network interface;
- at least one hardware processor; and
- memory comprising instructions that, when executed by the at least one hardware processor, cause the at least one hardware processor to execute a host process to initiate a plurality of instance processes to execute concurrently, each of the instance processes being assigned a distinct subset of the multiple video program channels, each of the instance processes comprising: a transport stream analysis module to analyze the at least one first video transport stream to determine advertisement insertion points of the distinct subset of the multiple video program channels; and a video advertisement insertion module to insert at least some of the plurality of video advertisements into the distinct subset of the multiple video program channels based on the advertisement insertion points and the advertising schedule;
- the transport stream interface to transmit the multiple video program channels with the inserted video advertisements in at least one second video transport stream.
2. The system of claim 1, each of the instance processes further comprising:
- a memory management facility to de-allocate memory allocated for use by the instance process.
3. The system of claim 1, the video advertisement insertion module to insert the at least some of the plurality of video advertisements by replacing content portions of the distinct subset of the multiple video program channels with the at least some of the plurality of video advertisements.
4. The system of claim 1, the inserted video advertisements comprising video advertisements for a local audience, the content portions of the distinct subset of the multiple video program channels comprising video advertisements for a national audience.
5. The system of claim 1, each of the at least one first video transport stream and the at least one second video transport stream comprising Motion Picture Experts Group 2 (MPEG-2) data or MPEG-4 data.
6. The system of claim 1, the host process executing as a background service of an operating system executing on the at least one hardware processor, and the host process initiating the plurality of instance processes without adding additional background services.
7. The system of claim 1, at least one of the plurality of instance processes comprising a plurality of execution threads to execute concurrently within the at least one of the plurality of instance processes, the plurality of execution threads comprising at least one of the transport stream analysis module and the video advertisement insertion module.
8. The system of claim 1, the transport stream interface comprising:
- at least one input buffer to receive the at least one first video transport stream;
- a de-multiplexer to separate the at least one first video transport stream into individual video program channel streams;
- a multiplexer to join the individual video program channel streams with the inserted video advertisements into the at least one second video transport stream; and
- at least one output buffer to transfer the at least one second video transport stream.
9. The system of claim 1, the host process and the plurality of instance processes communicating therebetween using named pipes.
10. The system of claim 1, the transport stream interface comprising an Asynchronous Serial Interface (ASI).
11. The system of claim 1, the transport stream interface comprising an Internet Protocol (IP) interface.
12. The system of claim 1, wherein the host process is configured to initiate a number of the plurality of instance processes sufficient to limit a continuous execution time of each of the plurality of instances to less than or equal to one second.
13. The system of claim 5, the transport stream analysis module to detect digital program insertion (DPI) packets to determine the advertisement insertion points.
14. The system of claim 11, the transport stream interface to receive the at least one first video transport stream and to transmit the at least one second video transport stream via IP multicast, the at least one first video transport stream being associated with a first IP multicast group address, and the at least one second video transport stream being associated with a second IP multicast group address.
15. The system of claim 14, further comprising:
- a secondary device comprising the transport stream interface, the network interface, the data storage unit, the at least one hardware processor, and the memory;
- the transport stream interface of the secondary device further to receive at least one third video transport stream from a primary device via the second IP multicast group address;
- at least one of the host process and the plurality of instance processes of the secondary device to detect an interruption of the at least one third video transport stream from the primary device; and
- the transport stream interface of the secondary device to transmit the multiple video programs with the inserted video advertisements in the at least one second video transport stream via the second IP multicast group address in response to the detected interruption.
16. The system of claim 15, wherein:
- the at least one of the host process and the plurality of instance processes of the secondary device is further to transmit a message to the primary device in response to the detected interruption to cease transmission of the at least one third video transport stream.
17. The system of claim 15, wherein:
- the at least one of the host process and the plurality of instance processes of the secondary device is further to detect a presence of the at least one third video transport stream from the primary device; and
- the transport stream interface of the secondary device is further to cease transmission of the at least one second video transport stream in response to the detected presence.
18. The system of claim 15, wherein:
- the secondary device is further to receive a message from the primary device; and
- the transport stream interface of the secondary device is further to cease transmission of the at least one second transport stream in response to the message.
19. A method of inserting video advertising, comprising:
- receiving multiple video program channels in at least one first video transport stream;
- accessing an advertising schedule and a plurality of video advertisements;
- executing a host process on at least one hardware processor, the host process to initiate a plurality of instance processes to execute concurrently on the at least one hardware processor, each of the instance processes being assigned a distinct subset of the multiple video program channels, each of the instance processes to: analyze the at least one first video transport stream to determine advertisement insertion points of the distinct subset of the multiple video program channels; and insert at least some of the plurality of video advertisements into the distinct subset of the multiple video program channels based on the advertisement insertion points and the advertising schedule; and
- transmitting the multiple video program channels with the inserted video advertisements in at least one second video transport stream.
20. The method of claim 19, each of the instance processes further to de-allocate memory allocated for use by the instance process.
21. A non-transitory computer-readable storage medium comprising instructions that, when executed by at least one hardware processor of a machine, cause the machine to perform operations comprising:
- receiving multiple video program channels in at least one first video transport stream;
- accessing an advertising schedule and a plurality of video advertisements;
- executing a host process to initiate a plurality of instance processes, each of the instance processes being assigned a distinct subset of the multiple video program channels, each of the instance processes to: analyze the at least one first video transport stream to determine advertisement insertion points of the distinct subset of the multiple video program channels; and insert at least some of the plurality of video advertisements into the distinct subset of the multiple video program channels based on the advertisement insertion points and the advertising schedule; and
- transmitting the multiple video program channels with the inserted video advertisements in at least one second video transport stream.
20070240602 | October 18, 2007 | Dion |
20110096845 | April 28, 2011 | Mamidwar |
20150304196 | October 22, 2015 | Sun |
Type: Grant
Filed: Mar 11, 2015
Date of Patent: Apr 11, 2017
Patent Publication Number: 20160269761
Assignee: ADGORILLA LLC (Littleton, CO)
Inventor: Daniel Scott Ryan (Littleton, CO)
Primary Examiner: Michael Hong
Application Number: 14/644,329
International Classification: H04N 5/445 (20110101); H04N 21/234 (20110101);