Forum: Mikrocontroller und Digitale Elektronik MP3 HTTP Stream vom Mikrocontroller


von Robert (Gast)


Lesenswert?

Hey Leute,

ich arbeite grad an einem Projekt (auf Basis von einem STM32F7) und 
möchte den Sound den ich über ein PDM Mikrofon aufzeichne über einen 
HTTP-MP3 Stream ausgeben (ähnlich wie bei einem Webradio z.B.) sodass 
ich den Sound über Windows-Media-Player oder VLC am PC abhören kann.

Das Netzwerk-Interface inklusive lwIP habe ich zum laufen bekommen 
inzwischen und kann einen generischen TCP-Server starten (aktuell noch 
ein Echo bei mir - aber sollte dann easy sein ein paar HTTP Header + 
raw-content zu senden).

Das PDM Mikrofon inklusive Filterung zu PCM läuft auch inzwischen (sende 
die PCM samples aktuell über eine USB-CDC an meinen computer wo ich es 
in ein wav-file abspeichere und der Sound ist sauber).


Zu meiner Schande muss ich gestehen - ich habe noch nie was mit mp3 
encoding/decoding gemacht und wirklich gute Infos oder gute 
(minimalistische) Beispielprojekte finde ich auch nicht im Internet.

Ein paar Sachen die ich herausfinden konnte:
- viele Webradios arbeiten mit einem Shoutcast Protokoll (das heißt 
zwischendurch kommen immer mal wieder Metadaten durch) -> das würde ich 
gerne verhindern weil ich das nicht brauche.
- MP3 lässt anscheinend nicht wirklich Blockweise kodieren? (das wäre 
bei mir aber so weil ich das PDM ja per DMA anfahre und dann immer 
callbacks alle 64 samples bekomme).

Meine Idee wäre wirklich:
-> Client sendet HTTP-GET request an den uC
-> uC antwortet mit einem HTTP Header und danach werden konstant 
MP3-chunks geflutet (natürlich mit MP3-Header am Anfang).

Kann mir da vielleicht mal einer auf die Sprünge helfen ob es nicht 
vielleicht doch irgendwo ein Projekt gibt? Der MP3-Encoder müsste 
natürlich so effizient sein, dass er auf dem cortex-m7 laufen muss.

Danke!

von c-hater (Gast)


Lesenswert?

Robert schrieb:

> Zu meiner Schande muss ich gestehen - ich habe noch nie was mit mp3
> encoding/decoding gemacht und wirklich gute Infos oder gute
> (minimalistische) Beispielprojekte finde ich auch nicht im Internet.

Das liegt daran, dass MP3 halt schon recht komplex ist. Das kann man 
einfach nicht in zehn Zeilen Code abhandeln.

> - MP3 lässt anscheinend nicht wirklich Blockweise kodieren?

Quatsch. MP3 arbeitet im Gegenteil von Hause aus fast auschließlich 
blockweise. Die "Blocks" heißen hier nur Frames.

von hui (Gast)


Lesenswert?


von hui (Gast)


Lesenswert?

ach nee.

von Robert (Gast)


Lesenswert?

hui schrieb:
> lmgtfy
>
> https://www.esp32.com/viewtopic.php?t=9186

Danke für den Tipp.
Die Shine-Library sieht recht interessant aus. Ich werde es einfach mal 
probieren damit ;-)

von Jim M. (turboj)


Lesenswert?

MP3 Encoding ist verdammt aufwändig auf einem µC, da ist dein STM32F7 
komplett ausgelastet IMHO.

Ethernet/WLAN ist für unkomprimierten Stereo Sound in CD Qualität 
schnell genug.

IMHO müsste man mit RTP auch unkomprimierten Sound übertragen können.

von Schlaumaier (Gast)


Lesenswert?

Man muss das Projekt in 3 Schritte unterteilen.

Schritt 1 : das Gesprochene in mp3 umzuwandlen. Dazu gibt es wie auch 
für die Wiedergabe inzwischen fertige Chips.  Da heißt es dann nur 
Datenblatt lesen. Aber ich weiß aktuell keine Typenbezeichnung. Aber ich 
habe so Chips schon gesehen.  Werden z.b. in modernen Diktiergeräten 
verbaut. Die Teile die das Gelabere auf die SD-Karte schaffen.

Schritt 2 : Ist eigentlich der einfachste. Einfach die umgewandelten 
Daten seriell oder via Protokoll (Http reicht völlig, macht das Webradio 
auch) zu senden.

Schritt 3. Den Datenstrom wieder in Töne umwandeln. Das ist auch nicht 
besonders schwer. Passende Elektronik gibts aus China für 5 Euro.

Hier sogar eine Art Schaltplan dazu.
https://manualzz.com/doc/8779228/mp3-artikel-in-mikroc-f%C3%BCr-dspic

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.