Meine Antwort von heute morgen muss ich nochmal bearbeiten, da mir scheinbar ein Fehler beim Testen unterlaufen ist.
Eine HTTP Session ist laut MassengeschmackTV 1800 Sekunden aktiv, das habe ich beim Testen nicht berücksichtigt.
Da ich mehreres ausprobiert hatte, kam ich so zum falschen Schluss.
Die Lösung ist weiterhin in der init.py zu suchen und zwar scheint die Funktion eine HTTP Sessiona aufzubauen und jene, die den Kodi Player startet, in unterschiedlichen Bibliotheken vorhanden zu sein.
Meine Theorie: Diese werden isoliert ausgeführt, dementsprechend ist dem Kodi Player die HTTP Sitzung nicht bekannt und man erhält den 401 Fehler.
Ich habe die Funktion playVideoStream nun nochmal bearbeitet:
def playVideoStream(url, name='', art=None, streamInfo=None):
"""
Create media player and open given stream URL.
@type url: str
@param url: the URL of the media file
@type name: str
@param name: a nice human-readable name
@type art: dict
@param art: dictionary as expected by xbmcgui.ListItem.setArt()
@type streamInfo: dict
@param streamInfo: metaData for the media file
@type streamInfo: dict
@param: streamInfo: technical info about the stream (such as the duration or resolution)
"""
USER = ADDON.getSetting('account.username')
PWORD = ADDON.getSetting('account.password')
HTTP_BASE_URIC = 'https://' + USER + ':' + PWORD + '@massengeschmack.tv/'
HTTP_DOORSTOPPER = HTTP_BASE_URIC + 'dl/wzm1/XXX-audio/wzm1.mp3'
listitem = xbmcgui.ListItem(name)
listitem.setInfo('video', streamInfo)
if art is not None:
listitem.setArt(art)
playlist = xbmc.PlayList(1)
playlist.add(HTTP_DOORSTOPPER, listitem)
xbmc.Player().stop()
playlist.clear()
playlist.add(url, listitem)
xbmc.Player().play(playlist)
playlist.clear()
Hinzugekommen ist einmal:
USER = ADDON.getSetting('account.username')
PWORD = ADDON.getSetting('account.password')
HTTP_BASE_URIC = 'https://' + USER + ':' + PWORD + '@massengeschmack.tv/'
HTTP_DOORSTOPPER = HTTP_BASE_URIC + 'dl/wzm1/XXX-audio/wzm1.mp3'
Und dann noch diese zwei Zeilen hier:
playlist.add(HTTP_DOORSTOPPER, listitem)
xbmc.Player().stop()
Bevor die gewünschte Datei gestreamt wird, habe ich zur Authentifizierung eine Variable mit einem HTTP Link, welcher die Zugangsdaten enthält (wie curl diese fordert) und zu einer kleinen MP3 Datei führt, erstellt, welche dann vom Player aufgerufen und gleich wieder gestoppt wird.
Die API von Massengeschmack gibt bei den Medien nur einen einfachen HTTP Link zurück ohne Zugangsdaten (wie auch), welchen ich mit den vorhandenen Libraries/Funktionen nicht entsprechend ummodellieren konnte, damit die Zugangsdaten enthalten sind.
Durch das Abrufen dieser MP3 wird eine Sitzung aufgebaut und man ist am Server authentifiziert, jetzt kann Kodi problemlos die zuvor ausgewählte Datei abrufen mit dem Link, den die API liefert.
Wichtig ist jedoch, dass man in den Settings bei der E-Mailadresse das „@“ durch „–at–“ (wie in der API Beschreibung angegeben) ersetzt, da Curl sonst Probleme macht.
Das ist keine perfekte Lösung, aber sie funktioniert
Bleibt nur zu hoffen, dass die ausgewählte MP3 nicht mal irgendwann gelöscht, umbenannt oder verschoben wird
Jemand, der in Pyhton etwas bewanderter ist, schafft es vielleicht auch die von der API gelieferten Medienlinks umzubauen, damit Benutzername und Passwort enthalten sind.
In den vorhandenen Libraries habe ich keine Funktion hierfür gefunden, zum einbinden weiterer Libraries oder gar schreiben einer solchen Funktion fehlt mir momentan die Zeit.
Das ganze stelle ich gerne auch wieder zum Download bereit:
https://drive.google.com/file/d/1oAGKq3LzYSISiuclykM9FPQw3Va4O-6M/view?usp=sharing
Das Addon einfach drüberinstallieren und ggf. Kodi kurz neustarten.