Ich nutze den Code von https://github.com/educ8s/ESP32-Web-Radio-Simple (modifiziert für den ESP8266).
Er ist "erschreckend" einfach ... und funktioniert. So weit, so gut.
Er hat lediglich ein paar Probleme mit Verbindungsschwankungen, dann fängt die Übertragung an zu springen bzw. kurz zu pausieren.
Im Verdacht habe ich dabei, dass bei jedem loop() nur 32 Bytes gelesen und abgespielt werden. Daher wollte ich einen einfachen Buffer einbauen, der erst einmal gefüllt wird, dann spielt der Player einen Abschnitt des Buffers, während dieser parallel weiter gefüllt bzw. modifiziert wird.
Mir ist dabei aufgefallen, dass folgendes nicht äquivalent zu sein scheint:
Code:
// Originalcode ... funktioniert
void loop() {
...
if (client.available() > 0)
{
uint8_t bytesread = client.read(mp3buff, 32);
player.playChunk(mp3buff, bytesread); // bytesread ist immer 32
}
...
}
Code:
// Das funktioniert leider nicht
bool written = false;
void loop() {
...
if (client.available() > 0 && !written)
{
uint8_t bytesread = client.read(mp3buff, 32);
written = true;
}
if(written) {
player.playChunk(mp3buff, 32);
written = false;
}
...
}
Ich weiß, das sieht erst einmal sinnfrei aus, ich wollte eigentlich nur das Einlesen in den Buffer vom eigentlichen Abspielen trennen, damit ich "in Ruhe" den Buffer befüllen kann.
Leider gibt aber der zweite Code bei player.playChunk(...) immer eine Exception (9) aus. Irgendwas stimmt hier nicht ... habt ihr eine Idee?
Lesezeichen