ubuntuusers.de

Für diese Funktion musst du eingeloggt sein.

UPnP und PHP

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

BulliM

Avatar von BulliM

Anmeldungsdatum:
7. März 2010

Beiträge: 207

Ich habe eine Medienbibliothek mit hunderten Filmen und Serien drauf. Die sind an einem RPi 4 auf einer HDD. Auf dem RPi ist Kodi installiert und UPnP ist aktiviert. Ich kann mit dem VLC über UPnP auf alle Medien zugreifen.

Nun ist VLC ein bisschen "anstrengend". Ich muss mich jedesmal beim Öffnen durch die Pfadhierarchie quälen. Vorschauen, Beschreibungen und dergleichen gibt es auch nicht. Darum habe ich mir eine Datenbank angelegt, die entsprechenden Infos dort eingetragen.

Nun habe ich eine Weboberfläche mit Suchfunktion, Vorschauen, Beschreibungen und allem Pipapo in PHP programmiert. Ich würde die Medien gern auch von dort aus abspielen, komme aber nicht an die entsprechenden Informationen, weil ich UPnP nicht kenne und mir vom Lesen der fast 200seitigen Dokumentation schon schwindlig ist.

Github habe ich auch "abgegrast". Da waren ein paar nützliche Scripts dabei, an denen ich mich orientieren konnte. Aber ich komme nicht über den Scan und den Empfang der http://*ip*:*port*/DeviceDescription.xml hinaus. http://*ip*:*port*/X_MS_MediaReceiverRegistrar/***********/scpd.xml geht auch noch über http, aber das war es dann auch.

Es gibt ältere Beispiele für PHP, neuere für Python, die ich nicht ganz verstehe und mit denen ich wenig anfangen kann. Ich kapiere nicht, wo und wie ich entsprechende SoapActions formulieren/anwenden muss. Da hat es noch nicht klick gemacht. Ich möchte Soap (PHP) verwenden, um das UPnP:rootdevice später anzufunken. Aber erstmal muss ich verstehen, was der Server von mir erwartet und was er mir über seine Benutzung mitzuteilen hat. Ich kann mit den Antworten wenig anfangen.

Hier mal als Beispiel die Ausgabe der DeviceDescription, die mir ansich verraten sollte, wie ich weiterkommen kann:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?xml version="1.0" encoding="UTF-8"?>
<root configId="3929907" xmlns="urn:schemas-upnp-org:device-1-0" xmlns:dlna="urn:schemas-dlna-org:device-1-0">
  <specVersion>
    <major>1</major>
    <minor>1</minor>
  </specVersion>
  <device>
    <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>
    <friendlyName>Kodi (raspberrypi)</friendlyName>
    <manufacturer>XBMC Foundation</manufacturer>
    <manufacturerURL>http://kodi.tv/</manufacturerURL>
    <modelDescription>Kodi - Media Server</modelDescription>
    <modelName>Kodi</modelName>
    <modelNumber>18.7 Git:*******-*********</modelNumber>
    <modelURL>http://kodi.tv/</modelURL>
    <UDN>uuid:*******-****-****-****-************</UDN>
    <presentationURL>http://*ip*:8080/</presentationURL>
    <dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMS-1.50</dlna:X_DLNADOC>
    <iconList>
      <icon>
        <mimetype>image/png</mimetype>
        <width>256</width>
        <height>256</height>
        <depth>8</depth>
        <url>/icon256x256.png</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>120</width>
        <height>120</height>
        <depth>8</depth>
        <url>/icon120x120.png</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>48</width>
        <height>48</height>
        <depth>8</depth>
        <url>/icon48x48.png</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>32</width>
        <height>32</height>
        <depth>8</depth>
        <url>/icon32x32.png</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>16</width>
        <height>16</height>
        <depth>8</depth>
        <url>/icon16x16.png</url>
      </icon>
    </iconList>
    <serviceList>
      <service>
        <serviceType>urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1</serviceType>
        <serviceId>urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar</serviceId>
        <SCPDURL>/X_MS_MediaReceiverRegistrar/*******-****-****-****-************/scpd.xml</SCPDURL>
        <controlURL>/X_MS_MediaReceiverRegistrar/*******-****-****-****-************/control.xml</controlURL>
        <eventSubURL>/X_MS_MediaReceiverRegistrar/*******-****-****-****-************/event.xml</eventSubURL>
      </service>
      <service>
        <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId>
        <SCPDURL>/ContentDirectory/*******-****-****-****-************/scpd.xml</SCPDURL>
        <controlURL>/ContentDirectory/*******-****-****-****-************/control.xml</controlURL>
        <eventSubURL>/ContentDirectory/*******-****-****-****-************/event.xml</eventSubURL>
      </service>
      <service>
        <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
        <SCPDURL>/ConnectionManager/*******-****-****-****-************/scpd.xml</SCPDURL>
        <controlURL>/ConnectionManager/*******-****-****-****-************/control.xml</controlURL>
        <eventSubURL>/ConnectionManager/*******-****-****-****-************/event.xml</eventSubURL>
      </service>
    </serviceList>
  </device>
