Nach fast einem Jahr der Entwicklung wurde der neue stabile Branch des Multimedia-Servers PipeWire 1.6.0 gebildet, der den Soundserver PulseAudio ersetzt. Er unterscheidet sich durch die Einführung von Funktionen zur Verarbeitung von Video-Streams, der Möglichkeit zur Audiobearbeitung mit minimalen Latenzen und einem neuen Sicherheitsmodell zur Verwaltung des Zugriffs auf Geräte und Streams. Das Projekt wird standardmäßig in Fedora Linux, RHEL, Ubuntu, Debian, SUSE/openSUSE und vielen anderen Linux-Distributionen verwendet. Der Code ist in C geschrieben und wird unter der MIT-Lizenz verteilt.
PipeWire basiert auf einer Multi-Prozessor-Architektur, die mehreren Anwendungen gemeinsamen Zugriff auf Inhalte ermöglicht. Es bietet Funktionen zur Verarbeitung beliebiger Multimedia-Streams, zum Mischen und Umleiten von Video-Streams sowie zur Verwaltung von Videoquellen wie Videoaufzeichnungsgeräten, Webcams oder in Anwendungen ausgegebenen Bildschirminhalten. PipeWire ermöglicht die Zusammenarbeit mehrerer Anwendungen mit der Webcam und löst Probleme im Zusammenhang mit dem sicheren Capturing von Bildschirminhalten und dem Remote-Zugriff auf Bildschirme in einer Wayland-Umgebung.
Bei Verwendung als Audio сервера, kann PipeWire minimale Latenzen gewährleisten und Funktionen bereitstellen, die die Möglichkeiten von PulseAudio und JACK kombinieren, um den Anforderungen professioneller Audioverarbeitungssysteme gerecht zu werden, die PulseAudio nicht erfüllen konnte. PipeWire bietet ein erweitertes Sicherheitsmodell, das den Zugriff auf Geräte und spezielle Streams auf granularer Ebene verwaltet. Das implementierte Zugriffsmodell erleichtert die Übertragung von Audio und Video aus isolierten Containern und in diese.
In der neuen Version:
- Ein Decoder für den LDAC-Audio-Codec wurde hinzugefügt, der zur Übertragung hochwertiger Audioinhalte über Bluetooth verwendet wird. Zum Dekodieren wird die Bibliothek libldac genutzt.
- Die Option „bluez5-plc-spandsp“ wurde hinzugefügt, um Paketverluste bei der Audioübertragung über Bluetooth mit den Funktionen der SpanDSP-Bibliothek auszugleichen.
- Eine sichere Implementierung von Funktionen zur Analyse und Erstellung von serialisierten Objekten im POD-Format (Plain Old Data) im Shared Memory wurde hinzugefügt.
- Die Möglichkeit wurde implementiert, über Metadaten Informationen über die Unterstützung zusätzlicher Funktionen (features) durch PipeWire-Knoten zu übertragen, die zur Synchronisierung der Nutzung erweiterter Funktionalitäten wie Unterstützung der RELEASE-Operation verwendet werden können.
- Die Unterstützung für das Anhängen zusätzlicher Benutzerdaten an die zwischen den Knoten übertragenen Befehle und Ereignisse wurde hinzugefügt.
- Zusätzliche Hilfsfunktionen zur Erstellung und Analyse von Kompressionsformaten wurden implementiert.
- Das standardmäßige Limit für die maximale Anzahl von Kanälen wurde auf 128 erhöht. Die Möglichkeit, dieses Limit während des Kompilierungsprozesses zu überschreiben, wurde hinzugefügt.
- Die Einstellung „audio.layout“ wurde hinzugefügt, um das Schema für mehrkanaligen Surround-Sound festzulegen (z. B. „audio.layout = 5.1“), 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 Fähigkeiten des Links vor der Bestimmung des Formats und der Puffer abzugleichen.
- Unterstützung für neue Farbmodelle (colortype) für HDR wurde hinzugefügt.
- In den Ereignisverarbeitungszyklen wurde Unterstützung für Prioritätsinvertierung beim Blocking implementiert, um Situationen zu verhindern, in denen ein hochpriorisierter Thread auf die Freigabe einer vom niedrigpriorisierten Thread gesetzten Sperre warten muss. Leichte Sperren wurden zur Synchronisation zwischen Threads anstelle von epoll und eventfd verwendet.
- Die Unterstützung zur Bestimmung der Kanalposition durch die Analyse von EDID-Daten wurde hinzugefügt.
- Die Übertragung der Kanäle des Surround-Sound-Systems an das ALSA-Subsystem wurde sichergestellt (welcher Kanal rechts, welcher links usw.).
- Zahlreiche Verbesserungen in Bezug auf 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.
- Im Resampling-System wurde die Unterstützung für anpassbare Verzerrungsunterdrückungsfunktionen wie Blackman und Kaiser hinzugefügt. Zur Erhöhung der Berechnungsgenauigkeit der Phasen werden Festkomma-Berechnungen verwendet.
- Es besteht die Möglichkeit, in den Knotengraphen von Audiofiltern FFmpeg und KI-Modellen für die Audiobearbeitung basierend auf ONNX, wie dem Sprachdetektor Silero, anzuwenden.
- Die Unterstützung für Kunden, die das Protokoll v0 verwenden, das in früheren Versionen von PipeWire verwendet wurde, wurde eingestellt.
- Im Modul jack-tunnel wurde die Unterstützung für die automatische Anschluss von Ports hinzugefügt.
- Für das Streaming-System ROC wurde die Unterstützung für Multitrack-Layouts implementiert.
- Es wurde die Möglichkeit hinzugefügt, die Ressourcenlimits (rlimit) über die Konfigurationsdatei zu ändern.
- Das Attribut „thread.reset-on-fork“ wurde hinzugefügt, um die Rücksetzung der Threads beim Fork-Aufruf zu steuern. Für JACK-Kunden kann das Zurücksetzen der Threads durch Setzen von „thread.reset-on-fork=false“ deaktiviert werden, um das Verhalten von JACK zu reproduzieren.
- Die Flagge node.exclusive wurde hinzugefügt, die garantiert, dass ein Port nur eine Quelle und einen Verbraucher hat, was für die Implementierung des expliziten Synchronisierungsmechanismus 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 unverpackte Audioformate. Zudem wurden Optionen zur Festlegung der Audio-Containerformate und Codecs sowie zur Anzeige der unterstützten Container, Codecs, Surround-Sound-Layouts und Kanalnamen hinzugefügt.
Quelle: opennet.ru
