Shoutcast Stream realisieren

  • VB6

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von djluckynbg.

    Shoutcast Stream realisieren

    Hallo liebe Gemeinde,

    ich habe eine sicher nicht alltägliche Frage.

    Ihr kennt sicher Shoutcast Radio. Es gibt ja unzählige Software dafür (Winamp mit Plugin, SAM Broadcaster etc.).
    Dennoch gibt es keine Software die genau auf Webradios zugeschnitten ist und einen automatischen Betrieb eines
    Senders z.b. in der Nacht ordentlich managen kann. Genau das habe ich vor.

    Das Connecten auf einen Shoutcast-Server habe ich bereits hinbekommen (ICY-Protokoll) war jetzt nicht das
    große Problem. Meine Frage ist, wie kann man Musik, die direkt von der Soundkarte kommt, abgreifen (capture)
    und diese per LAME MP3 Encoder direkt als Stream an den Shoutcast Server senden.

    Wie ich Daten per Winsocks sende ist mir klar, aber soweit ich weis besteht der Stream aus ein paar Blocks Musik
    und dann kommt wieder ein Block Daten (z.b. der aktuelle Titel etc.) dann wieder Musik.

    Hat da evtl jemand einen Ansatz wie man das machen kann? Ich will keinen fertigen Code nur eine Idee oder einen
    Codeschnipsel, vielleicht hat sich ja schonmal jemand damit befasst.

    Vielen Dank schonmal im Voraus.

    P.s.: Selbstverständlich wäre ich bereit jeden Helfer auch im Info der Software zu erwähnen :)

    LG Lucky
    Auf eine Shoutcaststream zu streamen ist ein recht umfangreiches projekt. Ich würde dabei auch nicht so weit unten einsteigen. Das heißt du greifst da fast auf Hardwareebene zu und holst die Daten die am Ende in die Soundkarte gehen. Anständig machbar ist dies zwar (und das auch nocht sehr gut ohne das geringste Ruckeln) mit WASAPI (jedoch erst ab Vista+ unstützt). Such einfach hab schon ein paar mal erklärt wie das funktioniert. Es gibt sicher auch noch andere Wege jedoch kenne ich sie nicht und hier liegt einfach der vorteil, du bekommst direkt Rohdaten von der Soundkarte in einem Bytepuffer mit welchem du dann machen kannst was du willst.
    Sinnvoller wäre es jedoch einen Audiostream anzulegen welcher sowohl ausgegeben wird + eben auch auf den Shoutcast geht. Du kannst das natürlich beliebig ausweiten und z.B. mehrere Streams mischen oder noch ein Micro hinzumixen (was im prinzip nichts anderes ist). Solche Sachen sind wirklich nicht schwer zu implementieren (Format auf IeeeFloat konvertieren Samples addieren->mittelwert und fertig).

    Natürlich brauchst du auch noch etwas das dir deinen Stream für den Shoutcast in ein gutes Format konvertiert (Achtung nur den Teil welcher auf den Shoutcast soll konvertieren der rest muss in PCM, IeeeFloat,...). Beliebte Formate sind dabei vorallem hauptsächlich die verlustbehafteten Formate wie MP3, OGG, AAC, AAC+,... (hab auch schon von FLAC Shoutcasts gehört wobei diese jedoch nicht ganz so geeignet sind was jetzt aber zu weit ins Datail gehen würde und ich nicht die Zeit dafür habe).

    Auch bei dem Encoder für das Formate musst du natürlich darauf achten, dass das Ganze zur Laufzeit ablaufen soll. Das heißt du brauchst etwas wo du einen Bytepuffer mit von mir aus PCM formatierten Bytes in irgendwo reinhaust und "sofort" die fertigen Frames zurück bekommst welche du dann auf den Shoutcast haust. Somit sind Encoder wo in eine Datei encodieren usw. unbrauchbar.

    Somit zusammenfassend liegt bei der Ganzen Sache das Augenmerk darauf, dass alles zur LAUFZEIT schnell gehen muss. Also überleg dir was schönes. Das Konzept mit mehreren Streams welche man hintereinander hängt hat sich schon bei mehreren Sachen bewährt (und verwende ich auch sehr sehr gerne).

    Was den eigentlichen Shoutcast Stream angeht kenn ich mich weniger aus, da ich nie auf einen solchen gestreamt habe. Jedoch muss ich sagen ich habe z.B. schon MP3 Shoutcast streams abgespielt (wobei ich alles selbst gemacht habe von Puffern bis MP3-Decoder bis Abspielen) habe aber nie auf etwas wie Titel gestoßen bin. Wie diese Titel denn nun aber genau daher kommen kann ich nicht sagen und will mich auch nicht darauf festlegen, dass deine Vermutung falsch ist. (Ich habe es immer so gelöst (bei allen Framebasierend-Formaten), dass ich einfach immer bis zum nächsten Frame lese und wenn es nötig ist werden eben auch Bytes übersprungen. Ob ich nun wirklich einfach nur im Shoutcaststream die ganzen Titel nur übersprungen habe kann ich nicht sagen, kann mir aber nicht wirklich vorstellen.

    EDIT: Ach ja ich seh grad du willst VB6 und kleiner verwenden --> Vergiss es.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Hallo thefiloe, Neptun ...

    danke erstmal für die schnellen Antworten. Ich werd mir das heut nach der Arbeit mal ansehen.

    EDIT: Ach ja ich seh grad du willst VB6 und kleiner verwenden --> Vergiss es.
    Kann doch net sein, dass man mit VB6 garnix machen kann, bevor es .NET gab ging ja auch alles damit oder :?: :!: 8|
    Wenn man den Buffer vom ersten Klassenmodul abgreifen könnte, den durch einen Encoder schicken (LAME, BASS) und dann
    per Winsock häppchenweise versenden ... müsste doch irgendwie gehen ...

    LG
    Lucky

    djluckynbg schrieb:

    Kann doch net sein, dass man mit VB6 garnix machen kann,

    MAN kann. Du dummerweise nicht.

    Viel wichtiger die Frage, warum ein mehr oder weniger blutiger Anfänger unbedingt mit einer Sprache arbeiten will, die deutlich älter als ein Jahrzehnt ist, für die das letzte Servicepack vor 8 Jahren erschienen ist, für die jeglicher Support durch den Hersteller vor 4 Jahren ausgelaufen ist und für die es eine deutlich überlegene und kostenfreie Alternative gibt?
    MAN kann. Du dummerweise nicht.




    Das find ich etz bissel frech zumal Du mich überhaupt net kennst und net weist, was ich bereits mit VB6 gemacht hab.

    Ich habe mit VB in der Version 4 angefangen. Nur um das zu klären. Nur leider habe ich in diesem Bereich noch nie etwas

    gemacht.



    Viel wichtiger die Frage, warum ein mehr oder weniger blutiger Anfänger unbedingt mit einer Sprache arbeiten will, die deutlich älter als ein Jahrzehnt ist, für die das letzte Servicepack vor 8 Jahren erschienen ist, für die jeglicher Support durch den Hersteller vor 4 Jahren ausgelaufen ist und für die es eine deutlich überlegene und kostenfreie Alternative gibt?




    Ich bin einfach an den Syntax von VB6 gewohnt und habe net die Lust und

    Zeit mich in eine komplett geänderte Sprache einzuarbeiten. Bisher hab ich auch noch alles damit realisieren können.

    djluckynbg schrieb:

    Das find ich etz bissel frech zumal Du mich überhaupt net kennst und net weist, was ich bereits mit VB6 gemacht hab.

    Du musst fragen, also kannst du es nicht -> qed

    djluckynbg schrieb:

    Ich bin einfach an den Syntax von VB6 gewohnt und habe net die Lust und Zeit mich in eine komplett geänderte Sprache einzuarbeiten

    Das Problem mit VB6: Man kann vermutlich fast ALLES damit realisieren. Sobald es etwas komplexer wird, aber vermutlich nur mit enormen Klimmzügen und nicht mehr mit "Bordmitteln". Daraus ergibt sich dann, dass es ab einer bestimmten Stufe fraglich ist, ob solche Klimmzüge Sinn machen.

    Da ich von der Thematik keine Ahnung habe, halte ich mich mal an TheFiloe:
    Somit zusammenfassend liegt bei der Ganzen Sache das Augenmerk darauf, dass alles zur LAUFZEIT schnell gehen muss

    Damit entsteht das Problem, dass VB6 nicht (mehr) sonderlich performant ist (Compiler berücksichtigt neue CPU Features nicht) und ein entzerrendes Multithreading mit VB6 zwar (angeblich) machbar, aber sicher um Magnituden komplexer als selbiges in .Net ist.

    Bliebe als Schlussbemerkung noch, dass Fragen zu VB6 in diesem Forum selten auf extrem fruchtbaren Boden fallen, da die meisten "Profis" das nicht mehr aktiv auf ihren Rechnern haben, die Anzahl der Profis im Forum eh' begrenzt ist.