Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi HDD Standby verhindern - Mediaplayer pause (https://www.delphipraxis.net/143769-hdd-standby-verhindern-mediaplayer-pause.html)

Cylence 23. Nov 2009 09:27


HDD Standby verhindern - Mediaplayer pause
 
Hi,

ich hab einen eigenen Mediaplayer, und wenn da ein Video länger auf Pause steht, wird zwischenzeitlich die USB HDD auf Standby geschalten, wenn ich dann wieder auf Play drücke, startet das Video kurz, was eben noch im RAM war, startet die Platte, aber diese braucht zu lang um wieder zu starten, in der Zeit stoppt dann das Video. Also meine Frage nun, kann ich verhindern das die Platte in Standby geht.
Ich hab es schon einmal versucht damit, einen Timer zu starten, der dann alle 5 minuten mal ein Fileexistst auf die abspielende Datei macht, da dies nicht ging hab ich auch versucht dann immer getfilesize alle 5 Minuten einmal zu checken, aber auch das verhindert nicht das die Platte ausgeht.

Hat einer eine Idee? Ich denke wenn ich dauernd ein TextFile schreib und wieder lösch und so weiter... würde evtl gehen, aber das is sehr unschön. Gibt es eine Möglichkeit das hinzukriegen?

Gruß

tom

himitsu 23. Nov 2009 10:00

Re: HDD Standby verhindern - Mediaplayer pause
 
Eine Möglichkeit wäre, bei Pause in regelmäßigen Abständen, einfach mal auf die Datei zuzugreifen.
Aber ganz im Ernst: Ich würde davon absolut abraten, denn es hat ja seinen Grunde, daß die Platte in den Standby-Modus umschaltet.

Einfache Lösung:
Wenn auf Start gedrückt wird, dann greifst du auf die Festplatte/Datei zu, bevor das Abspielen beginnt, damit fährt die Platte hoch und das Abspielen startet danach ganz normal.

Cylence 23. Nov 2009 10:10

Re: HDD Standby verhindern - Mediaplayer pause
 
Hi,

naja der Grund is das das eben standartmässig so in dem USB Gehäuse aktiviert ist das die aus geht, aber das ist sicher nicht gut, eben für ne halbe std aus dann wieder an, da wärs eh besser wenn die platte in der zeit anbleibt. Aber darum gehts ja auch garnicht.

Ja mit Getfilesize und Fileexists habe ich gedacht ich greife schon auf die datei zu... was soll ich sonst machen?

Ich habe auch schon vor dem Start wieder ein if Fileexists eingebaut, aber da startet zwar die platte (Fileexists gibt true zurück), aber der laufende Stream wird sofort danach versucht weiter abzuspielen, und in diesem Moment is eben die Platte nicht zugreifbar und das ganze geht nicht.

Ich muss daher die Platte am laufen halten in der Zeit und wie gesagt denke ich wenn eh Pause ist wird wohl auch bald weiter abgespielt udn somit ist der Standby der Platte eher negativ in diesem Moment.


Gruß

tom

Meflin 23. Nov 2009 10:12

Re: HDD Standby verhindern - Mediaplayer pause
 
Wie wärs, du machst den Buffer groß genug, damit er eben das mit abfangen kann?

Cylence 23. Nov 2009 10:15

Re: HDD Standby verhindern - Mediaplayer pause
 
Hi,

ich weiß nicht wie ich den Buffer verändern kann, das ganze wird mit Directshow abgespielt... DSPack
hab da noch nie so etwas in der Art gesehen... wäre zwar schön so aber glaub das geht nicht. Ausserdem möchte ich ja auch allgemein nicht das die platte ausgeht weil das nicht gerade die lebensdauer erhöht... jedenfalls wenns nur mal für einige minuten ist.

Gruß

tom

himitsu 23. Nov 2009 10:22

Re: HDD Standby verhindern - Mediaplayer pause
 
Sicher daß dieses vom USB-HDD-Controler gesteuert wird?
Bei mir macht das Windows (Energieoptionen).

Medium 23. Nov 2009 10:22

Re: HDD Standby verhindern - Mediaplayer pause
 
Ich hab grad so meine Zweifel, ob da wirklich das externe Gehäuse verantwortlich für ist - das wäre meiner Meinung nach weit über dessen "Befugnisse" als passiver, transparenter Container :stupid:. Was spricht denn deine Systemsteuerung in Sachen Energieverwaltung so?

Edit: Hijaaa, der himi wieder ne Nanosekunde fixer. Apüh! :)

