Intento transmitir audio en vivo usando ffmpeg
un micrófono USB externo. Seguí este casi tutorial
Tuve que adaptar algunos pasos pero finalmente logré recibir la transmisión de mi computadora portátil usando este comando:
ffmpeg -f oss -i /dev/dsp1 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.28.116:1234
La CPU está cerca del 100%, tengo un sonido malo durante dos segundos y después de nada ... Veo en Wireshark que la placa está enviando cuadros continuamente.
¿Alguien tiene ideas para reducir el uso de la CPU?
Respuestas:
Para responder a su pregunta específica, puede reducir la CPU colocando un registro en ffmpeg:
Tendrá que reemplazar plughw: 1,0 con su tarjeta de sonido específica. Ver arecord -l para más información. En mi Rasp Pi pasó de ~ 95% de CPU a ~ 35%.
fuente
Entrada ALSA
Una alternativa es ir a través de ALSA. Un comando similar al anterior sería
No estoy seguro de cómo esto afectará el uso de la CPU.
fuente
Esto funciona y reduce el uso de la CPU:
Asegúrese de reemplazar el valor predeterminado: CARD = U0x46d0x819 con su ID de micrófono, (obtenido de arecord -l) o puede especificarlo
-i hw:0,0
(o el dispositivo que sea).Tuve un problema similar: la codificación de mp3 ocupaba más del 90% de la potencia de la CPU y simplemente no podía seguir el ritmo del audio, así que lo cambié a codificación mp2. Esto usó alrededor del 15-18% de la CPU (medida vi
top
) y se transmite sin problemas a VLC en mi LAN. Sería un monitor de bebé perfecto, o lo que sea. Solo hay un segundo retraso, que es el almacenamiento en búfer en el extremo VLC.Nota: La dirección IP es una dirección de multidifusión ([224-239] .xyz). No tiene que apuntar a un dispositivo de red en particular en su LAN, y su enrutador de banda ancha mantendrá el tráfico local (por defecto).
fuente
Puede reducir significativamente la carga de la CPU reduciendo la frecuencia de muestreo de audio del dispositivo de entrada (
-ar 8000
antes-f alsa
) y configurando la frecuencia de bits de audio del códec a 128k (-b:a 128k
). Irónicamente, la reducción de la cantidad de canales (-ac 1
) parecía aumentar la carga de la CPU, por lo que he encontrado que este comando se ejecuta en una CPU bastante baja:Aunque uno debe recordar que también depende de las capacidades del hardware de captura que uno está tratando de usar, y las versiones de ffmpeg / avconv.
fuente