Pulseaudio가 수신기 오류로 인해 장애 조치되는 것을 방지하는 방법

Pulseaudio가 수신기 오류로 인해 장애 조치되는 것을 방지하는 방법

ALSA에서 USB 사운드 카드를 통해 음악을 재생하다가 실수로 USB 케이블을 뽑으면 자동으로 재생이 중지되므로 문제를 쉽게 감지하고 해결할 수 있습니다.

$ mpv --audio-device=alsa/hw:2 sound.wav
 (+) Audio --aid=1 (pcm_s16le 2ch 44100Hz)
AO: [alsa] 44100Hz stereo 2ch s16
A: 00:00:05 / 00:03:41 (2%)
[ao/alsa] Device lost, trying to recover...
...
Exiting... (Interrupted by error)
[2]

그러나 Pulseaudio를 통해 음악을 재생하고 USB 케이블을 분리하면 다른 수신기로 "장애 조치"되어 계속 재생됩니다.

$ mpv --audio-device=pulse/alsa_output.usb-C-Media_Electronics_Inc._USB_Audio_Device-00.analog-stereo sound.wav
 (+) Audio --aid=1 (pcm_s16le 2ch 44100Hz)
AO: [pulse] 44100Hz stereo 2ch s16
A: 00:00:16 / 00:03:41 (7%)
# no error message

이 경우 수신기는 두 개뿐이며 USB 장치를 분리하면 오디오 연결이 내 노트북 ​​스피커인 PCI 장치로 이동합니다.

$ pacmd list-sinks | grep name:
        name: <alsa_output.pci-0000_06_00.6.analog-stereo>
        name: <alsa_output.usb-C-Media_Electronics_Inc._USB_Audio_Device-00.analog-stereo>

USB 케이블을 다시 연결한 후에도 오디오는 여전히 노트북 스피커를 통해 나옵니다.

Pulseaudio를 제어하는 ​​방법을 안다면 그 동작이 유용할 수도 있지만 저는 그렇지 않습니다. 특히, 장애 조치 시 어떤 수신기가 활성화되는지 제어할 수 있고, USB 케이블이 분리될 때 클라이언트 애플리케이션에서 오류가 발생하도록 장애 조치를 비활성화할 수 있기를 원합니다.

물론 상황에 따라 기본 동작이 당황스러울 수도 있습니다. 예를 들어, 공공 장소에서 헤드폰으로 비공개 콘텐츠를 듣고 있는데 Pulseaudio가 이를 노트북 스피커를 통해 다시 라우팅하기로 결정했다면 매우 짜증나는 일이 될 것입니다. 널 수신기(샘플 삭제) 또는 잘못된 수신기(클라이언트에서 오류 생성)로 장애 조치하도록 USB 수신기를 구성할 수 있다면 이 상황은 해결될 것입니다. 이것이 가능합니까?

답변1

Pulseaudio 버전 13.0을 사용하면 수신기 대피를 비활성화할 수 있습니다.

pactl unload-module module-rescue-streams

또는 /etc/pulse/default.pa.

버전 14.0부터 module-rescue-streams핵심 기능의 일부가 되므로 제거할 수 없습니다. 그러나 새로운 부울 옵션은소개되었습니다비활성화할 수 있도록 합니다. 14.0 이후에는 를 추가하여 rescue-streams=no수신기 대피를 비활성화할 수 있습니다 /etc/pulse/daemon.conf.

현재로서는 수신기 오류가 발생할 경우 특정 스트림이 어떤 수신기로 대피하는지 사용자가 구성할 수 있도록 허용할 계획이 없습니다. 스트림은 항상 기본 싱크로 대피됩니다.

관련 정보