Hay dos posibilidades que conozco, para reproducir el sonido de un entorno Linux en un dispositivo Android:
- Juega a través de las bibliotecas nativas de ALSA
- La corriente a través de PulseAudio
- Reenvío al Servidor X (en el socket UNIX o TCP)
- Stream sobre IP (TCP), por ejemplo, cuando se utiliza VNC
La segunda y tercera opción funcionan a través de PulseAudio
bibliotecas, es decir, diferentes módulos y protocolos ( pulseaudio
debe ser instalado en la distro de Linux) mientras que el primero funciona de forma nativa a través de los módulos/controladores del kernel de ALSA.
Pero los controladores de ALSA cargados por Android no pueden ser controlados (al menos yo no podría) a través de las herramientas estándar del espacio de usuario de Linux de manera sencilla porque no son compatibles (consulte los cambios en el núcleo de Linux por Google, y los bloques propietarios de código cerrado que proporcionan soporte de hardware). Sin embargo el kernel de Android lista los dispositivos en /dev/snd
que puede ser manipulado para dirigir a ALSA hacia la tarjeta de sonido de Android. El tutorial completo se puede encontrar aquí . Funciona, pero no para todos los formatos de sonido. El proyecto ALSA es aquí .
También hay soluciones más personalizadas que funcionan con ALSA y PulseAudio, ambas como El demonio del reproductor de música .
Servidor X:
XSDL Server
es la única aplicación Android de servidor X bien desarrollada que conozco, no más desarrollada por desgracia. Tiene un servidor PulseAudio incorporado con module-cli-protocol-tcp
ya cargado, escuchando en el puerto estándar 4712
por defecto. Una vez iniciada la X Session en Linux, podemos dirigir el sonido desde las librerías cliente de Linux PulseAudio al servidor XDSL PulseAudio configurando la siguiente variable de entorno en Linux:
$ export PULSE_SERVER=tcp:127.0.0.1:4712
* 127.0.0.1 indica que Linux y XDSL funcionan en el mismo dispositivo
O para establecer permanentemente, editar el archivo:
# /etc/pulse/client.conf or ~/.config/pulse/client.conf
default-server = tcp:127.0.0.1:4712
Ahora cualquier reproductor de medios que funcione en este entorno y que utilice las librerías cliente de PulseAudio, transmitirá su audio a la aplicación XDSL. Puede reenviar la visualización y el sonido de la sesión X al servidor X que se ejecuta en un PC también, pero eso necesita una configuración más complicada.
VNC:
El protocolo VNC por defecto no soporta el sonido. Sin embargo, el servidor PulseAudio puede transmitir por TCP usando diferentes protocolos como vemos en la sección anterior. Hay aplicaciones disponibles para Android que pueden reproducir simple protocol
uno es Simple Protocol Player
. Para esto necesitamos cargar el módulo de PulseAudio relacionado.
Para configurar el demonio local de PulseAudio, primero comente las siguientes líneas:
# /etc/pulse/default.pa
#ifexists module-console-kit.so
#load-module module-console-kit
#.endif
De lo contrario, el demonio no se iniciará si /usr/lib/pulse*/modules/module-console-kit.so
existe pero consolekit
El paquete no está instalado (que está desactualizado, reemplazado por systemd-login
y ya no está presente en muchos repositorios de Linux).
Asegúrate de que autospawn
se establece en yes
para que no tengamos que iniciar el demonio manualmente y se inicie automáticamente por el entorno de escritorio. No es necesario si iniciamos el demonio manualmente.
# /etc/pulse/client.conf
# Autospawn a PulseAudio server/daemon when needed
autospawn = yes
Ahora inicia el demonio de pulsación de audio y anota el valor de la fuente, para mí es auto_null.monitor
:
$ pulseaudio --start && pactl list | grep -A2 -i RUNNING
$ DISPLAY=:0 pulseaudio --start
Cargar el módulo de protocolo simple:
$ DISPLAY=:0 pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=auto_null.monitor record=true port=8000 listen=127.0.0.1
O para establecer permanentemente, editar el archivo:
$ echo 'load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=auto_null.monitor record=true port=8000 listen=127.0.0.1' >> /etc/pulse/default.pa
Lo siguiente debería estar habilitado en la configuración de inicio de DE, necesario porque algunos programas como emixer
en Enlightenment
El entorno de escritorio funciona sólo si se publica el servidor PulseAudio en el servidor local X:
$ DISPLAY=:0 start-pulseaudio-x11
Inicie la aplicación Simple Player y el juego bitrate
y port
establecido en el comando anterior, es decir. 48000
y 8000
en mi caso. No uses listen=127.0.0.1
si quieres escuchar en la PC también.
He probado ambas soluciones basadas en PulseAudio en ArchLinuxARM
y Ubuntu
y trabajan sin acceso a root. Sin embargo SELinux
puede restringir el acceso a ciertos recursos si se ejecuta en un contexto no root. Además, para obtener acceso a la red y crear sockets, tienes que ser miembro de inet (3003) grupo necesariamente. Todas las aplicaciones con Permiso de Android. INTERNET concedido son miembros de este grupo.
0 votos
¿Cuál es tu cliente, Linux o Termux? ¿En qué ordenador está intentando que funcione el audio, en el cliente o en el servidor? ¿En qué dispositivo está instalado PulseAudio?