Moin Alexander,
ich bin mir nicht sicher, inwieweit ich das fixen kann, weil ich da keinen Zugang habe und dementsprechend nicht analysieren kann, was dort anders ist als bei den anderen Bibliotheken.
Das wäre ein ziemlicher Blindflug.
Moin Alexander,
ich bin mir nicht sicher, inwieweit ich das fixen kann, weil ich da keinen Zugang habe und dementsprechend nicht analysieren kann, was dort anders ist als bei den anderen Bibliotheken.
Das wäre ein ziemlicher Blindflug.
Danke für das Feedback, ich hab den Ausgangspost nochmal konkretisiert was die Widevine CDM angeht.
Ich denke, Dokumentation ist auch noch so eine Baustelle, jetzt, wo es technisch wieder läuft.
Ja, das war sehr reibungslos, danke
Erweiterter Name ist jetzt auch hochgeladen, damit es zu weniger Verwirrung kommen kann.
Es war doch etwas mehr Arbeit als einfach nur zwei Dateien in das Plugin reinzukopieren, aber inzwischen sollte es gehen (Testen auf meinem Linux-Hauptrechner war auch noch schwierig, weil die Standard-Python-Version zu klein ist...).
Ich hab gerade eine Version v1.0.2 in das Kodinerds-Repo hochgeladen, die neue Plugin-ID ist "plugin.video.filmfriend.de", d.h. man kann das alte "plugin.video.filmfriend" einfach deinstallieren und dann das neue installieren. Funktional gibt es keine Änderung, außer dass man nichts händisch anpassen muss, damit die Videowiedergabe funktioniert (außer der Tatsache, dass man sich ggf. erst noch eine libwidevinecdm in .kodi/cdm legen muss).
Edit: wäre es sinnvoll, den Namen des Plugins zu erweitern, damit man das besser von dem aus dem offiziellen Kodi Repo unterscheiden kann? Angezeigt werden einem beide im Moment als "Filmfriend.de", da könnte es sinnvoll sein, die neue Fassung als "Filmfriend.de (Kodinerds)" anzuzeigen, oder?
Ich kann nächste Woche mal schauen, was ich aus dem "script.module.libmediathek4" Skript übernehmen müsste, damit Filmfriend out of the box läuft.
Ich bin mir nicht sicher, ob ich es für eine gute Idee halte, andere Skripte, von denen ich Stand jetzt keine Ahnung habe, in das Addon zu übernehmen.
Was bedeutet denn "leider funktioniert das Add-On da nicht" konkret, d.h. an welcher Stelle klappt denn was nicht?
Wenn das Abspielen von Videos kein ordentliches Bild liefert (würde ich aus dem Log-Auszug herauslesen), kann man das händisch korrigieren, indem man mit Notepad folgende Datei ändert:
C:\Users\<EigenerBenutzername>\AppData\Roaming\Kodi\addons\script.module.libmediathek4\lib\libmediathek4.py
if streamType == 'DASH':
listitem.setProperty('inputstreamaddon', 'inputstream.adaptive')
listitem.setProperty('inputstream.adaptive.manifest_type', 'mpd')
if 'licenseserverurl' in item:
listitem.setProperty('inputstream.adaptive.license_type', 'com.widevine.alpha')
listitem.setProperty('inputstream.adaptive.license_key', item['licenseserverurl'])
listitem.setMimeType('application/dash+xml')
listitem.setContentLookup(False)
elif streamType == 'HLS':
listitem.setMimeType('application/vnd.apple.mpegurl')
listitem.setProperty('inputstreamaddon', 'inputstream.adaptive')
listitem.setProperty('inputstream.adaptive.manifest_type', 'hls')
listitem.setContentLookup(False)
Alles anzeigen
Das sind die Zeilen 217 und folgende. Wenn man da die zwei Vorkommnisse von "listitem.setProperty('inputstreamaddon', 'inputstream.adaptive')" durch "listitem.setProperty('inputstream', 'inputstream.adaptive')" ersetzt, sollte es gehen. D.h. das "addon" aus "inputstreamaddon" entfernen.
Wenn Du das AddOn gestartet hast, sieht man unten links "Optionen". Wenn man da drauf geht, öffnet sich links ein Menü, wo ganz unten "Addon-Einstellungen" steht, wenn Du da drauf gehst, kommt ein Fenster, wo Du auf "Login" klickst. Dann öffnet sich eine Auswahlliste mit allen Bibliotheken, die mit Filmfriend genutzt werden können (das kann etwas dauern, da die Liste erst online abgerufen werden muss). Aus der Liste wählst Du Deine Bib aus und kannst danach Nutzername und Passwort eingeben.
Ok, neuer Thread ist hier: Filmfriend.de (plugin.video.filmfriend)
Da hängt dann auch eine installierbare ZIP Datei dran. PR folgt dann auch noch demnächst (mal gucken, wie schnell das dann alles geht).
Da die derzeitige v1.0.0 des Filmfriend.de Plugin von sarbes nicht mehr funktioniert und schon beim Login Fehler schmeisst, habe mir den Quelltext geschnappt und die Fehler korrigiert und dabei gleich noch mit eingebaut, dass man auf seine persönliche Watchlist zugreifen und die dort gespeicherten Einträge gucken kann.
Getestet habe ich es mit Kodi 20 (Nexus) auf Linux mit einem Zugang über die Hamburger Bibliothek.
Der Pull-Request https://github.com/xbmc/repo-plugins/pull/4412 mit einem Fix für das Plugin von sarbes im offiziellen Kodi-Repo dümpelt etwas vor sich hin. Keine Ahnung, ob der irgendwann akzeptiert wird. Dort besteht aber noch das Problem, dass die Version 1.0.1 noch von "script.module.libmediathek4" abhängt, die ebenfalls nicht mehr ohne weitere Anpassungen funktioniert.
Daher ist das Add-On ab Version 1.0.2 als "Filmfriend.de (Kodinerds)" im Kodinerds-Repo verfügbar und hat die ID "plugin.video.filmfriend.de".
Diese Fassung läuft ohne weitere Anpassungen, ggf. muss man sich die "libwidevinecdm" noch besorgen, falls man die nicht schon für andere Add-Ons eingerichtet hatte.
Ein Weg das zu tun ist, erst das "InputStream Helper" Add-On (Kategorie "Programm-Addons") zu installieren, und dann in den dortigen Einstellungen "Widevine CDM Bibliothek (erneut) installieren" auszuwählen.
Aktuelle Version: v1.0.12 (02.08.2024)
Gesamtes Changelog: https://github.com/Ingo-FP-Angel/…n/changelog.txt
Bekannte Bugs/fehlende Funktionen: https://github.com/Ingo-FP-Angel/…riend.de/issues
Bevor man irgendwas abspielen kann, muss man in den Addon-Settings die "Login" Funktion ausführen:
Thread zum Plugin im Kodi-Forum: https://forum.kodi.tv/showthread.php?tid=374894
Quelltext: https://github.com/Ingo-FP-Angel/plugin.video.filmfriend.de
ZIP Downloads: https://github.com/Ingo-FP-Angel/…end.de/releases (falls jemand nicht das Kodinerds-Repo benutzen möchte)
Aktueller Stand der Entwicklung ist jetzt hier: https://github.com/Ingo-FP-Angel/…lmfriend_v1.0.1
Wo würde ich denn am praktikabelsten eine ZIP-Datei davon hinlegen, die Interessierte dann zum Testen installieren können?
Hier als Dateianhang am Post oder ist sowas eher ein No-Go?
Ok, dann werde ich wohl die Tage mal das "repo-plugins" von "xbmc" klonen und da meine Änderungen machen.
Bin auch schon mehr oder weniger so weit, die persönliche Watchlist zu unterstützen.
Edit: was halt leider auch nicht funktioniert, ist, das access_token zu refreshen, wenn es abgelaufen ist. Es gibt da zwar eine Funktion "_getNewToken", aber die wird nirgendwo aufgerufen und ich bin mir nicht sicher, ob die durch irgendeine Plugin-Magie automatisch aufgerufen werden sollte (z.B. wenn das Token mitten im Abspielen abläuft).
Alles klar, es war nicht die libmediathek4, sondern eine nicht mehr aktuelle URL in jsonparser.py.
Die getVideoUrl Methode muss ersetzt werden durch:
def getVideoUrl(videoId):
headers = {
'Authorization':f'Bearer {lm4utils.getSetting("access_token")}'
}
videoInfo = requests.get(f'https://api.tenant.frontend.vod.filmwerte.de/v11/{lm4utils.getSetting("tenant")}/movies/{videoId}/uri',headers=headers).json()
url = f'{videoInfo["mpegDash"]}'
wvheaders = '&content-type='
licenseserverurl = f'{videoInfo["widevineLicenseServerUri"]}|{wvheaders}|R{{SSM}}|'
return {'media':[{'url':url, 'licenseserverurl':licenseserverurl, 'type': 'video', 'stream':'DASH'}]}
Dann brauchte ich noch die libwidevinecdm.so und jetzt kann ich Videos von Filmfriend am PC abspielen.
Für den vollen Genuss fehlt aber eine Unterstützung der Merkliste.
Ja, das stimmt schon, allein durchs Installieren landet der Quelltext ja auf der Platte. Ich wollte eigentlich darauf hinaus, dass ich gerne ein git Repository hätte, auf dem ich aufsetzen kann. Also im Sinne von, nachhaltig dafür sorgen, dass der Fix zentral irgendwo landet.
Den Login habe ich wieder ans Laufen bekommen. Also zumindest konnte ich den für Hamburg testen. In der Hoffnung, dass das alles so allgemeingültig ist, wie es aussieht.
Es waren ein paar Dinge zu ändern gegenüber der 1.0.0 Version des Plugins. So sieht meine login.py jetzt aus:
# -*- coding: utf-8 -*-
import requests
import xbmcgui
import xbmcaddon
import json
import libmediathek4utils as lm4utils
base = 'https://api.tenant-group.frontend.vod.filmwerte.de/v7/'
providerBase = 'https://api.tenant.frontend.vod.filmwerte.de/v11/'
def pick():
j = requests.get(f'{base}fba2f8b5-6a3a-4da3-b555-21613a88d3ef/sign-in').json()
l = []
for item in j['tenants']:
l.append(xbmcgui.ListItem(f'{item["displayCategory"]} - {item["displayName"]}'))
i = xbmcgui.Dialog().select(lm4utils.getTranslation(30010), l)
domain = j['tenants'][int(i)]['clients']['web']['domain']
tenant = j['tenants'][int(i)]['id']
library = j['tenants'][int(i)]['displayName']
username = xbmcgui.Dialog().input(lm4utils.getTranslation(30500))
if username == '':
lm4utils.displayMsg(lm4utils.getTranslation(30501), lm4utils.getTranslation(30502))
return
password = xbmcgui.Dialog().input(lm4utils.getTranslation(30503))
if password == '':
lm4utils.displayMsg(lm4utils.getTranslation(30504), lm4utils.getTranslation(30505))
return
r = requests.get(f'{providerBase}{tenant}/sign-in')
if r.text == '':
lm4utils.displayMsg(lm4utils.getTranslation(30506), lm4utils.getTranslation(30507))
return
j = r.json()
provider = j['delegated'][0]['provider']
client_id = f'tenant-{tenant}-filmwerte-vod-frontend'
files = {'client_id':(None, client_id),'provider':(None, provider),'username':(None, username),'password':(None, password),'scope':(None, 'filmwerte-vod-api+offline_access')}
j = requests.post('http://api.vod.filmwerte.de/connect/authorize-external', files=files).json()
if 'error' in j:
if j['error'] == 'InvalidCredentials':
lm4utils.displayMsg(lm4utils.getTranslation(30506), lm4utils.getTranslation(30508))
else:
lm4utils.displayMsg(lm4utils.getTranslation(30506), lm4utils.getTranslation(30507))
return
lm4utils.setSetting('domain', domain)
lm4utils.setSetting('tenant', tenant)
lm4utils.setSetting('library', library)
lm4utils.setSetting('username', username)
lm4utils.setSetting('access_token', j['access_token'])
lm4utils.setSetting('refresh_token', j['refresh_token'])
Alles anzeigen
Anmelden klappt dann.
Nur das Abspielen von Videos geht dann nicht mit einem Fehler aus dem "script.module.libmediathek4" Plugin, aber ich glaube, da hatte ich aus dem Augenwinkel gesehen, dass man das durch eine neuere Version ersetzen muss.
Bin gerade mit einer frisch per Flatpak installierten 20.2 Version von Kodi unter opensuse 15.4 unterwegs.
Musste erst etwas suchen, bis ich das Log unter "~/.var/app/http://tv.kodi.Kodi/data/temp/[definition='1','2']kodi.log[/definition]" gefunden hatte.
P.S.: Aber woher weiss ich denn, welche Version des libmediathek4 funktioniert und wo ich die finde?
Folgenden Fehler kriege ich
Traceback (most recent call last):
File "/home/ingo/.var/app/tv.kodi.Kodi/data/addons/plugin.video.filmfriend/default.py", line 55, in <module>
p.action()
File "/home/ingo/.var/app/tv.kodi.Kodi/data/addons/script.module.libmediathek4/lib/libmediathek4.py", line 237, in action
self.play(self.playbackModes[mode]())
File "/home/ingo/.var/app/tv.kodi.Kodi/data/addons/plugin.video.filmfriend/default.py", line 45, in playVideo
return jsonParser.getVideoUrl(self.params['video'])
File "/home/ingo/.var/app/tv.kodi.Kodi/data/addons/plugin.video.filmfriend/resources/lib/jsonparser.py", line 155, in getVideoUrl
j = json.loads(r)
File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.10/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.10/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Alles anzeigen
Ich wollte 2019 mal ausprobieren, ob ich Kodi für filmfriend im Wohnzimmer nutzen kann. Damals hab ich eingebaut, dass man sich auch an meiner Bib in HH anmelden kann. Blöderweise ging sehr kurz drauf das Abspielen den Videos nicht mehr, d.h. ich hab das nie wirklich im Einsatz gehabt und kann auch nicht behaupten, dass ich viel von der Kodi-Plugin-Entwicklung bzw. Programmierung mit Python verstehe.
Theoretisch könnte ich mir das Login-Problem angucken, aber ich weiss gerade nicht, wo ich den aktuellen, kompletten Quelltext herkriege.
Auf GitHub gibts den soweit ich das sehe nicht mehr.
Gibt es eigentlich noch andere Interessenten für dieses Plugin? Nicht, dass ich das wieder flott machen könnte, aber wenn niemand Bedarf anmeldet, besteht ja auch kein Handlungsbedarf.
Also ich würde es nutzen, wenn es jemand anpassen könnte...
Da müsstest Du mal in die Error-Log Datei vom Apache Webserver gucken. Die müsste unter /var/[definition='1','0']log[/definition]/apache2/error.[definition='1','0']log[/definition] liegen.
Ich bin mir gerade nicht sicher, wo die Fehler von php hingeloggt werden, evtl. in eine andere Datei im Verzeichnis /var/[definition='1','0']log[/definition]/apache2
Das wäre die ersten beiden Stellen, wo ich nachgucken würde.
Ich selber nutze nur owncloud, nicht nextcloud, aber das sollte halbwegs ähnlich sein...
Jedenfalls findet eine Google Suche nach "Your webserver seems to be not configured to use PHP or PHP is not installed." folgenden Treffer: https://help.nextcloud.com/t/having-troub…llation/35315/7
Dort lag es daran, dass das Paket "libapache2-mod-php7.2" nicht installiert war.
Ich persönlich bin ja eigentlich Fan von offiziellen Installations-Anleitungen, d.h. in dem Fall https://docs.nextcloud.com/server/16/admi…stallation.html
Demnach müssten am Anfang folgende Pakete installiert werden
Vieles im politischen Kabarett ist recht zeitlos
Wobei das streng genommen nicht das Politbarometer von 2006 ist, sondern so ne Art Vision, wie das in 2006 hätte aussehen können.
Ist mir aber zunächst auch nur aufgefallen, weil Frank Lüdecke da so tierisch jung aussieht Außerdem wurde da Möllemann erwähnt als Chef einer der Liberalen Splitterparteien. Der ist aber seit 2003 tot.
Und der einfachste Hinweis: die Wahl von 2006 wurde wegen Schröders Vertrauensfrage ein Jahr vorgezogen und hat 2005 stattgefunden
Daher wird das Video zeitlich eher zur Wahl 2002 entstanden sein.
Ich stand vor kurzem vor einer ähnlichen Fragestellung, als ich mich mit dem Plugin für filmfriend.de auseinandergesetzt habe, um dem die Unterstützung für die Hamburger Bibliothek beizubringen: Berliner Bibliotheken mit Streaming Angebot
Besagtes Plugin liegt im Source hier: https://github.com/kodinerds/repo
Wobei das insgesamt 6 GB sind für alle Plugins, das plugin.video.L0RE.filmfriend aber nur knapp 200kB ausmacht.
So "richtig" debuggt habe ich das nicht. Einfach mal modifiziert, mit `[definition=12,0]debug[/definition](...)` Statements versehen, immer wieder den aktuellen Stand der geänderten Dateien in das installierte Kodi (bzw. unterhalb von %APPDATA% auf Windows in das richtige Verzeichnis) kopiert, aufgerufen und im Log geguckt, was los ist.
In meinem Fall musste ich nicht den Code zum eigentlichen Abspielen anpassen, nur das Login gegen eine andere Webseite als bisher (ging vorher nur mit der Berliner Bib). Daher hab ich jetzt keinen anderen Quelltext von Plugins oder Kodi benötigt.
Als das dann unter Windows so weit lief, hab ich das dann auch auf meinem RasPi ausprobiert.
Ansonsten gibt es natürlich https://kodi.wiki/view/Add-on_development aber da hab ich mich jetzt nicht durchgelesen.