Jedenfalls die schiere Rechenleistung eines BeagleBone betreffend, ganz klar ja.
Nein. Die diente in den Beispielen nur als ‘Lager’ einer vorher erzeugten und für alle Tests identischen Audioquelle. Wenn die Karte nötig wäre, könnte man sie nach kurzer Zeit nicht mehr benutzen.
Das ist stark vom realisierbaren bzw. noch zu vertretenden Ressourcenverbrauch abhängig, v.a. RAM und Interrupt-Last.
Zwei Beispiele mit gstreamer
zur Demonstration, daß die SD-Karte oben nur für die Vergleichbarkeit diente:
Im folgenden eine gstreamer-Zeile, die per ALSA den Input einer externen 2-kanaligen Audiokarte zu flac kodiert, wieder auspackt, dekodiert und auf dem Audio-out per default pulse-Senke ausgibt (ein I2S-Mikro würde z.B. auch im ALSA repräsentiert werden):
-
gst-launch-1.0 alsasrc device=hw:1 ! flacenc quality=0 blocksize=200 ! flacparse ! flacdec ! pulsesink
Hier zweigeteilt: Sender nimmt per ALSA auf, kodiert in FLAC und stellt das an einem TCP socket bereit:
-
gst-launch-1.0 alsasrc device=hw:1 ! flacenc quality=0 blocksize=2000 ! tcpclientsink host=localhost port=5002
Empfänger holt payload am socket ab, dekodiert und gibt akustisch per ALSA-Senke aus:
-
gst-launch-1.0 tcpserversrc host=localhost port=5002 ! flacparse ! flacdec ! alsasink sync=false
Obwohl zur Demo funktionierend, ist das im WAN unpraktisch; man wird die Audio-payload (1…n Kanäle) eher in einen ogg-Container legen, welcher mit RTP (sowie RTSP resp. RTCP) gestreamed wird. Und um sich zusätzlichen Streß mit firewalls, Endkunden-Routern usw. zu ersparen, will man vielleicht RTSP über HTTP tunneln. - Das alles ist für ‘near real-time’, sobald die upload-Bandbreite der WAN-Verbindung kleiner ist als die erfaßte Audiomenge, muß ggf. doch wieder eine SD o.ä. als Zwischenspeicher verwendet werden - wenn dieser Buffer nicht im RAM angelegt werden soll/kann. Auch muß man nicht zwingend an streaming denken, wenn das System Massenspeicher hat und chunks zunächst als files ablegen soll - dann kann eine chain aus arecord
, sox
usw. sinnvoller sein (oben beschrieben von @Andreas, u.a. realisiert von @mhies). OSBH hat dafür ein sinnvolles naming scheme gebaut.