Aufnahmesteuerung TVHeadend

Schwimmer742
Junior Member
Beiträge: 16
Registriert: 27 Aug 2021, 10:45

Re: Aufnahmesteuerung TVHeadend

Beitrag von Schwimmer742 »

Hallo,

Ich hab's leider noch nicht ganz begriffen.
Wo genau wird "--http_root" im TV-Browser angegeben?
In deinen vorherigen Posts erwähnst du das zwar, aber ich sehe es nicht in den Aufruf-Parametern im TV-Browser.
Wenn es in der Eingabeaufforderung ohne "--http_root" geht, muss es doch auch aus TV-Browser ohne gehen, oder?
Gruß
odo125
Junior Member
Beiträge: 29
Registriert: 04 Jan 2017, 05:04

Re: Aufnahmesteuerung TVHeadend

Beitrag von odo125 »

Hallo
Im TVBrowser wird das gar nicht angegeben sondern beim Start des TVHeadend Servers. und dann ändert sich die URL des TVHeadend um den Parameter den ich über --http_root definiert habe.

Also z.B: Standardurl wäre http://192.168.0.1:9981

Beispiel 1
Wenn ich nun Tvheadend mit dem Parameter "--http_root tv" starte wird aus der Url des TvHeadend http://192.168.0.1:9981/tv/
oder
Beispiel 2
Wenn ich nun Tvheadend mit dem Parameter "--http_root tvh" starte wird aus der Url des TvHeadend http://192.168.0.1:9981/tvh/

Nun kann ich einen reverse Proxy in Apache2 konfigurieren und dann ist das TVH Webif im Internet über https://www.<meinedomain>/tv/ erreichbar oder wie im Beispiel 2 über https://www.<meinedomain>/tvh/

lg
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Aufnahmesteuerung TVHeadend

Beitrag von ds10 »

Es ist kein Fehler in der Aufnahmesteuerung, denn die Fehlermeldung geht von AufnahmesteuerungTvHeadend aus.

TV-Browser startet externe Programm mit expliziten Parametern, d.h. alles was mit Anführungszeichen umschlossen ist wird ohne die Anführungszeichen als Parameter gesendet, ein leerer Parameter (leer ist ein Parameter, wenn er kein Zeichen oder nur unsichtbare Zeichen wie z.B. Leerzeichen beinhaltet) wird allerdings vollständig aus der Übergabe entfernt, da es mit leeren Parametern unter Umständen Probleme mit dem Betriebssystem geben kann. Eine leere Beschreibung wird also nicht als leer übergeben, sondern gar nicht, am Ziel kommt somit --description --language an.

AufnahmesteuerungTvHeadend müsste das dann entsprechend berücksichtigen, indem eine fehlende Beschreibung nach --description nicht zum Fehler führt. Eine Alternative wäre --description gar nicht zu übergeben, wenn keine Beschreibung existiert: {testparam(description,"--description")} "{testparam(description,replaceNewline(maxlength(escapeQuotes(description),"300")))}"
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
odo125
Junior Member
Beiträge: 29
Registriert: 04 Jan 2017, 05:04

Re: Aufnahmesteuerung TVHeadend

Beitrag von odo125 »

ds10 hat geschrieben: 31 Jul 2022, 22:52 Es ist kein Fehler in der Aufnahmesteuerung, denn die Fehlermeldung geht von AufnahmesteuerungTvHeadend aus.

TV-Browser startet externe Programm mit expliziten Parametern, d.h. alles was mit Anführungszeichen umschlossen ist wird ohne die Anführungszeichen als Parameter gesendet, ein leerer Parameter (leer ist ein Parameter, wenn er kein Zeichen oder nur unsichtbare Zeichen wie z.B. Leerzeichen beinhaltet) wird allerdings vollständig aus der Übergabe entfernt, da es mit leeren Parametern unter Umständen Probleme mit dem Betriebssystem geben kann. Eine leere Beschreibung wird also nicht als leer übergeben, sondern gar nicht, am Ziel kommt somit --description --language an.

