Jump to content
Nanohcv

FFMPEG per Recording Service API killen

Recommended Posts

Nanohcv

Hallo gibt es eine Möglichkeit einen oder alle FFMPEG-Prozesse per Api zu beenden?

 

Ich arbeite gerade an einer Windows-Phone APP. Streamen funktioniert schon ganz gut, leider werden die Livestreams (trotz close() dispose() usw.) wohl nicht richtig geschlossen (erst nach beenden der APP), weswegen ich nach einer Möglichkeit suche die FFMpeg Prozesse per Api abzuschießen. Ich glaube, das ging mal mit dem Iphone Webinterface, leider finde ich nicht mehr raus wie.

 

Falls es nicht (mehr) geht, wäre es wirklich super, wenn das mit eingebaut werden könnte.

 

 

Vielen Dank und viele Grüße,

 

Karl

Share this post


Link to post
Nanohcv

Danke, das ist funktioniert ganz gut. Leider macht das aber die Einrichtung recht kompliziert.

Share this post


Link to post
nuts

Ja das sehe ich ein. Die Skripte sind so gemacht, dass man möglichst viel anpassen kann ohne ständig Skripten zu müssen und dann geht das nicht viel besser. Grapfische Oberflächen sind auch nicht zu erwarten (kein Interesse an sowas sorry), aber ich verspreche eine bessere Doku für die Zukunft (ab Mitte Oktober).

Share this post


Link to post
Griga

Ich kenne mich mit der Materie nicht aus, aber im WebServer-Code sehe ich die folgende Prozedur, die passen könnte (auszugsweise und auf den relevanten Teil gekürzt). Vielleicht hilft es weiter:

 

procedure TBaseProcess.DoStream(var Flags: THttpGetFlag);
//...

begin
ExtractURLEncodedValue(Params, 'stream', h); //Kommando der URL entnehmen
if h = 'stop' then //Stream stoppen
begin
ExtractURLEncodedValue(Params, 'streamid', id); //Stream ID der URL entnehmen
ExtractURLEncodedValue(Params, 'back', h); //numerischer Antwortparameter (??? nix verstehn)
if id <> '' then //IPhone-Stream anhand der ID finden
begin
i := IPhoneStreams.IndexOf(id); //Listenindex des Streams
if i = -1 then //nicht gefunden
begin
Flags := hg404;
Exit;
end;
Converter := IPhoneStreams.Objects); //assoziierter ffmpeg Konverter
IPhoneStreams.Delete(i); //Stream aus der Liste nehmen
Converter.Free; //ffmpeg Prozess beenden

AnswerString(Flags, '', '', '',

'<html><head><title></title></head><body onload="javascript:history.go(-' + h + ');"></body></html>');

//...
end;

end;
//...

end;

Share this post


Link to post
Nanohcv

Also ich habe mir das nochmal genau angesehen und leider festgestellt, dass man nur beim erstellen des Iphone-Streams (als Parmeter der streamint2.html) diese "streamid" vergeben kann, über die der ffmpeg-Prozess auch wieder beendet werden kann.

 

Ich bräuchte diese streamid aber bei folgender URL

http:/192.168.178.68:8089/flashstream/stream.ts?Preset=0&aspect=16:9&ffPreset=ultrafast&maxwidth=&maxheight=&chid=0&streamid=123456

 

Also wenn sich das einbauen ließe oder jemand noch eine andere Idee hat, wäre das ech toll :original:

Edited by Griga
URL vollständig sichtbar gemacht

Share this post


Link to post
Griga

Hmm, das müsste in den Aufruf von TDVBHTTPClient.DoFlashstream münden. Folgende Parameter werden dort extrahiert:

 

ExtractURLEncodedValue(PAnsiChar(Params), 'recid', recid);
ExtractURLEncodedValue(PAnsiChar(Params), 'chid', chid);
ExtractURLEncodedValue(PAnsiChar(Params), 'objid', vidid);
ExtractURLEncodedValue(PAnsiChar(Params), 'Preset', preset);
ExtractURLEncodedValue(PAnsiChar(Params), 'aspect', aspect);
ExtractURLEncodedValue(PAnsiChar(Params), 'ffPreset', ffpreset);
ExtractURLEncodedValue(PAnsiChar(Params), 'maxheight', maxheight);
ExtractURLEncodedValue(PAnsiChar(Params), 'maxwidth', maxwidth);
ExtractURLEncodedValue(PAnsiChar(Params), 'start', start);
ExtractURLEncodedValue(PAnsiChar(Params), 'server_id', server_ID);
ExtractURLEncodedValue(PAnsiChar(Params), 'itemID', ItemID);