Cylence 23. Nov 2009 10:28

Re: HDD Standby verhindern - Mediaplayer pause
 
Hi,

allerdings ist es die USB Platte, ich hab insgesamt 6 Platten an meinem Rechner und nur die Western Digital Essential Platten schalten sich ab, alle anderen nicht(zwei iomega eine seagate und ebenfalls die interne westerndigital). Aber es geht wie gesagt nicht darum ob oder warum oder sowas, ich möchte einfach nur eine Möglichkeit es zu umgehen. Ein Timer mit alle paar Minuten Fileexists und Getfilesize hat das Standby nicht verhindert, hat jemand eine andere Idee?

Gruß

tom

himitsu 23. Nov 2009 11:16

Re: HDD Standby verhindern - Mediaplayer pause
 
Das Dateisystem landet immer in der WindowsFileCache, wesweden bei wiederholtem Lesen und genügend freiem RAM nicht ständig auf die Platte zugegriffen wird.
> NonBuffered-FileIO

Mein Tipp ist und bleibt immernoch vor dem Lesen die eventuell runtergefahrene Platte wieder hochfahren.
Wenn du den Player mal wertergeben willst, dann würde ich es garnicht nett finden, wenn dein Programm mir mein Energiemanagement (zer)stört.

Medium 23. Nov 2009 11:17

Re: HDD Standby verhindern - Mediaplayer pause
 
Naja, das ob und warum bietet dann doch ab und an gute Anstazstellen zur Lösung ;)

Ist die interne Western Digial selben Modells wie die externen? Wenn nein, könnte es noch Möglichkeiten geben die Platten zu konfigurieren (SMART aus und so Dinge z.B.).

Cylence 23. Nov 2009 12:09

Re: HDD Standby verhindern - Mediaplayer pause
 
Hi,

die interne ist die selbe wie die 3 externen, die externen schalten sich selbst aus, unabhängig von den Windows Energie Optionen. Dies ist ganz normal bei manchen externen Platten, ist abhängig vom Controller.
Ich möchte dohc nicht die Energieoptionen umstellen, sondern nur die Platte die eh gleich wieder verwendet wird aktiv halten. Das wäre für die Lebensdauer der Festplatten besser... wenn auch manche anders denken, aber für jede halbe std oder 10 Minuten die platte aus und einschalten, ist sicher nicht besser als sie die paar minuten einfach aktiv zu halten.
Ich weiß auch das ich auf einige externe Platten garkeinen zugriff auf Smart Infos hab, dies ist wieder auch abhängig vom verbauten ControllerChip.
Also wieso schaltet sich die platte ab obwohl ich fileexists bzw getfilesize mache? Ist dies auch im Cache von Windows irgendwie? So das garkein Zugriff auf die platte erfolgt wenn ich eine der funktionen aufrufe?


Gruß

tom

himitsu 23. Nov 2009 12:15

Re: HDD Standby verhindern - Mediaplayer pause
 
Zitat:

Zitat von Cylence
Also wieso schaltet sich die platte ab obwohl ich fileexists bzw getfilesize mache? Ist dies auch im Cache von Windows irgendwie? So das garkein Zugriff auf die platte erfolgt wenn ich eine der funktionen aufrufe?

Zitat:

Das Dateisystem landet immer in der WindowsFileCache
Also alle möglichen gelesenen Verzeichnisse und die darin enthaltenen Informationen über die Dateien.

Cylence 23. Nov 2009 12:24

Re: HDD Standby verhindern - Mediaplayer pause
 
ok

danke und was gäbe es denn für eine mögliche funktion die wirklich aus dem filesystem liest, womit dann eben die platte aktiv gehalten würde? Ist nur eine Datei schreiben und wieder löschen oder sowas eine möglichkeit? Oder würde selbst das evtl nur im Cache ablaufen dann?

lg

tom

Medium 23. Nov 2009 13:36

Re: HDD Standby verhindern - Mediaplayer pause
 
