Después de casi un año de desarrollo, se ha formado una nueva rama estable del servidor multimedia PipeWire 1.6.0, que reemplaza al servidor de sonido PulseAudio y se distingue por la adición de herramientas para trabajar con flujos de video, la capacidad de procesar audio con latencias mínimas y un nuevo modelo de seguridad para gestionar el acceso a nivel de dispositivos y flujos individuales. El proyecto se aplica de manera predeterminada en Fedora Linux, RHEL, Ubuntu, Debian, SUSE/openSUSE y muchas otras distribuciones de Linux. El código está escrito en C y se distribuye bajo la licencia MIT.
PipeWire se basa en una arquitectura multiprocesal que permite el acceso compartido al contenido de varias aplicaciones. Se proporciona la capacidad de procesar cualquier flujo multimedia, mezclar y redirigir flujos de video, así como gestionar fuentes de video, como dispositivos de captura de video, cámaras web o el contenido de pantalla generado por aplicaciones. PipeWire permite que varias aplicaciones trabajen en conjunto con una cámara web y resuelve problemas de captura segura de contenido de pantalla y acceso remoto a la pantalla en entornos Wayland.
Al utilizarse como servidor de sonido, servidoresPipeWire puede asegurar latencias mínimas y proporcionar una funcionalidad que combina las capacidades de PulseAudio y JACK, teniendo en cuenta las necesidades de sistemas de procesamiento de audio profesional, a las que PulseAudio no podía aspirar. PipeWire ofrece un modelo de seguridad avanzado que permite gestionar el acceso a nivel de dispositivos específicos y flujos concretos. El modelo de acceso implementado simplifica el redireccionamiento de audio y video desde y hacia contenedores aislados.
En la nueva versión:
- Se ha añadido un decodificador para el códec de audio LDAC, utilizado para la transmisión de audio de alta calidad sobre Bluetooth. Para la decodificación se utiliza la biblioteca libldac.
- Se ha añadido la opción 'bluez5-plc-spandsp' para compensar la pérdida de paquetes al transmitir audio sobre Bluetooth, utilizando las capacidades de la biblioteca SpanDSP.
- Se ha añadido una implementación segura de las funciones de análisis y creación de objetos serializados en formato POD (Plain Old Data) en memoria compartida.
- Se ha implementado la capacidad de transmitir a través de metadatos información sobre el soporte de nodos de PipeWire para características adicionales, lo que puede utilizarse para sincronizar el uso de funcionalidad extendida, como el soporte para la operación RELEASE.
- Se ha añadido soporte para adjuntar datos adicionales del usuario a los comandos y eventos transmitidos entre nodos.
- Se han implementado funciones auxiliares adicionales para crear y analizar formatos de compresión.
- El límite predeterminado para el número máximo de canales se ha aumentado a 128. Se ha añadido la posibilidad de redefinir este límite durante la etapa de compilación.
- Se ha añadido la configuración ‘audio.layout’ para establecer el esquema de sonido envolvente multicanal (por ejemplo, ‘audio.layout = 5.1’) sin necesidad de enumerar la posición de los canales (‘audio.position = [ FL, FR, FC, LFE, SL, SR ]’).
- Se ha añadido el mecanismo ‘Capability Params’ para negociar las capacidades del enlace en la etapa anterior a la determinación de formatos y búferes.
- Se ha añadido soporte para nuevos tipos de representación de color (colortype) para HDR.
- En los ciclos de procesamiento de eventos se ha implementado soporte para bloqueos con inversión de prioridades, para prevenir situaciones en las que un hilo de alta prioridad tiene que esperar a que se libere un bloqueo establecido por un hilo de baja prioridad. Para sincronizar el estado entre hilos, se han empleado bloqueos livianos en lugar de epoll y eventfd.
- Se ha añadido soporte para determinar la posición del canal mediante el análisis de datos EDID.
- Se asegura la transmisión en el subsistema ALSA de la configuración de canales de sonido envolvente (qué canal está a la derecha, cuál a la izquierda, etc.).
- Se han realizado numerosas mejoras relacionadas con Bluetooth, RTP (Real-time Transport Protocol) y AVB (Audio Video Bridging).
- Se ha continuado trabajando en la implementación del protocolo de red Milan para la transmisión de datos multimedia en tiempo real.
- En el sistema de cambio de frecuencia de muestreo (resampler) se ha añadido soporte para funciones ajustables de supresión de distorsiones, como Blackman y Kaiser. Para mejorar la precisión del cálculo de fases, se han utilizado cálculos en punto fijo.
- Se ha proporcionado la posibilidad de aplicar en el gráfico de nodos filtros de audio de FFmpeg y modelos de IA para procesamiento de audio basados en ONNX, como el detector de voz Silero.
- Se ha dejado de dar soporte a clientes que utilizan el protocolo v0, utilizado en versiones anteriores de PipeWire.
- Se ha agregado soporte para la conexión automática de puertos en el módulo jack-tunnel.
- Para el sistema de streaming ROC, se ha implementado soporte para configuraciones multicanal.
- Se ha proporcionado la posibilidad de cambiar los límites de recursos (rlimit) a través del archivo de configuración.
- Se ha añadido la propiedad «thread.reset-on-fork» para controlar el restablecimiento de hilos al invocar fork. Para los clientes de JACK, se puede desactivar el restablecimiento de hilos estableciendo «thread.reset-on-fork=false» para replicar el comportamiento de JACK.
- Se ha agregado la bandera node.exclusive, que garantiza que un puerto tenga solo una fuente y un consumidor, lo cual es necesario para implementar el mecanismo de Sincronización Explícita.
- Se ha añadido la bandera node.reliable para el modo de entrega garantizada.
- Se ha agregado soporte para mensajes MIDI SysEx (System Exclusive, para la configuración de sintetizadores) en la utilidad pw-cat, así como soporte para el contenedor midiclip y formatos de audio sin compresión. Se han añadido opciones para establecer formatos de contenedores de audio y codecs, así como para ver la lista de contenedores, codecs, configuraciones de sonido envolvente y nombres de canales compatibles.
Fuente: opennet.ru
