Вопрос или проблема
Когда я запускаю (или перезапускаю) службу pulseaudio, используя pulseaudio -k
, я получаю воспроизведение видео, и служба pulseaudio показывает следующее:
➜ systemctl --user status pulseaudio
● pulseaudio.service - Звуковая служба
Загружено: загружено (/usr/lib/systemd/user/pulseaudio.service; отключено; предустановка от производителя: отключено)
Drop-In: /usr/lib/systemd/user/pulseaudio.service.d
└─00-uresourced.conf
Активно: активно (работает) с пт 2022-03-25 13:42:07 CDT; 539ms назад
TriggeredBy: ● pulseaudio.socket
Основной PID: 92526 (pulseaudio)
Задачи: 5 (лимит: 308781)
Память: 7.7M
CPU: 276ms
CGroup: /user.slice/user-1000.slice/[email protected]/session.slice/pulseaudio.service
└─92526 /usr/bin/pulseaudio --daemonize=no --log-target=journal
Mar 25 13:42:07 fedora systemd[4316]: Запуск звуковой службы...
Mar 25 13:42:07 fedora systemd[4316]: Звуковая служба запущена.
Затем, когда я прекращаю смотреть видео и переключаюсь на другие действия (например, запускаю команды CLI в оболочке), я получаю сообщение об ошибке в статусе, и видео замирает и не может быть воспроизведено. Мне нужно перезапустить pulseaudio с помощью pulseaudio -k
➜ systemctl --user status pulseaudio
● pulseaudio.service - Звуковая служба
Загружено: загружено (/usr/lib/systemd/user/pulseaudio.service; отключено; предустановка от производителя: отключено)
Drop-In: /usr/lib/systemd/user/pulseaudio.service.d
└─00-uresourced.conf
Активно: активно (работает) с пт 2022-03-25 13:42:07 CDT; 58s назад
TriggeredBy: ● pulseaudio.socket
Основной PID: 92526 (pulseaudio)
Задачи: 5 (лимит: 308781)
Память: 7.7M
CPU: 641ms
CGroup: /user.slice/user-1000.slice/[email protected]/session.slice/pulseaudio.service
└─92526 /usr/bin/pulseaudio --daemonize=no --log-target=journal
Mar 25 13:42:07 fedora systemd[4316]: Запуск звуковой службы...
Mar 25 13:42:07 fedora systemd[4316]: Звуковая служба запущена.
Mar 25 13:42:32 fedora pulseaudio[92526]: GetManagedObjects() не удалось: org.freedesktop.DBus.Error.NoReply: Ответ не получен. Возможные причины: удаленное приложение не отправило ответ, политика безопасности шины сообщений заблокировала ответ, истекло время ожидания ответа или соединение с сетью было разорвано.
строки 1-16/16 (КОНЕЦ)
✗ pactl list short
0 module-device-restore
1 module-stream-restore
2 module-card-restore
3 module-augment-properties
4 module-switch-on-port-available
5 module-udev-detect
6 module-alsa-card device_id="0" name="pci-0000_00_1f.3" card_name="alsa_card.pci-0000_00_1f.3" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
7 module-alsa-card device_id="2" name="pci-0000_17_00.1" card_name="alsa_card.pci-0000_17_00.1" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
8 module-alsa-card device_id="1" name="usb-046d_HD_Pro_Webcam_C920_2BB3701F-02" card_name="alsa_card.usb-046d_HD_Pro_Webcam_C920_2BB3701F-02" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
9 module-alsa-card device_id="3" name="usb-Lenovo_ThinkPad_USB-C_Dock_Gen2_USB_Audio_000000000000-00" card_name="alsa_card.usb-Lenovo_ThinkPad_USB-C_Dock_Gen2_USB_Audio_000000000000-00" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"
10 module-bluetooth-policy
11 module-bluetooth-discover
12 module-bluez5-discover
13 module-native-protocol-unix
14 module-default-device-restore
15 module-always-sink
16 module-intended-roles
17 module-suspend-on-idle
18 module-systemd-login
19 module-position-event-sounds
20 module-role-cork
21 module-filter-heuristics
22 module-filter-apply
0 alsa_output.pci-0000_00_1f.3.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
1 alsa_output.pci-0000_17_00.1.hdmi-stereo-extra1 module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
0 alsa_output.pci-0000_00_1f.3.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
1 alsa_output.pci-0000_17_00.1.hdmi-stereo-extra1.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
2 alsa_input.usb-046d_HD_Pro_Webcam_C920_2BB3701F-02.analog-stereo module-alsa-card.c s16le 2ch 32000Hz SUSPENDED
3 alsa_input.usb-Lenovo_ThinkPad_USB-C_Dock_Gen2_USB_Audio_000000000000-00.mono-fallback module-alsa-card.c s16le 1ch 44100Hz SUSPENDED
0 module-systemd-login.c (null)
2 protocol-native.c gnome-shell
3 protocol-native.c gsd-media-keys
6 protocol-native.c pactl
0 alsa_card.pci-0000_00_1f.3 module-alsa-card.c
1 alsa_card.pci-0000_17_00.1 module-alsa-card.c
2 alsa_card.usb-046d_HD_Pro_Webcam_C920_2BB3701F-02 module-alsa-card.c
3 alsa_card.usb-Lenovo_ThinkPad_USB-C_Dock_Gen2_USB_Audio_000000000000-00 module-alsa-card.c
Это мой default.pa
#!/usr/bin/pulseaudio -nF
#
# Этот файл является частью PulseAudio.
#
# PulseAudio является бесплатным программным обеспечением; вы можете перераспределять и/или изменять его
# на условиях GNU Lesser General Public License, опубликованной
# Free Software Foundation; либо версии 2 Лицензии, либо
# (по вашему выбору) любой более поздней версии.
#
# PulseAudio распространяется в надежде, что он будет полезен, но
# БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий
# ТОРГОВОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ. См. GNU
# Общую публичную лицензию для получения дополнительных деталей.
#
# Вы должны были получить копию GNU Lesser General Public License
# вместе с PulseAudio; если нет, смотрите <http://www.gnu.org/licenses/>.
# Этот скрипт запуска используется только в том случае, если PulseAudio запускается для пользователя
# (т.е. не в системном режиме)
.fail
### Автоматически восстанавливать громкость потоков и устройств
load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore
### Автоматически дополнять информацию о свойствах из .desktop файлов
### хранящихся в /usr/share/application
load-module module-augment-properties
### Должен следовать за module-*-restore, но перед module-*-detect
load-module module-switch-on-port-available
### Статическая загрузка аудиодрайверов
### (скорее всего, лучше не загружать эти драйвера вручную, а вместо этого
### использовать module-udev-detect -- см. ниже -- для автоматической загрузки)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-null-sink
#load-module module-pipe-sink
### Автоматическая загрузка драйверных модулей в зависимости от доступного оборудования
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Использовать статический модуль обнаружения оборудования (для систем, которые не поддерживают udev)
load-module module-detect
.endif
### Автоматически подключать sink и source, если сервер JACK присутствует
.ifexists module-jackdbus-detect.so
.nofail
load-module module-jackdbus-detect channels=2
.fail
.endif
### Автоматическая загрузка драйверных модулей для оборудования Bluetooth
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif
.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif
### Загружать несколько протоколов
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix
### Сетевой доступ (можно настроить с помощью paprefs, поэтому оставьте это закомментированным
### здесь, если вы планируете использовать paprefs)
#load-module module-esound-protocol-tcp
#load-module module-native-protocol-tcp
#load-module module-zeroconf-publish
### Загружать модуль приёмника RTP (также настраивается через paprefs, см. выше)
#load-module module-rtp-recv
### Загружать модуль отправителя RTP (также настраивается через paprefs, см. выше)
#load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'"
#load-module module-rtp-send source=rtp.monitor
### Загружать дополнительные модули из GSettings. Это можно настроить с помощью инструмента paprefs.
### Пожалуйста, имейте в виду, что модули, настроенные с помощью paprefs, могут конфликтовать с вручную
### загруженными модулями.
.ifexists module-gsettings.so
.nofail
load-module module-gsettings
.fail
.endif
### Автоматически восстанавливать стандартный sink/source, когда они изменяются пользователем
### во время выполнения
### ПРИМЕЧАНИЕ: Это должно загружаться как можно раньше, чтобы последующие модули
### могли получить правильное значение стандартного sink/source
load-module module-default-device-restore
### Убедитесь, что у нас всегда есть sink, даже если это нулевой sink.
load-module module-always-sink
### Уважать назначенные свойства устройства
load-module module-intended-roles
### Автоматически приостанавливать sinks/sources, которые становятся неактивными слишком долго
load-module module-suspend-on-idle
### Если автовыход при бездействии включен, мы хотим быть уверенными, что выйдем
### только тогда, когда ни одна локальная сессия не нуждается в нас больше.
.ifexists module-console-kit.so
#load-module module-console-kit
.endif
.ifexists module-systemd-login.so
load-module module-systemd-login
.endif
### Включить позиционированные звуки событий
load-module module-position-event-sounds
### Приостанавливать музыкальные/видеопотоки, когда активен поток телефона
load-module module-role-cork
### Модули для автоматической загрузки фильтров (таких как отмена эха)
### по запросу. module-filter-heuristics пытается определить, какие фильтры
### имеют смысл, а module-filter-apply выполняет основную работу
### по загрузке модулей и перераспределению потоков.
load-module module-filter-heuristics
load-module module-filter-apply
### Сделать некоторые устройства стандартными
#set-default-sink output
#set-default-source input
### Разрешить включение каталога default.pa.d, который, если он присутствует, может быть использован
### для дополнительных конфигурационных фрагментов.
.nofail
.include /etc/pulse/default.pa.d
Я также получаю эти журналы ошибок в своем журнале
✗ journalctl --user -ef
Mar 25 13:48:47 fedora google-chrome.desktop[7682]: [8205:8205:0325/134847.035653:ERROR:pulse_util.cc(345)] pa_operation is nullptr.
Mar 25 13:48:47 fedora google-chrome.desktop[7682]: [8205:8205:0325/134847.036838:ERROR:pulse_util.cc(345)] pa_operation is nullptr.
Ок, так что решение заключается в следующем
sudo dnf install --allowerasing pipewire-pulseaudio
systemctl --user start pipewire-pulse.service pipewire-pulse.socket
systemctl --user enable pipewire-pulse.service pipewire-pulse.socket
➜ pactl info
Server String: /run/user/1000/pulse/native
Library Protocol Version: 35
Server Protocol Version: 35
Is Local: yes
Client Index: 117
Tile Size: 65472
User Name: dmitry
Host Name: fedora
Server Name: PulseAudio (на PipeWire 0.3.48)
Server Version: 15.0.0
Default Sample Specification: float32le 2ch 48000Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.pci-0000_17_00.1.hdmi-stereo-extra1
Default Source: alsa_input.usb-046d_HD_Pro_Webcam_C920_2BB3701F-02.analog-stereo
Cookie: d884:a022
Так что в FC35 мы должны перейти на pipewire.
Я только что создал аккаунт, чтобы прокомментировать это (хотя для этого, я думаю, мне нужно 15 репутации). Но у меня была та же проблема на протяжении нескольких месяцев, и я просто жил с рабочим процессом “Запустить ПК”, “открыть управление громкостью”, “открыть терминал и ‘pulseaudio -k’, оставить управление громкостью открытым в фоновом режиме…
Решение Дмитрия Семенова также исправило это для меня.
Ответ или решение
Проблема с зависанием видео в браузере из-за PulseAudio
Если вы столкнулись с проблемой зависания видео в браузере, связанной с PulseAudio, это может быть вызвано несколькими факторами, которые влияют на корректную работу звуковой подсистемы как в приложениях, так и в системе в целом. Давайте по шагам разберем возможные причины и решения данной проблемы.
Описание проблемы
Согласно предоставленной информации, вы наблюдали зависание видео при использовании PulseAudio, которое решается перезапуском службы с помощью команды pulseaudio -k
. При запуске службы PulseAudio, вы видите, что она работает нормально, однако при переключении на другие активности, например, выполнение команд в терминале, появляется ошибка, и видео замораживается. Ошибка, указанная в журнале, говорит о том, что PulseAudio не получает ответа в течение определенного времени:
GetManagedObjects() failed: org.freedesktop.DBus.Error.NoReply: Did not receive a reply.
Это может говорить о том, что PulseAudio лишается возможности взаимодействовать с другими приложениями, что может быть вызвано проблемами в конфигурации или конфликтами с другими службами.
Метод устранения проблемы
Решением данной проблемы, как было предложено вами и подтверждено другими пользователями, является переход на PipeWire, который более современен и лучше справляется с потоками аудио и видео. 예를 들어, вы можете выполнить следующие шаги, чтобы установить PipeWire и исключить проблемы с PulseAudio:
-
Откройте терминал и выполните команду:
sudo dnf install --allowerasing pipewire-pulseaudio
-
После установки необходимо активировать службы PipeWire:
systemctl --user start pipewire-pulse.service pipewire-pulse.socket systemctl --user enable pipewire-pulse.service pipewire-pulse.socket
-
После этого выполните команду
pactl info
, чтобы убедиться, что PulseAudio теперь работает через PipeWire:pactl info
Проверка конфигурации PulseAudio
Если вы всё же предпочитаете продолжать использовать PulseAudio, вам стоит проверить конфигурационный файл default.pa
. В нем могут быть строчки, которые вызывают конфликты или неправильное поведение системы. Например, обратите внимание на следующие модули:
- module-suspend-on-idle — при неактивности источника и синка, отключает их.
- module-role-cork — временно приостанавливает мультимедийные потоки, если активен телефонный поток.
Вы можете попробовать закомментировать их, добавив символ #
перед строкой в вашем default.pa
.
Заключение
Проблема зависания видео в браузере из-за PulseAudio может быть связана как с конфигурацией PulseAudio, так и с его взаимодействием с другими приложениями. Переход на PipeWire, как более современное решение, может значительно улучшить стабильность и производительность звуковой подсистемы на вашем компьютере. Если у вас возникнут дополнительные вопросы или проблемы, рекомендуется обратиться к сообществу пользователей или разработчиков для получения дополнительной помощи.