A method, comprising: operating a first communication device to transmit data to a second communication device over a plurality of communication links, each of the communication links associated with a respective different communication medium; receiving, at the first communication device, an input data stream for transmission to the second communication device, the input data stream comprising a plurality of packets; determining, at the first communication device, a throughput and latency of each of the plurality of communication links; placing, using a stream scheduler, based on a virtual link defining a virtual path of the plurality of communication links from the first communication device to the second communication device, the plurality of packets of the input data stream in one or more queues, wherein the one or more queues are based on quality of service (QoS) conditions; after placing the plurality of packets in one or more queues, dividing by a stream partitioner, based on the determined throughput and latency of each of the plurality of communication links on the virtual link, the plurality of packets into multiple sets of packets, each of the sets of packets configured to be transmitted by the first communication device over a respective one of the communication links, wherein dividing the plurality of packets comprises: assigning a number of the plurality of packets to each of the sets of packets based on the throughput of the set's corresponding communication link in proportion to a sum of all of the throughputs of the physical links; and ordering, based on the determined latencies, the plurality of packets to reduce a latency variance of the plurality of communication links; adding a sequence header to each of the plurality of packets, the sequence header comprising a sequence number based on the QoS and the second communication device; and after adding the sequence header, concurrently transmitting, from the first communication device to the second communication device, the sets of packets over the communication links, each of the sets of packets transmitted over the set's respective communication link. operating a first communication device to transmit data to a second communication device over a plurality of communication links, each of the communication links associated with a respective different communication medium; receiving, at the first communication device, an input data stream for transmission to the second communication device, the input data stream comprising a plurality of packets; determining, at the first communication device, a throughput and latency of each of the plurality of communication links; placing, using a stream scheduler, based on a virtual link defining a virtual path of the plurality of communication links from the first communication device to the second communication device, the plurality of packets of the input data stream in one or more queues, wherein the one or more queues are based on quality of service (QoS) conditions; after placing the plurality of packets in one or more queues, dividing by a stream partitioner, based on the determined throughput and latency of each of the plurality of communication links on the virtual link, the plurality of packets into multiple sets of packets, each of the sets of packets configured to be transmitted by the first communication device over a respective one of the communication links, wherein dividing the plurality of packets comprises: assigning a number of the plurality of packets to each of the sets of packets based on the throughput of the set's corresponding communication link in proportion to a sum of all of the throughputs of the physical links; and ordering, based on the determined latencies, the plurality of packets to reduce a latency variance of the plurality of communication links; assigning a number of the plurality of packets to each of the sets of packets based on the throughput of the set's corresponding communication link in proportion to a sum of all of the throughputs of the physical links; and ordering, based on the determined latencies, the plurality of packets to reduce a latency variance of the plurality of communication links; adding a sequence header to each of the plurality of packets, the sequence header comprising a sequence number based on the QoS and the second communication device; and after adding the sequence header, concurrently transmitting, from the first communication device to the second communication device, the sets of packets over the communication links, each of the sets of packets transmitted over the set's respective communication link.