Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Gelöschtes Video wird abgespielt (https://www.delphipraxis.net/49339-geloeschtes-video-wird-abgespielt.html)

xaromz 9. Jul 2005 15:09


Gelöschtes Video wird abgespielt
 
Hallo,
ich habe mal eine Frage:

Ich habe mir vor langer Zeit mal einen Videoplayer geschreiben, aber ich vermute, damit hat das gar nichts zu tun.
Der Player nutzt das DSPack fürs Playback.

Ich habe jetzt beim Sortieren meiner Videos folgende Entdeckung gemacht:
Ich habe mir ein Video angesehen und festgestellt, dass ich es nicht mehr brauche. Also habe ich den Player pausiert und die Datei gelöscht.
Jetzt kommts: Danach konnte ich das Video weiterspielen!
Nach einem Klick auf Stop war's dann vorbei, es ging kein Play mehr.
Wie zum Teufel kann DirectShow ein Video abspielen, das schon gelöscht ist, und wieso kann ich ein Video löschen, das noch abgespielt wird?

Vielleicht weiß jemand hier erhellendes...

Gruß
xaromz

Luckie 9. Jul 2005 15:10

Re: Gelöschtes Video wird abgespielt
 
Eventuell lag es noch im Speicher?

xaromz 9. Jul 2005 15:12

Re: Gelöschtes Video wird abgespielt
 
Hallo,
ein 600MB-Video, das sofost nach Doppelklick abgespielt wird, und das davor 3 Monate rumlag, liegt kaum im Speicher.

Gruß
xaromz

JasonDX 9. Jul 2005 15:16

Re: Gelöschtes Video wird abgespielt
 
Zitat:

Zitat von xaromz
ein 600MB-Video, das sofost nach Doppelklick abgespielt wird, und das davor 3 Monate rumlag, liegt kaum im Speicher.

DirectShow buffert ein Video. d.h Teile des Videos werden in den RAM geschrieben und von dort zum Rendern ausgelesen. Wie lange das vorher rumlag, spielt also keine Rolle ;)
Nachdem du das Video gelöscht hast, lag davon noch ziemlich sicher ein großer Teil des Videos im RAM, was DirectShow dann abspielten konnte.

SirThornberry 9. Jul 2005 15:19

Re: Gelöschtes Video wird abgespielt
 
Variante1:
Du konntest es nicht vollständig abspielen sondern hast nur noch an stück das video angeschaut.
Das ist eigentlich ohne Probleme möglich da so gut wie jeder Player vorpuffert um aussetzer zu vermeiden.

Variante2:
Diese ist eigentlich die wahrscheinlichere Variante da die Datei eigentlich nöcht gelöscht werden kann während sie verwendet wird. Und zwar hast du die Datei vermutlich über den Arbeitsplatz oder den Explorer gelöscht. Wenn dabei eine Datei noch in Verwendung ist meckert der Explorer in aller Regel nicht sofort rum sondern versucht die Datei trotzdem zu löschen, und erst wenn das löschen nach einer bestimmten zeit nicht geklappt hat kommt eine Fehlermeldung. Es kann also durchaus sein das du die Datei gelöscht hast (also dem Explorer den Befehl gegeben hast) und dann das Video noch angeschaut hast (drin rum gezappt). Danach klickst du auf stopp und in diesem moment wird die Datei (Handle) freigegeben und der Explorer löscht diese. Somit wars das und die Datei kann nicht wieder geladen werden.

Beckman 9. Jul 2005 16:28

Re: Gelöschtes Video wird abgespielt
 
ein 'loeschen' im explorer ist noch lange kein physikalisches loeschen von daten.
es gibt ja nicht um sonst unzaehlige 'wiederherstellungs-tools'.
es lag in diesem fall net am buffer, dass er das video weiter schauen konnte, sondern daran, das der player die adresse der abzuspielenden daten (markierung: anfang/ende der datei) kannte.
der explorer hat lediglich geschaut, ob er exklusive-rechte auf die datei bekommen hat und hat den ganzen speicherbereich, der fuer die datei reserviert war, als 'leer' markiert.

die daten waren dennoch noch immer an derselben stelle und der player, der ihre position wusste, konnte sie problemlos weiterhin abspielen. (solang eben nix anderes drueber geschrieben wird)


aber ich haette mich trotzdem nicht aufgeregt und waere lieber stolz gewesen, einen hellseherischen video player programmiert zu haben :P


lg, beck.

alcaeus 9. Jul 2005 16:42

Re: Gelöschtes Video wird abgespielt
 
Zitat:

