Làm cách nào để thiết lập bồn rửa PulseAudio?


16

Tôi đang cố gắng thiết lập bồn chứa PulseAudio trên Raspberry Pi của mình, để truyền phát tất cả âm thanh hệ thống từ PC của tôi ở đó. Cách tốt nhất để làm như vậy là gì?

Ví dụ, có thể xem phim hoặc độ trễ quá cao không? Tôi đã thử cách này một thời gian trước bằng cách sử dụng trình duyệt, nhưng với độ trễ khoảng 2 giây, điều này là vô ích đối với các yêu cầu của tôi.


1
Tôi nhận được một hoặc hai độ trễ.
goldilocks

Câu trả lời:


19

Các hướng dẫn chính thức để tạo "kết nối trực tiếp" trên mạng hy vọng chỉ hoạt động với hầu hết mọi người, nhưng có vẻ như pulseaudio và tôi không hợp nhau: tôi phải mất hàng giờ . [Bên cạnh "kết nối trực tiếp", bạn cũng có thể sử dụng phương pháp "đường hầm" được mô tả sâu hơn, nhưng tôi khuyên bạn nên đọc phần này trước.]

Bây giờ tôi có một âm thanh phát trực tuyến (fedora 17) đến pi. Tôi đã thu nhỏ các /etc/pulsetập tin cấu hình ở cả hai bên. Về phía máy tính để bàn:

/etc/pulse/client.conf

# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713

Địa chỉ LAN của pi của tôi với cổng pulseaudio mặc định. Nhưng đây là một cái gì đó khiến tôi bối rối trong một thời gian - với một máy chủ được chỉ định, pulseaudio thậm chí sẽ không bắt đầu:

> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.

Nó sẽ chạy ở nền trước (có lẽ vì sau đó nó không đọc xung-client.conf?). Tuy nhiên , hóa ra, bạn không cần phải chạy nó ở phía máy tính để bàn (gửi) , một cái gì đó không được đánh vần trong các tài liệu pulseaudio. Sử dụng lsof -i -Pnó có vẻ như các plugin cấp thấp hơn cho các trình phát phương tiện khác nhau thực hiện công việc.

Vì vậy, một dòng "client.conf" thực sự là tất cả những gì bạn cần ở phía máy tính để bàn / máy khách, nếu tất cả những gì bạn sẽ làm là sử dụng mạng (nhưng xem "Tuy nhiên, nhiều biến chứng" bên dưới).

Mặc dù trình nền pulseaudio (ở phía nhận / máy chủ) có thể được chạy như một dịch vụ hệ thống, nhưng các nhà phát triển của xung khuyến nghị chống lại nó , và trên thực tế, trên pi, tập lệnh init chỉ gây ra cảnh báo: bạn vẫn phải bắt đầu chính nó Fedora thậm chí không bao gồm một mục dịch vụ khởi động systemd cho nó.

Do đó, về phía pi, bạn nên khởi động và dừng rõ ràng quá trình máy chủ pulseaudio, được cấu hình như vậy:

/etc/pulse/daemon.conf

# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours

Bạn có thể sử dụng -1 cho exit-idle-timeđể giữ cho daemon chạy vô thời hạn. Coi chừng đây là giây và mặc định là 20 (có nghĩa là nó sẽ tiếp tục "chết" một cách bí ẩn nếu bạn không đặt cái này).

/etc/pulse/default.pa

# See man default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.2.0/24
load-module module-alsa-sink device=hw:0,0

Vì đây là một ứng dụng mạng, nên không nên chạy nó dưới quyền root. Tuy nhiên, như đã đề cập man pulseaudio, cũng là một ý tưởng tốt để "đổi mới" quy trình để ưu tiên cao hơn. Bạn có thể thực hiện việc này một cách thủ công nice, nhưng pulseaudio sẽ tự động thực hiện cho root hoặc các thành viên của pulse-rtnhóm, nếu tệp thực thi là "setuid", có nghĩa là nó có thể sử dụng một số quyền riêng tư gốc và sau đó thay đổi thành uid không được cấp phép chính xác ( pingpasswdcũng cần phải làm điều này). Vì vậy (dưới dạng root hoặc sudo):

chmod u+s /usr/bin/pulseaudio

Không có pulse-rtnhóm nào được tạo khi pulseaudio được cài đặt trên raspbian, do đó:

groupadd pulse-rt

Điều này sẽ cung cấp cho bạn một gid như 1003. Thêm (ví dụ) người dùng pi vào nhóm đó:

usermod -aG pulse-rt pi

Nhưng trên raspbian, bạn vẫn không thể đổi tên thành pi. Đối với điều đó, thêm vào /etc/security/limits.conf:

