Patent Publication Number: US-2013235884-A1

Title: Mixed serial and parallel stream channel bonding architecture

Description:
CROSS REFERENCE TO RELATED APPLICATIONS 
     This application claims the benefit of and incorporates by reference: U.S. Provisional Application Ser. No. 61/663,878, filed Jun. 25, 2012, entitled “Channel Bonding-Audio-Visual Broadcast” and Provisional Application Ser. No. 61/609,339, filed Mar. 11, 2012, entitled “Method and Apparatus for Using Multiple Physical Channels for Audio-Video Broadcasting and Multicasting.” 
    
    
     TECHNICAL FIELD 
     This disclosure relates to audio and video communication techniques. In particular, this disclosure relates to channel bonding for channels with mixed serial and parallel streams. 
     BACKGROUND 
     Rapid advances in electronics and communication technologies, driven by immense private and public sector demand, have resulted in the widespread adoption of smart phones, personal computers, internet ready televisions and media players, and many other devices in every part of society, whether in homes, in business, or in government. These devices have the potential to consume significant amounts of audio and video content. At the same time, data networks have been developed that attempt to deliver the content to the devices in many different ways. Further improvements in the delivery of content to the devices will help continue to drive demand for not only the devices, but for the content delivery services that feed the devices. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The innovation may be better understood with reference to the following drawings and description. In the figures, like reference numerals designate corresponding parts throughout the different views. 
         FIG. 1  shows an example of a content delivery architecture that employs channel bonding. 
         FIG. 2  shows an example of logic for content delivery using channel bonding. 
         FIG. 3  shows an example of a content delivery architecture that employs channel bonding. 
         FIG. 4  shows an example of logic for content delivery using channel bonding. 
         FIG. 5  shows a timing example. 
         FIG. 6  shows an example of a content delivery architecture that employs channel bonding. 
         FIG. 7  shows an example of logic for content delivery using channel bonding. 
         FIG. 8  shows an example implementation of a distributor. 
         FIG. 9  shows an example implementation of a collator. 
         FIG. 10  shows an example of a content delivery architecture that performs channel bonding below the transport layer, e.g., at the data-link layer. 
         FIG. 11  shows an example of channel bonding at the data-link layer. 
         FIG. 12  shows an example of channel bonding at the data-link layer. 
         FIG. 13  shows an example of logic that a data-link layer may implement for channel bonding at the data-link layer. 
         FIG. 14  shows an example of logic that a data-link layer may implement for channel debonding at the data-link layer. 
         FIG. 15  shows an example variant of the content delivery architecture of  FIG. 6 . 
         FIG. 16  shows an example variant of the content delivery architecture of  FIG. 7 . 
         FIG. 17  is a schematic of a set top box having bonded serial and parallel channels. 
         FIG. 18  is a schematic of a channel bonding system for bonding serial and parallel channels. 
     
    
    
     DETAILED DESCRIPTION 
       FIG. 1  shows an example content delivery architecture  100 . The architecture  100  delivers data (e.g., audio streams and video programs) from a source  102  to a destination  104 . The source  102  may include satellite, cable, or other media providers, and may represent, for example, a head-end distribution center that delivers content to consumers. The source  102  may receive the data in the form of Motion Picture Expert Group 2 (MPEG2) Transport Stream (TS) packets  128 , when the data is audio/visual programming, for example. The destination  104  may be a home, business, or other location, where, for example, a set top box processes the data sent by and received from the source  102 . 
     The source  102  may include a statistical multiplexer  106  and a distributor  108 . The statistical multiplexer  106  helps make data transmission efficient by reducing idle time in the source transport stream (STS)  110 . In that regard, the statistical multiplexer  106  may interleave data from multiple input sources together to form the transport stream  110 . For example, the statistical multiplexer  106  may allocate additional STS  110  bandwidth among high bit rate program channels and relatively less bandwidth among low bit rate program channels to provide the bandwidth needed to convey widely varying types of content at varying bit rates to the destination  104  at any desired quality level. Thus, the statistical multiplexer  106  very flexibly divides the bandwidth of the STS  110  among any number of input sources. 
     Several input sources are present in  FIG. 1 : Source  1 , Source  2 , Source n. There may be any number of such input sources carrying any type of audio, video, or other type of data (e.g., web pages or file transfer data). Specific examples of source data include MPEG or MPEG2 TS packets for digital television (e.g., individual television programs or stations), and 4K×2K High Efficiency Video Coding (HVEC) video (e.g., H.265/MPEG-H) data, but the input sources may provide any type of input data. The source data (e.g., the MPEG 2 packets) may include program identifiers (PIDs) that indicate a specific program (e.g., which television station) to which the data in the packets belongs. 
     The STS  110  may have a data rate that exceeds the transport capability of any one or more communication links between the source  102  and the destination  104 . For example, the STS  110  data rate may exceed the data rate supported by a particular cable communication channel exiting the source  102 . To help deliver the aggregate bandwidth of the STS  110  to the destination  104 , the source  102  includes a distributor  108  and modulators  130  that feed a bonded channel group  112  of multiple individual communication channels. In other words, the source  102  distributes the aggregate bandwidth of the STS  110  across multiple outgoing communication channels that form a bonded channel group  112 , and that together provide the bandwidth for communicating the data in the STS  110  to the destination  104 . 
     The distributor  108  may be implemented in hardware, software, or both. The distributor  108  may determine which data in the STS  110  to send on which communication channel. As will be explained in more detail below, the distributor  108  may divide the STS  110  into chunks of one or more packets. The chunks may vary in size over time, based on the communication channel that will carry the chunk, the program content in the chunk, or based on any other desired chunk decision factors implemented in the distributor  108 . The distributor  108  may forward any particular chunk to the modulator for the channel that the distributor  108  has decided will convey that particular chunk to the destination  104 . 
     In that regard, the multiple individual communication channels within the bonded channel group  112  provide an aggregate amount of bandwidth, which may be less than, equal to, or in excess of the aggregate bandwidth of the STS  110 . As just one example, there may be three 30 Mbs physical cable channels running from the source  102  to the destination  104  that handle, in the aggregate, up to 90 Mbs. The communication channels in the bonded channel group  112  may be any type of communication channel, including dial-up (e.g., 56 Kbps) channels, ADSL or ADSL 2 channels, coaxial cable channels, wireless channels such as 802.11a/b/g/n channels or 60 GHz WiGig channels, Cable TV channels, WiMAX/IEEE 802.16 channels, Fiber optic, 10 Base T, 100 Base T, 1000 Base T, power lines, or other types of communication channels. 
     The bonded channel group  112  travels to the destination  104  over any number of transport mechanisms  114  suitable for the communication channels within the bonded channel group  112 . The transport mechanisms  144  may include physical cabling (e.g., fiber optic or cable TV cabling), wireless connections (e.g., satellite, microwave connections, 802.11 a/b/g/n connections), or any combination of such connections. 
     At the destination  104 , the bonded channel group  112  is input into individual channel demodulators  116 . The channel demodulators  116  recover the data sent by the source  102  in each communication channel. A collator  118  collects the data recovered by the demodulators  116 , and may create a destination transport stream (DTS)  120 . The DTS  120  may be one or more streams of packets recovered from the individual communication channels as sequenced by the collator  118 . 
     The destination  104  also includes a transport inbound processor (TIP)  122 . The TIP  122  processes the DTS  120 . For example, the TIP  122  may execute program identifier (PID) filtering for each channel independently of other channels. To that end, the TIP  122  may identify, select, and output packets from a selected program (e.g., a selected program ‘j’) that are present in the DTS  120 , and drop or discard packets for other programs. In the example shown in  FIG. 1 , the TIP  122  has recovered program ‘j’, which corresponds to the program originally provided by Source  1 . The TIP  122  provides the recovered program to any desired endpoints  124 , such as televisions, laptops, mobile phones, and personal computers. The destination  104  may be a set top box, for example, and some or all of the demodulators  116 , collator  118 , and TIP  122  may be implemented as hardware, software, or both in the set top box. 
     The source  102  and the destination  104  may exchange configuration communications  126 . The configuration communications  126  may travel over an out-of-band or in-band channel between the source  102  and the destination  104 , for example in the same or a similar way as program channel guide information, and using any of the communication channel types identified above. One example of a configuration communication is a message from the source  102  to the destination  104  that conveys the parameters of the bonded channel group  112  to the destination  104 . More specifically, the configuration communication  126  may specify the number of communication channels bonded together; identifiers of the bonded communication channels; the types of programs that the bonded communication channels will carry; marker packet format; chunk, program packet, or marker packet size; chunk, program packet, or marker packet PID or sequence number information, or any other chunk or bonding configuration information that facilitates processing of the bonded channel group  112  at the destination  104 . One example of a configuration communication message from the destination  104  to the source  102  is a configuration communication that specifies the number of communication channels that the destination  104  may process as eligible bonded channels; identifiers of the eligible bonded channels; status information concerning status of the demodulators  116 , e.g., that a demodulator is not functioning and that its corresponding communication channel should not be included in a bonded channel group; channel conditions that affect bit rate or bandwidth; or any other information that the source  102  and the distributor  108  may consider that affects processing of the data from the sources into a bonded channel group. 
       FIG. 2  shows an example of logic  200  for content delivery using channel bonding that the architecture  100  described above may implement in hardware, software, or both. Additional detailed examples are provided below, particularly with regard to marker packets and other options. 
     In  FIG. 2 , input sources receive program data ( 202 ). The program data may be received from any content provider, and may include any desired audio, visual, or data content, including cable television programming, streaming music, file transfer data, as just three examples. The input sources provide the program data to the statistical multiplexer  106  ( 204 ), which multiplexes the program data to generate the source transport stream (STS)  110  ( 206 ). 
     The source  102  provides the STS  110  to the distributor  108  ( 208 ). The distributor  108  reads bonding configuration parameters ( 210 ). The bonding configuration parameters may specify the number of communication channels in the bonded channel group  112 , the communication channels that may be included in the bonded channel group  112 , the type of communication channels that may be included in the bonding channel group  112 , the program sources eligible for bonding, when and for how long communication channels and program sources are available for channel bonding, bonding adaptation criteria, and any other parameters that may influence how and when the distributor  108  pushes program data across the communication channels in the bonded channel group  112 . The distributor  108  sends the program data to the communication channels in the bonded channel group  112  ( 212 ). Specific examples of how the distributor  108  accomplishes this are provided below. The source  102  thereby communicates program data to the destination  104  across the multiple communication channels in the bonded channel group  112  ( 214 ). 
     At the destination  104 , the demodulators  116  receive the program data over the communication channels ( 218 ). The demodulators  116  provide the recovered program data (optionally after buffering) to the collator  118 . The collator  118  analyzes group information, sequence information, PIDs, and any other desired information obtained from the data packets arriving on the communication channels and creates a destination transport stream (DTS)  120  from the recovered program data ( 220 ). The DTS  120  may convey the program packets in the same sequence as the STS  110 , for example. 
     The collator  118  provides the DTS  120  to the TIP  122  ( 222 ). The TIP  122  reads data selection parameters ( 224 ). The data selection parameters may specify, for example, which audio/visual program is desired, and may be obtained from viewer input, from automated selection programs or processes (e.g., in a digital video recorder), or in other ways. Accordingly, the TIP  122  filters the DTS  120  to recover the program packets that match the data selection parameters (e.g., by PID filtering) ( 226 ). The TIP  122  thereby generates a content output that includes an output packet stream for the selected program. The TIP  122  delivers the generated content to any desired device  124  that consumes the content, such as televisions, smart phones, personal computers, or any other device. 
     Several channel bonding processing options are discussed next. Some options make reference to marker packets (MPs) inserted into the data streams going to the destination  104  over the communication channels. The marker packets may be MPEG2 TS packets, for example, with an identifier that flags them as MPs. In the first option, the distributor  108  adds marker packets on a per-channel basis, for example in a round-robin manner. In the second option, the distributor  108  generates and adds markers on a per-chunk basis, for example in a round-robin manner at chunk boundaries. In the third option, when packets from the same program will be routed to multiple communication channels, each packet receives a program ID and a sequence ID, and no marker packets are needed. In the fourth option, spare bits in network frames defined below the network layer, e.g., at the data-link layer, carry channel bonding information to the source  104 . 
     Regarding the first option,  FIG. 3  shows another example of a content delivery architecture  300  that employs channel bonding. In the architecture  300 , a marker packet (MP) source  302  feeds MPs to the statistical multiplexer  106 . The MP source  302  may provide marker packets at any frequency. For example, the MP source  302  may provide a marker packet for each communication channel in the bonded channel group  112  for every ‘n’ non-marker packets received from the sources, every ‘k’ ms, or at some other time or packet spacing frequency. The time or packet spacing, ‘n’ or ‘k’ may take any desired value, e.g., from n=1 packet to tens of thousands of packets, or k=1 ms to 1 second. In other implementations, the distributor  108  generates the MPs, rather than receiving them in the STS  110 . 
     Fewer marker packets consume less channel bandwidth, leaving more room for program data. However, more marker packets increase the ability of the destination  104  to adapt to changes in the program data, including allowing the collator  108  to more quickly synchronize the multiple data streams across the bonded channel group  112 , allowing faster program channel changes through the TIP  122 , and facilitating faster adaptation to changes in the configuration of the bonded channel group  112 . Marker packet insertion may vary depending on any desired parameters. Examples of such parameters include available buffer sizes; target, average, or worst case recovery time for recovering from transmission errors or other transmission issues; target program channel change latency or other types of latency; and target program frame size. 
     In  FIG. 3 , the distributor  108  pushes packets to the modulators  130  on a round-robin basis, starting with any desired modulator  130 . More specifically, the distributor  108  may communicate packets on a round-robin basis to each communication channel in the bonded channel group  112 , one packet at a time. In other implementations described below, the round-robin distribution may be done n-packets at a time, where ‘n’ is greater than 1. However, for the example shown in  FIG. 3 , the distributor  108  pushes one packet at a time in a round-robin manner across the communication channels that compose the bonded channel group  112 . Accordingly, given the example STS  110  packet stream of {MP-0, MP-1, MP-2, 1-0, 1-1, 2-1, 2-2, n-0}, the distributor  108  pushes: 
     MP-0 to channel 1, MP-1 to channel 2, MP-2 to channel 3; then 
     pkt 1-0 to channel 1, pkt 1-1 to channel 2, pkt 2-1 to channel 3; then 
     pkt 2-2 to channel 1, pkt n-0 to channel 2, and so on. 
     The MP source  302  may provide MPs to the statistical multiplexer  106  at a selected priority level, such as a highest available priority level, or a higher priority level than any other packets arriving from the program sources. Furthermore, the number of MPs in a set of MPs may match the number of communication channels in the bonded channel group  112 . For example, when there are seven (7) communication channels in the bonded channel group  112 , the MP source  302  may provide seven highest priority MPs to the statistical multiplexer  106 . The statistical multiplexer  106  may then output the high priority MPs immediately next in the STS  110 , so that the group of seven MPs arrive in sequence at the distributor  108 . As a result of the packet-by-packet round-robin distribution, one of each of the seven marker packets correctly is pushed to one of the seven communication channels in the bonded channel group  112  to flag a stream of program packets that follow each MP. 
     The statistical multiplexer  106  or the distributor  108  or the MP source  302  may give the MPs a special identifier, such as a unique PID (e.g., MARKER_PID) that flags the MPs as marker packets. Any other desired content may be present in the MPs. As examples, the MPs may include a channel number and group number. The channel number may identify the communication channel that sent that MP (e.g., channel 0, 1, or 2 for a bonded channel group  112  of three communication channels). The channel number provides a type of sequence number that identifies, the first, second, third, and so on, communication channel in sequence to which the distributor  108  has sent program packets. The channel number, in other words, identifies a bonded channel sequence of distribution of program packets to the communication channels in the bonded channel group. 
     The group number may identify which set of MPs any particular MP belongs to, and the source  102  may increment the group number with each new set of MPs (e.g., every three MPs when there are three communication channels in the bonded channel group  112 ). The group number may also facilitate packet alignment, when, for example, jitter or skew is larger than the gap between inserted packets. 
     Note that the distributor  108  need not have any special knowledge of the MPs. Instead, the distributor  108  may push packets on a round-robin basis to the communication channels, without knowing or understanding what types of packets it is sending. However, in other implementations, the distributor  108  may in fact analyze and manipulate the packets that it distributes, to insert or modify fields in the MPS, for example. Additionally, the distributor  108  may generate the MPs, rather than receiving them in the STS  110 . 
     The destination  104  processes the marker packets, and may align packets in a fixed order from the demodulators  116  to form the DTS  120 . The destination  104  may include First In First Out (FIFO) buffers  304 , or other types of memory, to counter jitter/skew on the communication channels, and the resultant mis-alignment in reception of packets across the various communication channels. The FIFOs  304  may be part of the collator  118  or may be implemented separately. A FIFO may be provided for each communication channel, to provide a set of parallel buffers on the receive side, for example. 
     At the destination  104 , the collator  118  may drop all packets before a MP from each channel is received. The collator  118  checks the group number of the marker packet in each channel, and drops packets until the collator  118  has found marker packets with matching group numbers on each communication channel. When the group numbers do not match, this may be an indicator to the collator  118  that the skew is larger than the gap between marker packets. 
     The channel number in the marker packets specifies the sequence of communication channels from which the collator  118  will obtain packets. The collator  118  obtains packets in a round-robin manner that matches the round-robin distribution at the source  102 . In an example with three communication channels in the bonded channel group  112 , the collator  118  may start by obtaining a packet from the communication channel carrying MP sequence number zero, then moving to the communication channel carrying MP sequence number one and obtaining a packet, then moving to the communication channel carrying MP sequence number two and obtaining a packet, then back to the sequence number zero communication channel in a round-robin manner. The collator  118  thereby produces a DTS  120  that corresponds to the STS  110 . The TIP  122  may then extract the selected program from the DTS  120 . 
       FIG. 4  shows an example of logic  400  for content delivery using channel bonding that may be implemented in hardware, software, or both in the example architecture  300  described above. Input sources receive program data ( 402 ), and in addition, a MP source  302  may provide MPs ( 404 ). The input sources and MP source provide the program data and the MPs to the statistical multiplexer  106  ( 406 ), which multiplexes the program data and MPs to generate the source transport stream (STS)  110  ( 408 ). 
     In particular, the MPs may have a high priority, so that the statistical multiplexer  106  inserts them into the STS  110  sequentially without gaps before other program data packets. The STS  110  is provided to the distributor  108  ( 410 ). The distributor  108  reads bonding configuration parameters ( 412 ). The bonding configuration parameters may specify that the distributor  108  should take the round-robin distribution approach, and may specify round-robin distribution parameters. Examples of such parameters include the round-robin distribution chunk size, e.g., ‘r’ packets at a time per communication channel (e.g., y=1), in what situations the distributor  108  should execute the round-robin technique, or any other round-robin parameter. As noted above, the bonding configuration parameters may also specify the number of communication channels in the bonding channel group  112 , the communication channels that may be included in the bonding channel group  112 , the type of communication channels that may be included in the bonding channel group  112 , the program sources eligible for bonding, when and for how long communication channels and program sources are available for channel bonding, and any other parameters that may influence how the distributor  108  pushes program data across the communication channels in the bonded channel group  112 . 
     The distributor  108  pushes the program data to the communication channels in the bonded channel group  112  ( 414 ). The source  102  thereby communicates program data to the destination  104  across the multiple communication channels in the bonded channel group  112  ( 416 ). 
     More particularly, the distributor  108  may push the program packets to the communication channels in round-robin manner. In one implementation, the round-robin approach is a one packet at a time approach. In other words, the distributor  108  may take each packet (when ‘r’=1) from the STS  110  and push it to the next communication channel in sequence. As such, the in-order sequence of MPs from the STS  110  is distributed one MP per communication channel, and is followed by one or more program packets. The MPs thereby effectively flag for the destination  104  the program packets that follow the MPs. After a predetermined number of program packets, the MP source provides another group of MPs that are then distributed across the communication channels, and the cycle repeats. 
     At the destination  104 , the demodulators  116  receive the program data over the communication channels ( 420 ). The demodulators  116  provide the recovered program data to buffers (e.g., the FIFOs  304 ) to help address jitter/skew ( 422 ) on the communication channels. The buffered data is provided to the collator  118 , which may pull packets from the buffers to synchronize on MPs. The collator  118  analyzes group information, sequence information, PIDs, and any other desired information obtained from the MPs and program packets to synchronize on MPs. The synchronization may include finding sequential MPs of the same group number across each communication channel in the bonded channel group  112 . The collator  118  may then creates a destination transport stream (DTS)  120  from the recovered program data ( 424 ) by adding packets to the DTS  120  in a round-robin manner across the communication channels in the bonded channel group  112 , going in order specified by the channel numbers specified in the MPs. The DTS  120  may convey the program packets in the same sequence as the STS  110 , for example. 
     The collator  118  provides the DTS  120  to the TIP  122  ( 426 ). The TIP  122  reads channel selection parameters ( 428 ). The channel selection parameters may specify, for example, which program is desired, and may be obtained from viewer input, from automated selection programs or processes (e.g., in a digital video recorder), or in other ways. Accordingly, the TIP  122  filters the DTS  120  to recover the program packets that match the channel selection parameters (e.g., by PID filtering) ( 430 ). The TIP  122  thereby generates a content output that includes an output packet stream for the selected program. The TIP  122  delivers the generated content to any desired device  124  that consumes the content, such as televisions, smart phones, personal computers, or any other device. 
       FIG. 5  shows a timing example  500  which shows that in some implementations, the source  102  may address transmit clock variations in the modulators  130 .  FIG. 5  shows transmit buffers  502 , each of which may provide some predetermined depth, such as a depth at least that of the channel timing variation (e.g., 200 ms). As one example, the communication channels may be expected to have the same nominal payload rates, e.g., 38.71 Mb/s. Further, assume that the transmit clock in each modulator is independent, and can vary by plus or minus 200 ppm. 
     Thus, in the worst case, two channels in a bonded channel group may have a clock difference of 400 ppm. As shown in the example in  FIG. 5 , the timing different from channel 1 to channel 2 is 200 ppm, and the timing difference between channel 1 and channel ‘m’ is 400 ppm. The timing difference of 400 ppm may amount to as much as one 188 byte MPEG2 TS packet every 2500 outgoing packets. 
     Accordingly, the source  102  may insert a compensation packet (which may have NULL content) on channel ‘m’ every 2500 packets to cover the extra outgoing packet, and also insert a compensation packet on channel 2 every 5000 packets for the same reason. The compensation packet may appear, for example, just prior to the MP, or anywhere else in the outgoing data stream. The destination  104  may identify and discard compensation packets (or any other type of jitter/skew compensation packet). 
     The source  102  may implement a buffer feedback  504 . The buffer feedback  504  informs the distributor  108  about buffer depths in the transmit buffers  502 . When the buffers run empty, or at other times, the distributor  108  may insert compensation packets, e.g., before MPs. 
       FIG. 6  shows another example of a content delivery architecture  600  that employs channel bonding. In this second option, the architecture  600  includes a distributor  108  that sends data over the communication channels in communication units called chunks (but any other term may refer to the communication units). The chunks may include one or more packets from any of the program sources. For example, a chunk may be 1 packet, 10 packets, 100 packets, 27 packets, 10,000 packets, 100 ms of packets, 20 ms of packets, 30 ms of video data, 5 s of audio data, or any other number or timing of packets or audio/visual content. 
     The distributor  108  may use the same or different chunk size for any of the communication channels. Furthermore, the distributor  108  may change the chunk size at any time, in response to an analysis of any desired chunk size criteria. One example of a chunk size criteria is desired channel change speed at the destination  104 . As the number of packets in a chunk increases, the destination  104  may need to drop more packets before reaching the next chunk boundary, finding the matching MPs, and being able to synchronize to the received communication channels. The chunk size may also depend on compressed video rate or frame size, as well as target, average, or worst case recovery time for recovering from transmission errors or other transmission issues. 
     In the example in  FIG. 6 , the statistical multiplexer  106  receives program packets from input sources  1  ‘n’. The program packets may be MPEG2 TS packets, or any other type of packet. The statistical multiplexer  106  creates a STS  110  from the program packets, and the STS  110  therefore has a particular sequence of packets multiplexed into the STS  110  from the various input sources according to the statistical properties of the program streams. 
     For the purposes of illustration,  FIG. 6  shows the first six chunks that the distributor  108  has decided to send over the communication channels. In particular, the first three chunks are two-packet chunks  602 ,  604 , and  606 . The next two chunks are one-packet chunks  608  and  610 . The next chunk is a two-packet chunk  612 . 
     The distributor  108  generates MPs that precede the chunks. Alternatives are possible, however, and some are described below with respect to  FIGS. 15 and 16 . The distributor  108  may communicate the MPs and the chunks (e.g., in a round-robin manner) across the communication channels. In the example of  FIG. 6 , the distributor  108  sends a MP (e.g., MP-0, MP-1, and MP-2) to each communication channel, followed by a two-packet chunk behind MP-0, MP-1, and MP-2, in round-robin sequence: channel 1, channel 2, channel m, and then returning to channel 1. The distributor  108  may start the sequence with any particular communication channel. 
     As is shown in  FIG. 6 , the communication channels receive MPs and chunks in round-robin manner starting with channel  1  as follows: 
     Channel 1: MP-0; Channel 2: MP-1; Channel 3: MP-2 
     Channel 1: chunk  602 ; Channel 2: chunk  604 ; Channel 3: chunk  606   
     Channel 1: MP-4; Channel 2: MP-5; Channel 3: MP-6 
     Channel 1: chunk  608 ; Channel 2:chunk  610 ; Channel 3: chunk  612   
     Because chunk boundaries are marked with MPs, the distributor  108  may insert compensation packets (e.g., NULL packets) without affecting the channel bonding. In other words, each communication channel may have its own unique payload rate. Furthermore, MPEG2 TS corruption during transmission does not affect other packets. 
     Each MP may include a channel number and a group number, as described above. The channel and group numbers may take a wide variety of forms, and in general provide sequence indicators. Take the example where the chunk size is 100 packets and there are three communication channels A, B, and C, with the distributor  108  proceeding in this order: C, B, A, C, B, A, . . . . The first set of MPs that come before the first 100 packet chunks may each specify group number zero. Within group zero, the first MP on communication channel C has a channel number of zero, the second MP on communication channel B has a channel number of one, and the third MP on the communication channel A has a channel number of two. For the next group of chunks of 100 packets, the MP group number for the next three MPs may increment to one, and the channel numbers run from zero to two again. 
     At the destination  104 , the demodulators  116  receive the MPs and chunks from each communication channel. Again, individual FIFOs  204  may be provided to help compensate for jitter and skew. 
     The collator  118  receives the MPs, and synchronizes on the received data streams when the collator  118  finds MPs of the same group number and in sequence across the communication channels that are part of the bonded channel group  112 . Once the collator  118  has synchronized, it obtains each chunk following the MPs in order of group number and channel number. In this manner, the collator  118  constructs the DTS  120  that corresponds to the STS  110 . As described above, the TIP  122  executes PID filtering on the MPEG2 TS packets to recover any desired program j, and may discard the other packets. 
       FIG. 7  shows an example of logic  700  for content delivery using channel bonding, that may be implemented in hardware or software in the example architecture  600  described above. Input sources receive program data ( 702 ). The input sources provide the program data to the statistical multiplexer  106  ( 704 ), which multiplexes the program data to generate the source transport stream (STS)  110  ( 706 ). The distributor  108  receives the STS  110  ( 708 ). 
     The distributor  108  also reads bonding configuration parameters ( 710 ). The bonding configuration parameters may, for example, specify that the distributor  108  should take the round-robin distribution approach, and may specify round-robin distribution parameters. Examples of such parameters include the round-robin distribution chunk size, e.g., ‘r’ packets at a time per communication channel (e.g., r=100), chunk size per communication channel, or chunk size variation in time, or variation depending on chunk size factors that the source  102  may monitor and adapt to over time, in what situations the distributor  108  should execute the round-robin technique, or any other round-robin parameter. As noted above, the bonding configuration parameters may also specify the number of communication channels in the bonding channel group  112 , the communication channels that may be included in the bonding channel group  112 , the type of communication channels that may be included in the bonding channel group  112 , the program sources eligible for bonding, when and for how long communication channels and program sources are available for channel bonding, and any other parameters that may influence how the distributor  108  pushes program data across the communication channels in the bonded channel group  112 . 
     In this option, the distributor generates MPs ( 712 ) for the chunks of program packets that the distributor sends through the individual communication channels in the bonded channel group  112 . Thus, for example, when the bonding configuration parameters indicate a chunk size of  100  packets, the distributor generates a MP for each  100  program packets communicated down the communication channel. As was explained above, a MP may include synchronization data, such as a group number and channel number. As another example, the MP may include timing data such as a timestamp, time code, or other timing reference measurement. 
     The distributor  108  sends the MPs and the program data to the communication channels in the bonded channel group  112  ( 714 ). The distributor  108  may send the MPs and program data in a round-robin manner by communication units of program packets (e.g., by chunks of program packets). The source  102  thereby communicates program data to the destination  104  across the multiple communication channels in the bonded channel group  112  ( 716 ). 
     More particularly, the distributor  108  may send the program packets to the communication channels in round-robin manner by chunk. In other words, the distributor  108  may take chunks of program packets from the STS  110  and send them to the next communication channel in the bonded channel group  112  in a predetermined round-robin sequence (e.g., as specified in the bonding configuration parameters). As such, an MP is distributed to a communication channel, and is followed by a chunk of program packets tagged by the MP in terms of group number and channel number. The program packets include PID information that identifies the program to which each packet belongs. The MPs thereby effectively flag for the destination  104  the program packets that follow the MPs. After each chunk of program packets, the distributor  108  provides another group of MPs that are then distributed across the communication channels, and the cycle repeats. The chunk size may vary in time and by communication channel. Furthermore, the source  102  may send configuration communications to the destination  104  to advise the destination  104  of the bonding configuration and changes to the bonding configuration, including chunk size. 
     At the destination  104 , the demodulators  116  receive the program data over the communication channels ( 718 ). The demodulators  116  provide the recovered program data to buffers (e.g., the FIFOs  304 ) to help address jitter/skew ( 720 ) on the communication channels. The buffered data is provided to the collator  118 , which may pull packets from the buffers to synchronize on MPs. The collator  118  analyzes group information, sequence information, PIDs, and any other desired information obtained from the MPs and program packets to synchronize on MPs. The synchronization may include finding sequential MPs of the same group number across each communication channel in the bonded channel group  112 . 
     The collator  118  then creates a destination transport stream (DTS)  120  from the recovered program data ( 722 ) by adding packets to the DTS  120  in a round-robin manner across the communication channels in the bonded channel group  112 . In particular, the collator  118  adds packets to the DTS  120  by chunk of program packets in a round-robin manner across the communication channels in the bonded channel group  112 . Thus, the DTS  120  may convey the program packets to the TIP  122  in the same sequence as they were present in the STS  110 , for example. 
     The collator  118  provides the DTS  120  to the TIP  122  ( 724 ), which reads channel selection parameters ( 726 ). The channel selection parameters may specify, for example, which program is desired, and may be obtained from viewer input, from automated selection programs or processes (e.g., in a smart phone content recording application), or in other ways. Accordingly, the TIP  122  filters the DTS  120  to recover the program packets that match the channel selection parameters (e.g., by PID filtering) ( 728 ). The TIP  122  thereby generates a content output that includes an output packet stream for the selected program. The TIP  122  delivers the generated content to any desired device  124  that consumes the content, such as televisions, smart phones, personal computers, or any other device. 
     Turning briefly to  FIG. 15 , that figure shows an example variation architecture  1500  of the content delivery architecture  600  in  FIG. 6 . In one variation, the distributor may instead issue MP generation signals (e.g., the MP generation signals  1502 ,  1504 ,  1506 ) to the modulators  130 . The MP generation signal  1502  may be a command message, signal line, or other input that causes the receiving modulator to generate a MP for insertion into the packet stream, e.g., at chunk boundaries. The MP may include any desired synchronization information, including time stamps, time codes, group numbers, channel numbers, and the like. The modulator may generate the synchronization information, or the distributor  108  may provide the synchronization information to the modulator along with the MP generation signal. 
     In another variation, both the distributor  108  generates MPs and the modulators  130  generate MPs. For example, the distributor  108  may generate the MPs for the modulator for CH2 and send MP generation signals to the modulators for the other channels. Another alternative is for the distributor  108  to generate MPs for some modulators some of the time, and to send MP generation signals to those modulators at other times. Whether or not the distributor  108  generates the MPs may depend on MP capability information available to the distributor  108 . For example, the bonding configuration parameters  710  may specify which modulators are capable of generating MPs, when, and under what conditions. Then, the distributor  108  may send the MP generation signal to those modulators at the corresponding times or under the corresponding conditions. Further, the modulator may communicate with the distributor  108  to specify MP generation capabilities, and the conditions on those capabilities, such as when and under what conditions the modulator can generate MPs, and also what information the modulator needs from the distributor  108  to generate the MPs. 
     Turning briefly to  FIG. 16 , that figure shows content delivery logic  1600  for the architectures described above.  FIG. 16  shows again that, in the architectures described above (e.g.,  1500  and  600 ), the distributor  108  may generate MPs, the modulators  130  may generate MPs, or both may generate MPs. For example,  FIG. 16  shows that for the modulator for CH1, the distributor  108  generates the MPs ( 1602 ), e.g., at chunk boundaries. The distributor  108  also generates the MPs for the modulator for CHm ( 1606 ). However, for the modulator for CH2, the distributor  108  sends an MP generation signal and any desired synchronization information ( 1604 ) to the modulator for CH2. Accordingly, the modulator for CH2 generates its own MPs for the chunks it receives from the distributor  108 . Note also that any modulator may communicate with the distributor  108  to specify MP generation capabilities, and the conditions on those capabilities, including when and under what conditions the modulator can generate MPs, as well as what information the modulator needs from the distributor  108  to generate the MPs ( 1608 ). 
     Turning now to  FIG. 8 , the figure shows an example implementation of a distributor  800 . The distributor  108  includes an STS input interface  802 , system logic  804 , and a user interface  806 . In addition, the distributor  800  includes modulator output interfaces, such as those labeled  808 ,  810 , and  812 . The STS input interface  802  may be a high bandwidth (e.g., optical fiber) input interface, for example. The modulator output interfaces  808 - 812  feed data to the modulators that drive data over the communication channels. The modulator output interfaces  808 - 812  may be serial or parallel bus interfaces, as examples. 
     The system logic  804  implements in hardware, software, or both, any of the logic described in connection with the operation of the distributor  108  (e.g., with respect to  FIGS. 1-7  and  10 ). As one example, the system logic  804  may include one or more processors  814  and program and data memories  816 . The program and data memories  816  hold, for example, packet distribution instructions  818  and the bonding configuration parameters  820 . 
     The processors  814  execute the packet distribution instructions  818 , and the bonding configuration parameters  820  inform the processor as to the type of channel bonding the processors  814  will perform. As a result, the processors  814  may implement the round-robin packet by packet distribution or round-robin chunk by chunk distribution described above, including MP generation, or any other channel bonding distribution pattern. The distributor  800  may accept input from the user interface  806  to change, view, add, or delete any of the bonding configuration parameters  820  or any channel bonding status information. 
       FIG. 9  shows an example implementation of a collator  900 . The distributor  108  includes a DTS output interface  902 , system logic  904 , and a user interface  906 . In addition, the collator  900  includes demodulator input interfaces, such as those labeled  908 ,  910 , and  912 . The DTS output interface  902  may be a high bandwidth (e.g., optical fiber) output interface to the TIP  122 , for example. The demodulator output interfaces  908 - 912  feed data to the collator system logic which will create the DTS  120  from the data received from the demodulator input interfaces  908 - 912 . The demodulator input interfaces  908 - 912  may be serial or parallel bus interfaces, as examples. 
     The system logic  904  implements in hardware, software, or both, any of the logic described in connection with the operation of the collator  118  (e.g., with respect to  FIGS. 1-7  and  10 ). As one example, the system logic  904  may include one or more processors  914  and program and data memories  916 . The program and data memories  916  hold, for example, packet recovery instructions  918  and the bonding configuration parameters  920 . 
     The processors  914  execute the packet recovery instructions  918 , and the bonding configuration parameters  920  inform the processor as to the type of channel bonding the processors  914  will handle. As a result, the processors  914  may implement the round-robin packet by packet reception or round-robin chunk by chunk reception described above, including MP synchronization, or any other channel bonding distribution recovery logic. The collator  900  may accept input from the user interface  906  to change, view, add, or delete any of the bonding configuration parameters  920 , to specify which channels are eligible for channel bonding, or to set, view, or change any other channel bonding status information. 
     The architectures described above may also include network nodes between the source  102  and the destination  104 . The network nodes may be type of packet switch, router, hub, or other data traffic handling logic. The network nodes may be aware of the communication channels that they are connected to, both on the inbound side, and on the outbound side. Accordingly, a network node may receive any particular set of communication channels in a channel bonding group, but need not have a matching set of communication channels in the outbound direction. In that case, the network node may filter the received communication channel traffic, to drop packets for which the network node does not have a corresponding outbound communication channel, while passing on the remaining traffic flow over the outbound communication channels to which it does have a connection. 
     In concert with the above, the channel bonding may happen in a broadcast, multicast, or even a unicast environment. In the broadcast environment, the source  102  may send the program packets and MPs to every endpoint attached to the communication channels, such as in a wide distribution home cable service. In a multicast environment, however, the source  102  may deliver the program packets and MPs to a specific group of endpoints connected to the communication channels. In this regard, the source  102  may include addressing information, such as Internet Protocol (IP) addresses or Ethernet addresses, in the packets to specifically identify the intended recipients. In the unicast environment, the source  102  may use addressing information to send the program packets and the MPs across the bonded channel group  112  to a single destination. 
     A third option is to add, at the source  102 , channel bonding data fields to the program packets. The channel bonding data fields may be added to the packet header, payload, or both. The channel bonding data fields may identify for the destination  104  how to order received packets to create the DTS  120 . In that regard, the channel bonding data fields may include PID information, sequence information, channel number information, group number information, or other data that the collator  118  may analyze to determine packet output order in the DTS  120 . 
     In some implementations, a communication head-end may define the program packets that each source will employ, and therefore has the flexibility to create channel bonding fields in the program packets. In other implementations, the source  102  inserts channel bonding data into existing packet definitions (possibly using part of a conventional data field for this new purpose). For example, in some implementations, each program is formed from multiple MPEG2 PIDs, with each MPEG2 TS packet being  188  bytes in size. When packets from the same program will be routed across different communication channels, the source  102  may use header or payload fields in the MPEG2 TS packets to carry channel bonding fields (e.g., PID and sequence number) in the MPEG2 TS packets. 
     As one example, the source  102  may add, as channel bonding data, a program ID (PID) and sequence number to program packets. The PID may be a 4-bit field that identifies one of 16 different programs. The sequence number may be a 12-bit field that identifies one of 4096 sequence values. In this implementation, the source  102  need not send MPs. Instead, the channel bonding information (e.g., PID and sequence number) inserted into the program packets provides the destination  104  with the information it uses to construct the DTS  120 . More specially, the collator  118  identifies the PIDs and the packets with sequential sequence numbers for each PID, and creates the DTS  120  with the correct packet sequence. 
     Furthermore, the source  102  may also insert the channel bonding data into lower layer packets. For example, instead of (or in addition to for redundancy), sending MPs defined at or above the transport layer, the source  102  may instead insert the channel bonding data into frames defined below the transport layer, such as data-link layer frames or physical layer frames. As an example, the data-link layer frames may be Low Density Parity Check (LDPC) frames, and the physical layer frames may be Forward Error Correcting (FEC) frames. 
     Because such frames are defined at the data-link layer, higher layers may have no knowledge of these frames or their formats, and generally do not process such frames. Nevertheless, the higher level layers, including the transport layer, may provide bonding information to the data-link layer that facilitates data-link layer handling of the channel bonding data. Examples of such bonding information includes the amount and type of channel bonding data desired, including the definitions, sizes, and sequence numbering of channel number and sequence number fields, desired chunk size, number, identification and type of communication channels to bond, or any other channel bonding information. 
     In more detail, in some communication architectures, the data-link layer packets have spare, reserved, or otherwise ancillary bits. Instead of having the ancillary bit fields remain unused, the system  102  may insert the channel bonding data in those ancillary bit fields. In other implementations, the data-link layer may define its own particular packet format that includes bit fields specifically allocated for channel bonding data. 
       FIG. 10  shows an example of a content delivery architecture  1000  that performs channel bonding below the transport layer, e.g., at the data-link layer or physical layer.  FIG. 10  extends the example of  FIG. 6  for the purposes of discussion, but channel bonding at lower layers may occur in any content delivery architecture. In  FIG. 10 , a protocol stack at the distributor  108  includes multiple layers, including a Physical (PHY) layer  1002 , a data-link layer  1004 , a transport layer  1006 , and any other layers desired  1008 . The protocol stack may adhere to the Open Systems Interconnection (OSI) model, as one example, and the data-link layer and physical layer structures that may carry channel bonding information may include, as examples, Forward Error Correcting (FEC) frames, PHY frames, MAC frames, Low Density Parity Check (LDPC) frames, or IP Datagram frames. However any other protocol stack and structure types may instead be in place to handle channel bonding at a level below the level at which the program packets. 
     The STS  110  provides the program packets to the distributor  108 . The protocol stack handles the program packets. In particular, the data-link layer  1004  constructs low level frames that encapsulate program packets and channel bonding data, and that are sent across the communication channels in the bonded channel group  112 . One example of the low level frames is the data-link frame  1010 . In this example, the data-link frame  1010  includes channel bonding (CB) data, data-link frame (DLF) data, and program packets (in particular, the first chunk  602 ). The DLF data may include the information fields in an already defined data-link layer packet format. The CB data may include channel number and group number information, or any other information that a MP might otherwise carry. 
     Higher level layers may (e.g., the transport layer  1006  or other layers  1008 ), as noted above, provide guidance to the data-link layer  1004  regarding what bonding information to include in the data-link layer frames. However, this is not required. The data-link layer may do its own analysis and makes its own decisions concerning what channel bonding data to add into the data-link layer frames. In that regard, the data-link layer may read the channel bonding configuration parameters. The data-link layer may also exchange the configuration communications  126  with the destination  104 , including configuration communications  126  with the data-link layer, transport layer, or other layers at the destination  104 . 
     At the destination  104 , a protocol stack  1012  processes the data received from the demodulators  116 . In particular, the protocol stack  1012  may include a data-link layer  1014 . The data-link layer  1014  receives the data-link layer frames (e.g., the frame  1010 ) to extract the program packets and channel bonding data. The collator  118  may then process the channel bonding data as described above to synchronize the communication channels in the bonded channel group  112  and build the DTS  120 . 
       FIG. 11  shows an example of channel bonding using data-link layer frames  1100 . In  FIG. 11 , a data stream  1102  represents, for example, source data prior to packetization. The data stream  1102  may be as examples, data generated by a video camera, microphone, or bytes in a file on a disk drive. A content provider generates a packetized stream  1104 , for example in the form of MPEG2 TS packets  1106 . The packets  1106  may take many different forms, and in the example shown in  FIG. 11 , the packets  1106  include Cyclic Redundancy Check (CRC) data  1108  (e.g., in a header), and a payload  1110 . 
       FIG. 11  also shows the data-link layer frames  1112 . In this example, the data-link layer frames  1112  include a header  1114  and a payload  1116 . The header  1114  may include fields in which, although they are pre-defined for other purposes, the data-link layer  1004  inserts channel bonding data, such as channel number and group number.  FIG. 11  shows an example in which the data-link layer frame  1112  includes an MATYPE field  1118  (e.g., 2 bytes), a UPL field  1120  (e.g., 2 bytes), a DFL field  1122  (e.g., 2 bytes), a SYNC field  1124  (e.g., 1 bytes), a SYNCD field  1126  (e.g., 2 bytes), and a CRC field  1128  (e.g., 1 bytes). This particular frame format is further described in the DVB S2 coding and modulation standard, In particular, the data-link layer  1104  may insert the channel bonding information into the MATYPE field  1118 . 
     The framing of the data-link layer  112  is such that program packets are generally encapsulated into the payload  1116  of the data-link frame  1112 , while the channel bonding information is added to the header  1204 . However, note the packetized stream  1104  does not necessarily line up with the data-link layer frames  1112 . This is shown by the dashed lines in  FIG. 11 , with the data-link layer frame  1112  breaking across program packets. The lack of alignment may be due to timing and packet size mismatches between various layers in the protocol stack, and because the data stream  1102  does not necessarily adhere to any fixed timing parameters or data formats. 
     In some implementations, the architectures may facilitate alignment by inserting packets (e.g., NULL packets) of any desired length, padding program packets (e.g., with NULL data), truncating program packets (or otherwise dropping program packet data), dropping program packets altogether, or in other ways. The data-link layer  1004  may execute the alignment in order to fit an integer number of program packets into a data-link layer frame. In some implementations, the data-link layer  1004  may communicate with other layers in the protocol stack, or other logic in the source  102 , to provide guidance on timing, alignment, chunk sizes, or other bonding parameters that may facilitate alignment and channel bonding at the data-link layer. 
       FIG. 12  shows an example of channel bonding using data-link layer frames  1200 . As with  FIG. 11 , in  FIG. 12  a data stream  1102  represents, for example, source data prior to packetization, and the packetized data stream  1104  arises from the data stream  1102 . The data-link layer frame  1202  includes a header  1204  and a payload  1206 . However, in  FIG. 12 , data-link layer frame  1202  has been designed to include fields specifically for channel bonding information. In the example in  FIG. 12 , the header  1204  includes the channel bonding field  1   1208  and the channel bonding field  2   1210 . Other header fields  1212  carry other header information. Any number and length of channel bonding fields may be present in either headers or payload fields in the data-link layer frames to hold any desired channel bonding information. 
       FIG. 13  shows an example of logic  1300  that a data-link layer in the source  102  may implement for channel bonding at the data-link layer. The data-link layer may provide feedback to higher layers ( 1302 ). The feedback may inform the higher level layers about alignment, timing, or other considerations that affect how program packets break across or fit into data-link layer packets. 
     The data-link layer receives program packets from the higher level layers ( 1304 ). If the data-link layer will force alignment, then it may pad program packets, insert alignment packets, or even drop packets or parts of packets, so that the program packets fit within the data-link layer frame ( 1306 ) in a way that corresponds to the selected channel bonding configuration, including, for example, the chunk size. The data-link layer inserts channel bonding information into data-link layer frames ( 1308 ). In some implementations, the protocol stack at the source  102  does not generate separate marker packets for the channel bonding information. That is, the low level communication frames (e.g., the data-link layer frames) carry the channel bonding information in specific fields defined in the communication frames, so that no separate encapsulation of the channel bonding information (into marker packets, for example), is needed. Expressed yet another way, the data-link layer frames may have one less layer of encapsulation, e.g., encapsulating the channel bonding information directly into the low level communication frame, rather than multiple levels of encapsulation, e.g., encapsulating the channel bonding information first into a MP defined, e.g., at the same protocol level as a program packet, and then the MP into the communication frame. 
     The data-link layer also inserts program packets or chunks of packets into data-link layer frames. For example, the program packets may exist in the payload field of the data-link layer frames. The marker information may specify which packets are present in the data-link layer frame with the marker information ( 1310 ). The data-link layer then transmits the data-link layer frames over a communication channel that is part of a bonded channel group  112 . 
       FIG. 14  shows an example of logic  1400  that a data-link layer in the source  102  may implement for channel debonding at the data-link layer. The data-link layer receives data-link layer frames ( 1402 ). The data-link layer extracts the program packets and the channel bonding information from the data-link layer frames ( 1404 ). Any padding data in the program frames, or padding packets may be discarded ( 1406 ). 
     The destination  104  analyzes the channel bonding information to synchronize across multiple communication channels, as described above ( 1408 ). Accordingly, for example, the destination may align to channel bonding sequence information across multiple communication channels. Once synchronized, the destination  104  may construct the DTS  120 , for example by round-robin adding chunks to the DTS  120  from the data-link layer frames, informed by the channel bonding information in the data-link layer frames ( 1410 ). 
     One example format for a MP is the following: 
     CBM_PID: ChannelBondingMarker PID, which may be a reserved PID value for a marker packet. In some implementations, MPs may include adaptation layer information and follow the MPEG2 TS packet structure, although some or all of the content of the packet will be specific to MP data instead of, e.g., program data. The bytes in the MP may be assigned as follows (as just one example): 
     Byte # 1 : 0×47 (MPEG2 TS pre-defined sync byte) 
     Byte # 2 / 3 : CBM_PID+TEI=0, PUSI=0, priority=1 
     Byte # 4 : SC=‘b00,AFC=1311 (no payload), CC=0×0 
     Byte # 5 : Adaptation_length=‘d183 
     Byte # 6 : Flags=0×02, e.g., only private data is present 
     Byte # 7 : Private data_length=‘d181 
     Byte # 8 : Number of channels in Channel Bonding group 
     Byte # 9 / 10 : CBM_Sequence_Number (CBM_SN) 
     Byte # 11 / 12 / 13 / 14 : CBM_SIZE 
     This generic MPEG2 TS packet syntax is further explained in ISO/IEC 13818-1, section 2.4.3.2, “Transport Stream packet layer”. 
     Some implementations may facilitate bonding channels having very different topologies. In the past, differences in interface strategies may have encouraged bonding of similar channel topologies in a system. Using different topologies as a single logical unit may provide certain benefits through channel bonding. In certain implementations, advantages may be obtained through bonding both serial and parallel channels as a single logical channel. 
     Several channel bonding processing options have been discussed herein. In the first option, the distributor  108  adds marker packets on a per-channel basis, for example in a round-robin manner. In the second option, the distributor  108  generates and adds markers on a per-chunk basis, for example in a round-robin manner at chunk boundaries. In the third option, when packets from the same program will be routed to multiple communication channels, each packet receives a program ID and a sequence ID, and no marker packets are needed. In the fourth option, spare bits in network frames defined below the network layer, e.g., at the data-link layer, carry channel bonding information to the source  104 . Further other options may exist. However, any of the architectures or features of these techniques may be used together in conjunction with the discussed implementations for channel bonding with mixed serial and parallel streams. 
       FIG. 17  is a schematic view of a set top box configured to receive data transmitted over both parallel and serial channels that are bonded together. The set top box  1700  includes a series of tuners  1712 ,  1714 ,  1716 ,  1718 . While four tuners are shown, the number of tuners is scalable and, therefore, more or fewer tuners may be used together. Each tuner  1712 ,  1714 ,  1716 , and  1718  may operate independently receiving a particular band signal. 
     The tuner  1712  may receive the data and transmit the data to a demodulator  1722 . The demodulator  1722  may then transmit the modulated data to an in-band interface block  1734  within the transport unit  1732 . The in-band interface block  1734  may identify marker packets within the channel. Using the information within the marker packet, the in-band interface block  1734  may store the packets in original sequence within a buffer  1760  for further transmission. 
     In a similar manner, tuner  1714  communicates data with the modulator  1724 , then the demodulator data is provided to in-band interface block  1736  of the transport layer  1732 . In the same manner, tuners  1716 ,  1718  provide received data sent to demodulator  1726  and demodulator  1728 , respectively. The demodulator data from the demodulator  1726  and the demodulator data from demodulator  1728  are provided to in-band interface block  1738  and in-band interface block  1740 , respectively, within the transport layer  1732 . The in-band interface blocks  1736   1738  and  1740  identify marker packets and store the received packets in sequence into the buffer  1760  for further transmission. Each data flow from the tuner to the demodulator, to the in-band interface block, and to the buffer  1760  are provided in a serial fashion between each element. 
     Further, the data transmitted by tuner  1712  flows completely independent from the data transmitted by tuner  1714 . As such, the data flow from each tuner  1712 ,  1714 ,  1716 ,  1718 , are processed separately until they are reassembled in the buffer  1760 . 
     In addition, the set top box  1700  may include a wide band tuner  1720 . The wide band tuner  1720  may generate multiple channels which are independent of each other. As such, a first channel from the wide band tuner  1720  may be provided to demodulator  1750  while a second channel form the wide band tuner  1720  may be provided to demodulator  1752 . The demodulator data from a demodulator  1750  may be provided to a multiplexer  1754 . In the same manner, the demodulator data from demodulator  1752  is also provided to the multiplexer  1754 . 
     The multiplexer  1754  distributes the data to the parallel interface where data from the same packet may be transmitted simultaneously over multiple lines that are clocked together. For example, eight parallel lines may be used where one byte may be transmitted across the eight lines, one bit for each line. As such, the entire byte may be transmitted in a single clock cycle. The multiplexer  1754  may transmit the parallel data to a multi-demodulator interface block  1756  of the transport unit  1732 . The multi-demodulator interface block  1756  identifies marker packet information within the data stream (e.g., communication unit) for each multi-demodulator interface and stores each packet within the buffer  1760 , such that the data may be combined with the data stored by each of the other in-band interface blocks  1734 ,  1736 ,  1738 ,  1740  to generate a single output data stream  1764 . 
     In light of the example provided in  FIG. 17 , it is understood that mixed serial and parallel streams may be channel bonded in other applications as well.  FIG. 18  is a schematic of a channel bonding system using parallel and serial channels. A data source may provide a data stream  1810  to a channel bonding device  1812 . The channel bonding device  1812  may include a distributor  1850  configured distribute packets to one of the available channels that are bonded together. As described elsewhere, the packet may be distributed in communication units (e.g. chunks). The channel bonding device  1850  may distribute the packets and/or communication units to a modulator/multiplexer  1824 ,  1834 ,  1844 ,  1846  corresponding to each communication channel. For the example shown, the bonding device  1812  may communicate through a first parallel channel  1820 , a second parallel channel  1830 , a first serial channel  1840 , and/or a second serial channel  1842 . 
     Each of the serial and/or parallel channels may be individual clocked. Further, each parallel channel includes multiple lines which are synchronously clocked. For example, parallel channel  1820  includes line  1820   a,    1820   b,    1820   c,  and  1820   d  where each of the lines of channel  1820  are clocked together, as denoted by reference numeral  1822 . In the same manner, channel  1830  includes line  1830   a ,  1830   b,    1830   c,  and  1830   d  which are synchronously clocked, as denoted by reference numeral  1832 . 
     The bonding device  1812  may utilize all of the channels  1820 ,  1830 ,  1840 ,  1842  logically as a single channel  1844  through channel bonding, as described throughout this application. Accordingly, the channel bonding device  1812  may include a buffer for each channel, for example, as part of the modulator  1824 ,  1834 ,  1844 ,  1842 , for each channel. The distributor  1850  may analyze network characteristics such as the buffer fullness and determine the size of the communication unit to provide to the corresponding buffer for each communication channel. For example, the parallel channels  1820  and  1830  may transmit data faster than the serial channels  1840  and  1842 . As such, the distributor  1850  may provide larger communication units (more packets) to the parallel channels  1820  and  1823 , than the serial channels  1842 ,  1844 . 
     In some implementations, the channel bonding device  1812  may be a head end and the receiving device  1814  may be a router or set top box. In other implementations, the channel bonding device  1812  may be a device (e.g., gateway, router, set top box) on the home network while the receiving device  1814  may be another device on a home network. For example, a multi-room digital video recorder (DVR) may be communicating with a set top box or vice versa through the bonded channels. In yet another implementation, the channel bonding device  1812  may be a demodulator chip communicating with a receiving device  1814 , such as a backend chip, within a set top box. Accordingly, parallel and serial streams may be bonded together for various applications at various levels of granularity. 
     The methods, devices, and logic described above may be implemented in many different ways in many different combinations of hardware, software or both hardware and software. For example, all or parts of the system may include circuitry in a controller, a microprocessor, or an application specific integrated circuit (ASIC), or may be implemented with discrete logic or components, or a combination of other types of analog or digital circuitry, combined on a single integrated circuit or distributed among multiple integrated circuits. All or part of the logic described above may be implemented as instructions for execution by a processor, controller, or other processing device and may be stored in a tangible or non-transitory machine-readable or computer-readable medium such as flash memory, random access memory (RAM) or read only memory (ROM), erasable programmable read only memory (EPROM) or other machine-readable medium such as a compact disc read only memory (CDROM), or magnetic or optical disk. Thus, a product, such as a computer program product, may include a storage medium and computer readable instructions stored on the medium, which when executed in an endpoint, computer system, or other device, cause the device to perform operations according to any of the description above. 
     The processing capability of the architectures may be distributed among multiple system components, such as among multiple processors and memories, optionally including multiple distributed processing systems. Parameters, databases, and other data structures may be separately stored and managed, may be incorporated into a single memory or database, may be logically and physically organized in many different ways, and may implemented in many ways, including data structures such as linked lists, hash tables, or implicit storage mechanisms. Programs may be parts (e.g., subroutines) of a single program, separate programs, distributed across several memories and processors, or implemented in many different ways, such as in a library, such as a shared library (e.g., a dynamic link library (DLL)). The DLL, for example, may store code that performs any of the processing described above. While various embodiments of the invention have been described, it will be apparent to those of ordinary skill in the art that many more embodiments and implementations are possible within the scope of the invention. Accordingly, the invention is not to be restricted except in light of the attached claims and their equivalents.