AufnahmesteuerungTvHeadend müsste das dann entsprechend berücksichtigen, indem eine fehlende Beschreibung nach --description nicht zum Fehler führt. Eine Alternative wäre --description gar nicht zu übergeben, wenn keine Beschreibung existiert: {testparam(description,"--description")} "{testparam(description,replaceNewline(maxlength(escapeQuotes(description),"300")))}"
Danke für die Info. Jetzt ist mir auch klar warum das

Code: Alles auswählen

--description "{maxlength(escapeQuotes(description),"300")}""nicht vorhanden"
funktioniert. In diesem Fall wird der Parameter --descritption bei leerem EPG nicht gesendet aber dafür der Eintrag "nicht vorhanden"
odo125
Junior Member
Beiträge: 29
Registriert: 04 Jan 2017, 05:04

Re: Aufnahmesteuerung TVHeadend

Beitrag von odo125 »

Hallo
Habe das jetzt eine Aufnahme mit folgenden Parametern erzeugen wollen bei einer Sendung mit leerem EPG:
username "{device_username}" --password "{device_password}" --starttime {start_unix} --endtime {end_unix} --channel "{channel_name_external}" --title "{maxlength(escapeQuotes(title),"200")}" {testparam(description,"--description")} "{testparam(description,replaceNewline(maxlength(escapeQuotes(description),"300")))}" --language "ger" --config "withPadding" --comment "add by TV-Browser"


Ausgabe:

--command "dvrcreate" --serverurl "http://192.168.0.1:9981/tv/" --username "user1" --password "***" --starttime 1659309300 --endtime 1659312300 --channel "ORF III HD" --title "zeit.geschichte Der Brand der Hofburg" --description "" --language "ger" --config "withPadding" --comment "add by TV-Browser"

AufnahmesteuerungTvHeadendClient. Release:1.1.1 , Juli 2022, TvHeadendLibrary-Release:1.1.1 , Juli 2022


AufnahmesteuerungTvHeadend 1.1.1
Copyright (C) 2022 Oliver Matle

ERROR(S):
Option 'd, description' has no value.

-a, --command Required. Command

-s, --serverurl Required. Server-URL

-u, --username Required. Username

-p, --password Required. Password

-b, --starttime Starttime (Unixtime)

-e, --endtime Endtime (Unixtime)

-c, --channel Channelname

-t, --title Title

-d, --description Description

-i, --uuid UUID

-l, --language Language

-f, --config DVR-Configname

-o, --comment DVR-Comment

--help Display this help screen.

--version Display version information.

Unhandled exception. System.InvalidOperationException: An invalid request URI was provided. The request URI must either be an absolute URI or BaseAddress must be set.
at System.Net.Http.HttpClient.PrepareRequestMessage(HttpRequestMessage request)
at System.Net.Http.HttpClient.CheckRequestBeforeSend(HttpRequestMessage request)
at System.Net.Http.HttpClient.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.GetAsync(String requestUri)
at TvHeadendRestApiClientLibrary.TvHeadendLibrary.CallServer(RequestData requestData)
at TvHeadendRestApiClientLibrary.TvHeadendLibrary.GetServerinfo(RequestData requestData)
at AufnahmesteuerungTvHeadend.AufnahmesteuerungTvHeadendClient.CheckApiVersion(RequestData requestData)
at AufnahmesteuerungTvHeadend.AufnahmesteuerungTvHeadendClient.Execute(String[] args)
at AufnahmesteuerungTvHeadend.AufnahmesteuerungTvHeadendClient.Main(String[] args)

Die Aufnahme wird nicht erzeugt

Derselbe Aufruf aus einer Windows Shell: D:\AufnahmeTVH\AufnahmesteuerungTvHeadend.exe --command "dvrcreate" --serverurl "http://192.168.0.1:9981/tv/" --username "user1" --password "***" --starttime 1659309300 --endtime 1659312300 --channel "ORF III HD" --title "zeit.geschichte Der Brand der Hofburg" --description "" --language "ger" --config "withPadding" --comment "add by TV-Browser"
funktioniert problemlos und die Aufnahme wird erzeugt.

Warum das so ist kann ich mir jetzt auch nicht erklären.

Grüße
Jo
Site Admin
Beiträge: 11815
Registriert: 07 Apr 2006, 23:39

