Nanohcv Posted September 20, 2014 Share Posted September 20, 2014 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
nuts Posted September 20, 2014 Share Posted September 20, 2014 (edited) Ob das direkt geht weiß ich nicht, aber du könntest einen Aufgsbe definieren und mein Skript verwenden (processclose). http://www.DVBViewer.tv/forum/topic/51926-processtasksex/ Edited September 20, 2014 by nuts Link to comment
Nanohcv Posted September 21, 2014 Author Share Posted September 21, 2014 Danke, das ist funktioniert ganz gut. Leider macht das aber die Einrichtung recht kompliziert. Link to comment
nuts Posted September 21, 2014 Share Posted September 21, 2014 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
Griga Posted September 26, 2014 Share Posted September 26, 2014 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
Nanohcv Posted September 29, 2014 Author Share Posted September 29, 2014 (edited) 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 Edited September 29, 2014 by Griga URL vollständig sichtbar gemacht Link to comment
Griga Posted September 29, 2014 Share Posted September 29, 2014 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
Nanohcv Posted October 10, 2014 Author Share Posted October 10, 2014 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
Tjod Posted October 10, 2014 Share Posted October 10, 2014 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
Recommended Posts