Bir PulseAudio lavabo nasıl kurulur?


16

Bilgisayarımdaki tüm sistem seslerini yayınlamak için Raspberry Pi'mde bir PulseAudio lavabo kurmaya çalışıyorum. Bunu yapmanın en iyi yolu nedir?

Örneğin, film izlemek mümkün mü yoksa gecikme süresi çok mu yüksek? Bunu bir süre önce gstreamer kullanarak denedim, ancak yaklaşık 2 saniyelik bir gecikmeyle, bu da gereksinimlerim için işe yaramaz.


1
Bir iki saniye gecikme yaşıyorum.
goldilocks

Yanıtlar:


19

Resmi talimatlar çoğu insan için bir ağ üzerinde bir "doğrudan bağlantı" umarım sadece iş yaratmak için, ancak pulseaudio görünüyor ve bunu iyi geçiniyor yok: bu götürdü saatleri . ["Doğrudan bağlantı" nın yanı sıra, aşağıda açıklanan "tünel" yöntemini de kullanabilirsiniz, ancak önce bunu okumanızı öneririz.]

Şimdi pi'ye (fedora 17) masaüstü akış sesim var. Her /etc/pulseiki taraftaki yapılandırma dosyalarını küçülttüm. Masaüstü tarafında:

/etc/pulse/client.conf

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

Pi'nin LAN adresi, varsayılan pulseaudio portu ile. Ama işte o zaman bir süredir kafam karıştı - bir sunucu belirtildiğinde, pulseaudio bile başlamazdı:

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