@pulse-rt       hard nice -20
@pulse-rt       soft nice -20

Bạn phải thực sự chạy một bản ghi trước khi những thay đổi này diễn ra; Nếu bạn sử dụng ssh với pi, chỉ cần sử dụng login. Bây giờ bạn có thể bắt đầu pulseaudio và nó sẽ tự đổi tên -11, đây có thể là ưu tiên cao hơn hầu hết các quy trình khác (xem giá trị NICE trong top).

Trong khi phát âm thanh được truyền phát từ mạng, pulseaudio trên pi sử dụng khoảng 10% CPU và một lượng bộ nhớ không đáng kể. :) Nó và máy tính để bàn của tôi nằm trên một mạng LAN có dây; luồng dữ liệu pcm thô (tôi tin), vì vậy việc sử dụng băng thông tương ứng với tốc độ mẫu của nguồn, 1 kB / s trở lên. Thật không may, có một độ trễ đáng chú ý trong âm thanh nếu bạn đang xem video.

Còn nhiều biến chứng ...

Thật không may, không có ứng dụng âm thanh nào trong PC của tôi hoạt động ngay lập tức; mpg123hoàn toàn không chạy Đối với điều đó, trên fedora, bạn cần mpg123-plugins-pulseaudiogói. Đối với nội dung flash trong trình duyệt (ví dụ: youtude) bạn cần alsa-plugins-pulseaudio(đây là những gì thực sự kết nối với máy chủ từ xa). Các distro khác nên có các gói tương tự. Nếu bạn đã sử dụng pulseaudio trước đây (tôi thì không), bạn có thể đã cài đặt chúng rồi.

Chuông và còi máy tính để bàn của KDE cũng không hoạt động. Đây là một vấn đề khó giải quyết hơn, bởi vì nó tìm kiếm một máy chủ pulseaudio cục bộ và như được mô tả, sử dụng kết nối trực tiếp có nghĩa là không có máy chủ nào có thể chạy cục bộ. Cách xung quanh này là sử dụng phương pháp "đường hầm".

mô-đun-đường hầm-chìm

Đây là cách khác được đề cập trong các tài liệu pulseaudio. Trong trường hợp này, bạn có một máy chủ chạy ở cả hai bên và một bên chuyển sang bên kia. Để thực hiện việc này, hãy nhận xét "máy chủ mặc định" trong /etc/client.confvà thêm một cục bộ /etc/default.pachứa:

load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1

Nếu bạn không đặt một sink_nametrong, PulseAudio sẽ không bắt đầu. Các sinkđề cập đến tên chìm ở phía bên pi, mà sau đó cũng cần một tên; thêm một tương ứng sink_namevới module-alsa-sinkdòng trong default.pađó:

load-module module-alsa-sink device=hw:0,0 sink_name=bcm1 

Khởi động máy chủ ở cả hai phía và ... sắp xếp. Trong khi tất cả mọi thứ bao gồm cả Kepepeps đã được thực hiện, phát lại flash trình duyệt bị chậm lại. Tuy nhiên, trong một môi trường máy tính để bàn khác (thực ra, chỉ cần một trình quản lý cửa sổ, fvwm) thì vẫn ổn.

Tôi thích KDE nhưng có thể sống mà không có tiếng bíp, vì vậy bây giờ tôi sẽ gắn bó với một kết nối trực tiếp.

Xử lý sự cố

Nếu bạn gặp vấn đề, sử dụng pulseaudio -vvvv --log-level=debugtrên pi cung cấp rất nhiều thông báo gỡ lỗi. Ban đầu khi tôi không thể phát ra âm thanh trên pi, điều này đã báo cáo một vấn đề "liên quan đến lỗi trong trình điều khiển ALSA bcm2835" có vẻ kỳ lạ đối với tôi vì âm thanh chỉ ổn với alsa và tôi chắc chắn có phần mềm pi xung quanh phụ thuộc trên pulseaudio - apt-get remove pulseaudiovà cài đặt lại apt-get install pulseaudiodường như đã khắc phục điều này ... Không phải là giải pháp tôi muốn xem, nhưng này, ít nhất bây giờ tôi có thể nghe tish mà không cần phải cắm loa vào mỗi hộp. Hầu hết.


Cảm ơn câu trả lời sâu rộng. Một câu hỏi mặc dù: điều gì xảy ra với âm thanh phát ra từ Pi?
Vincent

Nếu tôi đã từng thử điều đó (tôi sẽ không làm điều này nữa) nhưng pulseaudio được coi là một bộ ghép kênh, vì vậy nó sẽ hoạt động.
goldilocks
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.