</root>

BulliM

(Themenstarter)
Avatar von BulliM

Anmeldungsdatum:
7. März 2010

Beiträge: 207

Bevor ich es vergesse: Das Medien-Verzeichnis ist nicht Teil des Webroots, ich kann also nicht einfach per html5-Player auf die Dateien zugreifen. Der html5-Player ist auch ein bisschen "eigenwillig", stockt manchmal, macht Zicken, weil das Caching im Browser wohl nicht optimal funktioniert. Ich würde daher lieber den Stream von Kodi/UPnP nutzen. Gern auch im VLC oder einem anderen Medienplayer. Geht einzig um die Suchfunktionen und die Weboberfläche, die ich mit der Funktion des Abspielens kombinieren möchte.

Auch dafür gäbe es Kodi als Alternative für Windows. Aber auch da gefällt mir vieles nicht. Ich bin anspruchsvoll und will es eben genau so haben, wie ich es haben will.

Marant--

Anmeldungsdatum:
4. April 2022

Beiträge: 744

VLC in Sachen UPnP ist gut wenn man eine Playlist dafür erstellen will.

Keine Ahnung, ob es Dich weiterbringt:

GUPnP_Tools

Mit was willst Du die UPnP Medien in Ubuntu abspielen? Kodi bietet sich da auch an. Üner das eigene Menue, oder als Controlpoint kannst Du den von GUPnP oder Upplay nehmen. Komfortabler wäre einen Android Controlpoint zu nehmen.

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo!

VLC nutzt imho klassische Socket-Programmierung in C. Das willst du dir sicher nicht antun 😉 libupnp bietet einen C++ Ansatz und wie du bereits gemerkt hast, gibt es Python-Wrapper für diese API.

Mir stellt sich aber eher die Frage, wieso du upnp nutzen willst. Soweit ich verstanden habe, liegen Kodi, deine DB und Webserver alle auf dem Raspi, du kannst doch also mit lokalen Pfaden arbeiten? Wenn es um die Zugriffe geht: mount --bind oder Leserechte per ACL. Dürfte einfacher sein, als sich ein UPNP-Device zu programmieren.

BulliM

(Themenstarter)
Avatar von BulliM

Anmeldungsdatum:
7. März 2010

Beiträge: 207

ChickenLipsRfun2eat schrieb:

Hallo!

VLC nutzt imho klassische Socket-Programmierung in C. Das willst du dir sicher nicht antun 😉 libupnp bietet einen C++ Ansatz und wie du bereits gemerkt hast, gibt es Python-Wrapper für diese API.

Mir stellt sich aber eher die Frage, wieso du upnp nutzen willst. Soweit ich verstanden habe, liegen Kodi, deine DB und Webserver alle auf dem Raspi, du kannst doch also mit lokalen Pfaden arbeiten? Wenn es um die Zugriffe geht: mount --bind oder Leserechte per ACL. Dürfte einfacher sein, als sich ein UPNP-Device zu programmieren.

Ich möchte von allen Geräten im lokalen Netz auf die Medien zugreifen können. Wie ist mir letztendlich egal. UPnP erfüllt eben die Anforderung, dass es in der Art funktioniert, beim Streamen alle Formate unterstützt werden. Kodi bringt unter der presentationURL sogar ein Webfrontend mit, das allerdings nicht an meinen Anspruch anzupassen ist. Dasselbe gilt für tvheadend, das auch unter Kodi läuft.

Im Grunde kann UPnP die Funktionalität, die ich suche. Ich brauche im Grunde nur die Links, die auch VLC für den Aufruf der Medien nutzt. Die sehen in etwa so aus: http://111.111.111.111:1111/%25/49495848389596003028287458588939003/Das%2520ist%2520ein%2520Film.ts. Diese Links bekommt VLC von dem Device und die lassen sich dann mit einem Medienpayer abspielen. tvheadend nutzt dafür *.m3u8. Auch die nimmt jeder Medienplayer gern. Aber da komme ich nicht ran bzw. wüsste nicht, wie ich tvh dazu bekomme, mir solche Links zu erstellen. Für das Webfrontend brauche ich nur solche Links. UPnP liefert die. Ich weiß eben nur noch nicht, wie ich mit dem Service kommunizieren muss. Dabei brauche ich Hilfe.

BulliM

(Themenstarter)
Avatar von BulliM

Anmeldungsdatum:
7. März 2010

Beiträge: 207

So, jetzt hat es klick gemacht.

Scheint nicht so schwer zu sein, wie ich dachte. Ich lag richtig, die XML sagen mir (in & out) genau, was sie wann und wo erwarten und was sie liefern werden.

Ich bekomme bereits jede erdenkliche Info - sofern verfügbar. Momentan mache ich die Anfragen mit CURL, weil ich so das erste Response bekommen habe. Werde das aber noch auf Soap ändern.

Die Links habe ich noch nicht, arbeite mich aber gerade zu ihnen durch (hoffe ich). Bei Erfolg ändere ich dann noch auf gelöst.

EDIT: Habe die Links gefunden. Werden über die control.xml des ContentDirectory mit Browse abgerufen. Response ist ein XML mit <res> als Liste, welche Medienfiles unter der angegebenen ObjectID (Pfad) aufzufinden sind. Damit bin ich glücklich. 😉

Marant--

Anmeldungsdatum:
4. April 2022

Beiträge: 744

Eigentlich sollte diese 'control.xml' in 'gupnp-universal-cp' sichtbar sein. Davon war ich ausgegangen. Kannst Du mal den Pfad konkretisieren. Interessiert mich jetzt.

BulliM

(Themenstarter)
Avatar von BulliM

Anmeldungsdatum:
7. März 2010

Beiträge: 207

Marant-- schrieb:

Eigentlich sollte diese "control.xml" in gupnp-universal-cp sichtbar sein. Davon war ich ausgegangen. Kannst Du mal den Pfad konkretisieren. Interessiert mich jetzt.

Ich verwende gupnp-universal nicht.

Den Pfad zur control.xml liefert die DeviceDescription.xml. An den genauen Pfad zu der, kommst du über den ssdp-Scan nach erreichbaren UPnP-Devices. Im Eingangspost ist meine DeviceDescription.xml dargestellt. Unten ist der Abschnitt mit den Services. Da sind die Links.

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

BulliM schrieb:

Ich möchte von allen Geräten im lokalen Netz auf die Medien zugreifen können…

Das ist schon klar. Ich hatte das als zwei verschiedene Vorgänge gesehen. Deine Datenbank mit den Infos auf der Website und einer Abspielmöglichkeit von da aus, parallel zu dem funktionierenden upnp. Also bspw. generierst du Playlists über php oder zeigst zusätzliche Informationen zu den Medien, das Abspielen bleibt aber dem dlna-Server überlassen. Da hatte ich dich wohl falsch verstanden.

BulliM

(Themenstarter)
Avatar von BulliM

Anmeldungsdatum:
7. März 2010

Beiträge: 207

ChickenLipsRfun2eat schrieb:

BulliM schrieb:

Ich möchte von allen Geräten im lokalen Netz auf die Medien zugreifen können…

generierst du Playlists über php

Genau das. Und natürlich detaillierte Informationen, Poster, usw. über das Webfrontend. Sieht schon super aus. Die gewollten Funktionen sind jetzt alle da.

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

BulliM schrieb:

Genau das. Und natürlich detaillierte Informationen, Poster, usw. über das Webfrontend. Sieht schon super aus. Die gewollten Funktionen sind jetzt alle da.

Ah… ich glaube gerade hat es geklingelt… Du greifst nicht über upnp auf die lokalen Dateien zu, sondern brauchst den Pfad nur, um ihn in den Playlists zu hinterlegen. Da stand ich wohl was auf dem Schlauch 😉

Antworten |