Ön planda çalışır (muhtemelen o zaman pulse-client.conf? Ancak , ortaya çıktığı gibi, onu masaüstü (gönderme) tarafında çalıştırmanıza gerek yoktur , pulseaudio belgelerinde belirtilmeyen bir şey. lsof -i -PBunu kullanarak , çeşitli medya oynatıcılar için daha düşük seviye eklentiler işi yapar gibi görünüyor.

Yani, bir satır "client.conf" aslında masaüstü / istemci tarafında ihtiyacınız olan tek şeydir, eğer yapacağınız tek şey ağı kullanmaksa (ancak aşağıdaki "Daha Fazla Komplikasyon" a bakınız).

Pulseaudio arka plan programı (alıcı / sunucu tarafında) bir sistem hizmeti olarak çalıştırılabilse de, nabız geliştiricileri buna karşı tavsiye eder ve aslında pi'de init betiği sadece bir uyarı verilmesine neden olur: yine de başlatmanız gerekir kendiniz. Fedora bunun için bir systemd önyükleme hizmeti girişi bile içermez.

Bu nedenle, pi tarafında, bu şekilde yapılandırılmış pulseaudio sunucu işlemini açıkça başlatmalı ve durdurmalısınız:

/etc/pulse/daemon.conf

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

Sen kullanabilirsiniz -1 için exit-idle-timesüresiz çalışan cini tutmak. Bu saniye ve varsayılan 20 (bu ayarlamazsanız "gizemli" ölmeye devam edecek) dikkat edin.

/etc/pulse/default.pa'yı

# 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

Bu bir ağ uygulaması olduğundan, root olarak çalıştırmak iyi bir fikir değildir. Ancak, daha önce de belirtildiği gibi man pulseaudio, süreci daha yüksek bir öncelik vermek için "yeniden adlandırmak" iyi bir fikirdir. Bunu manuel olarak yapabilirsiniz nice, ancak pulseaudio bunu kök veya pulse-rtgrup üyeleri için otomatik olarak yapar , eğer yürütülebilir dosya "setuid" ise, bazı kök ayrıcalıklarından yararlanabilir ve daha sonra doğru ayrılmamış uid'e geçebilir ( pingve passwdAyrıca bunu yapmak gerekir). Yani (kök veya sudo olarak):

chmod u+s /usr/bin/pulseaudio

pulse-rtPulpeaudio raspbian'a yüklendiğinde oluşturulan grup yok , bu yüzden:

groupadd pulse-rt

Bu size 1003 gibi bir yön verir. Bu gruba kullanıcı pi'yi ekleyin (örn.):

usermod -aG pulse-rt pi

Ama raspbian'da, pi olarak yeniden karar veremezsiniz. Bunun için şunu ekleyin /etc/security/limits.conf:

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

Bu değişiklikler gerçekleşmeden önce bir oturum açmanız gerekir; Eğer pi ile ssh kullanıyorsanız, sadece kullanın login. Şimdi pulseaudio'yu başlatabilirsiniz ve kendini -11 olarak yeniden adlandırır, ki bu muhtemelen diğer işlemlerin çoğundan daha yüksektir (NICE değerine bakın top).

Ağdan akan sesi çalarken, pi'deki pulseaudio CPU'nun yaklaşık% 10'unu ve önemsiz miktarda belleği kullanır. :) Bu ve masaüstüm kablolu bir LAN'da; darbe ham pcm veri akışı (inanıyorum), bu nedenle bant genişliği kullanımı kaynağın örnek hızına karşılık gelir, 1 kB / s ve üstü. Ne yazık ki, video izliyorsanız seste belirgin bir gecikme var.

Daha Fazla Komplikasyon ...

Ne yazık ki, bilgisayarımdaki çeşitli ses uygulamalarının hiçbiri hemen işe yaramadı; mpg123hiç çalışmaz. Bunun için fedora'da mpg123-plugins-pulseaudiopakete ihtiyacınız var . Tarayıcıdaki flash şeyler için (örneğin, youtude) ihtiyacınız vardır alsa-plugins-pulseaudio(bunlar aslında uzak sunucuya bağlanan şeydir). Diğer dağıtımların benzer paketleri olmalıdır. Daha önce pulseaudio kullanıyorsanız (ben değildim), bunları önceden yüklemiş olabilirsiniz.

KDE'nin masaüstü zilleri ve ıslıkları da işe yaramadı. Yerel bir pulseaudio sunucusu arar ve açıklandığı gibi, doğrudan bir bağlantı kullanmak, hiçbir sunucunun yerel olarak çalıştırılamayacağı anlamına gelir. Bunun yolu "tünel" yöntemini kullanmaktır.

Modül tünel lavabo

Bu, pulseaudio belgelerinde belirtilen diğer yoldur. Bu durumda, her iki tarafta çalışan bir sunucunuz var ve bir eliniz diğerine gidiyor. Bunu yapmak için, "varsayılan sunucu" alanına yorum yazın /etc/client.confve aşağıdakileri /etc/default.paiçeren bir yerel ekleyin :

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

Bir koymazsanız sink_namein, pulseaudio başlamaz. Bu sink, daha sonra bir isme ihtiyaç duyan pi tarafındaki lavabo adını ifade eder; karşılık gelen eklemek sink_nameiçin module-alsa-sinkhat default.pavar:

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

Her iki tarafta sunucuyu başlatın ve ... KDE bipleri de dahil olmak üzere her şey taşınırken, tarayıcı flash oynatımı kötü bir şekilde kekeledi. Ancak, başka bir masaüstü ortamında (aslında, sadece bir pencere yöneticisi, fvwm) iyiydi.

KDE'yi seviyorum ama uykusuz yaşayabilirim, bu yüzden şimdilik doğrudan bağlantıya bağlı kalacağım.

Sorun giderme

Sorun yaşarsanız pulseaudio -vvvv --log-level=debug, pi'de kullanmak çok sayıda hata ayıklama mesajı sağlar. Başlangıçta pi ses alamadım zaman bu ses sadece alsa ile iyi olduğundan bana garip görünüyordu "ALSA bcm2835 sürücüsündeki bir hata ile ilgili" bir sorun bildirdi ve eminim ki etrafında pi yazılımı var bağlıdır pulseaudio'da - apt-get remove pulseaudiove yeniden kurulum apt-get install pulseaudiobunu düzeltiyor gibiydi ... Görmeyi sevdiğim bir çözüm değil, ama hey, en azından şimdi her kutuya hoparlör takmadan tish dinleyebiliyorum. Çoğunlukla.


Kapsamlı cevap için teşekkürler. Ancak bir soru: doğrudan Pi'den gelen ses ile ne olur?
Vincent

Eğer hiç denemediysem Dunno (bunu artık yapmıyorum) ama pulseaudio'nun çoklayıcı olması gerekiyordu, bu yüzden çalışmalı.
goldilocks
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.