Jump to content
brutus

Recording Service API

Recommended Posts

Prinz

Hallo Goersch,

Mh, warum vergleichst Du die Endzeit ? eine Aufnahme ist für mich durch KanalNamen und StartZeit eindeutig definiert.

 

Prinzipiell ja, aber da aus der Timerliste immer nur die Zeit mit den Vorhalten ausgelesen werden können und der User diese Zeit modifizieren kann, verwende ich eben immer das Anfangs/Endzeit- Intervall und untersuche alle Aufnahmen, und bewerte, welche Aufnahme da in dieses Intervall am besten passt. Die Orginal-Zeiten der Aufnahme und auch die ursprünglich programmierten habe ich mir in einer extra XML-Datei gesichert.

 

Ist alles eigentlich ein Krampf, eine feste ID wäre natürlich viel besser und würde diesen Krampf komplett beseitigen.

 

Was hier noch "unschön" ist (im Vergleich zu MediaPortal), ist, dass die Vor- und Nachlaufzeit nicht einzeln pro Aufnahme abgefragt werden kann, sondern bereits in Start- und Endzeit verrechnet ist - somit entstehen halt neue Start- und Endzeiten wenn diese Zeiten verändert werden, ohne dass eigentlich was verändert wurde. Das hab ich aber mittlerweile hoffentlich auch im Griff.

 

Genau, deshalb führe ich auch eine eigene Liste, denn man nicht weiß wie der User die Start- und Stop-zeiten ändert.

 

Lars hatte das in seinem Tool so realisiert, dass die Orginal-Zeiten nur innerhalb Start- und Stop-Zeit liegen muss. Dass hatte bei mir jedoch dazu geführt, dass mehrere kurze Aufnahmen hintereinander dann in das Intervall der ersten passten und so manche Aufnahme erst gar nicht programmiert wurden und war dadurch manchmal auch abgeschnitten.

 

Ohne eindeutige ID wird es auch bei noch so großem Aufwand Mehrdeutigkeiten geben, da man dem User nicht verbieten kann, die Anfangs-, Endzeiten und den Titel nachträglich zu modifiziern.

 

 

@Lars

Wäre es vielleicht doch möglich die IDs in die XML-Dateien aufzunehmen und so dieses Problem elegant aus der Welt zu schaffen?

 

Gruß

Prinz

Share this post


Link to post
Lars_MQ
Wäre es vielleicht doch möglich die IDs in die XML-Dateien aufzunehmen und so dieses Problem elegant aus der Welt zu schaffen?

Im Recservice stellt das keinerlei problem da. Dort könnte ich das einbauen, in form einer GUID, da brauch ich mir keine sorgen um eindeutigkeit machen. :angry:

 

Was hier noch "unschön" ist (im Vergleich zu MediaPortal), ist, dass die Vor- und Nachlaufzeit nicht einzeln pro Aufnahme abgefragt werden kann, sondern bereits in Start- und Endzeit verrechnet ist

Das ist mir auch bewusst, ich wollte das auch im Service beim neuen Timerformat ändern, aber das hat sich als sehr komplex erwiesen und verursacht alle möglichen Probleme im Zusammenspiel mit tools und vor allem dem DVBViewer, weil ich solche daten dort nicht unterbringen kann, ohne die gesamte Timersteuerung des Service zu übernehmen. Und eine so grosse Änderung möchte ich jetzt nicht mehr vornehmen (für die 4.5).

Share this post


Link to post
Goersch

das wäre beides hilfreich - auch wenn ich dann an edlichen Stellen ändern muss :angry: - aber es würde in GMPS weniger Code und damit weniger Fehlermöglichkeiten bedeuten

Share this post


Link to post
dgdg
das wäre beides hilfreich - auch wenn ich dann an edlichen Stellen ändern muss :) - aber es würde in GMPS weniger Code und damit weniger Fehlermöglichkeiten bedeuten

 

Lars, könntest Du bei der Gelegenheit auch gleich noch ein Flag für jeden Timereintrag übertragen, ob der Recording Service einen Konflikt wegen Überschneidungen festgestellt hat?

Edited by dgdg

Share this post


Link to post
Lars_MQ

Gibt es doch schon längst?

 

"Executeable" -> ausführbar

und "Recording" -> nimmt grade auf.

Share this post


Link to post
dgdg
"Executeable" -> ausführbar

und "Recording" -> nimmt grade auf.

 

"Executeable" heisst, es gibt keine Konflikt? Da wäre ich nicht drauf gekommen. Ok, dann hat sich das erledigt.

Share this post


Link to post
nuts

Genau - funktioniert bei mir auch :)

Share this post


Link to post
Lars_MQ

Ich dachte "ausführbar" sagt alles aus. :) Ich werde mich in zukunft um präzisere Bezeichnungen bemühen. :angry:

Share this post


Link to post
VinoRosso

Neuerderings kann man ja die channellist vom recservice runterzuladen.

 

gibts da nen http request dafür, analog zu:

 

http://[user:password@]IP[:port]/api/timerlist.html[?utf8=]

 

habs mal optimistisch mit channellist.html und channels.html probiert, aber da kommt nix bei raus :)

Edited by VinoRosso

Share this post


Link to post
Tjod

Eventuell ist es eine Gute Idee die API Dokumentation ins Wiki zu verlagern, wenn die Informationen hier über das Topic verstreut sind, sind sie nicht umweltbedingt so einfach zu finden.

 

Ich habe mal den anfang gemacht und da alles zusammen kopiert was ich gefunden habe:

http://en.DVBViewer.tv/wiki/Recording_Service_API

Share this post


Link to post
VinoRosso

ahh spitzen idee tjod, da isses besser aufgehoben.

 

aber theoretisch muss es doch noch viel mehr geben, für jeden view vom webinterface muss es doch auch nen api aufruf geben oder?

 

die liste kann dann wohl nur lars vervollständigen...

 

schade, dachte es ist mehr bekannt als nur recordings, timer, status und epg.

 

ich wuesste nämlich nicht wie ich ohne channelliste mir die channelid berechnen könnte, um epg eines senders abzurufen.

 

oder ich seh den wald vor lauter bäumen nicht.

Share this post


Link to post
Tjod
aber theoretisch muss es doch noch viel mehr geben, für jeden view vom webinterface muss es doch auch nen api aufruf geben oder?
Wirklich als API glaube ich nicht.

Vieles im Webinterface ist einfach mit der Zeit gewachsen.

 

Wie man am besten an die Senderliste kommt kann ich dir leider nicht beantworten.

Share this post


Link to post
xarko

Neuerderings kann man ja die channellist vom recservice runterzuladen.

Wie kommst du da drauf?

Beziehst du dich auf den Eintrag der letzten DVBViewer-Beta?

Da ist aber von der Version 1.6.0.2 die Rede, die es noch gar nicht als Download für alle Mitglieder gibt:

 

Add: Channellist : The channel list can be downloaded from the Recording Service at the start of the DVBViewer. Needs Recording Service 1.6.0.2+.

 

ich wuesste nämlich nicht wie ich ohne channelliste mir die channelid berechnen könnte, um epg eines senders abzurufen.

Was genau hast du denn vor; wofür brauchst du das?

Du könntest ja auch alle Sender komplett abfragen.

Die Werte, die du für die channelid eines einzelnen Senders brauchst, findest du über die Senderliste im DVBViewer oder auslesbar aus der channel.dat; ist ja dokumentiert.

Share this post


Link to post
VinoRosso

Wie kommst du da drauf?

Beziehst du dich auf den Eintrag der letzten DVBViewer-Beta?

Da ist aber von der Version 1.6.0.2 die Rede, die es noch gar nicht als Download für alle Mitglieder gibt:

 

ahh okay, hab mich shcon gewundert warum ich die 1.6.0.2 nirgends finde.

 

Was genau hast du denn vor; wofür brauchst du das?

Du könntest ja auch alle Sender komplett abfragen.

Die Werte, die du für die channelid eines einzelnen Senders brauchst, findest du über die Senderliste im DVBViewer oder auslesbar aus der channel.dat; ist ja dokumentiert.

 

ich würde erstmal gerne ne Senderliste anzeigen, dafür wäre die senderliste nicht schlecht ;)

 

Sender epg anzeigen mit nem http request, dafür brauch ich die epgchannelid, die wird berechnet aus massig zeug...

 

wenn ich per http request an die channels.dat rankomme soll mir das auch recht sein, meines wissens geht das nicht.

Share this post


Link to post
xarko

Ok, wenn du den RS als (fremde entfernte) "Black Box" ansiehst auf dessen Daten du keinen direkten Zugriff hast und du alles Notwendige nur per HTTP-Request erfragen willst, gilt es abzuwarten, was Lars noch an Überraschungen zu bieten hat in der nächsten RS-Version. :)

Share this post


Link to post
mague

Gibt es eine Moeglichkeit den kompletten Status abzurufen ?

 

url/api/status.html liefert nur einen Teil der Daten.

 

Mich interessieren die Aufnahmeverzeichnisse und deren Belegung. Die wuerde ich gerne auswerten und als RSS feed bereitstellen. Sonst habe ich am HTPC keinen Durchblick wann eine Platte volllaeuft ;)

Share this post


Link to post
c-o-m-m-a-n-d-e-r

Ich wüsste via Status gern was er gerade aufnimmt, die Dauer und den Platz.

Die Infos seh ich ja im WebIF ... abber via api/status.html ist das nicht ersichtlich!

 

 

Danke

Share this post


Link to post
Tjod

Das du unter /api/timerlist.html (Recording) sehen kannst war grade aufgenommen wird weist du?

Share this post


Link to post
VinoRosso

ich hab ne recordingservice epg abfrage, aber die uhrzeit bringt mich zur verzweiflung....

 

/api/epg.html?lvl=2&channel=68906732&start=40476.678&end=40477.678&utf8=255

 

start Datum: 25.10.2010 11.18

 

stopDatum: 26.10.2010 11.18

 

678 entspricht 11h und 18 minuten... in Minuten

 

der erste Eintrag in der Antwort.xml beginnt allerdings erst um 17:00 Uhr.

 

Was mach ich denn mit der Uhrzeit falsch?

Share this post


Link to post
nuts

Die Zeitangabe ist eine Fließkommazahl.

Vor dem Komma ist die Angabe zu Datum und hinterm Komma die Angabe zur Uhrzeit.

 

Datum:

XX.XX.XXXX minus 30.12.1899

z.B.:

11.01.2010 minus 30.12.1899 = 40189 Tage

 

Uhrzeit:

0-1439 (00:00 - 23:59) -> Round(Nachkommaanteil * 24 * 60)

Share this post


Link to post
alex.ba

Hallo Zusammen,

 

kann mir jemand sagen ob es möglich ist über die API an das Aufnahme Verzeichnis zu kommen. Ich würde das gerne auslesen und in den Client übernehmen habe aber bis jetzt keinen passenden Befehl gefunden.

 

Vielen Dank und Grüße

 

Alex

Share this post


Link to post
PoMo

meine Sammlung wichtiger Hinweise:

 

EPGimport

 

au weia, was ne art Zeit zu verbrennen.

 

die überall erwähnte URL für den EPGimport ist falsch:

 

http://[user:password@]IP[:port]/api/cgi-bin/EPGimport

 

so lautet sie korrekt:

 

http://[user:password@]IP[:port]/cgi-bin/EPGimport

 

 

ich kam zwar recht schnell auf die idee ohne das "api/" zu testen (cgi-bin ist meist im root), aber dummerweise in einem Browser (geht schneller wild durchzuprobieren). Dumm nur dass der Server dann mit einem code 302 (file has moved) antwortet und auf EPGimport/ weiterleitet. Der Browser fällt natürlich darauf rein, und erhält beim Versuch dieser Umleitung zu folgen einen 404 Fehler (file not found). (Dank Browser sah ich den 302 nicht und da ich am raten war habe ich dem 404 natürlich geglaubt und weiter geraten).

 

ich habe die URL in der wiki angepasst, laut wiki muss das aber noch ein vertrauenswürdiger User bestätigen.

 

 

Verwendung mit wget

 

wer das wget Kommandozeilen-Tool nutzt um mit der DVBViewer Recording Service API zu kommunizieren, muss unbedingt den paramter

--auth-no-challenge

verwenden. Ohne diesen scheitert die http-Authentizierung.

 

die man-page von wget sagt dazu ganz nett:

 

--auth-no-challenge
   If this option is given, Wget will send Basic HTTP authentication information
   (plaintext username and password) for all requests, just like Wget 1.10.2 and
   prior did by default.

   Use of this option is not recommended, and is intended only to support some few
   obscure servers, which never send HTTP authentication challenges, but accept
   unsolicited auth info, say, in addition to form-based authentication.

 

 

ich hoffe diese Informationen helfen anderen Usern nicht in die gleichen Fallen zu tappen wie ich. :)

Share this post


Link to post
nuts

Am EPG Import bin ich mit meinem EPG-Transfer Skript damals auch gescheitert - kein Wunder (w00t)

Danke für die Info.

Share this post


Link to post
VinoRosso

Gibts mittlerweile ne Möglichkeit die Sender und die Favoriten per request abzufragen?

 

Der DVBViewer soll sie ja mittlerweile auch vom RS empfangen können, also müsste da doch etwas da sein. :whistle:

Share this post


Link to post
Goersch
Gibts mittlerweile ne Möglichkeit die Sender und die Favoriten per request abzufragen?

 

Der DVBViewer soll sie ja mittlerweile auch vom RS empfangen können, also müsste da doch etwas da sein.

 

Genau danach suche ich auch gerade :) Damit könnte ich mein DVBViewer Interface komplett abschalten.

 

Was ich gerne via API auslesen würde: Kanalname + EPGChannelID - also genau die Werte die man zur Aufnahmeprogrammierung via API benötigt.

Edited by Goersch

Share this post


Link to post
Mars

Hallo,

 

sehe ich's richtig, dass man bei jeglichen Aktionen immer nur die ID anstatt der GUID angeben kann? Letzteres wäre ja sicherer; selbst bei Prozessen die nur paar Sekunden laufen besteht ja die (wenn auch eher geringe Möglichkeit), dass man ggf. den falschen Timer ändert/löscht z.B. wenn gerade jemand im Webinterface etwas macht. Und wenn ich es richtig sehe, muss man ständig die Liste neu vom Service beziehen, anstatt z.B. mehrere Timer hintereinander weg löschen zu können.

Edited by Mars

Share this post


Link to post
Goersch

Hallo,

 

ich hab da ein Problem beim Zugriff auf den RecordingService, bei dem ich nicht weiterkomme. Erst mal mein Code:

 

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Timeout = 5000;
req.ContentType = "text/html;charset=ISO-8859-1";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF7);
string retval = sr.ReadToEnd();
res.Close();

 

So funktioniert es:

- wenn ich remote auf den Server mit url="http://192.168.178.22:8089/......" zugreife, funktioniert es

- wenn ich lokal auf den Server mit url="http://127.0.0.1:8089/......" zugreife, funktioniert es

- wenn ich remote auf den Server mit url="http://username:password@192.168.178.22:8089/......" zugreife, funktioniert es

 

und jetzt kommen meine Probleme:

- wenn ich lokal auf den Server mit url="http://username:password@127.0.0.1:8089/......" zugreife, funktioniert es NICHT

- wenn ich lokal auf den Server mit url="http://username:password@192.168.178.22:8089/......" zugreife, funktioniert es NICHT

 

Wenn ich also lokal mit Anmeldedaten zugreifen will, erhalte ich immer die Meldung "The remote server returned an error: (401) Unauthorized"

Kopiere ich die url in den Browser (lokal), klappt es !

 

seufz - irgendjemand eine Idee, was ich hier falsch mache ?

 

Danke !

Georg

 

