The instruksi resmi untuk menciptakan sebuah "hubungan langsung" pada jaringan mudah-mudahan hanya bekerja untuk kebanyakan orang, tetapi tampaknya pulseaudio dan saya tidak bergaul dengan baik: aku butuh jam . [Selain "koneksi langsung", Anda juga dapat menggunakan metode "terowongan" yang dijelaskan lebih jauh ke bawah, tapi saya sarankan membaca ini dulu.]
Saya sekarang memiliki suara streaming desktop (fedora 17) ke pi. Saya telah meminimalkan /etc/pulse
file konfigurasi di kedua sisi. Di sisi desktop:
/etc/pulse/client.conf
# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713
Alamat LAN pi saya dengan port pulseaudio default. Tapi ada sesuatu yang membuat saya bingung untuk sementara waktu - dengan server yang ditentukan, pulseaudio bahkan tidak akan memulai:
> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.
Ini akan berjalan di latar depan (mungkin karena itu kemudian tidak membaca pulse-client.conf?). Namun , ternyata, Anda tidak harus menjalankannya sama sekali pada sisi desktop (pengiriman) , sesuatu yang tidak dijabarkan dalam pulseaudio docs. Menggunakannya lsof -i -P
tampak bahwa plugin tingkat bawah untuk berbagai pemutar media melakukan pekerjaan.
Jadi, satu baris "client.conf" itu sebenarnya yang Anda butuhkan di sisi desktop / klien, jika semua yang akan Anda lakukan adalah menggunakan jaringan (tapi lihat "Namun Lebih Banyak Komplikasi", di bawah).
Meskipun pulseaudio daemon (di sisi penerima / server) dapat dijalankan sebagai layanan sistem, para pengembang pulsa merekomendasikan untuk tidak melakukannya , dan bahkan pada pi skrip init hanya menyebabkan peringatan dikeluarkan: Anda masih harus memulai itu sendiri. Fedora bahkan tidak memasukkan entri layanan boot systemd untuk itu.
Oleh karena itu, di sisi pi, Anda harus secara eksplisit memulai dan menghentikan proses server pulseaudio, yang dikonfigurasi dengan demikian:
/etc/pulse/daemon.conf
# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours
Anda dapat menggunakan -1 untuk exit-idle-time
menjaga agar daemon tetap berjalan tanpa batas. Waspadalah ini adalah detik dan standarnya adalah 20 (artinya ia akan tetap mati secara "misterius" jika Anda tidak menyetel ini).
/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
Karena ini adalah aplikasi jaringan, bukan ide yang baik untuk menjalankannya sebagai root. Namun, seperti disebutkan dalam man pulseaudio
, itu juga merupakan ide yang baik untuk "mengubah" proses untuk memberikan prioritas yang lebih tinggi. Anda dapat melakukan ini secara manual dengan nice
, tetapi pulseaudio akan melakukannya secara otomatis untuk root, atau anggota pulse-rt
grup, jika yang dapat dieksekusi adalah "setuid", yang berarti dapat menggunakan beberapa privilleges root dan kemudian beralih ke uid yang tidak terbongkar dengan benar ( ping
dan passwd
juga perlu melakukan ini). Jadi (sebagai root, atau sudo):
chmod u+s /usr/bin/pulseaudio
Tidak ada pulse-rt
grup yang dibuat saat pulseaudio diinstal pada raspbian, jadi:
groupadd pulse-rt
Ini akan memberi Anda gid seperti 1003. Tambahkan (misalnya) pi pengguna ke grup itu:
usermod -aG pulse-rt pi
Tetapi pada raspbian, Anda masih tidak akan dapat mengganti sebagai pi. Untuk itu, tambahkan ke /etc/security/limits.conf
:
@pulse-rt hard nice -20
@pulse-rt soft nice -20
Anda harus benar-benar menjalankan login sebelum perubahan ini terjadi; jika Anda menggunakan ssh dengan pi, gunakan saja login
. Sekarang Anda dapat memulai pulseaudio dan itu akan mengubah sendiri -11, yang mungkin merupakan prioritas lebih tinggi daripada sebagian besar proses lainnya (lihat nilai NICE di top
).
Saat memutar suara yang dialirkan dari jaringan, pulseaudio pada pi menggunakan sekitar 10% dari CPU dan jumlah memori yang sepele. :) Ini dan desktop saya ada di LAN kabel; pulsa mengalirkan data pcm mentah (saya percaya), jadi penggunaan bandwidth sesuai dengan laju sampel sumber, 1 kB / dtk dan lebih tinggi. Sayangnya, ada kelambatan yang mencolok dalam suara jika Anda menonton video.
Namun Lebih Banyak Komplikasi ...
Sayangnya, tidak satu pun dari berbagai aplikasi suara dari PC saya langsung berfungsi; mpg123
tidak akan lari sama sekali. Untuk itu, pada fedora, Anda memerlukan mpg123-plugins-pulseaudio
paket. Untuk hal-hal flash di browser (misalnya, Anda), Anda perlu alsa-plugins-pulseaudio
(ini adalah apa yang sebenarnya terhubung ke server jauh). Distro lain harus memiliki paket serupa. Jika Anda pernah menggunakan pulseaudio sebelumnya (saya tidak), Anda mungkin sudah menginstalnya.
Lonceng dan peluit desktop KDE juga tidak berfungsi. Ini adalah masalah yang lebih sulit untuk diselesaikan, karena mencari server pulseaudio lokal, dan seperti yang dijelaskan, menggunakan koneksi langsung berarti tidak ada server yang dapat dijalankan secara lokal. Cara mengatasinya adalah dengan menggunakan metode "terowongan".
module-tunnel-sink
Ini adalah cara lain yang disebutkan dalam pulseaudio docs. Dalam hal ini, Anda memiliki server yang berjalan di kedua sisi dan satu tangan ke tangan yang lain. Untuk melakukan ini, beri komentar "default-server" /etc/client.conf
dan tambahkan lokal yang /etc/default.pa
mengandung:
load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1
Jika Anda tidak memasukkan sink_name
, pulseaudio tidak akan memulai. Yang sink
mengacu pada nama wastafel di sisi pi, yang kemudian juga membutuhkan nama; tambahkan yang sesuai sink_name
ke module-alsa-sink
baris di default.pa
sana:
load-module module-alsa-sink device=hw:0,0 sink_name=bcm1
Mulai server di kedua sisi dan presto ... semacam. Sementara semua hal termasuk KDE bleep sekarang dilakukan, pemutaran browser flash tergagap. Namun, di bawah lingkungan desktop lain (sebenarnya, hanya manajer jendela, fvwm) itu baik-baik saja.
Saya suka KDE tetapi bisa hidup tanpa bleep, jadi untuk sekarang saya akan tetap menggunakan koneksi langsung.
Penyelesaian masalah
Jika Anda memiliki masalah, menggunakan pulseaudio -vvvv --log-level=debug
pada pi menyediakan banyak pesan debug. Awalnya ketika saya tidak bisa mendapatkan suara pada pi ini melaporkan masalah "terkait dengan bug pada driver bcm2835 ALSA" yang tampak aneh bagi saya karena suara itu baik-baik saja dengan hanya alsa, dan saya yakin ada perangkat lunak pi di sekitar yang tergantung pada pulseaudio - apt-get remove pulseaudio
dan instal ulang apt-get install pulseaudio
sepertinya memperbaiki ini ... Bukan solusi yang saya suka lihat, tapi hei, setidaknya sekarang saya bisa mendengarkan tish tanpa harus mencolokkan speaker ke setiap kotak. Kebanyakan.