AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

webradio aufnehmen

Ein Thema von Szin · begonnen am 28. Aug 2006 · letzter Beitrag vom 18. Okt 2016
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#1

AW: webradio aufnehmen

  Alt 17. Okt 2016, 15:44
Hallo!

Ich begehe hier jetzt mal den verwerflichen Akt der Leichenfledderei und hole diesen betagten Thread wieder hoch, weil mein Problem genau hier schon mal angerissen aber nicht abschließend beantwortet ist:
Zitat von Szin:
2. Die Datei lässt sich während des schreibens weder mit Winamp noch mit dem Windows Media Player öffnen, obwohl ich
Code:
  lStream:=TFileStream.Create('C:\Test.mp3', fmCreate or fmShareDenyNone);
verwende. Aber das ist Vorraussetzung für mich!
Und wenn du die Datei stattdessen in einen Puffer lädst und sie mit der BASS.DLL abspielst, sprich, einen eigenen Player integrierst?
Konkret geht es mir darum, einen Webradio-Stream per Indy-Get zu holen und dann direkt, ohne Dateipuffer, an BASS.DLL weiter zu reichen. Da BASS eine Stream-Schnittstelle hat und ich schon ein Tutorial dazu gefunden habe, sehe ich da im Moment weniger das Problem.

Vielmehr würde mich interessieren, wie man mit Indy quasi einen Endlos-Stream realisiert. Man braucht ja einen gewissen Vorlauf an Nutzdaten im Stream und müsste die von BASS bereits wiedergegebenen Daten verwerfen, damit einem nicht irgendwann ein Puffer voll läuft. Das Problem ist also, genug Nutzdaten im Puffer vorzuhalten, die Wiedergabe zu synchronisieren und "veraltete" Daten zu verwerfen ohne den Stream zu schließen.

Da wär ich mal für dein ein oder anderen Tip dankbar.

Grüße
Cody
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#2

AW: webradio aufnehmen

  Alt 17. Okt 2016, 17:35
Hallo,

Vielmehr würde mich interessieren, wie man mit Indy quasi einen Endlos-Stream realisiert. Man braucht ja einen gewissen Vorlauf an Nutzdaten im Stream und müsste die von BASS bereits wiedergegebenen Daten verwerfen, damit einem nicht irgendwann ein Puffer voll läuft. Das Problem ist also, genug Nutzdaten im Puffer vorzuhalten, die Wiedergabe zu synchronisieren und "veraltete" Daten zu verwerfen ohne den Stream zu schließen.

Da wär ich mal für dein ein oder anderen Tip dankbar.

Grüße
Cody
Das Stichwort währe Ringpuffer. Himitsu hat da mal einen Streambasierten gepostet (http://www.delphipraxis.net/126525-t...-memory.html#7). Du musst nur das Problem lösen, dass vermutlich die Abspielgeschwindigkeit nur annähernd gleich der Datenanlieferung ist.

einbeliebigername.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.283 Beiträge
 
Delphi 12 Athens
 
#3

AW: webradio aufnehmen

  Alt 18. Okt 2016, 07:12
Du musst nur das Problem lösen, dass vermutlich die Abspielgeschwindigkeit nur annähernd gleich der Datenanlieferung ist.
Wenn man genauer darüber nachdenkt, stellt sich dieses Problem eigentlich nicht. Bei einem Webradio-Stream hat man eine durch den Codec definierte Bitrate. Da könnte der DSL-Anschluss schnell sein wie er will, mehr als diese Bitrate käme dann nicht an. Auch BASS.DLL würde genau mit dieser Bitrate abspielen. Die Kunst wäre in diesem Fall eigentlich nur, vor dem Start der Wiedergabe einen Vorlaufpuffer abzuwarten.

Der umgekehrte Fall dürfte erfahrungsgemäß kritischer werden: Der Datenstrom kommt langsamer an als für den Codec erforderlich. Was nicht da ist kann man nicht abspielen, also gibts Lags. Da müsste ich dann sehen dass in dieser Situation ein automatischer Restart der Wiedergabe erfolgt wenn wieder Daten in den Puffer geflossen sind.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#4

AW: webradio aufnehmen

  Alt 18. Okt 2016, 08:14
Hallo,

Du musst nur das Problem lösen, dass vermutlich die Abspielgeschwindigkeit nur annähernd gleich der Datenanlieferung ist.
Wenn man genauer darüber nachdenkt, stellt sich dieses Problem eigentlich nicht. Bei einem Webradio-Stream hat man eine durch den Codec definierte Bitrate. Da könnte der DSL-Anschluss schnell sein wie er will, mehr als diese Bitrate käme dann nicht an. Auch BASS.DLL würde genau mit dieser Bitrate abspielen. Die Kunst wäre in diesem Fall eigentlich nur, vor dem Start der Wiedergabe einen Vorlaufpuffer abzuwarten.

Der umgekehrte Fall dürfte erfahrungsgemäß kritischer werden: Der Datenstrom kommt langsamer an als für den Codec erforderlich. Was nicht da ist kann man nicht abspielen, also gibts Lags. Da müsste ich dann sehen dass in dieser Situation ein automatischer Restart der Wiedergabe erfolgt wenn wieder Daten in den Puffer geflossen sind.
Wenn man sich das genau überlegt, ist Bitrate irrelevant. Sie resultiert ja nur aus der Komprimierung der Audio-Daten. Ich betrachte jetzt mal einen wirklichen Livestream, wo noch ein Mensch sein bestes in Mikrophon gibt. Dann hast du beim Sender einen Analog-Digital-Wandler, der, durch einen Quarz getaktet, einen Datenstrom erzeugt. Auf der Empfangsseite hast du einen Digital-Analog-Wandler, der, durch einen Quarz getaktet, diesen Datenstrom in analoge Signale umwandelt. Die beiden Quarze sind nicht die Selben. Deren Frequenz ist nicht bis auf die milliardste Stelle gleich. Einer von beiden geht mit großer Wahrscheinlichkeit langsamer. Und wenn das der beim Empfänger ist, stauen sich irgendwo da zwischen die Daten.

Mir passiert das beim Radio hören über Web regelmäßig. Entweder gibt es kurze hörbare Aussetzer, dann war mein Rechner mal wieder schneller, oder der Versatz zwischen Analog-Radio und Web-Radio wird immer größer. Das einzige was da helfen konnte, währ wenn die Bass.dll den Quarz am DA-Wandler justieren könnte, und somit die Widergabegeschwindigkeit an den Sender angleichen könnte. Aber ich glaube das geht bei keiner Consumersoundhardware, weil dann könnte Winamp das auch.

einbeliebigername.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.810 Beiträge
 
Delphi 12 Athens
 
#5

AW: webradio aufnehmen

  Alt 18. Okt 2016, 08:27
Das glaube ich so gar nicht. Gründe für Aussetzer sind eher irgendwo auf der Verbindungsstrecke zu suchen, als in irgendwelchen "Quarzen". Man sollte nicht vergessen, daß TCP/IP eine Verbindung über viele Zwischenstellen aufbaut.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#6

AW: webradio aufnehmen

  Alt 18. Okt 2016, 09:06
Hallo,

Das glaube ich so gar nicht.
Der Gangunterschied von Quarzen ist ein physikalischer Fakt. Den kannst du glauben oder nicht, der ist einfach da. Wer noch Quarzuhren kennt kann das bestätigen.

Gründe für Aussetzer sind eher irgendwo auf der Verbindungsstrecke zu suchen, als in irgendwelchen "Quarzen". Man sollte nicht vergessen, daß TCP/IP eine Verbindung über viele Zwischenstellen aufbaut.
Das wollte ich nicht ansprechen. Macht es nur noch komplizierter und schränkt die möglichen Lösungen ein.

einbeliebigername.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: webradio aufnehmen

  Alt 18. Okt 2016, 10:12
Der Gangunterschied von Quarzen ist ein physikalischer Fakt. Den kannst du glauben oder nicht, der ist einfach da. Wer noch Quarzuhren kennt kann das bestätigen.
unbenommen, doch welche Auswirkung hat das in der praktischen Anwendung?
Wenn meine Quarzuhr nur für's Eierkochen genutzt wird, gar keine, wenn ich die Ganggenauigkeit über ein Jahr messe, dann wie viele Sekunden?

In diesem konkreten Fall ist da eher die Datenlieferung über das Netz der primär einschränkende Faktor.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz