PlexDVR: DVR Funktionalität in Plex in Verbindung mit einem Backend (in diesem Falle TVH)

  • Moin,


    kommen von hier poste ich ein paar mehr Infos zu dem Thema Plex und DVR. @Mods: Falls das die falsche Ecke ist, dann bitte verschieben!


    Plex bietet seit ein paar Wochen eine "geschlossene" Beta Version an, welche nur für die Inhaber eines sog. Plex-Pass verfügbar ist. Der Download der Binaries ist nur über das Plex Forum möglich und hat nichts mit den sonstigen Beta/Plex-Pass Update streams zu tun. Einer der Vorzüge von Plex ist, dass es auf fast jedem System zu bekommen ist.


    Zum Thema Plex an sich spare ich mir jetzt die Erklärungen, das kann jeder googeln oder hier im Forum im Capture Bereich nachlesen.


    Die DVR Funktion beruht auf einem in das Plex Web UI integrierte EPG/Suche/Timer Programmierung und der simplen Aufzeichnung von .ts/.mkv Streams via ffmpeg. Diese Streams müssen über eine von Plex definierte Api erreichbar sein. Die aktuelle Implementierung unterstützt offiziell nur die neueren Generationen von HDHomeRun. Allerdings haben ein paar findige Leutchen im Plexforum recht schnell herausgefunden wie die API simuliert wird.


    Ich zeige jetzt erst mal ein paar Bilder und poste dann, im Laufe des Tages/Abends noch ein Howto wie ich das aufgesetzt habe.



    Übersicht im Program Guide "Discover", Gruppiert nach diversen Dimensionen wie Currently on Air, Upcoming (Movies, Shows, Sports, News):
     


    Filme: Cover werden soweit bekannt auf TVDB über die Gracenote ID bzw. den Match den Plex ja eh beherrscht gezogen. Alles kann wir bei Plex üblich mit Filtern durchsucht werden.
     


    Die Programmierten Timer werden entweder im Calendar View oder im List-View dargestellt. Ein kleiner Kreis füllt sich bis die Aufnahme abgeschlossen ist. Calendar View ist mein Favorit.



     




    Die Aufnahmen werden dann, beim setzen der Timer in einen der Mediatheken Ordner gespeichert. Ein "on-the-fly" transcode ist aktuell nur rudimentär implementiert, einfach den Inputstream in einen Matroska-Container. Hier wird sicher noch was kommen.



    Die Stärken meiner Meinung nach sind:



    * das EPG von Gracenote und die Anreicherung des Contents durch die üblichen Plex Quellen, wie von gda in dem Ausgangsthread schon erwähnt ist die Seriennummerierung und Einteilung in Staffeln richtig gut.
    * Die volle Integration in das Plex UI und die Datenbank. Vorerst kann nur über das WebUI ein Timer gesetzt werden, aber wenn das in die tvOS App einzieht, dann braucht meine Frau für ihren Medien Konsum gar keinen Browser mehr
    * Die Timer Logik ist "intelligent". Heisst ich kann sagen: Ersetze mir SD Aufnahmen durch HD falls eine vorbeikommt (wird wohl am Kanal erkannt, basierend auf den Daten die von Gracenote kommen)
    * Die Prioritäten der Aufnahmen kann per Drag & Drop bestimmt werden, neben dem Calendar-View rechts und ist sehr intuitiv



    Schwächen bisher:



    * Gracenote hat zwar ein super EPG, aber der Match zwischen Kanälen und EPG Daten ist sehr mühsam (mehr dazu nochmal im Howto später)
    * Nur HDHR offiziell unterstützt bisher (das wird sich aber ändern wie ich aus zuverlässiger Quelle weiß)
    * Playback der Aufnahmen auf iOS Devices ist ein Glücksspiel (was für uns hier zu Hause wichtig ist)



    Ich hoffe das reicht erstmal für heute morgen.



    VG,
    J*

     

  • Voraussetzungen:


    - Laufende TVHeadEnd installation (4.1.x auch 4.2 gennant)
    - python
    - git
    - apache mit modproxy/modproxy_http (oder einen anderen Webserver, aber dann kann ich nicht helfen!)


    Unter https://github.com/jkaberg/tvhProxy den Proxy holen. Da TVH bei mir nativ installiert über die Ubuntu ppas, ist der user "hts" für TVH zuständig. Den Proxy habe ich dementsprechend dort hingepackt.

    Zitat

    Mit cd ins Verzeichnis tvhProxy. Anpassung der Datei tvhProxy.py, bei mir sieht die relevante section so aus:



    zur Erklärung:
    - tvhURL sollte die IP/URL zu eurer TVH Instanz sein. Mit einem user davor im HTTP schema.
    - FriendlyName ist der name des Devices dann auch später in der Config in Plex
    - ModelNumber und FirmWareName legen die Anzahl Tuner fest
    - TunerCount überschreibt das aber auch
    - DeviceID macht das Ding unique, falls ihr also rumspielt oder mehrere aufsetzen wollt, dann bitte mehrere Nummern nehmen


    Die weitere Schritte stehen im Readme aus dem tvhProxy git. Ich habe allerdings mit Apache2 gearbeitet. Meine 000-default.conf hat folgende Einträge:


    Code
    1. ProxyPreserveHost On
    2. ProxyRequests Off
    3. ServerName iphnasvdr
    4. ProxyPass / http://localhost:5004/
    5. ProxyPassReverse / http://localhost:5004/


    Dann in Plex arbeiten.


    DVR Option in den Einstellungen aufrufen, Setup starten:


    Schritt 2: Discover/Verbinden mit dem Proxy




    Schritt 3: Scan und Cable/Antenna sind vom Proxy nicht unterstützt, einfach FORTFAHREN




    Schritt 4 - Alternativ via einer XMLTV Datei. Diese muss im lokalen Dateisystem liegen (eine von epgdata geht ohne Probleme bei mir) und wird alle 18h bzw. beim Neustart erneut eingelesen. Solltet ihr also XMLTV Daten statt Gracenote nehmen wollen geht das auch.




    Schritt 5: Einschränken der Providerauswahl via Land/Postleitzahl




    Schritt 6:




    Schritt 7: Für meine Senderliste ist der "beste" Provider was EPG Daten betrifft Telekom Deutschland (was Entertain ist vom Setup her, das EPG dort kommt wohl auch von Gracenote da sie Kanalnummern in der Gracenote DB identisch sind mit denen in Entertain)
     



    Schritt 8: Das Mapping ... das ist essentiell und der wichtigste Punkt meiner Meinung nach ... Nehmt euch da Zeit für. Wichtig ist, die HD Kanäle richtig zu Mappen, da Plex später nur an dem "GUIDE CHANNEL" weiss ob es HD content ist oder SD.




    Schritt 9: fertig (im Prinzip)! Jetzt lädt das EPG und füllt den Program Guide




    Schritt 10: Optional - transcoding ... die erste Dropdown box wird im Proxy noch implementiert. TVH könnte transcoded, Plex kann es auch. Die zweite Dropdown box ist dann für Plex. Momentan ist das experimentell laut Devs und macht nichts anderes als den Input in einem matroska container zu verpacken.




    Soweit. Wenn ihr das mapping hinterher ändern wollte, kein Problem. Nur die Entscheidung ob XMLTV oder nicht kann nicht mehr geändert werden.


    Die Aufnahmen werden anhand der Gracenote ID geplant, solltet ihr also einen anderen Provider und andere Kanäle haben später, so werden die Timer trotzdem erhalten bleiben und auch aufzeichnen.


    Ich hoffe das reicht so.


    VG,
    J*


  • Nach /etc/init und dann halt update-rc.d tvhProxy default ausführen.


    Damit startet das Ding dann auch von selbst.

  • Sorry, aber das verstehe ich jetzt nicht. Du mappst "hr fernsehen" auf "PRO7GRH"? Wieso?


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Wichtig ist, die HD Kanäle richtig zu Mappen, da Plex später nur an dem "GUIDE CHANNEL" weiss ob es HD content ist oder SD.


    Das halte ich auch für das größte Problem, weil es nicht alle Sender sowohl als HD und als SD in den Guided Channels gibt. Dadurch muss ich dann bei einigen HD-Sendern auf die SD-Version ausweichen und dann hält er die Aufnahmen eben für SD.
    Außerdem wäre es besser Plex würde die Device Channels verwenden anstatt der Guide Channels, die sind weniger kryptisch.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Wenn das Ganze nativ mit einem SAT>IP Server funktionieren würde, dann wäre es perfekt.


    Nativ vielleicht nicht, aber der Proxy ist relativ simpel. Wie ich in dem anderen Thread schon sagte, sollte es nicht kompliziert sein, statt des Proxies das Restfulapi-Plugin anzupassen. Den Proxy an SAT>IP anzupassen sollte auch kein so grosses Problem sein.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Sorry, aber das verstehe ich jetzt nicht. Du mappst "hr fernsehen" auf "PRO7GRH"? Wieso?


    Gerald

    Hi,


    das war nur den Flow nochmal auf dem Mac nachgestellt, damit ich die Screenshots für euch machen konnte. Ich echt ist das anders gemappt.


    Zitat

    Außerdem wäre es besser Plex würde die Device Channels verwenden anstatt der Guide Channels, die sind weniger kryptisch.

    Ja, das ist auch das Thema, dass ich mit den Devs am diskutieren bin. Gracenote ist auch veraltet was die Senderstrukturen pro Provider betrifft. Das ist suboptimal gelöst. Via xmldv EPG würde es gehen.


    3PO , das wäre doch evtl. was für den epgd, also ein kombiniertes xmltv file zu erzeugen was man dann Plex zuführen könnte... nur so ein spinnerte Idee.


    Zum Thema Sat->IP: Ich nutze TVH aktuell im Test (mit einem OctopusNet Kabel->IP tuner) und das tut super zusammen. Was die Plex Leute nicht unbedingt implementieren sollten ist die volle Transponder-tunenen usw Nummer... da sind doch genau VDR und TVH gut für.


    Dem Gedanken mit dem RestFul plugin den Proxy zu ersetzen stimme ich zu.


    Plex wird aber in Bälde eine HDHR unabhängige API anbieten, evtl. sollte man darauf warten. Oder den Proxy einfach auf RestfulAPI und Streamdev anpassen. Was anderes als einen mpeg-ts greift Plex via Proxy bei TVH ja auch nicht ab.


    VG,
    J*

  • Plex wird aber in Bälde eine HDHR unabhängige API anbieten, evtl. sollte man darauf warten.


    Okay, dann halte ich erstmal die Füsse still.


    Das Channel-Mapping mit meinem Kabel-Provider Wilhelm Tel ist aber echt die Qual. Ich finde nix wieder, z.B. ONE HD gibt es gar nicht, ich muss da EINSFES (SD) nehmen.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • [...] 3PO , das wäre doch evtl. was für den epgd, also ein kombiniertes xmltv file zu erzeugen was man dann Plex zuführen könnte... nur so ein spinnerte Idee. ...


    Wäre es da nicht sinnvoller, dem PMS SQL beizubringen?


    [...] Zum Thema Sat->IP: Ich nutze TVH aktuell im Test (mit einem OctopusNet Kabel->IP tuner) und das tut super zusammen. ...


    Genau das will ich ja eben nicht. Ich möchte nicht noch TVH, oder irgendeine andere Instanz dazwischen haben.

  • Wäre es da nicht sinnvoller, dem PMS SQL beizubringen?


    Nein, überhaupt nicht. Weil dadurch die Tabellen-Struktur eingefroren würde, oder bei jeder Änderung eine neue PMS-Version erstellt werden müsste.
    Das aktuelle JSON-API abstrahiert das und ist absolut sinnvoll.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Genau das will ich ja eben nicht. Ich möchte nicht noch TVH, oder irgendeine andere Instanz dazwischen haben.

    Mhm, ... wäre gut. Aktuell fahren sie den Ansatz, das Tuning usw muss das TV-Device liefern. Wenn der SAT->IP Server als einen Stream für einen Sender ausliefern kann, dann würde ich das auch begrüßen. Mal schauen welchen weiteren Weg sie verfolgen werden.


    VG,
    J*

  • Da ja z.B. VLC auch direkt mit einem SAT>IP Server klarkommt, sollte es doch kein Problem darstellen, das auch dem PMS beizubringen.


    Ich würde einfach davon Abstand nehmen PMS etwas beizubringen zu versuchen. Das ist closed Software und in der Vergangenheit haben sie meine Anfragen so gut wie nie beantwortet. Meine Anfrage nach einem API ist auch schon etwas länger unbeantwortet.
    Jetzt mit diesem Proxy haben wir aber ein API und ich habe mir das nochmal angesehen. Streng genommen braucht man überhaupt keinen VDR, oder TVH. Dieser Proxy könnte auch so aus einer channels.conf die Kanäle liefern, selbst tunen und direkt vom dvb device streamen.
    Mehr tut er ja gar nicht.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Ich würde einfach davon Abstand nehmen PMS etwas beizubringen zu versuchen. Das ist closed Software und in der Vergangenheit haben sie meine Anfragen so gut wie nie beantwortet. Meine Anfrage nach einem API ist auch schon etwas länger unbeantwortet.

    Hi Gerald,


    ja. Ist halt closed source, richtig. Ich hab irgendwie per Zufall durch die Beta Kontakt zu dem Hauptdev (Elan) bekommen und kann daher sagen, dass sie an einer robusten nicht HDHR-spezifischen API arbeiten, die dann den Proxy ersetzen können sollte und jeder kann dagegen programmieren der will. Sie setzen stark auf JSON und endpoints, also wenig Logik (z. Bsp. aus einem Transponder PIDs ableiten, nach Kanälen Scannen usw) in PMS dazu vorerst...


    Das Thema Sat->IP haben die Plex Jungs (sind halt aus den USA vorwiegend und Australien) schon selbst 1000 fach um die Ohren bekommen und wollen jede Menge dazu wissen. Plex setzt stark auf ffmpeg, also alles was ffmpeg kann lässt sich einbauen. Heisst, wenn wir denen ein ffmpeg Beispiel liefern können, dann wäre das Ding schon recht bald durch vermute ich.


    Was ich mir auch vorstellen könnte, wäre eine .m3u oder .json Kanalliste mit den richtigen Infos. Dann kann man von einem Octopus oder SatPI (oder TVH, oder oder oder) Server direkt den Stream ziehen.


    "Feature", dass mir gestern aufgefallen ist:


    Der Stream wir unter .grab abgelegt. Wenn du also den ZIELORDNER/.grab/ auch in eine Mediathek nimmst, kannst Du quasi die laufenden Aufnahme schauen ... Mini-time-shift quasi.


    VG,
    J*

  • Wenn wir aber bei diesem aktuellen API bleiben würden, dann wäre das ehrlich ziemlich simpel. Ich weiß auch gar nicht wozu an der Stelle ffmpeg nötig sein sollte. Die bekommen jetzt einen TS-Stream und das reicht doch auch.


    Wenn du Lust hast dann probier mal das folgende aus (Bei mir DVB-C, ansonsten analog ändern):


    Eine channels.conf für czap anlegen:

    Code
    1. w_scan -X -f c -c DE >channels.conf


    Jetzt auf einen Kanal aus der channels.conf tunen (490 ist bei mir WDR) und "Aufnahme starten":

    Code
    1. czap -c channels.conf -n 490 -r


    In einer anderen Shell den Stream speichern:

    Code
    1. cat /dev/dvb/adapter0/dvr0 >test.ts


    Fertig ist der Video-Rekorder für Arme. Ein Python-Genius könnte das jetzt in den Python-Proxy einbauen.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Interessant ... muss ich mal anschauen die Tage. Ich werden auf jeden Fall das TVH als Proxy dazwischen weiter verfolgen, weil ich noch einen IPTV Anbieter mit im Repertoire hab um an Niederländische Sender zu kommen. TVH kümmert sich dann um die Zuteilung und streamt das anstandslos an PMS weiter. Das kann der Octopus dann halt nicht :-)

  • Ich weiß auch gar nicht wozu an der Stelle ffmpeg nötig sein sollte. Die bekommen jetzt einen TS-Stream und das reicht doch auch.

    Ja klar. Der wäre ja auch nur nötig falls das Tunen und den Stream aus Transponderholen direkt auf dem Sat-IP Device das Ziel wäre (so hatte ich 3PO) verstanden.


    Die Idee mit dem czap und dann den Stream vom adapter auf den socket geben ist wirklich sehr simpel. Ich kann nur kein Python (auch wenn ich das LiveTV mal zusammen geklaut hatte) leider :-(


    Evtl. CI Implementierungen blieben auf der Strecke, aber für FTA wäre es wirklich sehr sehr simpel.