ubuntuusers.de

xupnpd2 Mediaserver Meldungen filtern und ffmpeg ausführen

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

thomas.schmiedl

Anmeldungsdatum:
13. Mai 2019

Beiträge: Zähle...

Hallo,

ich benutze den xupnpd2-Mediaserver (https://github.com/clark15b/xupnpd2), um ein paar HLS-Streams zum TV zu übertragen. Die Software müsste um HTTPS erweitert und die HLS-Verarbeitung angepasst werden (z. Bsp. für HLS-Streams von https://www.mall.tv/zive). Leider antwortet der Original-Autor nicht mehr und ich bin kein Entwickler.

Meine Idee ist, beim Auswählen des Streams am TV im Skript xupnpd.lua einen httpd und ein ffmpeg (ohne Re-Encoding) zu starten, dass die Streams aus dem Internet empfängt, als HLS-Streams lokal speichert und an xupnpd2 ausliefert.

Leider gibt es ein solches Skript nicht beim Beenden eines Streams (Beenden des https und ffmpeg). xupnpd2 hat eine Protokollfunktion eingebaut, mit der man herausfinden kann, wann der Stream als Childprocess gestartet und beendet wird. Mit der Weitergabe und Auswertung über einen Syslog kenne ich mich leider nicht aus. Das Logfile filtern ist sicher nicht möglich, da ich die Lösung auf einem Router mit wenig internem Speicher verwenden möchte (das Logfile darf nicht zu groß werden).

Zeilen beim Starten des Streams:

run child, pid=1234
using handler 'hls' for 'http://...'

Beim Beenden:

exit child, pid=1234

Gibt es die Möglichkeit, die Protokollmeldungen über ein Skript zu filtern, das beim Starten eines bestimmten Streams (filterbar über die URL) die Child-PID zwischenspeichert und beim Beenden des Streams nach der Child-PID filtert und anschließend httpd und ffmpeg beendet sowie die .ts-Segmente und die .m3u8-Playlist löscht?

Danke für Eure Unterstützung, Thomas

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13315

Herzlich willkommen im Forum!

Ich bin mir nicht ganz sicher, dass ich verstanden habe, was Du willst. Falls es darum geht, ein Programm erst zu starten, wenn eine Datei (der Stream vermutlich) komplett geschrieben wurde, dann bietet sich inotifywait an. Du wartest dann einfach auf "close_write", z.B. so

1
2
3
4
5
if inotifywait -qe close_write stream; then
  wc stream # nur ein Beispiel
else
  echo 'Was schief gegangen' >&2
fi

thomas.schmiedl

(Themenstarter)

Anmeldungsdatum:
13. Mai 2019

Beiträge: 2

Wenn man einen Stream über xupnpd2 anschauen möchte (z. Bsp. in vlc oder am Smart-TV), kann man das Skript xupnpd.lua ausführen lassen. Es wurde vom Original-Entwickler eingebaut, um dynamische .m3u8-URLs zu erstellen. Ich möchte in diesem Skript ffmpeg und einen lokalen Webserver starten. ffmpeg soll den HLS-Stream aus dem Internet empfangen und lokal speichern, der lokale httpd soll den lokalen HLS-Stream an xupnpd2 ausliefern.

Wenn man den Stream in vlc oder am Smart-TV verlässt (Meldung in xupnpd2: "exit child, pid=1234"), sollen ffmpeg und httpd beendet werden. In xupnpd2 habe ich den Loglevel auf "-7" eingestellt. Beim Start von xupnpd2 könnte man diese Meldungen in ein Logfile schreiben lassen, dass sicherlich für den internen Speicher im Router zu groß wird. Eventuell wäre auch eine Lösung mit strace möglich, dass man auf "exit child, pid=1234" (1234 ist nur ein Platzhalter) reagieren kann, aber auch dann benötige ich Hilfe bei der Filterung dieser Meldung.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13315

thomas.schmiedl schrieb:

Wenn man einen Stream über xupnpd2 anschauen möchte (z. Bsp. in vlc oder am Smart-TV), kann man das Skript xupnpd.lua ausführen lassen. Es wurde vom Original-Entwickler eingebaut, um dynamische .m3u8-URLs zu erstellen.

Wo ist da jetzt der Zusammenhang mit dem Rest? Must Du eine .m3u8-Datei generieren, damit der Client (z.B. vlc) auf den richtigen Server zugreift? Und wieso willst Du in diesem Skript etwas einbauen - das soll ja wohl eher nur kurz laufen (also für die Generierung der .m3u8-Datei).

Ich möchte in diesem Skript ffmpeg und einen lokalen Webserver starten. ffmpeg soll den HLS-Stream aus dem Internet empfangen und lokal speichern, der lokale httpd soll den lokalen HLS-Stream an xupnpd2 ausliefern.

Verstehe ich das richtig: Du willst eine Weiche einbauen, die den Stream lokal auf Festplatte speichert, damit Du später noch einmal etwas damit machen kannst?

Wenn man den Stream in vlc oder am Smart-TV verlässt (Meldung in xupnpd2: "exit child, pid=1234"), sollen ffmpeg und httpd beendet werden. In xupnpd2 habe ich den Loglevel auf "-7" eingestellt. Beim Start von xupnpd2 könnte man diese Meldungen in ein Logfile schreiben lassen, dass sicherlich für den internen Speicher im Router zu groß wird. Eventuell wäre auch eine Lösung mit strace möglich, dass man auf "exit child, pid=1234" (1234 ist nur ein Platzhalter) reagieren kann, aber auch dann benötige ich Hilfe bei der Filterung dieser Meldung.

Das Logfile könntest Du so prüfen:

1
2
3
while tail -n 0 -F logfile | fgrep -q 'exit child, pid='; do
  echo 'Client exit'
done

Edit: tail startet ohne Anzeige ("-n 0").

Antworten |