Nach fast einem Jahr Entwicklung wurde der neue stabile Branch des Multimedia-Servers PipeWire 1.6.0 veröffentlicht, der den Audio-Server PulseAudio ersetzt und sich durch die Hinzufügung von Funktionen zur Verarbeitung von Video-Streams, die Fähigkeit zur Verarbeitung von Audio mit minimalen Verzögerungen und ein neues Sicherheitsmodell zur Verwaltung des Zugriffs auf Geräte- und Stream-Ebene auszeichnet. Das Projekt wird standardmäßig in Fedora Linux, RHEL, Ubuntu, Debian, SUSE/openSUSE und vielen anderen Linux-Distributionen eingesetzt. Der Code ist in C geschrieben und wird unter der MIT-Lizenz veröffentlicht.
PipeWire basiert auf einer Multi-Prozessor-Architektur, die den gemeinsamen Zugriff auf Inhalte mehrerer Anwendungen ermöglicht. Es werden Funktionen zur Verarbeitung beliebiger Multimedia-Streams, zum Mischen und Umleiten von Video-Streams sowie zur Verwaltung von Videoquellen wie Videoaufzeichnungsgeräten, Webcams oder vom Anwendungsgeschriebenen Bildschirminhalt bereitgestellt. PipeWire ermöglicht die Zusammenarbeit mehrerer Anwendungen mit der Webcam und löst Probleme mit der sicheren Erfassung von Bildschirminhalten und dem Remote-Zugriff auf den Bildschirm in einer Wayland-Umgebung.
Beim Einsatz als Audio- Server, kann PipeWire minimale Latenzen gewährleisten und eine Funktionalität bieten, die die Möglichkeiten von PulseAudio und JACK kombiniert und die Bedürfnisse von Systemen zur professionellen Audioverarbeitung berücksichtigt, die PulseAudio nicht erfüllen konnte. PipeWire bietet ein erweitertes Sicherheitsmodell, das die Verwaltung des Zugriffs auf Geräte- und Stream-Ebene ermöglicht. Das implementierte Zugriffsmodell vereinfacht das Durchreichen von Audio- und Video-Inhalten aus isolierten Containern und in diese.
In der neuen Version:
- Ein Decoder für den Audio-Codec LDAC wurde hinzugefügt, der für die Übertragung von hochwertigem Audio über Bluetooth verwendet wird. Zur Dekodierung wird die Bibliothek libldac eingesetzt.
- Die Option „bluez5-plc-spandsp“ wurde hinzugefügt, um Paketverluste bei der Übertragung von Audio über Bluetooth zu kompensieren, wobei die Funktionen der Bibliothek SpanDSP genutzt werden.
- Eine sichere Implementierung der Funktionen zum Parsen und Erstellen von serialisierten Objekten im POD (Plain Old Data)-Format im gemeinsamen Speicher wurde hinzugefügt.
- Die Möglichkeit, über Metadaten Informationen über die Unterstützung zusätzlicher Funktionen (features) durch PipeWire-Knoten zu übertragen, wurde implementiert. Dies kann zur Synchronisierung der Verwendung erweiterter Funktionalitäten wie der Unterstützung der RELEASE-Operation verwendet werden.
- Die Unterstützung für das Anfügen zusätzlicher benutzerdefinierter Daten an zwischen den Knoten übertragene Befehle und Ereignisse wurde hinzugefügt.
- Zusätzliche Hilfsfunktionen zum Erstellen und Analysieren von Komprimierungsformaten wurden implementiert.
- Das standardmäßig festgelegte Limit für die maximale Anzahl von Kanälen wurde auf 128 erhöht. Es wurde die Möglichkeit hinzugefügt, dieses Limit in der Compile-Phase zu überschreiben.
- Die Einstellung „audio.layout“ wurde hinzugefügt, um das Schema des mehrkanaligen Raumklangs (z. B. „audio.layout = 5.1“) festzulegen, ohne die Position der Kanäle auflisten zu müssen („audio.position = [ FL, FR, FC, LFE, SL, SR ]“).
- Ein Mechanismus für „Capability Params“ wurde hinzugefügt, um die Linkfähigkeiten vor der Festlegung von Format und Puffern zu verhandeln.
- Die Unterstützung neuer Farbdarstellungstypen (colortype) für HDR wurde hinzugefügt.
- In den Ereignisverarbeitungszyklen wurde die Unterstützung für Prioritätsumkehrungs-Sperren implementiert, die verhindern, dass ein hochpriorisierter Thread auf die Freigabe einer Sperre warten muss, die von einem niedrigpriorisierten Thread festgelegt wurde. Zur Synchronisation des Zustands zwischen Threads wurden leichte Sperren anstelle von epoll und eventfd verwendet.
- Die Unterstützung für die Bestimmung der Kanalposition durch das Parsen von EDID-Daten wurde hinzugefügt.
- Die Übertragung der Kanäle des Raumklangsystems in das ALSA-Subsystem wurde gewährleistet (welcher Kanal rechts, welcher links usw.).
- Zahlreiche Verbesserungen im Zusammenhang mit Bluetooth, RTP (Real-time Transport Protocol) und AVB (Audio Video Bridging) wurden vorgenommen.
- Die Arbeit an der Implementierung des Netzwerkprotokolls Milan zur Übertragung von Multimedia-Daten in Echtzeit wurde fortgesetzt.
- Das Resampler-System hat die Unterstützung für konfigurierbare Funktionen zur Verzerrungsunterdrückung, wie Blackman und Kaiser, hinzugefügt. Zur Erhöhung der Genauigkeit der Phasenauswertung wurden Berechnungen mit fester Dezimalstelle verwendet.
- Die Möglichkeit, in den Knoten-Graphen von Audiofiltern FFmpeg und KI-Modellen zur Audiobearbeitung basierend auf ONNX, wie der Sprachdetektor Silero, anzuwenden, wurde bereitgestellt.
- Die Unterstützung von Clients, die das Protokoll v0 verwenden, das in früheren Versionen von PipeWire verwendet wurde, wurde eingestellt.
- Das Modul jack-tunnel unterstützt jetzt die automatische Portverbindung.
- Für das Streaming-System ROC wurde die Unterstützung von Mehrspur-Layouts implementiert.
- Es wurde die Möglichkeit geschaffen, Ressourcenlimits (rlimit) über die Konfigurationsdatei zu ändern.
- Die Eigenschaft „thread.reset-on-fork“ wurde hinzugefügt, um das Zurücksetzen von Threads beim Fork-Aufruf zu steuern. Für JACK-Clients kann das Zurücksetzen durch Setzen von „thread.reset-on-fork=false“ deaktiviert werden, um das Verhalten von JACK zu wiederholen.
- Das Flag node.exclusive wurde hinzugefügt, das sicherstellt, dass ein Port nur eine Quelle und einen Verbraucher hat, was für die Implementierung des Mechanismus Explicit Sync erforderlich ist.
- Das Flag node.reliable wurde für den Modus der garantierten Lieferung hinzugefügt.
- Das Tool pw-cat unterstützt jetzt MIDI SysEx-Nachrichten (System Exclusive, zur Konfiguration von Synthesizern), den midiclip-Container und unkomprimierte Audioformate. Optionen zum Festlegen von Audioformaten und Codecs sowie zum Anzeigen der Liste unterstützter Container, Codecs, Surround-Layouts und Kanalnamen wurden hinzugefügt.
Quelle: opennet.ru
