Ich arbeite an einer Anwendung, die mehrere Videos gleichzeitig anzeigt. Die Videos werden in Form von Verzeichnissen voller Bilddateien gespeichert. Für jede Bildnummer gibt es bis zu 9 Bilder, die von der Festplatte geladen werden müssen. Ich möchte Caching und Read-Ahead für die Bilder implementieren. Das wäre ziemlich einfach, aber die Komplikation ist, dass das Dateisystem (manchmal ein Netzwerk-FS) nicht annähernd schnell genug ist, um jedes Bild anzuzeigen. Der Readahead sollte also auswählen, welche Frames er laden möchte und nur read() Anfragen für diese Bilder ausgeben. Es wäre auch am besten, wenn berücksichtigt werden könnte, welche Bilder bereits zwischengespeichert sind, wenn entschieden wird, welche Bilder geladen werden sollen.Unzuverlässiges Caching und Readahead von Videobildern
Ich kam mit einem Greedy-Algorithmus, der gut geht, aber ich frage mich, ob dies ein Problem ist, das untersucht wurde, und es gibt bessere/optimale Algorithmen da draußen.
Ich gehe davon aus, dass die Zeit in Bezug auf Bildrate, nicht Sekunden, gemessen wird, um das Pseudocode einfacher zu machen.
load_time_per_image = how long it takes to load an image
images_per_frame = the number of images to display simultaneously
worst_time = images_per_frame * load_time_per_image
def decide_next_frame_to_load:
for each frame from now to now + worst_time:
loadable = (frame - now)/load_time_per_image
if number_of_images_cached(frame) > images_per_frame - loadable:
# this frame is the first one it's possible to load in time.
return frame
Wer hat Vorschläge? Danke für Ihre Hilfe! -Thomas
Es ist schließlich eine kleine Welt ... –