Dann folgt ein svcdebug.log-Eintrag "client doflashstream...", und direkt danach wird erst mal eine eventuell schon vorhandene ffmpegConverter-Instanz freigegeben (mit Beenden des Prozesses).

 

Wenn die Parameter recid, chid, objid und server_id leer bzw. nicht vorhanden sind, passiert danach nichts mehr, soweit ich sehen kann, d.h. es wird keine neuer Converter instantiiert. Übegeben werden muss jedoch auf jeden Fall der Preset-Parameter, sonst steigt die Prozedur schon vor dem Log-Eintrag und der Freigabe des Converters aus.

 

Probiere mal damit dein Glück...

Share this post


Link to post
Nanohcv

Ich habe jetzt eine Lösung gefunden, mit der ffmpeg beim Schließen des Streams beendet wird.

Jetzt müssten nurnoch die zwei Streaming-Profile bei der Recording-Service Installation mit installiert werden, dann brauchen die User am Server nichts mehr einrichten.

Share this post


Link to post
Tjod

Der RS 1.30 wird diese ffmpegprefs.ini generieren.

 

Allerdings nur wenn keine ffmpegprefs.ini im Konfigurationsverzeichnis\Config existiert, da einige die ffmpegprefs.ini manuell angepasst haben. Und wir das nicht zwangsweise zurücksetzen wollen (und eine Erkennung ob die geändert wurde für den nutzen zu aufwendig wäre).

 

Das bedeutet bei Neuinstallationen wird die direkt erzeugt. In den restliche fällen muss der Nutzer einmal die Konfigurationsverzeichnis\Config\ffmpegprefs.ini löschen.

Share this post


Link to post

  • Similar Content

    • t5b6_de
      By t5b6_de
      Hallo zusammen, 
       
      ich möchte für den DVBViewer und den Media Server plugins schreiben die  (im ersten Schritt Daten im TS-Datenstrom abgreifen, später dann auch manipulieren)
       
      Gibt es irgendwo ein Projektbeispiel für Visual Studio in c++ oder c?

      Ich konnte leider keines finden, oder war nicht in der Lage einen passenden Suchbegriff zu formulieren.
       
      Grüße
      Thomas
    • nickneutrino
      By nickneutrino
      Always when  i play a transcodec 4K MKV H265 to WEBM stream from Dbviewer Media Web Server appear in the middle of screen a circle.
       
      Anybody knows Is posible remove that circle and for what reason show this circle because the movie plays well? 
    • AnBad
      By AnBad
      Hallo,
      weiß jemand eine Möglichkeit wie man von FHEM aus EPG_Daten des Mediaservers aufrufen bzw. nach FHEM importieren kann? Also z.B. einmal am Tag für bestimmte Sender das Programm für z.B. die nächsten drei Tage.
       
      Ich weiß es gibt eine API-Schnittstelle im Mediaserver. Aber ich habe da keine Ahnung. Könnte man mit "http://[user]:[password]@[IP]:[port]/api/" Daten im Browser anzeigen lassen, die man dann mit Parsing abgreift? Wobei ich nicht einmal weiß, welchen User und Passwort ich in das Link eintragen müsste.
       
      Danke
      Michael
    • sir drake
      By sir drake
      Hallo Griga,
      ich möchte ein meinem Programm neben dem CHANNEL-NAME auch die Quelle( SAT/Internet...HLS Deutsch....)  einer Aufnahme anzeigen.
      In einem TIMER-RECORD habe kann ich hierfür den Node  <CHANNEL ID> zerlegen und benutzen.
      In einem RECORDING-RECORD habe ich nur den Node >CHANNEL>xxxx</CHANNEL>
      Das reicht leider für meine Zwecke nicht aus.

      <recording id="98" charset="255" start="20181021195500" duration="001000">
      <channel>Das Erste</channel>
      <channel ID>1234567890</channel ID>
      <file>
      d:\_aufnahmen\2018-10-21_19-59-23_das erste_tagesschau.ts
      </file>
      <title>Tagesschau</title>
      <image>2706243175_SM.jpg</image>
      </recording>
       
      Vielleicht kannst du diesen Node optional beim Aufruf hinzufügen:
       
      ....://localhost:8089/api/recordings.html?utf8=1&amp;images=1;channel_id=1
       
       
      vg & Dank 
      Sir Drake
    • mani tehrani
      By mani tehrani
      hi
      how can i reduce size of  recorded files with ffmpeg tasks? for example how can i change bitrate and convert "mpg" recorded files to MP4?
      i know some channels are HD and others are SD, is there different?
×
×
  • Create New...