Zitat von Beckman
ein 'loeschen' im explorer ist noch lange kein physikalisches loeschen von daten.
es gibt ja nicht um sonst unzaehlige 'wiederherstellungs-tools'.
es lag in diesem fall net am buffer, dass er das video weiter schauen konnte, sondern daran, das der player die adresse der abzuspielenden daten (markierung: anfang/ende der datei) kannte.
der explorer hat lediglich geschaut, ob er exklusive-rechte auf die datei bekommen hat und hat den ganzen speicherbereich, der fuer die datei reserviert war, als 'leer' markiert.

die daten waren dennoch noch immer an derselben stelle und der player, der ihre position wusste, konnte sie problemlos weiterhin abspielen. (solang eben nix anderes drueber geschrieben wird)

Das wage ich zu bezweifeln. Nehmen wir an mein Player spielt eine Datei ab. Damit Windows die Datei loeschen kann, muss ich sie natuerlich schliessen. Um sie nachher ohne den Eintrag in der MFT wieder abspielen zu koennen, muesste ich mir saemtliche Sektoren, die die Datei auf der Festplatte belegt merken, und das in der richtigen Reihenfolge. Anschliessend muss ich die Daten direkt auslesen, und per Stream oder so an den Player selbst fuettern. Ich glaube kaum dass sich jemand diese Muehe macht ;)

Ich kann mir das nur so erklaeren: um schneller auf die Daten zugreifen zu koennen, wird die Datei am Anfang komplett in den RAM eingelesen, und anschliessend von dort abgespielt. Das Handle auf die Datei ist damit unnoetig und kann weggeworfen werden. Die Daten liegen dann aber wahrscheinlich bis zum Stop-Befehl im RAM, und koennen deshalb weiterverwendet werden.
Du kannst ja mal probieren, mit demselben (!) Player eine Datei abzuspielen und die Datei waehrend dem Abspielen zu loeschen. Wenn sich meine Vermutung bestaetigt, dann lass mich sagen, dass die Art von Programmierung IMO ueberhaupt nicht gut ist. Solange ich die Datei brauche (selbst wenn ich sie im RAM zwischenlagere), sollte ich ein Handle darauf offenhalten, um eben das Loeschen zu verhindern. So machen es alle Player, ich kann z.B. keine AVI-Datei loeschen waehrend sie der MediaPlayer abspielt ;)

Greetz
alcaeus

xaromz 9. Jul 2005 17:23

Re: Gelöschtes Video wird abgespielt
 
Hallo,

Zitat:

Zitat von alcaeus
Ich kann mir das nur so erklaeren: um schneller auf die Daten zugreifen zu koennen, wird die Datei am Anfang komplett in den RAM eingelesen, und anschliessend von dort abgespielt. Das Handle auf die Datei ist damit unnoetig und kann weggeworfen werden. Die Daten liegen dann aber wahrscheinlich bis zum Stop-Befehl im RAM, und koennen deshalb weiterverwendet werden.
Du kannst ja mal probieren, mit demselben (!) Player eine Datei abzuspielen und die Datei waehrend dem Abspielen zu loeschen. Wenn sich meine Vermutung bestaetigt, dann lass mich sagen, dass die Art von Programmierung IMO ueberhaupt nicht gut ist.
Greetz
alcaeus

Die Datei wird natürlich nicht komplett in den Speicher geladen, das dauert ja bei nem richtigen Video ewig und danach ist der Speicher voll. Manche User haben nur 256MB RAM.
Wenn Du irgendwo ein Video hast, dann kopier das mal und öffne die Kopie im Windows Media Player. Während dieses Video abgespielt wird lässt es sich ohne Probleme löschen. Natürlich ist die Datei physisch noch auf der Platte, aber DirectShow greift doch sicher auch über die API auf das Dateisystem zu?

Zitat:

Zitat von SirThornberry
Variante2:
Diese ist eigentlich die wahrscheinlichere Variante da die Datei eigentlich nöcht gelöscht werden kann während sie verwendet wird. Und zwar hast du die Datei vermutlich über den Arbeitsplatz oder den Explorer gelöscht. Wenn dabei eine Datei noch in Verwendung ist meckert der Explorer in aller Regel nicht sofort rum sondern versucht die Datei trotzdem zu löschen, und erst wenn das löschen nach einer bestimmten zeit nicht geklappt hat kommt eine Fehlermeldung. Es kann also durchaus sein das du die Datei gelöscht hast (also dem Explorer den Befehl gegeben hast) und dann das Video noch angeschaut hast (drin rum gezappt). Danach klickst du auf stopp und in diesem moment wird die Datei (Handle) freigegeben und der Explorer löscht diese. Somit wars das und die Datei kann nicht wieder geladen werden.

Wenn ich aber z. B. ein mp3 abspiele meckert der Explorer sofort, dass die Datei noch in Benutzung ist. Und warum ist die Datei im Explorer schon weg, wenn andere Programme noch darauf zugreifen können? Normalerweise sollte Windows immer meckern, wenn eine Datei noch verwendet wird.

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz