Wir bekommen von Euch immer wieder Anfragen, dass Ihr gerne Dateien auf Eurem Fire TV direkt vom PC aus bearbeiten wollt. Dateien auf dem Fire TV zu bearbeiten geht zwar auch, ist oft aber gerade ohne USB-Tastatur bzw. -Maus/Touchpad etwas hakelig. Anbei zeigen wir Euch am Beispiel der skygo.py des SkyGo-Addons für Kodi, wie Ihr Dateien vom PC aus bearbeitet. Das Prinzip ist für alle Dateien eigentlich gleich: Ordner herausfinden, Ordner öffnen, Datei auswählen, bearbeiten und speichern. Das geht allerdings nicht mit Dateien, die vom Android-System bzw. FireOS schreibgeschützt sind.
Es gibt natürlich mehrere Wege, um Dateien vom PC aus auf dem Fire TV zu bearbeiten. Wir bevorzugen das Tool adbLink.
Voraussetzung ist, dass sich Euer Fire TV und der PC/Mac im selben Netzwerk befinden und keine Firewall dazwischenfunkt.
Anleitung: Dateien auf dem Fire TV vom PC aus bearbeiten
- ADB-Debugging aktivieren
- Geht im Fire TV Hauptmenü ganz oben rechts auf “Einstellungen”
- Dann einmal nach unten und sehr weit nach rechts auf “Mein Fire TV” (früher hieß der Eintrag “Gerät”)
- Nun öffnet Ihr die “Entwickleroptionen”
- Und aktiviert das “ADB-Debugging”
- IP-Adresse Eures Fire TVs herausfinden
- Nun klickt einmal zurück und klickt ganz oben auf “Info”
- und geht anschließend auf den Eintrag “Netzwerk”
- Notiert Euch nun Eure IP-Adresse (bei uns lautet diese
192.168.20.118
)
- adbLink installieren auf PC/Mac installieren
- Nun installiert Ihr die aktuellste Version des Sideloading-Tools adbLink für Euer Betriebssystem:
- Euer Fire TV in adbLink als Favorit hinzufügen
- Nachdem adbLink auf Eurem PC/Mac installiert ist öffnet Ihr es gleich
- Anschließend klickt Ihr in der Mitte links auf “New”
- Tragt bei “Description” einen beliebigen Namen ein (bei uns lautet dieser bspw. “Fire TV Stick 4k Wohnzimmer”)
- Und bei Address die zuvor notierte IP-Adresse Eures Fire TVs ein (bei uns wieder “192.168.20.118”)
- Und klickt unten links auf “Save”
- Mit Eurem Fire TV verbinden
- Wählt nun im adbLink-Hauptfenster in der Liste “Select device” das entsprechende Fire TV aus
- und klickt direkt darunter auf den Knopf “Connect”
- Wenn Ihr Euch das erste Mal mit Eurem PC/Mac mit Eurem Fire TV verbindet, so erscheint auf dem Fire TV eine Warnmeldung “USB-Debugging zulassen?”. In dieser klickt Ihr den Haken bei “Von diesem Computer immer erlauben” an und anschließend auf “OK”.
- Manchmal passiert es auch, dass adbLink eine Fehlermeldung “Unauthorized” ausspuckt – dann einfach nochmal auf “Connect” klicken.
- Mit Hilfe von adbLink die gewünschte Datei bearbeiten
- Klickt nun im adbLink-Hauptfenster links in der Mitte auf den “File Manager”-Knopf
- Nun müsst Ihr zum gewünschten Ordner gehen, in dem die zu bearbeitende Datei liegt. adbLink bietet hier schon einige häufig angefragte Ordner an. Falls die Datei in einem dieser Ordner liegt, müsst Ihr einfach nur den entsprechenden Eintrag in der Liste auswählen und anschließend auf “Go” drücken.
Falls die Datei nicht in einem der Ordner liegt, haben wir hier ein paar Beispiele für häufig zu editierende Dateien:- Skygo.py im SkyGo-Addon für Kodi:
/sdcard/Android/data/org.xbmc.kodi/files/.kodi/addons/plugin.video.skygo.de
- Kodi User-Settings (advancedsettings.xml, RssFeeds.xml & Co):
/sdcard/Android/data/org.xbmc.kodi/files/.kodi/userdata
Kopiert den Pfad einfach von hier, fügt ihn in adbLink im Textfeld “Directory” ein und klickt anschließend rechts auf “Go”. Danach wird im linken Fenster der gewünschte Ordner geöffnet.
Wenn Ihr wissen wollt, wo weitere Dateien liegen – meldet Euch einfach in den Kommentaren, dann fügen wir einen Eintrag mit dem entsprechenden Pfad in der Liste ein. - Skygo.py im SkyGo-Addon für Kodi:
- Wenn Ihr im richtigen Ordner angekommen seid, müsst Ihr noch die gewünschte Datei auswählen. Einfach in der linken Liste an die entsprechende Stelle scrollen und die Datei auswählen. Wenn der Pfad sehr lang ist, muss man die Liste nach rechts scrollen, um den vollen Dateinamen lesen zu können. In unserem Beispiel wählen wir die
skygo.py
aus.Gewünschte Datei bearbeiten - Nun öffnet sich der in adbLink eingebaute Editor. Hier bearbeitet Ihr nun die Datei wie Ihr es wollt (bspw. vor die Zeilen 36 & 37 beim SkyGo-Addon eine Raute # als erstes Zeichen voranstellen) und klickt anschließend unten rechts auf “Save”.
- Danach müsst Ihr das Überschreiben der vorhandenen Datei nochmal mit Klick auf “Yes” bestätigen.
- Das war es, die Datei ist nun auf Eurem Fire TV verändert.
Habt Ihr weitere Wünsche?
Welche Dateien wollt Ihr direkt auf dem Fire TV bearbeiten? Welche Methode verwendet Ihr, um Dateien auf dem Fire TV zu bearbeiten?
Lasst es uns in den Kommentaren wissen
Unterstütze unsere Arbeit - Danke sagen
Dir haben unsere Beiträge weitergeholfen und du möchtest uns gerne bei unserer Arbeit unterstützen?
Vielen Dank für die Anleitung. Kommt ein paar Tage zu spät 🙂 aber ich konnte so meine Einstellungen überprüfen. Hat alles auf Anhieb funktioniert.
Hi, Danke für die Anleitung. Bei mir klappt aber das speichern nicht. Obwohl ich auf speichern klicke sind die Änderungen weg wenn ich die Datei wieder öffne.
Wenn ich einen Sender im Sky Go im Kodi starte wird das Bild schwarz und Fire TV startet neu.
Habt ihr einen Rat ?
Danke
Seb
Ich kann die Datei aus Adblock nicht editieren.
Felermeldung:Giant Edit….Plugin.video.skygo.de
Was ist zu tun?
Hallo. Hab die Sky go App zum laufen gebracht. Allerdings habe ich nur die Audiospur und kein Bild. Was habe ich falsch gemacht?
Hallo, versuche in meinen TV Stick selbst die m3u Liste ein zu stellen, Beispiel in Kodi. Aber bekomme es nicht hin. Ps bin noch recht unerfahren in der ganzen Geschichte.
Über Hilfe würde ich mich freuen.
Gruß Dirk
Hallo, diese Meldung kommt bei mir:
Edit failed adb: error: cannot create ‘/private/var/folders/80/8yr51jm963l2cql20dtpmd_m0000gn/T/AppTranslocation/0E5CA62E-4BE0-4D1C-B877-A0FFC23AA9B0/d/adbLink.app/Contents/MacOS/adbfiles//skygo.py’: Read-only file system
Habe ebenfalls das Gleiche / eine ähnliche Medlung:
Edit failed adb: error: cannot create ‘/private/var/folders/h2/8x8bch9x5dx7wr84rqgkl7_80000gn/T/AppTranslocation/2E953182-A178-444D-ACA5-165E0F4803F5/d/adbLink.app/Contents/MacOS/adbfiles//skygo.py’: Read-only file system
MP zudem komme ich mit der FireTV-App nicht auf das Feld bearbeiten wie von Euch im Youtubevideo beschrieben :/
Hi RS233 & MP,
Ihr habt adbLink nicht korrekt auf Eurem Mac installiert, sondern startet es direkt aus der Installations-Datei – und diese wird nur in einem schreibgeschützten Ordner zwischengespeichert. Also einfach die App in den Ordner “Programme” verschieben und von dort aus starten…
bei mir erscheint beim Editieren unter adblink immer wieder die Fehlermeldung “device unaurhorized”
Bei der angegebenen Lösung des Problems wonach man eine Meldung beim fire TV Stick wegklicken muss, komme ich nicht weiter. Weiß jemand wo diese Meldung erscheint, bzw wie ich das Problem tatsächlich lösen kann?
Habe exakt das gleiche Problem, die Fehlermeldung bezüglich Device unauthorized kommt immer wieder.
Fehler gefunden,Problem war, dass man am TV noch mal bestätigen muss, USB Debugging zuzulassen.
bei mir ist die Einstellung USB Debugging aktiviert, funktioniert trotzdem nicht:-(
@MP: USB Debugging war bei mir auch schon aktiviert, ich musste trotzdem noch einmal am TV auf dem Fire Stick bestätigen.
Egal wie ich es mache, USB-Debugging an, nochmals bestätigen und und und…
Es erscheint immer und immer wieder die Meldung device unauthorized…
HELP!!!
USB-Debugging muss auf “Aus” stehen – ADB-Debugging muss aktiv sein…
Und: Hast Du Deinen PC bei der Meldung auf dem Fire TV vielleicht abgelehnt? Mach das ADB-Debugging mal aus und wieder an…
hallo, bei mir funktioniert keiner der beiden links mit copy/paste.
directory not found.
bitte helft mir!
Hi, hab die Einstellung ohne Probleme hinbekommen, aber bei mir lädt es immer weiter, sprich , ich klick auf z.B liveTV und such mir einen Sender aus, und dann kommt des runde Ladezeichen und das lädt und lädt und lädt. Es passiert sonst nichts weiter.
Habt Ihr ne Lösung dafür?
Hab diese Meldung wenn ich editieren möchte. Kann mir da jemand helfen?
Edit failed adb: error: cannot create ‘/private/var/folders/0t/cmqv4njx6vz13tyccdbkx1vm0000gn/T/AppTranslocation/C0CF64C1-B1C8-4CF4-A38B-218548CD3CC4/d/adbLink.app/Contents/MacOS/adbfiles//skygo.py’: Read-only file system
Edit,
Hatte sich ein Leerzeichen eingeschlichen. Jetzt läufst.
Ich weis nicht ob das hier hingehört, aber ich habe irgendwo gehört, das man mit adbLink auch das Tastaturlayout auf Deutsch umstellen kann.
Wenn es eine Anleitung dafür gebe, wäre ich sehr dankbar.
Ich meinte bei Fire TV stick 4K das Tastaturlayout.
Bin seit gestern Besitzer eines neuen 4K Sticks. Habe versucht SkyTicket in Kodi zu nutzen. Dabei scheint Kodi das zwar zu starten, zeigt aber nichts an. Gibt es dazu eine Lösung.
Die Sky Ticket App hängt ebenfalls.
Hi eine gute Anleitung. Ich habe alles so befolgt, wie es dort stand. Mein Problem ist nun, dass bei Edit sich das Programm öffnet, ich aber nur ne 9 und ein Herz sehe. Was ist da schief gelaufen? Neustart hat zu keinem Erfolg geführt.
Hallo, versuche in meinen TV Stick selbst die m3u Liste ein zu stellen, Beispiel in Kodi. Aber bekomme es nicht hin. Ps bin noch recht unerfahren in der ganzen Geschichte.
Über Hilfe würde ich mich freuen.
Gruß Dirk
Hi Dirk,
schau mal in unserer Anleitung https://aftvhacks.de/t-entertain-iptv-in-kodi-auf-dem-fire-tv-nutzen-oder-jedem-anderen-kodi-geraet/ nach – da geht es um m3u-Listen in Kodi…
Zur Info, wenn man Sky go updated oder auf ein Update prüft, muss man die Datei erneut editieren.
hallo
habe sky go auf fire tv stick 4k instaliert und habe die datei auch laut anleitung bearbeitet.
die app öffnet und wenn ich auf einen sender gehe und abspielen will versucht er zu starten schafft es aber nicht.
was kann ich machen?
Hey ihr Lieben!
Ich verzweifel noch an dieser Sky Ticket / Amazon Fire TV Stick Geschichte!
Irgendetwas muss ich wohl noch nicht angeklickt haben?! Aber was?
Sky Ticket ist auf meinem Stick unter Kodi – ich kann auch alle Serien / Filme auswählen, komme aber nur bis “Play” und dann spielt es leider nicht ab!
Könnt ihr mir sagen, was ich noch machen muss? BITTE!!! 🙂
Falls ich etwas per Tasten-Kombination eingeben muss, das nicht über die Stick_Fernbedienung funktioniert, habe ich nur die Möglichkeit über “Remote for TV Stick” (das klappt aber gut!)!
Ich hoffe, Ihr könnt mir helfen!
Liebe Grüße, Mareike / GROSSER Game of Throne Fan!!!!! 🙂
Hi,
ich habe adb-Link auf meinem Mac aus Downloads in Programme verschoben. Dennoch kommt die Gehler Meldung “read-only” (also der Fehler, der oben bereits beschrieben wurde). Was könnte ich noch falsch machen? Ich meine, ist doch ansich grotten einfach, für Idioten wie mich beschrieben 🙁
Irgendwie bin ich zu blöd. Mein Verdacht geht dahin, dass ich überhaupt gar nicht auf diese Datei im Schreibmodus komme, auch nicht im ES File. Müßte ich dort, trotz nicht angeschlossener Tastatur, die im Video gezeigte Leiste mit der Eiditonsmöglichkeit sehen? BEi mir ist es nur „blank“, und ganz rechts die 3Punkte untereinander. Wirkt so, als ob ich gar nicht editieren kann??!! Was könnte falsch sein? Irgendwo eine Einstellung?
NODI 18 auf`m 2.Gen. Stick.
Hab`s mit dem PC editiert.
Ich Idiot habe vielleicht ne halbe Stunde verschleudert, weil ich die py mit pyo verwechselt habe. Aber endlich funzt es!
Danke für die Anleitung!!!
Danke für dein Bekenntnis! Hätte sicherlich auch ne halbe Stunde gebraucht oder aufgegeben!
Slim am 8. April 2019 um 6:51
Zur Info, wenn man Sky go updated oder auf ein Update prüft, muss man die Datei erneut editieren.
Hatte auf Kodi 18.2 umgestellt, komme in Sky Go überall hin, kann aber nicht abspielen. Teils sieht man, dass im Hintergrund abgespielt wird, ich seh aber nur den Lade-Kringel.
Liegts am von Slim beschriebenen neu editieren? Wenn ja, was genau war das nochmal? Ein link wäre Klasse…
hallo zusammen,
alle versuche gescheitert, es heißt immer “read only” ich kann es einfach nicht editieren. Habe das .dmg file in den Ordner Applications gezogen und von dort gestartet, ändert auch nichts daran
Hi Go,
die DMG-Datei ist ein sog. Disk-Image und dient rein zum Installieren von Apps – ist also ähnlich zu einer ZIP-Datei zu sehen. Aus dieser DMG-Datei musst Du die App in Deinen Programme-Ordner ziehen – nicht die DMG-Datei in den Programme-Ordner verschieben.
Also einfach Doppelklick auf die DMG-Datei und im neu geöffneten Fenster dann die adbLink.app in den Applications-Ordner (englisch für “Programme”) verschieben.
Viel Erfolg
Moin Zusammen,
habe das jetzt auf einem Raspberry 4 und einem Fire TV 4K installiert und ganau nach Anleitung die Datei verändert.
Außer das er immer versucht die Streams zu starten funktioniert nichts. Das Abo ist erst Mai diesen Jahres geschlossen worden.
Vielleicht liegst ja daran, wie in den Kommentaren schon mehrfach erwähnt wurde.
Ein Anruf bei Sky brachte auch nicht den gewünschten Erfolg. Habe sogar mit einem Techniker dort gesprochen.
Eine interne Liste ist nicht bekannt. Gibt nur die, welche man auch mit Mein Sky drauf zugreifen kann.
Der Techniker hat mir auch bestätigt, dass er das mit den 4 Geräten nicht gut findet, aber das ist Firmenpolitik.
Habe mir jetzt mal einen Sky Q Mini Receiver bestellt. Der funzt dann wenigstens.
Wünsche einen schönen Tag.
Hallo, ich habe eine Verbindung mit adb link zum stick. Aber unter Filemanager tauchen keine Ordner auf die ich anwählen kann. Beide Felder leer. Kann auch oben bei directory was eingeben aber wenn ich auf go klicke passiert minix. Jemand eine Idee?
Beim mir sieht der Text etwas anders aus
platform = 0
osAndroid = 1
license_url = ‘https://wvguard.sky.de/WidevineLicenser/WidevineLicenser|User-Agent=Mozilla%2F5.0%20(X11%3B%20Linux%20x86_64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F49.0.2623.87%20Safari%2F537.36&Referer=http%3A%2F%2Fwww.skygo.sky.de%2Ffilm%2Fscifi–fantasy%2Fjupiter-ascending%2Fasset%2Ffilmsection%2F144836.html&Content-Type=|R{SSM}|’
license_type = ‘com.widevine.alpha’
android_deviceid = ”
#if xbmc.getCondVisibility(‘system.platform.android’) and addon.getSetting(‘android_drm_widevine’) == ‘false’:
# platform = osAndroid
license_url = ”
license_type = ‘com.microsoft.playready’
if addon.getSetting(‘android_deviceid’):
android_deviceid = addon.getSetting(‘android_deviceid’)
else:
android_deviceid = str(uuid.uuid1())
setzt man dann hier die #??
Leider ist die skygo.py Datei nun anders aufgebaut. Finde die passenden Zeilen nicht mehr.
Moin,
ich habe das gleiche Problem. Anderer Aufbau der skygo.py Datei. Sogar noch etwas anders. Sorry auch wenn es was länger ist…
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import base64
import struct
import requests
import json
import re
import datetime
import time
import pickle
import os
import xml.etree.ElementTree as ET
from pyDes import *
from platform import node
import uuid
import xbmc
import xbmcgui
import xbmcplugin
from inputstreamhelper import Helper
from kodi_six.utils import py2_encode
class SkyGo:
“””Sky Go Class”””
baseUrl = “https://skyticket.sky.de”
baseServicePath = ‘/st’
user_agent = ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36’
sessionId = ”
LOGIN_STATUS = {‘SUCCESS’: ‘T_100’, ‘SESSION_INVALID’: ‘S_218’, ‘OTHER_SESSION’:’T_206′}
entitlements = []
def __init__(self, addon_handle, addon, common):
self.addon_handle = addon_handle
self.addon = addon
self.common = common
datapath = xbmc.translatePath(self.addon.getAddonInfo(‘profile’))
self.cookiePath = ‘{0}COOKIES’.format(datapath)
platform_props = self.getPlatformProps()
self.platform = platform_props.get(‘platform’)
self.license_url = platform_props.get(‘license_url’)
self.license_type = platform_props.get(‘license_type’)
self.android_deviceId = platform_props.get(‘android_deviceid’)
# Create session with old cookies
self.session = requests.session()
self.session.headers.update({‘User-Agent’: self.user_agent})
if os.path.isfile(self.cookiePath):
with open(self.cookiePath, ‘rb’) as f:
try:
cookies = requests.utils.cookiejar_from_dict(pickle.load(f))
self.session.cookies = cookies
except:
self.isLoggedIn()
# Save the cookies
with open(self.cookiePath, ‘wb’) as f:
pickle.dump(requests.utils.dict_from_cookiejar(self.session.cookies), f)
return
def isLoggedIn(self):
“””Check if User is still logged in with the old cookies”””
r = self.session.get(‘https://www.skygo.sky.de/SILK/services/public/user/getdata?product=SG&platform=web&version=12354’)
# Parse json
response = r.text[3:-1]
response = json.loads(response)
if response[‘resultMessage’] == ‘OK’:
self.sessionId = response[‘skygoSessionId’]
self.entitlements = response[‘entitlements’]
xbmc.log(‘[Sky Go] User still logged in’)
return True
else:
xbmc.log(‘[Sky Go] User not logged in or Session on other device’)
if response[‘resultCode’] == self.LOGIN_STATUS[‘SESSION_INVALID’]:
xbmc.log(‘[Sky Go] Session invalid – Customer Code not found in SilkCache’)
return False
return False
def killSessions(self):
# Kill other sessions
r = self.session.get(‘https://www.skygo.sky.de/SILK/services/public/session/kill/web?version=12354&platform=web&product=SG’)
def sendLogin(self, username, password):
# Try to login
login = “email={0}”.format(username)
if not re.match(r”^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$”, username):
login = “customerCode={0}”.format(username)
r = self.session.get(‘https://www.skygo.sky.de/SILK/services/public/session/login?’ \
‘version=12354&platform=web&product=SG&{0}&password={1}&remMe=true’ \
.format(login, self.decode(password)))
# Parse json
return json.loads(r.text[3:-1])
def login(self, username=None, password=None, forceLogin=False, askKillSession=True):
if not username and not password:
username = self.addon.getSetting(’email’)
password = self.addon.getSetting(‘password’)
# If already logged in and active session everything is fine
if forceLogin or not self.isLoggedIn():
# remove old cookies
self.session.cookies.clear_session_cookies()
response = self.sendLogin(username, password)
# if login is correct but other session is active ask user if other session should be killed – T_227=SkyGoExtra
if response[‘resultCode’] in [‘T_206’, ‘T_227’]:
kill_session = False
if self.addon.getSetting(‘autoKillSession’) == ‘true’ or askKillSession == False:
kill_session = True
if not kill_session:
kill_session = xbmcgui.Dialog().yesno(‘Sie sind bereits eingeloggt!’,
‘Sie sind bereits auf einem anderen Gerät oder mit einem anderen Browser eingeloggt.’ \
‘ Wollen Sie die bestehende Sitzung beenden und sich jetzt hier neu anmelden?’)
if kill_session:
# Kill all Sessions (including ours)
self.killSessions()
# Session killed so login again
self.sendLogin(username, password)
# Activate Session
self.isLoggedIn()
# Save the cookies
with open(self.cookiePath, ‘wb’) as f:
pickle.dump(requests.utils.dict_from_cookiejar(self.session.cookies), f)
return True
return False
elif response[‘resultMessage’] == ‘KO’:
xbmcgui.Dialog().notification(‘Sky Go: Login’, ‘Bitte Login-Daten überprüfen.’, icon=xbmcgui.NOTIFICATION_ERROR)
return False
elif response[‘resultCode’] == ‘T_100′:
# Activate Session with new test if user is logged in
self.isLoggedIn()
return True
else:
return True
# If any case is not matched return login failed
return False
def setLogin(self):
keyboard = xbmc.Keyboard(self.addon.getSetting(’email’), ‘Kundennummer / E-Mail-Adresse’)
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
email = keyboard.getText()
password = self.setLoginPW()
if password != ”:
self.addon.setSetting(’email’, email)
password = self.encode(password)
if self.login(email, password, forceLogin=True, askKillSession=False):
self.addon.setSetting(‘password’, password)
self.addon.setSetting(‘login_acc’, email)
xbmcgui.Dialog().notification(‘Sky Go: Login’, ‘Angemeldet als “{0}”.’.format(email), icon=xbmcgui.NOTIFICATION_INFO)
else:
self.addon.setSetting(‘password’, ”)
self.addon.setSetting(‘login_acc’, ”)
def setLoginPW(self):
keyboard = xbmc.Keyboard(”, ‘Passwort’, True)
keyboard.doModal(60000)
if keyboard.isConfirmed() and keyboard.getText() and len(keyboard.getText()) == 4:
password = keyboard.getText()
return password
return ”
def encode(self, data):
k = triple_des(self.getmac(), CBC, “\0\0\0\0\0\0\0\0″, padmode=PAD_PKCS5)
d = k.encrypt(data)
return base64.b64encode(d)
def decode(self, data):
if not data:
return ”
k = triple_des(self.getmac(), CBC, “\0\0\0\0\0\0\0\0″, padmode=PAD_PKCS5)
d = k.decrypt(base64.b64decode(data))
return d.decode(‘utf-8’)
def getmac(self):
mac = uuid.getnode()
if (mac >> 40) % 2:
mac = node()
return uuid.uuid5(uuid.NAMESPACE_DNS, str(mac)).bytes
def getPlayInfo(self, id=”, url=”):
ns = {‘media’: ‘http://search.yahoo.com/mrss/’, ‘skyde’: ‘http://sky.de/mrss_extensions/’}
# If no url is given we assume that the url hast to be build with the id
if url == ”:
url = self.baseUrl + self.baseServicePath + “/multiplatform/web/xml/player_playlist/asset/” + str(id) + “.xml”
r = requests.get(url)
tree = ET.ElementTree(ET.fromstring(py2_encode(r.text)))
root = tree.getroot()
manifest_url = root.find(‘channel/item/media:content’, ns).attrib[‘url’]
apix_id = root.find(‘channel/item/skyde:apixEventId’, ns).text
package_code = root.find(‘channel/item/skyde:packageCode’, ns).text
return {‘manifestUrl’: manifest_url, ‘apixId’: apix_id, ‘duration’: 0, ‘package_code’: package_code}
def getCurrentEvent(self, epg_channel_id):
# Save date for fure use
now = datetime.datetime.now()
current_date = now.strftime(“%d.%m.%Y”)
# Get Epg information
xbmc.log(‘[Sky Go] eventlisturl = {0}/epgd{1}/web/eventList/{2}/{3}/’.format(self.baseUrl, self.baseServicePath, current_date, epg_channel_id))
r = requests.get(‘{0}/epgd{1}/web/eventList/{2}/{3}/’.format(self.baseUrl, self.baseServicePath, current_date, epg_channel_id))
events = r.json()[epg_channel_id]
for event in events:
start_date = datetime.datetime(*(‘{0} {1}’.format(time.strptime(event[‘startDate’], event[‘startTime’], ‘%d.%m.%Y %H:%M’)[0:6])))
end_date = datetime.datetime(*(‘{0} {1}’.format(time.strptime(event[‘endDate’], event[‘endTime’], ‘%d.%m.%Y %H:%M’)[0:6])))
# Check if event is running event
if start_date < now < end_date:
return event
# Return False if no current running event
return False
def getEventPlayInfo(self, event_id, epg_channel_id):
# If not Sky news then get details id else use hardcoded playinfo_url
if epg_channel_id != '17':
r = requests.get('{0}/epgd{1}/web/eventDetail/{2}/{3}/'.format(self.baseUrl, self.baseServicePath, event_id, epg_channel_id))
event_details_link = r.json()['detailPage']
# Extract id from details link
p = re.compile('/([0-9]*)\.html', re.IGNORECASE)
m = re.search(p, event_details_link)
playlist_id = m.group(1)
playinfo_url = '{0}{1}/multiplatform/web/xml/player_playlist/asset/{2}.xml'.format(self.baseUrl, self.baseServicePath, playlist_id)
else:
playinfo_url = '{0}{1}/multiplatform/web/xml/player_playlist/ssn/127.xml'.format(self.baseUrl + self.baseServicePath)
return self.getPlayInfo(url=playinfo_url)
def may_play(self, entitlement):
return entitlement in self.entitlements
def getAssetDetails(self, asset_id):
url = '{0}{1}/multiplatform/web/json/details/asset/{2}.json'.format(self.baseUrl, self.baseServicePath, asset_id)
r = self.session.get(url)
if self.common.get_dict_value(r.headers, 'content-type').startswith('application/json'):
return r.json()['asset']
else:
return {}
def getClipDetails(self, clip_id):
url = '{0}{1}/multiplatform/web/json/details/clip/{2}.json'.format(self.baseUrl, self.baseServicePath, clip_id)
r = self.session.get(url)
return r.json()['detail']
def get_init_data(self, session_id, apix_id):
if self.license_type == 'com.microsoft.playready':
init_data = 'sessionId={0}&apixId={1}&deviceId={2}&platformId=AndP&product=BW&version=1.7.1&DeviceFriendlyName=Android' \
.format(self.sessionId, apix_id, self.android_deviceId)
else:
init_data = 'kid={0}&sessionId={1}&apixId={2}&platformId=&product=BW&channelId='.format('{UUID}', session_id, apix_id)
init_data = struct.pack('1B', *[30]) + init_data.encode('utf-8')
init_data = base64.urlsafe_b64encode(init_data)
return init_data
def parentalCheck(self, parental_rating, play=False):
if parental_rating == 0:
return True
ask_pin = self.addon.getSetting('js_askforpin')
max_rating = self.addon.getSetting('js_maxrating')
if max_rating.isdigit():
if int(max_rating) < 0:
return True
if int(max_rating) < parental_rating:
if ask_pin == 'false' or not play:
return False
else:
dlg = xbmcgui.Dialog()
code = dlg.input('PIN Code', type=xbmcgui.INPUT_NUMERIC)
if self.encode(code) == password:
return True
else:
return False
return True
def getPlatformProps(self):
props = {}
if CondVisibility('system.platform.android') and self.addon.getSetting('android_drm_widevine') == 'false':
props.update({'license_type': 'com.microsoft.playready'})
android_deviceid = None
if self.addon.getSetting('android_deviceid'):
android_deviceid = self.addon.getSetting('android_deviceid')
else:
android_deviceid = str(uuid.uuid1())
self.addon.setSetting('android_deviceid', android_deviceid)
props.update({'android_deviceid': android_deviceid})
else:
props.update({'license_type': 'com.widevine.alpha'})
props.update({'license_url': 'https://wvguard.sky.de/WidevineLicenser/WidevineLicenser|User-Agent=Mozilla%2F5.0%20(X11%3B%20Linux%20x86_64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F49.0.2623.87%20Safari%2F537.36&Referer=http%3A%2F%2Fwww.skygo.sky.de%2Ffilm%2Fscifi–fantasy%2Fjupiter-ascending%2Fasset%2Ffilmsection%2F144836.html&Content-Type=|R{SSM}|'})
return props
def play(self, manifest_url, package_code, parental_rating=0, info_tag=None, art_tag=None, apix_id=None):
# Inputstream and DRM
helper = Helper(protocol='ism', drm='widevine')
if helper.check_inputstream():
# Jugendschutz
if not self.parentalCheck(parental_rating, play=True):
xbmcgui.Dialog().notification('Sky Go: FSK {0}'.format(parental_rating), 'Keine Berechtigung zum Abspielen dieses Eintrags.', xbmcgui.NOTIFICATION_ERROR, 2000, True)
xbmc.log('[Sky Go] FSK {0}: Keine Berechtigung zum Abspielen'.format(parental_rating))
if self.login():
if self.may_play(package_code):
init_data = None
# create init data for license acquiring
if apix_id:
init_data = self.get_init_data(self.sessionId, apix_id)
# Prepare new ListItem to start playback
li = xbmcgui.ListItem(path=manifest_url)
if info_tag:
li.setInfo('video', info_tag)
if art_tag:
li.setArt(art_tag)
li.setProperty('inputstreamaddon', 'inputstream.adaptive')
li.setProperty('inputstream.adaptive.license_type', self.license_type)
li.setProperty('inputstream.adaptive.manifest_type', 'ism')
li.setProperty('inputstream.adaptive.license_flags', 'persistent_storage')
if self.license_url:
li.setProperty('inputstream.adaptive.license_key', self.license_url)
if init_data:
li.setProperty('inputstream.adaptive.license_data', init_data)
# Start Playing
xbmcplugin.setResolvedUrl(self.addon_handle, True, li)
return
else:
xbmcgui.Dialog().notification('Sky Go: Berechtigung', 'Keine Berechtigung zum Abspielen dieses Eintrags', xbmcgui.NOTIFICATION_ERROR, 2000, True)
xbmc.log('[Sky Go] Keine Berechtigung zum Abspielen')
xbmc.log('[Sky Go] Berechtigungen = {0}'.format(self.entitlements))
xbmc.log('[Sky Go] Geforderte Berechtigung = {0}'.format(package_code))
else:
xbmc.log('[Sky Go] Fehler beim Login')
xbmcplugin.setResolvedUrl(self.addon_handle, False, xbmcgui.ListItem())
Wo soll man das "#" setzen ?
Danke
Bei mir der exakt selbe text.mir werden die ganzen android sachen nicht angezeigt.
Bei mir der selbe text, wohin mit dem #??
SKY GO dunkel wegen Berechtigung Fehler.
Wäre für eine Rückmeldung dankbar
Habe heute das SkyGo-AddOn auf meinem 2. FireTV 4K-Stick installiert. Unter dem Pfad:
/sdcard/Android/data/org.xbmc.kodi/files/.kodi/addons/plugin.video.skygo.de
finde ich keine “Skygo.py” mehr. Wo ist die Datei jetzt?
Hallo Ich habe das gleiche Problem wie W.K. die Datei wird weder mit Kode 18.4 noch mit Kodi 18.5 erstellt. Finde Sie auch irgendwie in keinen anderen Verzeichnis. Jemand noch eine Idee?
Du musst noch einen Ordner weiter die Datei ist auf jeden fall da aber, die haben die geändert. Ich finde auch nicht wo ich die hin setzten soll. ich habe mal in der Gruppe geschreiben und warte jetzt auf antwort.
Maxchen:
Einstellungen – Sky GO
Unter Sonstiges: DRM Widevine erzwingen (nicht empfohlen) aktivieren und Cache leeren.
Dann lief bei mir Sky Go wieder
Ich kann das auch bestätigen, dass mit der “DRM Widevine erzwingen” Einstellung – Sky Go wieder läuft !
Funktioniert bei mir ebenfalls nach dem Aktivieren von “DRM Widevine erzwingen” wieder (Fire TV 2. Gen).
Danke für den Tipp!
Hallo Leute,
erstmal recht herzlichen Dank für die sehr gute Anleitung und den ganzen Tipps. Habe jedoch auch das Problem von W.K. – SkyGo läuft, aber der Bildschirm bleibt schwarz. Im ES Explorer steht die Einstellung auf “versteckte Dateien anzeigen” – trotzdem finde ich nur eine “default.py” statt der “skygo.py”. Habe ich da doch noch irgendwas falsch gemacht ? Neueste Kodi (18.5) ist drauf.
Vielen Dank für Eure Hilfe im voraus !
Michael
…die DRM-Einstellung hat bei mir auch funktioniert, Danke für den Tipp
Die skygo.py ist bei mir in einem anderen Pfad (… video.skygo/resources/lib/skygo.py) und sieht anders aus als beschrieben (Zeile 36 und 37 existieren so gar nicht), hängt das vielleicht damit zusammen, dass ich nichts mehr sehen kann, kann mich einloggen, aber erhalte immer SKYGo: Datenabruf Es konnten keine Dateien geladen werden !
Auch alle Untermenues sind leer. Ich habe schon viel versucht, auch alte Kodinerd Versionen, nichts geht mehr
Ich habe das gleiche Fehlerbild wie Andrea.
Der Datenabruf funktioniert nicht mehr in der SkyGo App und die die skygo.py ist nicht mehr im Pfad wie in der Anleitung beschrieben.
Guten abend, auch ich habe die skygo.py datei in dem ordner resoures/lib/…. wo muss das raute eingefügt werden?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from kodi_six.utils import py2_encode, py2_decode
import base64
import struct
import requests
import json
import re
import datetime
import time
import pickle
import os
import xml.etree.ElementTree as ET
from pyDes import triple_des, CBC, PAD_PKCS5
from platform import node
import uuid
import xbmc
import xbmcgui
import xbmcplugin
from inputstreamhelper import Helper
try:
from urllib.parse import urlencode
except:
from urllib import urlencode
class SkyGo:
“””Sky Go Class”””
baseUrl = “https://skyticket.sky.de”
baseServicePath = ‘/st’
user_agent = ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36’
referer = ‘https://skyticket.sky.de/film/scifi–fantasy/jupiter-ascending/asset/filmsection/144836.html’
sessionId = ”
LOGIN_STATUS = {‘SUCCESS’: ‘T_100’, ‘SESSION_INVALID’: ‘S_218’, ‘OTHER_SESSION’:’T_206′}
entitlements = []
def __init__(self, common):
self.common = common
datapath = xbmc.translatePath(self.common.addon.getAddonInfo(‘profile’))
self.cookiePath = ‘{0}COOKIES’.format(datapath)
self.android_deviceid = self.common.addon.getSetting(‘android_deviceid’)
self.android_drm_widevine = self.common.addon.getSetting(‘android_drm_widevine’)
self.autoKillSession = self.common.addon.getSetting(‘autoKillSession’)
self.js_askforpin = self.common.addon.getSetting(‘js_askforpin’)
self.js_maxrating = self.common.addon.getSetting(‘js_maxrating’)
self.password = self.common.addon.getSetting(‘password’)
self.username = self.common.addon.getSetting(’email’)
platform_props = self.getPlatformProps()
self.platform = platform_props.get(‘platform’)
self.license_url = platform_props.get(‘license_url’)
self.license_type = platform_props.get(‘license_type’)
self.android_deviceId = platform_props.get(‘android_deviceid’)
# Create session with old cookies
self.session = requests.session()
self.session.headers.update({‘User-Agent’: self.user_agent})
if os.path.isfile(self.cookiePath):
try:
with open(self.cookiePath, ‘rb’) as f:
cookies = requests.utils.cookiejar_from_dict(pickle.load(f))
self.session.cookies = cookies
except:
self.login(forceLogin=True)
# Save the cookies
with open(self.cookiePath, ‘wb’) as f:
pickle.dump(requests.utils.dict_from_cookiejar(self.session.cookies), f)
return
def isLoggedIn(self):
“””Check if User is still logged in with the old cookies”””
r = self.session.get(‘https://www.skygo.sky.de/SILK/services/public/user/getdata?{0}’.format(urlencode({
‘version’: ‘12354’,
‘platform’: ‘web’,
‘product’: ‘SG’
})))
# Parse json
response = py2_decode(r.text[3:-1])
response = json.loads(response)
if response[‘resultMessage’] == ‘OK’:
self.sessionId = response[‘skygoSessionId’]
self.entitlements = response[‘entitlements’]
xbmc.log(‘[Sky Go] User still logged in’)
return True
else:
xbmc.log(‘[Sky Go] User not logged in or Session on other device’)
if response[‘resultCode’] == self.LOGIN_STATUS[‘SESSION_INVALID’]:
xbmc.log(‘[Sky Go] Session invalid – Customer Code not found in SilkCache’)
return False
return False
def killSessions(self):
# Kill other sessions
r = self.session.get(‘https://www.skygo.sky.de/SILK/services/public/session/kill/web?{0}’.format(urlencode({
‘version’: ‘12354’,
‘platform’: ‘web’,
‘product’: ‘SG’
})))
def sendLogin(self, username, password):
# Try to login
if not re.match(r’^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$’, username):
loginKey = ‘customerCode’
else:
loginKey = ’email’
r = self.session.get(‘https://www.skygo.sky.de/SILK/services/public/session/login?{0}’.format(urlencode({
‘version’: ‘12354’,
‘platform’: ‘web’,
‘product’: ‘SG’,
loginKey: username,
‘password’: self.decode(password),
‘remMe’: True
})))
# Parse json
return json.loads(py2_decode(r.text[3:-1]))
def login(self, username=None, password=None, forceLogin=False, askKillSession=True):
if not username and not password:
username = self.username
password = self.password
# If already logged in and active session everything is fine
if forceLogin or not self.isLoggedIn():
# remove old cookies
self.session.cookies.clear_session_cookies()
response = self.sendLogin(username, password)
# if login is correct but other session is active ask user if other session should be killed – T_227=SkyGoExtra
if response[‘resultCode’] in [‘T_206’, ‘T_227’]:
kill_session = False
if self.autoKillSession == ‘true’ or askKillSession == False:
kill_session = True
if not kill_session:
kill_session = xbmcgui.Dialog().yesno(‘Sie sind bereits eingeloggt!’,
‘Sie sind bereits auf einem anderen Gerät oder mit einem anderen Browser eingeloggt.’ \
‘ Wollen Sie die bestehende Sitzung beenden und sich jetzt hier neu anmelden?’)
if kill_session:
# Kill all Sessions (including ours)
self.killSessions()
# Session killed so login again
self.sendLogin(username, password)
# Activate Session
self.isLoggedIn()
# Save the cookies
with open(self.cookiePath, ‘wb’) as f:
pickle.dump(requests.utils.dict_from_cookiejar(self.session.cookies), f)
return True
return False
elif response[‘resultMessage’] == ‘KO’:
xbmcgui.Dialog().notification(‘Sky Go: Login’, ‘Bitte Login-Daten überprüfen.’, icon=xbmcgui.NOTIFICATION_ERROR)
return False
elif response[‘resultCode’] == ‘T_100’:
# Activate Session with new test if user is logged in
self.isLoggedIn()
return True
else:
return True
# If any case is not matched return login failed
return False
def setLogin(self):
keyboard = xbmc.Keyboard(self.username, ‘Kundennummer / E-Mail-Adresse’)
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
email = keyboard.getText()
password = self.setLoginPW()
if password != ”:
self.common.addon.setSetting(’email’, email)
password = self.encode(password)
if self.login(email, password, forceLogin=True, askKillSession=False):
self.common.addon.setSetting(‘password’, password)
self.common.addon.setSetting(‘login_acc’, email)
xbmcgui.Dialog().notification(‘Sky Go: Login’, ‘Angemeldet als “{0}”.’.format(email), icon=xbmcgui.NOTIFICATION_INFO)
else:
self.common.addon.setSetting(‘password’, ”)
self.common.addon.setSetting(‘login_acc’, ”)
def setLoginPW(self):
keyboard = xbmc.Keyboard(”, ‘Passwort’, True)
keyboard.doModal(60000)
if keyboard.isConfirmed() and keyboard.getText() and len(keyboard.getText()) == 4:
password = keyboard.getText()
return password
return ”
def encode(self, data):
k = triple_des(self.getmac(), CBC, py2_encode(“\0\0\0\0\0\0\0\0″), padmode=PAD_PKCS5)
d = k.encrypt(data)
return base64.b64encode(d)
def decode(self, data):
if not data:
return ”
k = triple_des(self.getmac(), CBC, py2_encode(“\0\0\0\0\0\0\0\0″), padmode=PAD_PKCS5)
d = k.decrypt(base64.b64decode(data))
return d.decode(‘utf-8’)
def getmac(self):
mac = uuid.getnode()
if (mac >> 40) % 2:
mac = node()
return uuid.uuid5(uuid.NAMESPACE_DNS, str(mac)).bytes
def getPlayInfo(self, id=”, url=”):
ns = {‘media’: ‘http://search.yahoo.com/mrss/’, ‘skyde’: ‘http://sky.de/mrss_extensions/’}
# If no url is given we assume that the url hast to be build with the id
if url == ”:
url = ‘{0}{1}/multiplatform/web/xml/player_playlist/asset/{2}.xml’.format(self.baseUrl, self.baseServicePath, id)
r = requests.get(url)
tree = ET.ElementTree(ET.fromstring(py2_decode(r.text)))
root = tree.getroot()
manifest_url = root.find(‘channel/item/media:content’, ns).attrib[‘url’]
apix_id = root.find(‘channel/item/skyde:apixEventId’, ns).text
package_code = root.find(‘channel/item/skyde:packageCode’, ns).text
return {‘manifestUrl’: manifest_url, ‘apixId’: apix_id, ‘duration’: 0, ‘package_code’: package_code}
def getCurrentEvent(self, epg_channel_id):
# Save date for fure use
now = datetime.datetime.now()
current_date = now.strftime(‘%d.%m.%Y’)
# Get Epg information
xbmc.log(‘[Sky Go] eventlisturl = {0}/epgd{1}/web/eventList/{2}/{3}/’.format(self.baseUrl, self.baseServicePath, current_date, epg_channel_id))
r = requests.get(‘{0}/epgd{1}/web/eventList/{2}/{3}/’.format(self.baseUrl, self.baseServicePath, current_date, epg_channel_id))
events = json.loads(py2_decode(r.text))[epg_channel_id]
for event in events:
start_date = datetime.datetime(*(‘{0} {1}’.format(time.strptime(event[‘startDate’], event[‘startTime’], ‘%d.%m.%Y %H:%M’)[0:6])))
end_date = datetime.datetime(*(‘{0} {1}’.format(time.strptime(event[‘endDate’], event[‘endTime’], ‘%d.%m.%Y %H:%M’)[0:6])))
# Check if event is running event
if start_date < now < end_date:
return event
# Return False if no current running event
return False
def getEventPlayInfo(self, event_id, epg_channel_id):
# If not Sky news then get details id else use hardcoded playinfo_url
if epg_channel_id != '17':
r = requests.get('{0}/epgd{1}/web/eventDetail/{2}/{3}/'.format(self.baseUrl, self.baseServicePath, event_id, epg_channel_id))
event_details_link = json.loads(py2_decode(r.text))['detailPage']
# Extract id from details link
p = re.compile('/([0-9]*)\.html', re.IGNORECASE)
m = re.search(p, event_details_link)
playlist_id = m.group(1)
playinfo_url = '{0}{1}/multiplatform/web/xml/player_playlist/asset/{2}.xml'.format(self.baseUrl, self.baseServicePath, playlist_id)
else:
playinfo_url = '{0}{1}/multiplatform/web/xml/player_playlist/ssn/127.xml'.format(self.baseUrl, self.baseServicePath)
return self.getPlayInfo(url=playinfo_url)
def may_play(self, entitlement):
return entitlement in self.entitlements
def getAssetDetails(self, asset_id):
url = '{0}{1}/multiplatform/web/json/details/asset/{2}.json'.format(self.baseUrl, self.baseServicePath, asset_id)
r = self.session.get(url)
if self.common.get_dict_value(r.headers, 'content-type').startswith('application/json'):
return json.loads(py2_decode(r.text))['asset']
else:
url = '{0}{1}/multiplatform/ipad/json/details/asset/{2}.json'.format(self.baseUrl, self.baseServicePath, asset_id)
r = self.session.get(url)
if self.common.get_dict_value(r.headers, 'content-type').startswith('application/json'):
return json.loads(py2_decode(r.text))['asset']
else:
return {}
def getClipDetails(self, clip_id):
url = '{0}{1}/multiplatform/web/json/details/clip/{2}.json'.format(self.baseUrl, self.baseServicePath, clip_id)
r = self.session.get(url)
return json.loads(py2_decode(r.text))['detail']
def get_init_data(self, session_id, apix_id):
if self.license_type == 'com.microsoft.playready':
init_data = 'sessionId={0}&apixId={1}&deviceId={2}&platformId=AndP&product=BW&version=1.7.1&DeviceFriendlyName=Android' \
.format(self.sessionId, apix_id, self.android_deviceId)
else:
init_data = 'kid={0}&sessionId={1}&apixId={2}&platformId=&product=BW&channelId='.format('{UUID}', session_id, apix_id)
init_data = struct.pack('1B', *[30]) + init_data.encode('utf-8')
init_data = base64.urlsafe_b64encode(init_data)
return init_data
def parentalCheck(self, parental_rating, play=False):
if parental_rating == 0:
return True
ask_pin = self.js_askforpin
max_rating = self.js_maxrating
if max_rating.isdigit():
if int(max_rating) < 0:
return True
if int(max_rating) < parental_rating:
if ask_pin == 'false' or not play:
return False
else:
dlg = xbmcgui.Dialog()
code = dlg.input('PIN Code', type=xbmcgui.INPUT_NUMERIC)
if self.encode(code) == password:
return True
else:
return False
return True
def getPlatformProps(self):
props = {}
if xbmc.getCondVisibility('system.platform.android') and self.android_drm_widevine == 'false':
props.update({'license_type': 'com.microsoft.playready'})
android_deviceid = None
if self.android_deviceid:
android_deviceid = self.android_deviceid
else:
android_deviceid = str(uuid.uuid1())
self.common.addon.setSetting('android_deviceid', android_deviceid)
props.update({'android_deviceid': android_deviceid})
else:
props.update({'license_type': 'com.widevine.alpha'})
props.update({'license_url': 'https://wvguard.sky.de/WidevineLicenser/WidevineLicenser'})
return props
def play(self, manifest_url, package_code, parental_rating=0, info_tag=None, art_tag=None, apix_id=None, webvod_url=None):
# Inputstream and DRM
helper = Helper(protocol='ism', drm='widevine')
if helper.check_inputstream():
# Jugendschutz
if not self.parentalCheck(parental_rating, play=True):
xbmcgui.Dialog().notification('Sky Go: FSK {0}'.format(parental_rating), 'Keine Berechtigung zum Abspielen dieses Eintrags.', xbmcgui.NOTIFICATION_ERROR, 2000, True)
xbmc.log('[Sky Go] FSK {0}: Keine Berechtigung zum Abspielen'.format(parental_rating))
if self.login():
if self.may_play(package_code):
init_data = None
# create init data for license acquiring
if apix_id:
init_data = self.get_init_data(self.sessionId, apix_id)
# Prepare new ListItem to start playback
li = xbmcgui.ListItem(path=manifest_url)
if info_tag:
li.setInfo('video', info_tag)
if art_tag:
li.setArt(art_tag)
li.setProperty('inputstreamaddon', 'inputstream.adaptive')
li.setProperty('inputstream.adaptive.license_type', self.license_type)
li.setProperty('inputstream.adaptive.manifest_type', 'ism')
li.setProperty('inputstream.adaptive.license_flags', 'persistent_storage')
li.setProperty('inputstream.adaptive.stream_headers', 'User-Agent={0}'.format(self.user_agent))
if self.license_url:
webvod_url = webvod_url if webvod_url and webvod_url != '' else self.referer
license_key = '{0}|User-Agent={1}&Referer={2}&Content-Type=|R{{SSM}}|'.format(self.license_url, self.user_agent, webvod_url)
li.setProperty('inputstream.adaptive.license_key', license_key)
if init_data:
li.setProperty('inputstream.adaptive.license_data', init_data)
# Start Playing
xbmcplugin.setResolvedUrl(self.common.addon_handle, True, li)
return
else:
xbmcgui.Dialog().notification('Sky Go: Berechtigung', 'Keine Berechtigung zum Abspielen dieses Eintrags', xbmcgui.NOTIFICATION_ERROR, 2000, True)
xbmc.log('[Sky Go] Keine Berechtigung zum Abspielen')
xbmc.log('[Sky Go] Berechtigungen = {0}'.format(self.entitlements))
xbmc.log('[Sky Go] Geforderte Berechtigung = {0}'.format(package_code))
else:
xbmc.log('[Sky Go] Fehler beim Login')
xbmcplugin.setResolvedUrl(self.common.addon_handle, False, xbmcgui.ListItem())
desweiteren kann ich zwar sky go starten. aber er zeigt mir als fehler an:
Playback failed
One or more items failed to play. Check the log for more information about this message (Kodi 18.5 + aktuelle akygo app) fire tv
@sebi
könntet ihr beschreiben, wie man eine advancedsettings.XML in adb erstellt und in kodi einfügt?
Hallo zusammen,
das verbinden mit adb ist alles kein Problem aber leider gibt es bei mir keine skygo.py Datei was mache ich falsch? Ich sehe wohl bei skygo ein paar serien aber beim öffnen kommt immer es würde keine berechtigung bestehen. Ich nutze Kodi18.0 ist diese Version zu alt?
Hallo,
ich habe das Problem, dass ich bei adb Link keine Files sehe, sondern nur zwei Kästchen mit jeweils 2 Punkten (..)!?
IP Connection ist vorhanden.
Hallo,
erst einmal danke für die tolle Beschreibung.
Leider übernimmt abdLink meine Einstellung nicht, wo die runter geladenen Dateien gespeichert werden sollen.
Es speichert immer unter C – Benutzer – Nicole
Ich würde mich sehr über Hilfe freuen.
LG
Nicole
leider viele Fragen, aber KEINE Antworten
Wollte Perfect Player auf firestik per adblink installieren.
Doch Fehlermeldung :Failure [INSTALL_FAILED_NO_MATCHING_ABIS]