[ANNOUNCE] - XMLAPI Plugin und Windows 10 App/ Android App

  • Liebe VDR-Gemeinde,


    ich möchte euch heute mein erstes VDR Plugin und eine App vorstellen. Eigentlich wollte ich mich nur ein wenig mit der VDR Plugin Schnittstelle vertraut machen, aber irgendwie ist aus der Übung dann doch ein Produkt geworden :-)
    Weil ich mit Android nie so richtig glücklich war, bin ich vor zwei Jahren auf Windows Phone umgestiegen und bereue diesen Schritt bis heute nicht. Klar es gibt natürlich deutlich weniger Apps. Für den VDR gibt’s leider auch nichts. Wundert mich auch nicht. Ich nutze auf meinen PCs fast nur Linux. Nur nicht auf meinem Smartphone. Diese Kombination sollte sehr selten sein, deswegen wollte ich das Plugin und die App eigentlich nicht veröffentlichen. Aber vielleicht gibt es doch den einen oder anderen VDR-User mit einem Windows 10 Mobile Gerät oder mit einem Windows 10 Tablet.


    Aber nun zum Plugin.
    Das Plugin heißt xmlapi und gibt’s bei github . Es stellt eine Webapi auf XML-Basis bereit, die meine Windows 10 App nutzt. Ich hab versucht die API so zu gestalten, dass sie auch für andere Apss interessant sein könnte.
    Im Grunde ist das Plugin ein Webserver, das XML Dateien ausliefert, die durch HTTP-Get Parameter beeinflusst werden können. Zur Zeit gibt es APIs für folgende Dinge.

    • Kanalliste
    • EPG mit verschiedenen Parametern zum Filtern und Suchen
    • Aufnahmen die angezeigt/ gelöscht/ wiederhergestellt oder von der Festplatte entfernt werden können
    • Timerliste, Timer löschen, Timer manuell oder aus EPG Eintrag erstellen
    • Transkodierte Streams von Live-TV oder Aufnahmen mittels FFmpeg. Es können auch verschiedene Presets für das Transkodieren definiert werden.
    • Transkodierte Streams mittels HLS Protokoll (Apple HTTP Live Streaming). Auch hier könnten verschiedene Presets definiert werden. Außerdem stoppen die Streams, im Gegensatz zu anderen Lösungen, auch automatisch wenn kein Zugriff mehr erfolgt.
    • Streamcontrol zum abschießen von laufenden Streams
    • Das Plugin beherrscht SSL und Basic Authentication, damit können die Streams und das API auch verschlüsselt und geschützt im Internet bereit gestellt werden.

    Eine Installationsanleitung und die komplette Beschreibung des APIs gibt’s (im schlechten Englisch) auch bei Github .



    Die zugehörige App heißt „VDR Client“ und gibt es im Windows Store . Sie ist hauptsächlich für Windows 10 Mobile Geräte optimiert. Funktioniert aber auch gut auf Windows 10 Tablets.
    Auch auf normalen Desktops mit Maus und Tastatur funktioniert die App. Nutzt da aber den größeren Platz nicht optimal aus.


    Features:

    • Es können beliebig viele VDRs konfiguriert werden und später ausgewählt werden.
    • Kanalliste mit dem aktuellen EPG-Eintrag. Kanalliste kann durchsucht werden.
    • transkodiertes Live-Streaming
    • Aufnahmen transkodiert abspielen, löschen, wiederherstellen und von HDD entfernen
    • EPG durchblättern oder durchsuchen
    • Timer aus EPG-Einträgen erstellen
    • Timer manuell erstellen
    • Timer löschen

    Eine Fernbedienung fehlt noch.



    Bei Fragen könnt ihr euch entweder hier im Forum melden oder an die E-Mail-Adresse die in der App hinterlegt ist.


    Bei Bugs (wovon es sicherlich reichlich gibt) könnt ihr auch bei GitHub ein Issue erstellen.
    Für das „xmlapi“ Plugin hier .
    Für den „VDR Client“ hier .



    Dann viel Spaß mit dem Plugin und App.
    Viele Grüße
    Karl

  • Moin!


    Ich hab auch schon immer ein Windows Phone gehabt, die Oberfläche gefällt mir einfach am besten.


    Aber zum Thema xmlapi: kennst du das restfulapi-Plugin? Ich hab jetzt noch nicht genau verglichen, aber die beiden klingen doch recht ähnlich...


    Lars.

  • Funktioniert prinzipiell. Allerdings hab ich hier beim Zugriff auf die Aufnahmen einen Absturz:


    Hab jetzt aber noch nicht weiter nachgesehen.


    Lars.

  • Ich hab wohl eine Aufnahme, wo keine vernünftige Kanal-ID drin ist, weshalb info->ChannelName() NULL zurückgibt.
    Das müsste man da wohl abfangen, wie du es bei info->Title() gemacht hast.



    Und es gibt da eine Menge trailing whitespace... :)


    Lars.

  • Und dann würde ich noch .dependencies aus dem git nehmen, da es durch make erzeugt wird.
    Und es bietet sich eine entsprechende .gitignore an:

    Code
    1. .dependencies
    2. *.o
    3. *.so


    Wenn du willst, erstellt ich entsprechende Pull Requests bei GitHub.


    Lars.

  • Evtl. willst du auch nbproject/private aus dem git nehmen, siehe
    http://stackoverflow.com/quest…e-control/1267580#1267580


    Lars.

  • Prima, hab die yaVDR-Pakete mal aktualisiert.


    Was mir persönlich etwas missfällt, ist, dass die Listen mit Programminformationen (sei es bei den Aufnahmen, Timer, EPG...) etwas unübersichtlich sind. Da ich epgd benutze, habe ich immer relativ lange Beschreibungen inkl. Schauspieler usw., die mich beim Blättern meist nicht interessieren. Wenn die versteckt wären und erst durch einen Knopf aufgeklappt werden würden, dazu dann noch eine dünne Trennlinie zwischen den Einträgen, wäre es für mich etwas übersichtlicher. Es würde auch helfen, wenn die kompakten Listen-Einträge alle die gleiche Höhe hätten.


    Was meinst du?


    Lars.

  • Im git fehlen die Dateien:
    EPGPage.xaml
    EPGPage.xaml.cs
    HelpPage.xaml
    SettingsContentDialog.xaml
    SettingsContentDialog.xaml.cs


    Lars.

  • Moin


    ich will ja auch keinen die Arbeit schlecht reden (selbst erfahren und total kacke :) .. Also erstmal danke für deine mühe und bereitschaft das frei zum download zu stellen :-)


    Aber zum Thema xmlapi: kennst du das restfulapi-Plugin? Ich hab jetzt noch nicht genau verglichen, aber die beiden klingen doch recht ähnlich...


    aber genau die frage hab ich mir auch sofort gestellt. magste das mal prüfen? :-)


    vg mentox

  • Moin,


    ja das Restfulapi Plugin hab ich mir inzwischen angesehen und ja das ist um einiges mächtiger als meins.
    Ich muss gestehen, dass ich das erst durch eure Hinweise gesehen habe.


    Trotzdem hat meins für mich entscheidende Vorteile
    1. Es bietet SSL Support
    2. Es bietet Basic Auth (natürlich auch über SSL)
    3. Es bietet auch per Basic Auth geschützte transcodierte Streams an. (Das ganze ist natürlich auch über eine SSL-Verbindung möglich)


    Und das sind genau die Punkte, die für eine mobile App wichtig sind. Die Windows Phone Anwendung steht ja schon in Grundzügen. Eine Android App ist noch in Arbeit.


    Natürlich kann man das auch irgendwie mit einem Proxy und mehreren anderen Plugins lösen... Aber schön finde ich sowas nicht  ;) 
    Außerdem hatte ich noch nie ein VDR-Plugin geschrieben und wollte mal ein wenig ausloten wie das Ganze funktioniert.  :P 


    Also von daher kann mir jeder das so schlecht reden wie er will. Ich hab das eigentlich nur für mich geschrieben (um etwas dabei zu lernen) und ob jemand das verwendet oder nicht ist mir völlig gleich.  :D  


    Wenn jemand anderes das Plugin natürlich für nützlich hält, freut mich das natürlich.


    VG. Karl

  • huhu


    Außerdem hatte ich noch nie ein VDR-Plugin geschrieben und wollte mal ein wenig ausloten wie das Ganze funktioniert. :P


    Also von daher kann mir jeder das so schlecht reden wie er will. Ich hab das eigentlich nur für mich geschrieben (um etwas dabei zu lernen) und ob jemand das verwendet oder nicht ist mir völlig gleich. :D


    Wenn jemand anderes das Plugin natürlich für nützlich hält, freut mich das natürlich.


    Deswegen ja auch kein Meckern oder kretik sondern Anregung :rolleyes::D



    Du hast natürlich recht das ein offener http port dafür total mist ist und ich hoffe das es so auch keiner betreibt, ich selbst nutze das nur via VPN, daher ist mir das ssl eher unwichtig, aber für alle drei punkte gilt.
    OpenSource bau es ein :D?(:mua



    Also wie gesagt ist keines wegs böse gemeint und auch ich habe diverse sachen lieber selbst gemacht weil mir irgend was nicht gefallen hat oder ich es einfach mal selber bauen wollte, erfahrung sammeln usw.


    Uber die Jahre bin ich aber langsam weg vom XML zeug und die Restful sachen find ich deutlich effizienter.. ;D



    also weiter machen :P


    vg mentox

  • Hi,


    also ich habe das grade mal ausprobiert.
    Wenn ich mit der App versuche eine Aufnahme zu streamen kommt immer sofort ein Abbruch des Streams und ein "The Video failed to Play." in der App. Auf der Console vom VDR finde ich dann folgendes:


    Code
    1. Jul 1 19:45:02 mediacenter vdr: [1823] xmlapi: Client xxx.xxx.xxx.xxx connecting...
    2. Jul 1 19:45:02 mediacenter vdr: [4501] xmlapi: Request complete
    3. Jul 1 19:45:03 mediacenter vdr: message repeated 13 times: [ [4501] xmlapi: Request complete]
    4. Jul 1 19:45:06 mediacenter vdr: [4501] xmlapi: request /recstream.ts?filename=/srv/vdr/video/Olympus_Has_Fallen_-_Die_Welt_in_Gefahr/2015-05-31.23.25.3-0.rec&preset=Mid
    5. Jul 1 19:45:06 mediacenter vdr: [4501] xmlapi: FFmpeg Cmd=ffmpeg -analyzeduration 1M -threads 2 -i "concat:$(ls -1 /srv/vdr/video/Olympus_Has_Fallen_-_Die_Welt_in_Gefahr/2015-05-31.23.25.3-0.rec/*.ts | perl -0pe 's/\n/|/g;s/\|$//g')" -threads 2 -f mpegts -vcodec libx264 -bufsize 2000k -maxrate 1000k -crf 22 -g 50 -map 0:v -map 0:a -vf "yadif=0:-1:1, scale=640:360" -preset medium -tune film -vprofile main -level 30 -acodec libmp3lame -ab 96k -ar 44100 -ac 2 -async 1 pipe:1
    6. Jul 1 19:45:07 mediacenter vdr: [4501] xmlapi: Stream started
    7. Jul 1 19:45:07 mediacenter vdr: [4501] xmlapi: Stream stopped
    8. Jul 1 19:45:07 mediacenter vdr: [4501] xmlapi: Request complete


    ähnlich sieht es aus wenn ich die URL zusammen bastel und z.b. per VLC oder Mediaplayer öffnen will, ebenso bei live streams kommt direkt nach dem started ein stopped :(


    Hat da jemand eine Idee?
    Wäre genial dieses Feature in Funktion zu haben :)


    Grüße

    yaVDR 0.5 - 2x Hauppauge Nexus-S, MSI NVIDIA GT210, MSI Z77A-G43, 2.7Ghz Celeron IvyBridge cpu

  • Hi,


    das ist recht übersichtlich:


    Code
    1. sh: ffmpeg: Befehl nicht gefunden


     :hilfe


    habe mal das ffmpeg-opti per apt installiert, das macht aber keinen Unterschied :(


    Wie bekomme ich denn ffmpeg auf meinen yavdr 0.6.1?


    Grüßle

    yaVDR 0.5 - 2x Hauppauge Nexus-S, MSI NVIDIA GT210, MSI Z77A-G43, 2.7Ghz Celeron IvyBridge cpu

  • ffmpeg-opti installiert das Binary nach /opt/ffmpeg/bin/ffmpeg - vermutlich fehlt dir das Verzeichnis nur im PATH.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)