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