Dopo quasi un anno di sviluppo, è stata formata una nuova versione stabile del server multimediale PipeWire 1.6.0, che sostituisce il server audio PulseAudio ed è caratterizzato dall'aggiunta di strumenti per la gestione dei flussi video, la possibilità di elaborare l'audio con ritardi minimi e un nuovo modello di sicurezza per la gestione degli accessi a livello di singoli dispositivi e flussi. Il progetto è utilizzato di default in Fedora Linux, RHEL, Ubuntu, Debian, SUSE/openSUSE e molti altri distribuzioni Linux. Il codice è scritto in C ed è distribuito sotto la licenza MIT.
PipeWire è basato su un'architettura multi-processo che consente l'accesso condiviso ai contenuti tra più applicazioni. Offrendo la possibilità di elaborare qualsiasi flusso multimediale, miscelare e reindirizzare i flussi video, oltre a gestire le sorgenti video come le schede di acquisizione video, le webcam o il contenuto dello schermo fornito dalle applicazioni. PipeWire consente la collaborazione tra più applicazioni con la webcam e soluzione problemi relativi alla cattura sicura del contenuto dello schermo e all'accesso remoto allo schermo nell'ambiente Wayland.
Utilizzando come audio server, PipeWire può garantire ritardi minimi e offrire funzionalità che combinano le capacità di PulseAudio e JACK, tenendo conto delle esigenze dei sistemi di elaborazione audio professionale, a cui PulseAudio non poteva aspirare. PipeWire offre un modello di sicurezza avanzato che consente la gestione degli accessi a livello di singoli dispositivi e flussi specifici. Il modello di accesso implementato semplifica il passaggio di audio e video da e verso contenitori isolati.
Nella nuova versione:
- È stato aggiunto un decoder per il codec audio LDAC, utilizzato per trasmettere audio di alta qualità tramite Bluetooth. Per la decodifica viene utilizzata la libreria libldac.
- È stata aggiunta l'opzione “bluez5-plc-spandsp” per compensare la perdita di pacchetti durante la trasmissione audio tramite Bluetooth, utilizzando le capacità della libreria SpanDSP.
- È stata aggiunta un'implementazione sicura delle funzioni di analisi e creazione di oggetti serializzati nel formato POD (Plain Old Data) nella memoria condivisa.
- È stata implementata la possibilità di trasmettere tramite i metadati informazioni sul supporto da parte dei nodi PipeWire per funzionalità aggiuntive (features), che possono essere utilizzate per sincronizzare l'uso di funzionalità avanzate, come il supporto per l'operazione RELEASE.
- È stata aggiunta la possibilità di allegare dati utente aggiuntivi ai comandi e agli eventi scambiati tra i nodi.
- Sono state implementate funzioni ausiliarie aggiuntive per la creazione e l'analisi dei formati di compressione.
- Il limite predefinito sul numero massimo di canali è stato aumentato a 128. È stata aggiunta la possibilità di ridefinire questo limite in fase di compilazione.
- È stata aggiunta la configurazione «audio.layout» per impostare lo schema di audio surround multicanale (ad esempio, «audio.layout = 5.1») senza dover elencare le posizioni dei canali («audio.position = [ FL, FR, FC, LFE, SL, SR ] »).
- È stato aggiunto il meccanismo «Capability Params» per accordare le capacità del link nella fase precedente alla definizione del formato e dei buffer.
- È stata aggiunta la supporto per nuovi tipi di rappresentazione del colore (colortype) per HDR.
- Nei cicli di elaborazione degli eventi è stato implementato il supporto per i lock con inversione di priorità, prevenendo situazioni in cui un thread ad alta priorità deve attendere il rilascio di un lock mantenuto da un thread a bassa priorità. Per sincronizzare lo stato tra i thread sono stati utilizzati lock leggeri anziché epoll e eventfd.
- È stato aggiunto il supporto per la determinazione della posizione del canale tramite l'analisi dei dati EDID.
- È stata garantita la trasmissione al sottosistema ALSA delle mappe dei canali dell'audio surround (qual è il canale destro, qual è il sinistro, ecc.).
- Sono stati apportati numerosi miglioramenti relativi a Bluetooth, RTP (Real-time Transport Protocol) e AVB (Audio Video Bridging).
- Continua il lavoro sull'implementazione del protocollo di rete Milan per la trasmissione di dati multimediali in tempo reale.
- Nel sistema di cambio della frequenza di campionamento (resampler) è stato aggiunto il supporto per funzioni personalizzabili di soppressione delle distorsioni, come Blackman e Kaiser. Per migliorare la precisione del calcolo delle fasi sono stati utilizzati calcoli in virgola fissa.
- È stata fornita la possibilità di utilizzare nella grafica dei nodi filtri audio FFmpeg e modelli AI per la lavorazione del suono basati su ONNX, come il rilevatore di voce Silero.
- È stata interrotta la supporto per i client che utilizzano il protocollo v0, utilizzato nelle versioni precedenti di PipeWire.
- Nel modulo jack-tunnel è stato aggiunto il supporto per la connessione automatica delle porte.
- Per il sistema di streaming ROC è stato realizzato il supporto per layout multitraccia.
- È stata fornita la possibilità di modificare i limiti delle risorse (rlimit) tramite il file di configurazione.
- È stata aggiunta la proprietà «thread.reset-on-fork» per gestire il reset dei thread in caso di chiamata a fork. Per i client JACK, per replicare il comportamento di JACK, è possibile disabilitare il reset dei thread impostando «thread.reset-on-fork=false».
- È stata aggiunta la flag node.exclusive, che garantisce che la porta abbia solo una sorgente e un consumatore, necessario per implementare il meccanismo di Sync Esplicito.
- È stata aggiunta la flag node.reliable per la modalità di consegna garantita.
- Nell'utilità pw-cat è stato aggiunto il supporto per i messaggi MIDI SysEx (System Exclusive, per la configurazione dei sintetizzatori), il contenitore midiclip e i formati audio non compressi. Sono state aggiunte opzioni per impostare i formati dei contenitori audio e dei codec, nonché per visualizzare l'elenco dei contenitori, codec, layout audio surround e nomi dei canali supportati.
Fonte: opennet.ru
