Tento transmitir áudio ao vivo usando ffmpeg
um microfone USB externo. Eu segui este quase tutorial
Tive que adaptar algumas etapas, mas finalmente consegui receber o stream do meu laptop usando este comando:
ffmpeg -f oss -i /dev/dsp1 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.28.116:1234
A CPU está perto de 100%, tenho um som ruim durante dois segundos e depois de nada ... Vejo no Wireshark que a placa está enviando quadros continuamente.
Alguém tem idéias para diminuir o uso da CPU?
Respostas:
Para responder sua pergunta específica, você pode reduzir a CPU canalizando um registro no ffmpeg:
Você precisará substituir plughw: 1,0 por sua placa de som específica. Veja arecord -l para informações. No meu Rasp Pi passou de ~ 95% da CPU para ~ 35%.
fonte
Entrada ALSA
Uma alternativa é ir via ALSA. Um comando semelhante ao acima seria
Não tenho certeza de como isso afetará o uso da CPU.
fonte
Isso funciona e reduz o uso da CPU:
Certifique-se de substituir o padrão: CARD = U0x46d0x819 pelo ID do microfone (obtido de um registro -l) ou você especifica cad
-i hw:0,0
(ou qualquer outro dispositivo).Eu tive um problema semelhante - a codificação mp3 ocupava mais de 90% da energia da CPU e simplesmente não conseguia acompanhar o áudio - então mudei para codificação mp2. Isso usou cerca de 15 a 18% da CPU (medida vi
top
) e transmite sem problemas para o VLC na minha LAN. Seria um monitor de bebê perfeito, ou o que quer. Há apenas um segundo mais ou menos, que é o buffer no final do VLC.Nota: O endereço IP é um endereço multicast ([224-239] .xyz). Você não precisa apontar para um dispositivo de rede específico na sua LAN, e seu roteador de banda larga manterá o tráfego local (por padrão).
fonte
Você pode reduzir significativamente a carga da CPU, reduzindo a taxa de amostragem de áudio do dispositivo de entrada (
-ar 8000
antes-f alsa
) e definindo a taxa de bits de áudio do codec para 128k (-b:a 128k
). Ironicamente, a redução do número de canais (-ac 1
) pareceu aumentar a carga da CPU, então eu achei esse comando executado em uma CPU bastante baixa:Embora seja necessário lembrar que isso também depende dos recursos do hardware de captura que estamos tentando usar e das versões do ffmpeg / avconv.
fonte