Problem beim Schreiben in grossen Dateien
-
hi!
Ich hab folgendes Problem:
Mein Programm nimmt Wavedaten auf und komprimiert sie in echtzeit.
Jetzt will ich während der Aufnahme am Anfang der geschriebenen Datei etwas einfügen. Da die Datei aber ziemlich gross wird, kann ich nicht einfach alles hinter der eingefügten Stelle auslesen und neuschreiben (~ 100 MB .. dauert zu lange).Einfach genügen Speicher vorrausschauend einfügen mache ich nur ungerne, da die Änderungen am Anfang auch schon ein paar Mbyte werden können.
Hat einer einen Lösungsvorschlag?
Kann ich die Datei vielleicht nach "vorne" erweitern und alles vor den eingefügten Daten nach vorne schieben (das wären ja nur ein paar KB)?Ich bin für jeden Lösungsvorschlag dankbar.
Till
-
versuche doch die aufnahme in mehrere kleinere temp dateien zu machen und wenn du fertig bist kopierst du diese einfach zusammen.
-
Daran hab ich auch schon gedacht nur ist auch nach der Aufnahme nicht die Zeit fuer so eine Operation (es wird direkt ins Netz uebertragen)...
Bis jetzt hab ich einfach den Speicher vorreserviert... aber irgendwie fuehlt ich mich mit dieser bastel-loesung schlecht.
-
Till schrieb:
Daran hab ich auch schon gedacht nur ist auch nach der Aufnahme nicht die Zeit fuer so eine Operation (es wird direkt ins Netz uebertragen)...
~ 100 MB

dann wäre es noch viel besser kleine dateien zu machen.Till schrieb:
Bis jetzt hab ich einfach den Speicher vorreserviert... aber irgendwie fuehlt ich mich mit dieser bastel-loesung schlecht.
wie hast du das gemacht und warum fühlst du dich dabei schlecht

-
Das Programm soll Sitzungen aufnehmen und die Daten die ich einfüge sind eine Art Zeit-Index für Rednerlisten und Tagesordnungpunkte die dann direkt angesprungen werden können. Wenn es mehrere Dateien werden wird's um einiges komplizierter mit der Datenbank. Die Übertragung ins Netz arbeitet als Stream... da ist das mit einer einzelnen Datei einfacher mehrere Clienten zu bedienen.
Ich habe einfach am Anfang in den Header 100kb sinnbefreite Platzhalter-Daten geschrieben. Dumm ist nur das ich jetzt den Zeit Index begrenzen muss.
-
Till schrieb:
Zeit-Index für Rednerlisten und Tagesordnungpunkte
hier steckt doch schon pozential die dateien aufzuteilen. in wiefern wird dann die db schwerer ?
db:
idx, tagesordnungspunkt, zeitidx, dateiname auf dem serverbsp:
1, 1, ersten 30min, 1_file1
2, 1, zweiten 30min, 1_file2
3, 1, rest, 1_file3
4, 2, ersten 30min, 2_file1Till schrieb:
Ich habe einfach am Anfang in den Header 100kb sinnbefreite Platzhalter-Daten geschrieben. Dumm ist nur das ich jetzt den Zeit Index begrenzen muss.
erklärung bitte
-
-Die Zeitstempel sind variable und können später geändert werden falls der Schriftführer noch Zeitstempel verschieben muss. Über Dateigrenzen hinaus Indexmarken zu ändern wird kompliziert da dann die Aufteilung der Aufnahme in Dateien neu organisiert werden müsste.
-Ein Tagesordnungspunkt würde aber auch schon so lang werden, dass ich die Datei nicht neu schreiben kann. Das Hinzufügen von einem Eintrag in den Index muss unter 0,2 sec laufen.
-Die Datenbank existiert schon und die Verknüpfungen sind alle schon vorhanden und nur für eine AudioDatei gedacht.
Mit "vorreservieren" meinte ich das ich am anfang der Datei die Menge der gesetzten Zeitstempel nicht variabel halte sondern eine feste maximale Anzahl vorgebe. Den Platz für diese Zeitstempel schreibe ich dann am anfang der aufnahme mit NULL voll und ersetzte sie bei bedarf zur Laufzeit durch richtige Daten. So erspare ich mir das gewurste mit dem kompletten neuschreiben und es geht schnell. Leider habe ich dadurch etwas Platzverschwendung wenn nur ein paar Zeitstempel gesetzt werden (~ 200 KB).
Und ich habs gerne wenns alles variabel und effizient läuft.
ich hoff' jetzt ist es klar was ich meinte.

-
unter diesen voraussetzungen (uff) wäre das wie du es gemacht hast das sinnvollste (zumindest hört sich es logisch an
). die platzverwendung, kb's an nullen am anfang der datei, würe ich dann auch auch in kauf nehmen. wirklich blöd wird es nur wenn du richtig viele zeitstempel hast und die vordefinierte grenze von nullen überschreitest.
-
warum nimmst du dann für die Zeitstempel nicht einfach eine extra Datei?
-
vom Marketing her solln es in dem " Audiostream hinterlegte Metadaten" sein..
..