Jump to content

FFMPEG per Recording Service API killen


Nanohcv

Recommended Posts

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

Link to comment

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).

Link to comment

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;

Link to comment

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
Link to comment

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...

Link to comment
  • 2 weeks later...

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.

Link to comment

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.

Link to comment
×
×
  • Create New...