Re: Aufnahmesteuerung TVHeadend

Beitrag von Jo »

odo125 hat geschrieben: 31 Jul 2022, 23:28 ERROR(S):
Option 'd, description' has no value.
Vielleicht verarbeitet das Plugin die Parameter noch? Aber du hast ja eine mögliche Lösung und ds10 noch eine andere.
odo125
Junior Member
Beiträge: 29
Registriert: 04 Jan 2017, 05:04

Re: Aufnahmesteuerung TVHeadend

Beitrag von odo125 »

Jo hat geschrieben: 31 Jul 2022, 23:36
Vielleicht verarbeitet das Plugin die Parameter noch? Aber du hast ja eine mögliche Lösung und ds10 noch eine andere.
Danke für die Info. Die Lösung von ds10 funktioniert leider nicht, wie ich in dem Post ober deinem beschrieben habe. Mein Workaround funktioniert.

username "{device_username}" --password "{device_password}" --starttime {start_unix} --endtime {end_unix} --channel "{channel_name_external}" --title "{maxlength(escapeQuotes(title),"200")}" --description "{replaceNewline(maxlength(escapeQuotes(description),"300"))}""nicht vorhanden" --language "ger" --config "withPadding" --comment "add by TV-Browser"


Das Programm "AufnahmesteuerungTvHeadend.exe" wird dann mit folgenden Parametern aufgerufen:

--command "dvrcreate" --serverurl "http://192.168.0.1:9981/tv/" --username "user1" --password "***" --starttime 1659320700 --endtime 1659323700 --channel "ORF III HD" --title "Fernsehen wie damals 16mm - Schätze aus dem Fernseharchiv" --description """nicht vorhanden" --language "ger" --config "withPadding" --comment "add by TV-Browser"

Das funktioniert sowohl im TvBrowser als auch in der Windows Shell

@ Schwimmer742 Vielleicht kannst du ja einen diesbezüglichen Vermerk in deine Anleitung aufnehmen, sollte jemand dieses Problem mit dem leeren EPG auch haben.

Grüße
odo125
Junior Member
Beiträge: 29
Registriert: 04 Jan 2017, 05:04

Re: Aufnahmesteuerung TVHeadend

Beitrag von odo125 »

Hallo Schwimmer

Habe deine neue Version 1.2 mit Umschaltfunktion getestet. Funktioniert einwandfrei und wird auch in der Doku gut beschrieben. Eine Frage dazu. Kann man VLC auch Parameter übergeben ? z.B --one-instance
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Aufnahmesteuerung TVHeadend

Beitrag von ds10 »

Wenn --description mit testparam hinzugefügt wird, dann bedeutet das, dass die Beschreibung nicht leer ist.

Könnte sein, dass dort irgendein unsichtbares Zeichen in der Beschreibung steht, das würde auch den Zeilenumbruch erklären.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Schwimmer742
Junior Member
Beiträge: 16
Registriert: 27 Aug 2021, 10:45

Re: Aufnahmesteuerung TVHeadend

Beitrag von Schwimmer742 »

Hallo zusammen!

Ich möchte das Thema sauber abschließen, damit nachfolgende Leser auch daraus schlau werden.
Das Thema "AufnahmesteuerungTvHeadend Version 1.2" können wir sehr gerne in einem separaten Thread besprechen, bitte!

Zurück zum Thema.

Die Aussage von ds10 ist für mich genau die wichtige Information, die mir gefehlt hat, um die Ursache für das Verhalten zu begreifen:
TV-Browser startet externe Programm mit expliziten Parametern, d.h. alles was mit Anführungszeichen umschlossen ist wird ohne die Anführungszeichen als Parameter gesendet, ein leerer Parameter (leer ist ein Parameter, wenn er kein Zeichen oder nur unsichtbare Zeichen wie z.B. Leerzeichen beinhaltet) wird allerdings vollständig aus der Übergabe entfernt, da es mit leeren Parametern unter Umständen Probleme mit dem Betriebssystem geben kann. Eine leere Beschreibung wird also nicht als leer übergeben, sondern gar nicht, am Ziel kommt somit --description --language an.
Analyse:
Für den Inhalt von description gibt es drei Fälle.
1. Fall: normal mit Text gefüllt. Beispiel "Beschreibungstext"
2. Fall: mit unsichtbaren Sonderzeichen gefüllt. Beispiel " \r\n"
3. Fall: leer. Beispiel ""

Folge:
Die beiden Teile, nämlich den Optionsparameter --description sowie den Wert müssen getrennt behandelt werden.

Für den Optionsparameter gilt
{testparam(clean(description),"--description","--description")}
Fallbetrachtung:
Fall 1: clean erzeugt "Beschreibungstext". Hat zur Folge, dass testparam "--description" liefert.
Fall 2: clean erzeugt "___". Hat zur Folge, dass testparam "--description" liefert.
Fall 3: clean erzeugt "" . Hat zur Folge, dass testparam "--description" liefert.

Für den Wert gilt
"{testparam(clean(description),replaceNewline(maxlength(escapeQuotes(description),"300")),"!")}!"
Fallbetrachtung:
Fall 1: clean erzeugt "Beschreibungstext". Hat zur Folge, dass testparam "Beschreibungstext" liefert. Ausgabe ist "Beschreibungstext!"
Fall 2: clean erzeugt "___". Hat zur Folge, dass testparam "" liefert. Ausgabe ist "!"
Fall 3: clean erzeugt "" . Hat zur Folge, dass testparam "!" liefert. Ausgabe ist "!!"

Beide Ausgaben gemeinsam betrachtet.

Fall 1: Ausgabe ist --description Beschreibungstext!
Fall 2: Ausgabe ist --description !
Fall 3: Ausgabe ist --description !!

Mein Lösungsvorschlag:

Code: Alles auswählen

{testparam(clean(description),"--description","--description")}
"{testparam(clean(description),replaceNewline(maxlength(escapeQuotes(description),"300")),"!")}!" 

Code: Alles auswählen

--command "dvrcreate" --serverurl "http://raspitv:9981" --username "{device_username}" --password "{device_password}" --starttime {start_unix} --endtime {end_unix} --channel "{channel_name_external}" --title "{maxlength(escapeQuotes(title),"200")}" 
{testparam(clean(description),"--description")}   "{testparam(clean(description),replaceNewline(maxlength(escapeQuotes(description),"300")),"!")}!"
 --language "ger" --config "withPadding" --comment "add by TV-Browser"
Ich bitte darum, meine Vorschläge zu testen.
odo125
Junior Member
Beiträge: 29
Registriert: 04 Jan 2017, 05:04

Re: Aufnahmesteuerung TVHeadend

Beitrag von odo125 »

ds10 hat geschrieben: 01 Aug 2022, 16:01 Wenn --description mit testparam hinzugefügt wird, dann bedeutet das, dass die Beschreibung nicht leer ist.

Könnte sein, dass dort irgendein unsichtbares Zeichen in der Beschreibung steht, das würde auch den Zeilenumbruch erklären.
Ja das glaube ich auch fast. Was ich nicht verstehe ist warum der Aufruf derselben Parameter in einer Windows Shell funktioniert und aus TVBrowser nicht, wie ich im Post https://hilfe.tvbrowser.org/viewtopic.p ... 94#p128494 beschrieben habe.
odo125
Junior Member
Beiträge: 29
Registriert: 04 Jan 2017, 05:04

Re: Aufnahmesteuerung TVHeadend

Beitrag von odo125 »

Schwimmer742 hat geschrieben: 01 Aug 2022, 19:54
Mein Lösungsvorschlag:

Code: Alles auswählen

{testparam(clean(description),"--description","--description")}
"{testparam(clean(description),replaceNewline(maxlength(escapeQuotes(description),"300")),"!")}!" 

Code: Alles auswählen

--command "dvrcreate" --serverurl "http://raspitv:9981" --username "{device_username}" --password "{device_password}" --starttime {start_unix} --endtime {end_unix} --channel "{channel_name_external}" --title "{maxlength(escapeQuotes(title),"200")}" 
{testparam(clean(description),"--description")}   "{testparam(clean(description),replaceNewline(maxlength(escapeQuotes(description),"300")),"!")}!"
 --language "ger" --config "withPadding" --comment "add by TV-Browser"
Ich bitte darum, meine Vorschläge zu testen.
Wurden von mir getestet und "Bingo". Genauso funktioniert es.

Ausgabe bei leerem EPG:

--command "dvrcreate" --serverurl "http://192.168.0.1:9981/tv/" --username "user1" --password "***" --starttime 1659386700 --endtime 1659390600 --channel "ORF III HD" --title "ORF III Themenmontag Mini Bydlinski - Die besten Solonummern" "!!" --language "ger" --config "withPadding" --comment "add by TV-Browser"

AufnahmesteuerungTvHeadendClient. Release:1.2 , Juli 2022, TvHeadendLibrary-Release:1.2 , Juli 2022
Successful. UUID:a1fef39f525cd8f97b57583ef0698014


Ausgabe bei EPG:


--command "dvrcreate" --serverurl "http://192.168.0.1:9981/tv/" --username "user1" --password "***" --starttime 1659394560 --endtime 1659400440 --channel "ATV HD" --title "300: Rise of an Empire" --description "Schlachtenepos über das antike Griechenland mit Eva Green und Sullivan Stapleton: Der furchtlose Themistokles zieht mit einer zahlenmäßig weit unterlegenen griechischen Flotte in die Schlacht gegen die Armada des persischen Königs Xerxes. Diese steht unter dem Kommando von Xerxes blutrünstiger Admir!" --language "ger" --config "withPadding" --comment "add by TV-Browser"

AufnahmesteuerungTvHeadendClient. Release:1.2 , Juli 2022, TvHeadendLibrary-Release:1.2 , Juli 2022
Successful. UUID:c6f48adf4ef16a52af817872c6b16597

Wenn eine Aufnahme mit leerem EPG erzeugt wird bleibt im WebIf von TVHeadend das Feld Extra text leer. Also alles wie es sein soll. Vielen Dank Schwimmer742 für deine Mühe.

lg
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Aufnahmesteuerung TVHeadend

Beitrag von ds10 »

Ich denke die Funktion testparam müsste ich überarbeiten, so dass dort unsichtbare Zeichen und Zeichenketten mit Länge Null als nicht existierender Parameter gewertet werden, denn was man als Nutzer gar nicht sehen kann existiert praktisch auch nicht. Ganz davon abgesehen, dass ein Zeilenumbruch im Beschreibungstext sinnlos ist, da damit keine Information geliefert wird.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Schwimmer742
Junior Member
Beiträge: 16
Registriert: 27 Aug 2021, 10:45

Re: Aufnahmesteuerung TVHeadend

Beitrag von Schwimmer742 »

odo125 hat geschrieben: 01 Aug 2022, 19:57
ds10 hat geschrieben: 01 Aug 2022, 16:01 Wenn --description mit testparam hinzugefügt wird, dann bedeutet das, dass die Beschreibung nicht leer ist.

Könnte sein, dass dort irgendein unsichtbares Zeichen in der Beschreibung steht, das würde auch den Zeilenumbruch erklären.
Ja das glaube ich auch fast. Was ich nicht verstehe ist warum der Aufruf derselben Parameter in einer Windows Shell funktioniert und aus TVBrowser nicht, wie ich im Post https://hilfe.tvbrowser.org/viewtopic.p ... 94#p128494 beschrieben habe.
Wenn man die identischen Aufrufe in der Shell ausführt, werden sie so auch an mein Programm übergeben, weil da ja ein zweifaches Doppelhochkomma steht. In meinem Programm kommt da in einem Array ein Leerstring an. Dagegen wird, wie von ds10 beschrieben, im TV-Browser einfach gar nichts übergeben. Das führt dann dazu, dass nach dem einleitenden Optionskennzechen --description gar nichts kommt, was nicht sein darf.

Ich werde jetzt meine Doku anpassen.
Danke an alle für die Mithilfe.
ds10
Site Admin
Beiträge: 19117
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Aufnahmesteuerung TVHeadend

Beitrag von ds10 »

Noch zur Ergänzung {testparam(clean(description),"--description","--description")} liefert immer --description, kann man also auch einfach weglassen und gleich --description hinschreiben.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Antworten