Hallo, ich plane grade einen Webradio-Client auf Basis von Ulrich Radigs Webserver (www.ulrichradig.de). Hier mal mein grobes Konzept: Ein Shoutcast-Server schickt MP3-Stream an Ulrichs Webserver, der dann eigentlich kein Server mehr ist. Selbiger kümmert sich um das TCP/IP/HTTP Krams und leitet die MP3 Rohdaten an einen 2. AVR weiter. Dieser kümmert sich dann darum die Daten in einem 128-512KB RAM zu Puffern und den Stream zu einem VS1011B MP3-Decoder nicht abbrechen zu lassen. Und fertig ist der Musikgenuß. Der 2. AVR wird sich wahrscheinlich aus Pin-Mangel nicht umgehen lassen. So ein blödes RAM hat ziemlich viele Adressleitungen. Und ist Ulrichs Webserver überhaupt schnell genug für einen 128Kb MP3-Stream? Da meiner leider mangels Netzwerkkarte noch nicht fertig ist konnte ich bislang nicht testen. Währ für ein paar Kommentare und Anregungen oder Erfahrungswerte dankbar. Janik
Mit einem AVR wird es da schon relativ eng glaube ich. Eher würde ich da zu einem NAS oder so, wo ein linux drauf läuft. dann könntest du die oberfläche mit nem AVR regeln, das ganze TCP/IP würde dann das Linux machen, und auch das puffern wäre nicht so tragisch
Also ich mach das ganze mit einem PIC und funktioniert auch tadellos. Der kümmert sich sowohl um den Ethernet-Controller als auch MP3 Decoder.
Wie groß ist der code? wieviel RAM hast du dran?
sowas hatte ich mir auch shconmal überlegt. Allerdings fände ich nur die Single-Chip Lösung, also ARM7 mit integriertem Ethernet interessant. Aber da wirds mit der Geschwindigkeit (TCP/IP und MP3 dekodieren) vermutlich schon ziemlich eng.
Ich kann nur mal von meinen Erfahrungswerten berichten. Bei meinem Projekt handelt es sich allerdings nicht um einen Shoutcast Client, sondern um einen Mp3 player mit hdd. Die Songs werden aber übers Netzwerk drauf geladen. Nun mache ich das ganze mit einem enc28j60, der ja seriell angesteuert wird und das erst noch bei 'nur' 8mhz. Nun ja, ich bringe damit Transfers von 250kbyte/sek hin, dabei ist die Zeit das ganze auf die Hdd zu speichern aber auch scho dabei, ohne die Hdd(daten nur in einen Puffer im Sram schreiben) komme ich auf ~280kbyte/sec. Da Ulrichs Server ja den Rtl chip verwendet (und der ist ja paralell angeschlossen) denke ich, dass das locker genug schnell sein sollte(hab zwar keine Erfahrungen mit dem RTL, aber sollte von der Geschwindigkeit wegen eigentlich kein Problem sein :) Nik
@Thomas Wieviel RAM hast du dran? Was für RAM? Meine 128-512KB hat ich jetzt mal aus dem was man am PC so braucht abgeleitet. Sollte sich ja 1 zu 1 übertragen lassen? @Nik Danke, das macht ja Hoffnungen Und ich wollte das ganze eigentlich schon auf AVR machen, da AVRs billig sind, und für mich kein totales Neuland darstellen.
Also ich würde sagen, dass es auch mit einem Avr geht(ich verwende bei meinem einen atmega32) Bezüglich dem Ram kann man das glaube ich nicht so genau sagen. Wenn dein Server in deinem Home Netzwerk steht(stehen wird..), dann kann man eigentlich davon ausgehen, dass da keine grossen Unterbrüche vorhanden sein sollten. Zudem liegen die Ping zeiten da tiefer als im grossen, weiten WWW. Folglich brauchst du sicher weniger Ram, als wenn der Server, von dem du streams empfangen möchtest, im Internet steht. Denn dort gibts ja auch höhere Latenz zeiten, sprich: Du forderst ein Packet an und musst z.B. 100ms warten bis es 'endlich' hier ist. Da könnte ich mir schon vorstellen, dass du mehr Ram brauchst. Aber wieviel genau weiss ich auch nicht, habe leider noch nichts übers web streamer können(bei mir klappt Tcp noch nicht und somit auch kein http, damit wiederum kein Shoutcast ;) )
die idee ist schon nicht schlecht, und nen avr dazu zu verwenden sicherlich auch. leider halten sich meine c und asm faehigkeiten ein wenig in grenzen :-))
@nik bamert welchen tcp/ip stack benutzt du da? ein einfacher aller ulrich radig wird wohl kaum die 280kBytes machen, da er immer ein packet acked und dann das nächste usw. soweit ich weiss arbeitet der ohne windowing. im verbund mit nem windows client der ca.100ms braucht bis er den ACK des webservers wieder mit neuen daten beantwortet ist das wohl nicht drin. da kommt man gerade mal auf 10-15kBytes.
>da kommt man gerade mal auf 10-15kBytes.
Ich schaffe mit meinem avrETH stack momentan bis zu 38KByte/s
(schicke aber auch nur immer ein paket mit max 1000byte)
Bzw meine daten kommen von einem seriellen Dataflash.
Also 250KByte/s kommt mir auch viel vor...
Gruss, Simon
Ich hab ja gesagt UDP :-) Da gibts keine Acks und dergleichen. Ich benutze ein einfaches VisualBasic Programm... Der Transfer geht etwa so: 1024Bytes senden, der AVR verarbeitet diese und sendet ein "K" zurück, darauf kommen die nächsten 1024 Bytes. geht ein Packet verloren, bleibt auch die Antwort vom avr aus, Datentransfer wird unterbrochen. Doch Im Heimnetzwerk ohne Wlan geht selten ein Packet verloren, hat bis anhin immer geklappt :). Den Stack habe ich mir selber geschrieben, siehe http://www.mikrocontroller.net/forum/read-4-343017.html#new TCP ist allerdings noch nicht eingebaut, kopieren aus einem anderen Sourcecode liegt zwar drinn, aber frühstens wenn ichs auch verstanden habe, sonst bringt mir das nicht viel ;) Nik
..ah nein habe ich ja gar nicht gesagt, dass es bei mir UDP ist :-X sorry
asooooooo :) ich benutzte grade den lwip stack mit nem A91SAM7S und dem enc28j60 aus dem grund weil mit "einfachem" ip stack die geschwindigkeit nicht fürs streamen und nen gescheiten upload reicht (bei ein paar MEGS an mp3 daten für die verwendete sd card wartet man sich sonst nen ast:)
achsoo ... udp geht natürlich schneller :)
"bei ein paar MEGS an mp3 daten für die verwendete sd card wartet man sich sonst nen ast:)" Leider warte ich mir in anbetracht meiner 60gb platte, die dranhängt aber auch nen Ast :( Aber ich habe ja sowiso nicht soo viele Mp3s, ich warte da lieber bis VLSI sowas wie mpeg2 -> pal rausbringt :D, dann weiss ich auch wie ich die restlichen gigabyte voll kriege...Übrigens, vielleicht kann mir ja jemand hier weiterhelfen http://www.mikrocontroller.net/forum/read-2-343964.html , wird wenns klappt ein UDP Bootloader :) Sorry, also back to topic: Wenn das mit TCP so aussieht, dann bin ich mir bei meinen Aussagen nicht mehr so sicher :(, dennoch, irgendwo werden meine 'Benchmarks' schon zu finden sein, wenn ich Tcp dann endlich implementiert habe ;) mfg, Nik
Morgen Sebastian!!! Also ich hab auf meinem Board 1MByte externes SRAM + 1.5kBytes internes SRAM und ein 512kByte großes paralleles Flash. Soviel Speicher brauchst natürlich nicht, denn wie Nik schon ausführlich erklärt hat, ist das bei einem Heimnetz nicht wirklich nötig. Ich verbrauche ungefähr 65% ROM meines PIC, obwohl ich sehr überzeugt bin, dass man das noch optimieren kann. Mit diesen 65% läuft aber die volle Applikation, also Webserver, MP3, HDD, sämtliche Schnittstellen, Display, Recording... Du kannst ja mal auf http://www.poms-engineering.at/html/index.php?lang=de&inc=projects_mp3_player vorbeischauen, da hab ich eine kurze Beschreibung. Es handelt sich hierbei um ein Developmentboard, das ich in den vergangenen Monaten entworfen habe, deswegen vielleicht von der Peripherie her, Größe und Speicher etwas überdimensioniert.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.