Theoretisch kann Windows sich immer dazu entscheiden Dateioperationen verzögert auszuführen, also zunächst im Cache. Vielleicht ergibt eine Suche nach Möglichkeiten diesen manuell zu flushen/invalidieren einen Weg. Eine größere Datei zu schreiben könnte u.U. auch gehen (wenn diese die Grenzen des Cache überschreitet auch gesichert - ich weiss nur nicht wie groß der ist), jedoch ist das alles andere als toll. Zum einen würde ich als Anwender nicht wollen dass mir ein Programm - dass es von der Funktion her nicht erwarten ließe - wild Zeug wo hin schreibt, zum anderen ist da das Problem mit Schreibrechten, UAC und Virtualisierung...

Cylence 23. Nov 2009 13:52

Re: HDD Standby verhindern - Mediaplayer pause
 
ja das seh ich ja auch so :-(
daher hab ich ja erst versucht einfach nur fileexists zu machen, aber das reicht ja leider nicht. schade eigentlich.

himitsu 23. Nov 2009 14:58

Re: HDD Standby verhindern - Mediaplayer pause
 
Zitat:

Zitat von Medium
ich weiss nur nicht wie groß der ist

Wenn man diese nicht begrenzt hat (was standardmäßig der Fall ist), dann ist das der gesamte verfügbare RAM.

Wie ließt denn dein Player diese Datei?
Wie gesagt, ließ einfach neue Daten ein, bevor das Abspielen beginnt.

Medium 23. Nov 2009 15:02

Re: HDD Standby verhindern - Mediaplayer pause
 
Und wenn dann da einer kommt (Windows z.B.) und sowas wie Prefetching betreibt? (Ich weiss echt nicht ob das der Fall ist, ich will nur sagen dass das auch nicht SO unbedingt der goldene Weg ist.) Ich würd echt mal gucken, ob es nicht eine API gibt, die Windows unmissverständlich klar macht, dass ein Aufruf auf keinen Fall aus dem Cache beantwortet werden soll - u.U. durch erzwungenes Leeren.

himitsu 23. Nov 2009 15:05

Re: HDD Standby verhindern - Mediaplayer pause
 
Prefetching ... jaja, wir kennen wohl alle diese kranken "angeblichen" RAM-Booster :nerd:

Zitat:

Zitat von Medium
Ich würd echt mal gucken, ob es nicht eine API gibt, die Windows unmissverständlich klar macht, dass ein Aufruf auf keinen Fall aus dem Cache beantwortet werden soll

> NonBuffered-FileIO (siehe MSDN-Library durchsuchenCreateFile)

Cylence 23. Nov 2009 15:29

Re: HDD Standby verhindern - Mediaplayer pause
 
Hi,

der Player liest die Datei mit hilfe des DSPacks, nach dem Pause ist auch die zeit die noch abgespielt wird immergleich auf verschiedenen PCs immer ca 2 sec noch, dann ist Ende. Ich glaub nicht das die ganze Datei in den RAM geladen wird, bzw das Windows das macht... Windows lädt zwar ab VISTA tatsächlich fast den gesamten RAM voll, aber da sind andere Files drinnen, nicht Videos die abgespielt werden, ich denke das is eher für Programm und Systemdateien etc...
Ok dann anderer ansatz, wie kann ich denn bevor ich wieder Play mache...warten bis die Platte tatsächlich aktiv ist??? Ich mache einen Fileexists, aber das reagiert ja auch ohne aktive Platte, also ist das auch nicht so leicht hinzu bekommen...

Gruß

tom

himitsu 23. Nov 2009 18:29

Re: HDD Standby verhindern - Mediaplayer pause
 
dann wird das DSPack wohl einen 2-sekündigen Puffer nutzt

so, und Folgendes hätte man sich ganz leicht, mit Hilfe des MSDN, zusammensetzen können.
Delphi-Quellcode:
Var H: THandle;
  Buf: Array[0..4095] of Byte;
  W:  LongWord;

H := CreateFile(PChar(Dateiname), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, 0);
ReadFile(H, Buffer, 4094, W, nil);
CloseHandle(H);
Die 4 KB sind Absicht.
Denn, wie man im MSDN gelesen haben sollte, muß man hier in ganzen Sektoren lesen.
(Festplatte/USB-Stick/Speicherkarten = 512 Byte pro Sektor und CD/DVD = 4 KB pro Sektor)

Da ReadFile nun direkt ließt, muß die Platte erstmal hochfahren, bevor es weitergeht.

Cylence 24. Nov 2009 07:17

Re: HDD Standby verhindern - Mediaplayer pause
 
Hi,

wow das ist es :-) Ich danke Dir tausendfach!!

lg

tom


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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