Conceptually, a pipeline is a container that consists of many elements and links between them. Like an element, every pipeline has a playback state (and uses the same callbacks to handle transitions between them).
Implementation-wise, it's an Erlang process responsible for starting elements (usually referred to as children). It also manages their playback state to match the one set for the pipeline.
During the application execution, elements may want to signal some events. For that purpose, they send the
Notification to their watcher, which in most cases is a pipeline.
A pipeline can also be used as a gateway to an element - as elements' pids aren't available globally pipeline can route messages to children using names defined at pipeline creation.