P.S.: Ich poste das hier, da ich davon ausgehe, dass das was mit der API zu tun hat - evtl. ist das ENCODING bei mir falsch ?

Edited by Goersch

Share this post


Link to post
PoMo

aus deinen par Beispielen leite ich mal ab dass http-authentication lokal nicht funktioniert. Vielleicht kommst du dem Fehler näher wenn du das Problem anstelle von "lokal vs remote" einmal aus der Perspektive von "Rechner A vs Recher B" betrachtest.

 

Verbindungen:

lokaler Zugriff: Rechner A -> Rechner A

remote Zugriff: Rechner B -> Rechner A

 

ich würde also mal suchen worin sich Rechner A und Rechner B unterscheiden. Ausserdem vielleicht auch testen, was passiert wenn auf Rechner B ein Recording Service läuft, und du testest, was passiert wenn:

Rechner A -> Rechner B

 

Ist nur ne Idee, aber da ich bei meinen Versuchen auch Probleme mit der http-authentication hatte, und sich rausgestellt hat, dass der webserver des recording service sich in Sachen http-authentication "obskur" verhält (nicht meine Worte ;)), ist die Richtung http-authentication auf Client-seite wohl einen Blick wert. um mich selbst zu zitieren:

 

Verwendung mit wget

 

wer das wget Kommandozeilen-Tool nutzt um mit der DVBViewer Recording Service API zu kommunizieren, muss unbedingt den paramter

--auth-no-challenge

verwenden. Ohne diesen scheitert die http-Authentizierung.

 

die man-page von wget sagt dazu ganz nett:

 

--auth-no-challenge
   If this option is given, Wget will send Basic HTTP authentication information
   (plaintext username and password) for all requests, just like Wget 1.10.2 and
   prior did by default.

   Use of this option is not recommended, and is intended only to support some few
   obscure servers, which never send HTTP authentication challenges, but accept
   unsolicited auth info, say, in addition to form-based authentication.

Share this post


Link to post
Goersch

Hallo PoMo,

 

mh, ich hab noch einen rechner mit Windows 7 32-bit verfügbar - die anderen beiden (also A+B ) sind 64-bit. Werd das mal ausprobieren.

 

Was ich noch nicht so ganz verstanden hab (ist vielleicht schon zu spät :) ): Hast Du deine Probleme mit wget gelöst bekommen ?

Edited by Goersch

Share this post


Link to post
PoMo

Was ich noch nicht so ganz verstanden hab (ist vielleicht schon zu spät :) ): Hast Du deine Probleme mit wget gelöst bekommen ?

jop, mein Problem mit wget hat sich mit dem Parameter "--auth-no-challenge" gelöst. ohne diesen Parameter hagelte es trotz korrektem user/password eine Fehlermeldung "authentication failed - bad username or password" (genaue Meldung weis ich nicht mehr)

 

 

falls unklar: ich nutze wget nicht zum umgehen eines Problems, sondern nur weil ich so wenig mache, dass es auch in ein shell-skript passt

 

 

[EDIT]

 

ich habe mal etwas rumge-googelt, und bin auf das hier gestossen:

 

string authInfo = userName + ":" + userPassword;
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
req.Headers["Authorization"] = "Basic " + authInfo;

Quelle: http://blog.kowalczyk.info/article/Forcing-basic-http-authentication-for-HttpWebReq.html

 

vielleicht klappt es ja damit (anstelle Benutzername und Passwort in die URL zu packen und zu hoffen dass diese korrekt mitgesendet werden).

 

Ich wäre dann zwar verwundert, dass es zuvor überhaupt von einem Rechner funktionieren konnte, aber allzuviel sollte man darüber wohl nicht nachdenken :P. (mein erster Gedanke war, dass auf beiden Rechnern nicht die gleiche Entwicklungsumgebung-/wasauchimmer-version ist und sich hier das default-Verhalten verändert hat, aber bei Microsoft würde mich auch nicht überrachen, wenn die localhost einfach mal anders behandeln)

Edited by PoMo

Share this post


Link to post
Mars

