Instalei o raspbian no meu Pi e configurei um coletor PulseAudio com a intenção de transmitir todo o áudio da minha área de trabalho para um Pi, acionando os alto-falantes.
Eu segui essa boa descrição: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=11124
A princípio, isso pareceu funcionar sem problemas. No entanto, o áudio enviado da área de trabalho está constantemente gaguejando no Pi, como se houvesse constantes interrupções de buffer com apenas algumas amostras ausentes no meio.
Passei o dia inteiro tentando encontrar a causa, mas sem sucesso. A configuração básica é:
- conexão LAN com fio
- raspbian pi mais recente (26 de setembro de 2013) com as atualizações de firmware mais recentes
- PulseAudio 2.0 em ambos os lados (desktop Ubuntu)
- Reprodução através de mplayer, totem, ffplay
- transmissão de rede via module-native-protocol-tcp
Isto é o que eu tentei:
- A reprodução de áudio diretamente no Pi funciona perfeitamente.
- A transmissão para outros computadores (desktop) funciona bem.
- O envio de áudio com uma conexão direta (especificando $ PULSE_SERVER) funciona muito bem com muito pouca gagueira, mas ainda propenso ao Problema-2 (veja abaixo)
- O envio de áudio via tunelamento PulseAudio da área de trabalho oferece gagueira constante
- Aumentar prioridades / agendamento em tempo real ... não ajudou
- Fixar a taxa de amostragem para 48 kHz ... não ajudou
- Definir o algoritmo de reamostragem como "trivial" ... não ajudou
- Ajustar fragmentos padrão / tamanho do fragmento ... não ajudou
Não consigo encontrar nenhuma indicação de problema nos logs do PulseAudio (mostrados a partir do momento em que iniciei a reprodução):
D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun. D: [alsa-sink] sink-input.c: Requesting rewind due to uncorking D: [pulseaudio] sink.c: Suspend cause of sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo is 0x0000, resuming I: [alsa-sink] alsa-sink.c: Trying resume... I: [alsa-sink] alsa-util.c: cannot disable ALSA period wakeups D: [alsa-sink] alsa-util.c: Maximum hw buffer size is 341 ms D: [alsa-sink] alsa-util.c: Set buffer size first (to 16384 samples), period size second (to 16384 samples). I: [alsa-sink] alsa-util.c: ALSA period wakeups were not disabled D: [alsa-sink] alsa-sink.c: Latency set to 25.00ms D: [alsa-sink] alsa-sink.c: hwbuf_unused=60736 D: [alsa-sink] alsa-sink.c: setting avail_min=15665 I: [alsa-sink] alsa-sink.c: Time scheduling watermark is 15.00ms I: [alsa-sink] alsa-sink.c: Resumed successfully... I: [alsa-sink] alsa-sink.c: Starting playback. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [pulseaudio] module-suspend-on-idle.c: Sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo becomes busy. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] ratelimit.c: 115 events suppressed D: [alsa-sink] alsa-sink.c: Wakeup from ALSA! ... no more output, but stuttering continues ...
Problema 2: como dito acima, posso obter um áudio bastante bom com uma conexão direta. No entanto, após alguns pulos no fluxo (usando o mplayer), o servidor PulseAudio trava e não reproduz nenhum áudio. Às vezes, pode ser revivido reiniciando o mplayer. Às vezes, ele trava tanto que o PulseAudio precisa ser reiniciado. Às vezes, até trava quando apenas altero o nível do volume.
De acordo com os documentos do PulseAudio, a vantagem de uma conexão direta sobre uma conexão com túnel é ter um melhor controle de buffer, o que parece indicar por que obtenho um bom áudio com a conexão direta: http://www.freedesktop.org/wiki/Software / PulseAudio / Documentação / Usuário / Rede /
Estou sem idéias agora. O que poderia causar a gagueira e o Problema 2? Apenas uma idéia de como proceder a depuração também seria apreciada.