GStreamer provides several mechanisms for communication and data exchange between the application and the pipeline.
buffers: are objects for passing streaming data between elements in the pipeline. Buffers always travel from sources to sinks (downstream).
events: are objects send between elements or from the application to elements. Events can travel upstream and downstream. Downstream events can be synchronised to the data flow.
messages: are object send from elements over the bus to the application. Messages can be received synchronously, but then from the streaming thread context of the sender or asynchronously marshalled to the main thread of the application.
queries: allow application to request information from the pipeline. Queries are answered synchronously. Also elements can use queries. They can be used both ways, but most common are downstream queries.