PipeWire
0.3.59
|
A short overview of PipeWire's design.
PipeWire is a media server that can run graphs of multimedia nodes. Nodes can run inside the server process or in separate processes, communicating with the server.
PipeWire was designed to:
Although an initial goal, the design is not limited to raw video only and should be able to handle compressed video and other media as well.
PipeWire uses the SPA plugin API for the nodes in the graph. SPA is designed for low-latency and efficient processing of any multimedia format. SPA also provides a number of helper utilities that are not available in the standard C library.
Some of the application we intend to build:
The native protocol and object model is similar to Wayland but with custom serialization/deserialization of messages. This is because the data structures in the messages are more complicated and not easily expressible in XML. See PipeWire Module: Protocol Native for details.
The functionality of the server is implemented and extended with modules and extensions. Modules are server side bits of logic that hook into various places to provide extra features. This mostly means controlling the processing graph in some way. See PipeWire Modules for a list of current modules.
Extensions are the client side version of the modules. Most extensions provide both a client side and server side init function. New interfaces or new object implementation can easily be added with modules/extensions.
Some of the extensions that can be written: