Einzelnen Beitrag anzeigen

Julian M.

Registriert seit: 28. Dez 2010
41 Beiträge
 
#5

AW: Bass.dll Internet Radio - wie die letzten 5 Minuten bekommen, ohne Aufnahme stopp

  Alt 13. Jan 2016, 20:57
Kannst du mir nochmals helfen ? Ich wollte nun "einfach" die letzten 10 Minuten immer in einem MemoryStream festhalten und diesen bei Bedarf abspeichern. Leider ist die erstellte Datei 0 KB groß, d.h. er schreibt nichts in den Memorystream.


Delphi-Quellcode:
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
  if (ms = nil) then ms:= TMemoryStream.Create; // create the stream
  if (buffer = nil) then ms.Free // finished downloading
  else
  begin // Ab hier geänderter Code
    if ms.Size<=14745600 then //angabe in bit, entsprechend 10 Minuten bei 192kbit/s Stream
    ms.Write(buffer^, len) //schreibe memorystream voll
    else // wenn memorystream 10min beinhaltet, dann lösche den anfang und füge den buffer ans ende.
    begin
      ms.Position:=len;//anfangsposition um die größe des buffers nach hinten setzen
      ms.CopyFrom(ms,(ms.Size-1)-len); //den "verschobenen" teil des streams neu abspeichern
      ms.Write(buffer^, len); //den buffer wieder ans ende schreiben
    end;
    ms.Position := ms.Size - 1;
  end;
end;



procedure TForm1.Button4Click(Sender: TObject);
begin
  ms.SaveToFile('memorystream.mp3');
end;
Danke und Gruß, Julian

Geändert von Julian M. (13. Jan 2016 um 23:13 Uhr)
  Mit Zitat antworten Zitat