Die neueste Recorder-Version verwendet UTF-8, müsstest du also entsprechend einstellen. Das lasse ich jetzt aber mal aus, verwende noch die 1.6.9. Bezogen auf den Login mache ich es so (C#):

 

using (WebClient service = new WebClient())
{
   // Anfrage an Service stellen, dabei Benutzerdaten verwenden
   service.Credentials = new NetworkCredential(API_USER, API_PASSWORD);
   string answer = service.DownloadString(Xyz);
...

 

Wobei Xyz die komplette URL ohne Loginangaben aber inkl. Parameter ist.

Share this post


Link to post
Goersch

@Mars: tausend Danke - damit klaptt es :)

 

@PoMo: Danke auch an Dich :)

Share this post


Link to post
dgdg

Gibt es eigentlich irgendwo eine aktuelle Gesamtübersicht/Beschreibung der API des Recording Service?

Share this post


Link to post
Goersch

Genau danach suche ich auch gerade :) Damit könnte ich mein DVBViewer Interface komplett abschalten.

 

Was ich gerne via API auslesen würde: Kanalname + EPGChannelID - also genau die Werte die man zur Aufnahmeprogrammierung via API benötigt.

 

... will einfach noch mal die Frage wiederholen :blush: ... wäre sehr hilfreich :rolleyes:

Share this post


Link to post
Goersch

hab da ein paar kleine Verbesserungsvorschläge für api timerlist :) , die mir sehr helfen würden (neben der Möglichkeit, die Channel IDs auslesen zu können...)

 

- die Channel ID steht wie folgt in den Daten, wenn ich die api timerlist auslese

 

<Channel ID="2359890960361473116|SAT.1"/>

 

Besser wäre es so:

 

<Channel ID>2359890960361473116|SAT.1</Channel ID>

 

- was mir auch sehr helfen würde, wäre der aus DVBViewerServer.ITimerCollection bekannte Parameter "Days", damit mein Programm auch Serienaufnahmen, etc. mitbekommt.

 

Gruß

Georg

 

Zusatz: Ups, der parameter "Days" ist da - sorry !

Edited by Goersch

Share this post


Link to post
Prinz

Hallo,

 

- die Channel ID steht wie folgt in den Daten, wenn ich die api timerlist auslese

 

<Channel ID="2359890960361473116|SAT.1"/>

 

Besser wäre es so:

 

<Channel ID>2359890960361473116|SAT.1</Channel ID>

 

Warum?

 

Bei dem einen Sache ist die "ID" als Attribut definiert, in Deinem Vorschlag "Channel ID" als Text. Das Format von Lars läßt auch für die Zukunft noch weitere Attribute zu, welche den Channel beschreiben könnten.

 

Ich sehe hier keinen Grund dies zu ändern, vor allem da es sicherlich mittlerweile genügend Applikationen gibt, die das vorhandene Format nutzen (Auch meine ;-)).

 

Also meine Ansicht: Bitte so lassen.

 

 

Gruß

Prinz

Share this post


Link to post
Goersch
:blush: ich habs einfach nicht geschafft, das Atrribute im XmlDocument bzw. im XmlNode zu finden - somit musste ich den XmlNode parsen ... deshalb der Vorschlag :blush:

Share this post


Link to post
Redah

I've created a custom Android GUI on the Recording Service machine, and packaged this to an app.

 

The app simply opens the website on the Recording Service, and when I want to stream I modified the links so it will open the channel .TS file.

Note this only works on local LAN via WiFi, but it's very nice :)

 

You can see a video here:

 

Edited by Redah

Share this post


Link to post
dgdg

Ich quäle mich mal wieder mit der API vom Recording Service. Timer-Einträge erstellen klappt. Aber mit dem Löschen habe ich Probleme.

 

Ist das hier ein gültige API URL? Die Autentifizierung erfolgt über den HTTP-Header, deswegen fehlen Username und Passwort.

 

http://127.0.0.1:80/api/timerdelete.html?id={49E1D688-4B34-4637-BD86-4D76029D7378}&delrecfile=0

 

Die Id habe ich aus dem Feld ID der Timerlist.

Edited by dgdg

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...