Input-Pegel einer USB-Soundkarte erfassen verursacht massiven Netzwerk-Traffic

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
joginet
User
Beiträge: 3
Registriert: Montag 4. März 2019, 19:08

Hallo Forum,

bin neu hier, blutiger Anfänger und stelle mal meine Erste Frage:

Ich habe einen PI abgestellt, an dem eine USB-Soundkarte angeschlossen ist.
Per VLC-PLayer schicke ich den Input der Karte als Stream an meinen Squeeze-Server:

Code: Alles auswählen

cvlc pulse://alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo :sout='#transcode{vcodec=none,acodec=mp3,ab=320,channels=2,samplerate=44100}:http{dst=:8081/stream.mp3}' :no-sout-rtp-sap :no-sout-standard-sap
Das funtioniert soweit. Ich möchte jetzt den Stream beenden, sobald kein Signal am Line-In meiner USB-Karte anliegt.
Ich mache das mit zwei Instanzen von soundmeter (https://pypi.org/project/soundmeter/):

Code: Alles auswählen

soundmeter --trigger +200 3 --action exec --exec streamstart.sh

schaltet den Stream an, wenn Signalamplitude größer als 200 und

Code: Alles auswählen

soundmeter --trigger -200 70 --action exec --exec killvlc.sh
schaltet den Stream aus, wenn die Amplitude kleiner als 200 ist. Auch das funktioniert.

ABER: die Abfrage der Amplitude bringt mein Netzwerk zum glühen, mein Switch beginnt heftigst zu blinken sobald soundmeter läuft und auch das HMLAN-Gateway meiner FHEM-Hausautomation signalisert "overload" mit roter Lampe.

Selbst wenn ich anstelle von Soundmeter dieses kleine Diagnosescript laufen lasse, gibt es massiven Traffic:

Code: Alles auswählen

#!/usr/bin/python

import alsaaudio, time, audioop

inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NONBLOCK)

inp.setchannels(1)
inp.setrate(8000)
inp.setformat(alsaaudio.PCM_FORMAT_S8)

inp.setperiodsize(500)


while True:
    # Read data from device
    l,data = inp.read()
    if l:
        # Return the maximum of the absolute value of all samples in a fragment.
        print (audioop.max(data, 2))
    time.sleep(10)
Beim Stream selber ist das "Geblinke" normal.
Ich habe vermutlich die Alsa und Pulsaudio-Funktion nicht verstanden.

Frage: warum ist das mit dem Traffic so und wie kann ich
die Amplitude des Eingangs messen, ohne diesen für meinen Stream zu blockieren und
ohne meinen Switch in den Wahnsinn zu treiben?

Gruß, Jochen
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Kannst Du nicht beispielsweise mit Wireshark einfach mal schauen wer oder was da Traffic verursacht?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
joginet
User
Beiträge: 3
Registriert: Montag 4. März 2019, 19:08

Moin !
Ok - habe Wireshark installiert. Auf wlan0 wird massiv folgendes rausgeballert:

Code: Alles auswählen

7971	32.129373085	192.168.0.198	224.0.0.56	RTP	1334	PT=16-bit uncompressed audio, stereo, SSRC=0x3D9995D6, Seq=65516, Time=7026560
Mein Stream läuft definitiv nicht,vlc auch nicht - geprüft per htop.
Es passiert schon, wenn ich meine "Pegeldiagnose" laufen lassen, also z.B. auch das kleine Script.
Irgendetwas (pulseaudio?) scheint dafür zu sorgen, das da etwas "beim Anfassen der Soundkarte bzw. von ALSA" ins Netz geht.

Ein

Code: Alles auswählen

pkill -9 pulseaudio
sorgt für Ruhe.

Bin ratlos und würde gerne verstehen, warum das so ist.

Gruß, Jochen
joginet
User
Beiträge: 3
Registriert: Montag 4. März 2019, 19:08

Ich glaube, ich habe es gefunden:

https://bugs.freedesktop.org/show_bug.cgi?id=44777

in den Pulsaudio-Einstellungen

Code: Alles auswählen

paprefs
war der Multicast/RTP -Sender aktiviert. Ich habe den abgeschaltet und alles ist gut.
Allerdings stelle ich glaube ich mein Vorhaben mit dem Stream start/stop durch Audio-Pegerl-Monitoring zurück.

Weil:
Pi CPU-Last mit 2 Instanzen "soundmeter": ca. 18%
Pi CPU-Last mit Stream "im Leerlauf": ca. 6%

Gruß, Jochen
Antworten