Streaming audio live tramite FFMPEG


13

Provo a trasmettere in streaming audio dal vivo utilizzando ffmpegun microfono USB esterno. Ho seguito questo tutorial quasi

Ho dovuto adattare alcuni passaggi, ma alla fine ho raggiunto lo stream del mio laptop usando questo comando:

ffmpeg -f oss -i /dev/dsp1 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.28.116:1234

La CPU è vicina al 100%, ho un suono cattivo per due secondi e dopo niente ... Vedo a Wireshark che la scheda invia frame continuamente.

Qualcuno ha idee per ridurre l'utilizzo della CPU?


Potresti voler esaminare l'overclocking e una diversa suddivisione della memoria. Se hai la scelta del codec potresti essere in grado di ottenere qualche miglioramento cambiando. Potresti anche voler investigare la compressione del flusso - sebbene questo possa essere un guadagno pari a zero - tutto ciò che guadagni nel tempo di trasferimento potrebbe andare perso nella compressione.
Steve Robillard,

Hai provato prima a scrivere su un file locale? Proverei ad andare passo passo: 1) registrazione in tempo reale su un file wave, 2) registrazione in tempo reale su un file mp3 3) streaming di materiale in rete
pixelistik

non al momento. sembra complicato fare tutti questi passaggi manualmente invece di ffmpeg completamente automatico ;-)
hotips

Cosa stai registrando?
Alex Chamberlain,

1
Sto cercando di creare un babyphone ethernet
hotips il

Risposte:


7

Per rispondere alla tua domanda specifica, puoi ridurre la CPU collegando arecord a ffmpeg:

arecord -f cd -D plughw:1,0 | ffmpeg -i - -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://234.5.5.5:1234

Dovrai sostituire plughw: 1,0 con la tua scheda audio specifica. Vedi arecord -l per informazioni. Sul mio Rasp Pi è passato da ~ 95% CPU a ~ 35%.


6

Ingresso ALSA

Un'alternativa è quella di passare tramite ALSA. Un comando simile al precedente sarebbe

ffmpeg -ac 1 -f alsa -i hw:0,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://localhost:1234

Non sono sicuro di come ciò influirà sull'utilizzo della CPU.


Ho provato: ffmpeg -ac 1 -f alsa -i hw: 1,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp: //192.168.1.116: 1234 Ma ffmpeg si arresta in modo anomalo dopo alcuni secondi: [alsa @ 0x7a1510] Buffer ALSA xrun. Altre idee?
hotips

Ho provato ffmpeg -f oss -i / dev / dsp1 -ab 32k -ac 1 -re -f rtp rtp: //192.168.28.116: 1234 ma il suono è pessimo ... il ritardo è di circa 6 secondi. Qualche idea per avere una soluzione migliore?
hotips

1
@ si2w Penso che 32k per mp3 sia un po 'uno scherzo. O su quello, o provare un codec diverso. Forse una delle serie G2xx progettata per telefoni
Alex Chamberlain,

3

Funziona e riduce l'utilizzo della cpu:

ffmpeg -f alsa -i default:CARD=U0x46d0x819 -acodec mp2 -ac 1 -re -f rtp rtp://234.5.5.5:1234 2> /tmp/mylog.log &

Assicurati di sostituire il valore predefinito: CARD = U0x46d0x819 con il tuo ID microfono, (ottenuto da arecord -l) o devi specificare -i hw:0,0(o qualunque dispositivo sia).

Ho avuto un problema simile - la codifica mp3 ha assorbito il 90% + della potenza della cpu e non riuscivo a tenere il passo con l'audio - quindi l'ho cambiata in codifica mp2. Questo ha utilizzato circa il 15-18% della CPU (misurato vi top) e trasmette senza problemi a VLC sulla mia LAN. Sarebbe un baby monitor perfetto, o qualsiasi altra cosa. C'è solo un secondo circa di ritardo, ovvero il buffering alla fine del VLC.

Nota: l'indirizzo IP è un indirizzo multicast ([224-239] .xyz). Non è necessario puntarlo su un determinato dispositivo di rete sulla LAN e il router a banda larga manterrà il traffico locale (per impostazione predefinita).


2

È possibile ridurre in modo significativo il carico della CPU riducendo la frequenza di campionamento audio del dispositivo di input ( -ar 8000 prima -f alsa ) e impostando la velocità di trasmissione audio del codec su 128k ( -b:a 128k). Anche ironicamente ridurre il numero di canali ( -ac 1) sembrava aumentare il carico della CPU, quindi ho scoperto che questo comando funziona a CPU piuttosto bassa:

ffmpeg -ar 8000 -f alsa -i hw:0 -acodec mp2 -b:a 128k -f rtp rtp://other:4444

Sebbene sia necessario ricordare che dipende anche dalle capacità dell'hardware di acquisizione che si sta tentando di utilizzare e dalle versioni di ffmpeg / avconv.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.