Jump to content

Wie erkenne ich per API eine gerade laufende Aufnahme?


DetlefM

Recommended Posts

Meine Aufgabenstellung:
Ich möchte zu unregelmäßigen Abständen die im Aufnahmefolder aufgelaufenen Aufnahmen separates Verzeichnis verschieben. Dort werden sie dann weiterverarbeitet. Also in mp4 umgewandelt und bei Serien mit Season und Folge versehen usw.

Das Problem ist zu erkennen welche Aufnahmen gerade erfolgen, welche Dateien ich nicht verschieben darf. 

Über den Status2 erkenne ich ob Aufnahmen laufen. Es wäre also bei 0 ohne Probleme möglich dann alle Dateien zu verschieben (mal von den Sekunden abgesehen die zwischen meiner Anfrage mit status2, dem Erfassen aller Dateinamen und dem Verschiebevorgang liegen).

Aber wenn Aufnahmen laufen, dann habe ich aktuell keinen API-Aufruf gefunden, der mir die gerade laufenden Aufnehmen nebst Dateinamen liefert.

Die einzige Möglichkeit, die mir derzeit eingefallen ist, ist das Erstellungs- und das Geänderattribut der *.txt Datei zu vergleichen.  Wenn beide Werte gleich sind, dann läuft die Aufnahme noch, weil nach meiner Beobachtung beim Start der Aufnahme die *.txt Datei erzeugt wird und beide Fileattribute gleich sind. Wird die Aufnahme beendet dann wird (warum auch immer) diese Datei erneut beschrieben und das ändert das entsprechende Attribut aber das Erstellungattribut bleibt gleich. Die Attribute der *.ts Datei kann ich nicht nehmen, weil sich die Zeit für "Geändert" mit Zeitverzögerung verändern.

 

Langer Rede kurzer Sinn: 1. Denke ich richtig und 2. Gibt es einen besseren Weg

Link to comment
vor 12 Stunden schrieb DetlefM:

Aber wenn Aufnahmen laufen, dann habe ich aktuell keinen API-Aufruf gefunden, der mir die gerade laufenden Aufnehmen nebst Dateinamen liefert.

 

api/timerlist.html?reconly=1&utf8=1

 

https://www.dvbviewer.com/griga/changelog_dms_api.html#__RefHeading__60954_150729339

 

Mit dem utf8-Parameter erhälst du Unicode-Output.

 

Aber ergibt sich die Sache nicht von selbst? Laufende Aufnahmen lassen sich nicht verschieben. Da ist Windows vor. Du könntest auch versuchen, die Datei probeweise auf eine Weise zu öffnen, die nicht zulässig ist, solange die Aufnahme läuft. Der Media Server macht das so:

Spoiler

 

function FileIsInUse(const Filename: WideString): Boolean;
var
  Handle : THandle;
begin
  Handle := Windows.CreateFileW(PWideChar(Filename),
                     GENERIC_READ,
                     FILE_SHARE_READ,
                     nil,
                     OPEN_EXISTING,
                     0,
                     0);
  if Handle = INVALID_HANDLE_VALUE then
    Result := true
  else begin
    CloseHandle(Handle);
    result := false;
  end;
end;

 

 

Link to comment

Danke für das Feedback - die timerlist in Verbindung mit "Recording" und "RealFilename" beantwortet meine Frage.

Hatte ich in der Dokumentation verpasst.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...