среда, 4 сентября 2019 г.

PipeWire - что это и зачем?

Приветствую. Сегодня хочу немного поговорить о такой штуке, как PipeWire. Проект ещё молодой и активно развивающийся, потому информации в сети не так много. Как вы наверняка знаете, в Linux, для управления звуковыми потоками приложений, применяется звуковой сервер PulseAudio, написанный во второй половине нулевых печально знаменитым Леннартом Поттерингом. Дело в то, что сами по себе звуковые подсистемы Linux, такие как ALSA и почившая OSS, любили монопольно захватывать звуковую карту. Слушаете вы к примеру музыку через Amarok, и захотели включить ролик на ютубе. А там нет звука, потому что в этот момент звуковая карта занята плеером. Позднее конечно эту проблему решили частично, но всё же это было крайне неудобно. Нельзя было например играть в игру и слушать музыку одновременно. Для решения этой проблемы применялись звуковые сервера – для Гнома это был ESD, для KDE – aRTS. PulseAudio же стал стандартом, хотя первое время от него было больше вреда, чем пользы (сильная загрузка процессора, эпичные искажения звука). Плюс он позволяет гонять звук по сети, пользоваться Bluetooth-гарнитурами безо всякого пердолинга и много чего ещё. Но – это лишь звуковой сервер. И с видео он работать не умеет.



А для чего нужно управлять видеопотоками? Ну, допустим вы пользутесь одновременно скайпом и каким-нибудь другим приложением для видеоконференций, или же пишете скринкаст, и вам нужно, чтобы ваше лицо передавалось по веб-камере на оба этих приложения. Вопрос – как поделить между ними вашу вебку? Ответ – никак, потому что она также будет захватываться монопольно каким-нибудь одним приложением. Другой пример – как получить доступ к содержимому экрана из изолированного приложения, запущенного в контейнере? Ответ будет прежним. И хотя на первый взгляд проблема не кажется такой уж острой – она реально серьёзна. Ещё и по причине того, что на рабочие столы активно внедряется Wayland, а там, как известно, нет определённого механизма для захвата содержимого экрана или передачи его по сети. Именно с целью решить все эти проблемы, а также заодно проблемы PulseAudio, был создан PipeWire.

Изначально данный проект так и назывался – PulseAudio for Video, позднее его переименовали в Pinos, в честь итальянского города, а затем уже в PipeWire, более простое и отражающее суть этого инструмента название. Разработка ведётся одним из ключевых разработчиков фреймворка Gstreamer Вимом Таймансом, также являющимся одним из разработчиков GNOME. Суть PipeWire – это многопоточная система на основе графов, или нодов, позволяющая рулить видеопотоками отдельных приложений так как душе угодно. В частности – раздать вебкамеру всем желающим. Помимо этого PipeWire обеспечивает безопасный доступ к содержимому экрана из приложений Flatpak и Snap, а также является общепринятым решением для захвата экрана и удалённого доступа к рабочему столу в окружениях Wayland. Но не видеопотоками едиными. В будущем PipeWire, по словам разработчиков, сможет прозрачно заменить не только PulseAudio, но и JACK – звуковой сервер, применяющийся для работы цифровых звуковых студий и музыкальных инструментов, то есть обеспечивая минимальные задержки захвата и вывода звука. При этом будет сохранена совместимость со всеми приложениями, использующими Gstreamer, а это большинство современных видео и аудиопроигрывателей. Звучит здорово, не правда ли? Радует тот факт, что архитектура PipeWire гораздо более продумана, нежели PulseAudio, и он уже работает. К примеру он включён по умолчанию в последних Федорах, а также используется для работы удалённого рабочего стола в GNOME на Wayland. Вим в настоящее время занят доработкой именно звуковой части PipeWire, и скорее всего новый релиз войдёт в состав Fedora 31. PipeWire можно рассматривать как очередной шаг в сторону стандартизации в Linux, и среди дистрибутивов Linux в частности. Поддержка PipeWire добавлена в свежие выпуски Google Chrome, Chromium и Firefox, для обеспечения работы расшаривания экрана в Wayland, что решает проблемы в работе того же Скайпа, в веб-версии.

Своей видеофункциональностью, PipeWire напоминает Syphon – OpenGL-плагин для оконного менеджера Quartz из macOS, который позволяет делить видеопоток между несколькими приложениями или устройствами. Данный плагин очень востребован в игровых движках и различном профессиональном ПО для создания контента, а значит и PipeWire наверняка сможет найти в них своё место. По звуковой части, PipeWire будет прекрасной заменой PulseAudio, так как разрабатывается с целью обеспечить минимальные задержки при выводе звука, и избавить от необходимости в дополнительном ПО, вроде JACK. Почти все эти фичи сейчас обкатываются в отдельной ветке на GiHub. На этом у меня пока всё. Я продолжу следить за проектом и делать периодически заметки о нём.

3 комментария:

  1. Очень интересно, но ничего непонятно))) Просто очень много непонятных мне слов, но статья интересная!

    ОтветитьУдалить
  2. > Позднее конечно эту проблему решили частично, но всё же это было крайне неудобно.
    Эту проблему целиком и полностью решал dmix. Или аппаратное микширование. Которое, кстати, в пшшшаужио не работает by design.
    > Плюс он позволяет гонять звук по сети
    Киллер-фича! На моей памяти ее использовали примерно раза полтора.
    > И хотя на первый взгляд проблема не кажется такой уж острой – она реально серьёзна. Ещё и по причине того, что на рабочие столы активно внедряется Wayland, а там, как известно, нет определённого механизма для захвата содержимого экрана или передачи его по сети. Именно с целью решить все эти проблемы
    Каким образом это решает основную проблему вяленого — его проектировали мудаки? Эталонный костылинг получается.
    > По звуковой части, PipeWire будет прекрасной заменой PulseAudio?
    Чем оно лучше sndio?
    > и избавить от необходимости в дополнительном ПО, вроде JACK
    …заменив его дополнительным ПО в лице себя! Это прорыв.

    ОтветитьУдалить
  3. Дядь, у вас картинки отвалились. А еще дизайн сайта бы подкорректировать.

    ОтветитьУдалить