Con suerte, las instrucciones oficiales para crear una "conexión directa" en una red solo funcionan para la mayoría de las personas, pero parece que pulseaudio y no me llevo tan bien: me llevó horas . [Además de "conexión directa", también puede usar un método de "túnel" descrito más abajo, pero recomiendo leer esto primero.]
Ahora tengo un sonido de transmisión de escritorio (fedora 17) a la pi. He minimizado los /etc/pulse
archivos de configuración en ambos lados. En el lado del escritorio:
/etc/pulse/client.conf
# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713
La dirección LAN de mi pi con el puerto predeterminado de pulseaudio. Pero aquí hay algo que luego me confundió por un tiempo: con un servidor especificado, pulseaudio ni siquiera comenzaría:
> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.
Se ejecutará en primer plano (probablemente porque no lee pulse-client.conf?). Sin embargo , como resultado, no tiene que ejecutarlo en absoluto en el lado del escritorio (envío) , algo que no se detalla en los documentos de pulseaudio. Al usarlo lsof -i -P
, parece que los complementos de nivel inferior para varios reproductores multimedia hacen el trabajo.
Entonces, esa línea "client.conf" es en realidad todo lo que necesita en el lado del escritorio / cliente, si todo lo que va a hacer es usar la red (pero vea "Aún más complicaciones", más abajo).
Aunque el demonio pulseaudio (en el lado receptor / servidor) se puede ejecutar como un servicio del sistema, los desarrolladores de pulse recomiendan no hacerlo , y de hecho en el pi, el script de inicio solo genera una advertencia: aún debe comenzar usted mismo Fedora ni siquiera incluye una entrada de servicio de arranque systemd para ello.
Por lo tanto, en el lado pi, debe iniciar y detener explícitamente el proceso del servidor pulseaudio, configurado de esta manera:
/etc/pulse/daemon.conf
# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours
Puedes usar -1 para exit-idle-time
mantener el demonio ejecutándose indefinidamente. Tenga en cuenta que estos son segundos y el valor predeterminado es 20 (lo que significa que seguirá muriendo "misteriosamente" si no configura esto).
/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
Como se trata de una aplicación de red, no es una buena idea ejecutarla como root. Sin embargo, como se mencionó anteriormente man pulseaudio
, también es una buena idea "cambiar el proceso" para darle una mayor prioridad. Puede hacerlo manualmente con nice
, pero pulseaudio lo hará automáticamente para root, o miembros del pulse-rt
grupo, si el ejecutable es "setuid", lo que significa que puede hacer uso de algunos privilegios de root y luego cambiar al uid sin privilegios correcto ( ping
y passwd
También necesito hacer esto). Entonces (como root o sudo):
chmod u+s /usr/bin/pulseaudio
No se pulse-rt
crea ningún grupo cuando pulseaudio está instalado en raspbian, entonces:
groupadd pulse-rt
Esto le dará un gid como 1003. Agregue (por ejemplo) usuario pi a ese grupo:
usermod -aG pulse-rt pi
Pero en raspbian, aún no podrás cambiar de nombre como pi. Para eso, agregue a /etc/security/limits.conf
:
@pulse-rt hard nice -20
@pulse-rt soft nice -20
Debe ejecutar un inicio de sesión antes de que se realicen estos cambios; si usa ssh con el pi, solo use login
. Ahora puede iniciar pulseaudio y se reactivará a sí mismo -11, lo que probablemente sea una prioridad más alta que la mayoría de los otros procesos (mire el valor NICE en top
).
Mientras reproduce sonido transmitido desde la red, pulseaudio en el pi utiliza aproximadamente el 10% de la CPU y una cantidad trivial de memoria. :) Él y mi escritorio están en una LAN cableada; el pulso transmite datos pcm sin procesar (creo), por lo que el uso del ancho de banda corresponde a la frecuencia de muestreo de la fuente, 1 kB / sy más. Desafortunadamente, hay un retraso notable en el sonido si está viendo un video.
Aún más complicaciones ...
Desafortunadamente, ninguna de las diversas aplicaciones de sonido de mi PC funcionó de inmediato; mpg123
no correría en absoluto. Para eso, en fedora, necesitas el mpg123-plugins-pulseaudio
paquete. Para material flash en el navegador (por ejemplo, youtude) necesita alsa-plugins-pulseaudio
(estos son los que realmente se conectan al servidor remoto). Otras distribuciones deben tener paquetes similares. Si ha estado usando pulseaudio antes (yo no lo estaba), es posible que ya los tenga instalados.
Las campanas y silbatos de escritorio de KDE tampoco funcionaron. Este es un problema más difícil de resolver, ya que busca un servidor de pulseaudio local y, como se describe, el uso de una conexión directa significa que no se puede ejecutar ningún servidor localmente. La forma de evitar esto es usar el método de "túnel".
módulo-túnel-sumidero
Esta es la otra forma mencionada en los documentos de pulseaudio. En este caso, tiene un servidor ejecutándose en ambos lados y una mano hacia la otra. Para hacer esto, comente el "servidor predeterminado" /etc/client.conf
y agregue un local que /etc/default.pa
contenga:
load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1
Si no pone un sink_name
pulso, pulseaudio no se iniciará. Se sink
refiere al nombre del sumidero en el lado pi, que luego también necesita un nombre; agregue un correspondiente sink_name
a la module-alsa-sink
línea default.pa
allí:
load-module module-alsa-sink device=hw:0,0 sink_name=bcm1
Inicie el servidor en ambos lados y listo ... más o menos. Si bien todo, incluidos los pitidos de KDE ahora se llevaron, la reproducción flash del navegador tartamudeó mucho. Sin embargo, en otro entorno de escritorio (en realidad, solo un administrador de ventanas, fvwm) estaba bien.
Me gusta KDE pero puedo vivir sin los pitidos, así que por ahora voy a seguir con una conexión directa.
Solución de problemas
Si tiene problemas, el uso pulseaudio -vvvv --log-level=debug
en pi proporciona muchos mensajes de depuración. Inicialmente, cuando no pude obtener sonido en el pi, esto informó un problema "relacionado con un error en el controlador ALSA bcm2835" que me pareció extraño ya que el sonido estaba bien con solo alsa, y estoy seguro de que hay un software pi que depende en pulseaudio, apt-get remove pulseaudio
y una reinstalación apt-get install pulseaudio
pareció solucionar esto ... No es una solución que me guste ver, pero bueno, al menos ahora puedo escuchar tish sin tener que enchufar los altavoces en cada caja. Principalmente.