Funktioniert denn mittlerweile der composite video out?
Beiträge von harryberlin
-
-
Ist die Firmware eine Datei auf der SD-Card oder wird da richtig was in die Hardware vom Pi geflasht?
-
Bei mir kommt irgendwie kein Ton, egal welchen Stream ich starte.
-
hab letztens was im osmc forum gelesen, dass windows 10 die removable drives nicht freigibt. da musste was in der registry angepasst werden.
https://discourse.osmc.tv/t/sd-card-stuck-in-readonly/14193 -
Hast du ne billig micorsd bzw. in china gekauft?
Nutzt du windows 10 mit dem image writer? -
Hui, da bin ich ja froh und zufrieden, dass mein code gar nicht mal so schlecht ausschaut.
Stolz bin ich auf die Umsetzung der MouseClick funktion. Das ist seitens xbmc nicht ganz so gut gelöst.
Ich kann es ganz einfach um right click usw. erweitern. -
das kommt dabei raus:
im kodi forum wurde das problem so erklärt, weil die rückgabe im moment der abfrage auf "busy" steht und deswegen ein false zurückgegeben wird. in meinen fall kommt immer false.
-
Ich bekomme leider gar nichts eingezeigt. Echt komisch.
Im Kodi Forum hab ich mich hier mit ran gehangen: https://forum.kodi.tv/showthread.php?tid=324446
das setting schaut so aus:XML
Alles anzeigen<?xml version="1.0" encoding="utf-8" standalone="yes"?> <settings> <category label="one"> </category> <category label="two"> </category> <category label="three"> </category> <category label="PiBUS"> <description>PiBus</description> <setting label="Install Shutdown script for LibreElec" type="action" action="" id="pibus_install_power_off" enable="true" visible="String.Contains(System.OSVersionInfo,Windows 7)" /> </category> <category label="five"> </category> </settings>
-
hmm naja. im python-forum wird man dafür gesteinigt.
-
auch, wenn einiges nicht python konform ist, und einige verbessern wollen.
beim aufruf des skin werden alle control verknüpft. solang das nicht erledigt ist, zeige ich eine loader animation. welche danach deaktivert wird. dann können alle anderen sachen mit der condition Strin.IsEqual() angezeigt werden, oder vorangegangene animationen, pi pa po.
so kann das ganze aussehen: https://www.youtube.com/watch?v=5nZlD1gYje8
hier mal eine kleine zusammenstellung:Python
Alles anzeigen#!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'harryberlin' import os import xbmc, xbmcgui, xbmcaddon from threading import Thread, Event ADDON = xbmcaddon.Addon() ADDON_NAME = ADDON.getAddonInfo('name') ADDON_ID = ADDON.getAddonInfo('id') ADDON_VERSION = ADDON.getAddonInfo('version') ADDON_PATH = ADDON.getAddonInfo('path') ADDON_USER_PATH = os.path.join(xbmc.translatePath('special://userdata'), 'addon_data', ADDON_ID) ADDON_SKIN_MEDIA_PATH = os.path.join(ADDON_PATH, 'resources', 'skins', 'default', 'media') ADDON_ICON = os.path.join(ADDON_PATH, 'icon.png') ADDON_COLOR_YELLOW = 'FFE6C819' ADDON_COLOR_GREEN = 'FF3BFC00' ADDON_COLOR_BLUE = 'FF007CC3' ADDON_COLOR_RED = 'FFDB214C' ADDON_COLOR_AMBER = 'FFFF7E00' ADDON_COLOR_WHITE = 'FFFFFFFF' ADDON_COLOR_BLACK = 'FF000000' class RepeatTimer(Thread): def __init__(self, interval, function, iterations=0, args=[], kwargs={}): Thread.__init__(self) self.daemon = True self.interval = interval self.function = function self.iterations = iterations self.args = args self.kwargs = kwargs self.finished = Event() def run(self): count = 0 while not self.finished.isSet() and (self.iterations <= 0 or count < self.iterations): self.finished.wait(self.interval) if not self.finished.isSet(): self.function(*self.args, **self.kwargs) count += 1 [definition='1','0']log[/definition]('Timer Thread finished') def cancel(self): self.finished.set() class ObcGuiClass(xbmcgui.WindowXML): ACTION_PARENT_DIR = 9 ACTION_PREVIOUS_MENU = 10 ACTION_CLOSE_DIALOG = 51 ACTION_SELECT_ITEM = 7 ACTION_MOVE_LEFT = 1 ACTION_MOVE_RIGHT = 2 ACTION_MOVE_UP = 3 ACTION_MOVE_DOWN = 4 ACTION_NAV_BACK = 92 ACTION_BACKSPACE = 110 ACTION_MOUSE_LEFT_CLICK = 100 ACTION_SHOW_FULLSCREEN = 36 def __init__(self, xmlFilename, scriptPath, defaultSkin, defaultRes): [definition='1','0']log[/definition]("Initializing OBC Gui...") set_property('IBUSCOMMUNICATOR_OBC_LOADED', '0') self.MAINLABEL = None self.MAINLEFT = None self.MAINRIGHT = None self.BUTTON101 = None self.BUTTON102 = None self.BUTTON103 = None self.BUTTON104 = None self.BUTTON105 = None self.BUTTON106 = None self.BUTTON107 = None self.BUTTON108 = None self.LABEL111 = None self.LABEL112 = None self.LABEL113 = None self.LABEL114 = None self.LABEL115 = None self.LABEL116 = None self.LABEL117 = None self.LABEL118 = None self.IMAGE121 = None self.IMAGE122 = None self.IMAGE123 = None self.IMAGE124 = None self.IMAGE125 = None self.IMAGE126 = None self.IMAGE127 = None self.IMAGE128 = None self.isActive = False self.updateTimer = None self.window_id = -10000 def isVisible(self): [definition='1','0']log[/definition]('OBC: VISIBLE: WINDOW ID: %s' % xbmcgui.getCurrentWindowId(), 2) if self.isActive and bool(xbmc.getCondVisibility('Window.IsActive(%s)' % self.window_id)): return True else: return False def onInit(self): [definition='1','0']log[/definition]('OBC INIT: WINDOW ID: %s' % xbmcgui.getCurrentWindowId()) self.window_id = xbmcgui.getCurrentWindowId() [definition='1','0']log[/definition]('OBC: GUI Opening') self.isActive = True self.MAINLABEL = self.getControl(200) self.MAINLEFT = self.getControl(201) self.MAINRIGHT = self.getControl(202) self.IMAGE101 = self.getControl(101) self.IMAGE102 = self.getControl(102) self.IMAGE103 = self.getControl(103) self.IMAGE104 = self.getControl(104) self.IMAGE105 = self.getControl(105) self.IMAGE106 = self.getControl(106) self.IMAGE107 = self.getControl(107) self.IMAGE108 = self.getControl(108) self.BUTTON111 = self.getControl(111) self.BUTTON112 = self.getControl(112) self.BUTTON113 = self.getControl(113) self.BUTTON114 = self.getControl(114) self.BUTTON115 = self.getControl(115) self.BUTTON116 = self.getControl(116) self.BUTTON117 = self.getControl(117) self.BUTTON118 = self.getControl(118) self.LABEL121 = self.getControl(121) self.LABEL122 = self.getControl(122) self.LABEL123 = self.getControl(123) self.LABEL124 = self.getControl(124) self.LABEL125 = self.getControl(125) self.LABEL126 = self.getControl(126) self.LABEL127 = self.getControl(127) self.LABEL128 = self.getControl(128) # Bottom Line self.LABEL211 = self.getControl(211) self.set_default_navigation() self.update() if self.updateTimer: self.updateTimer.cancel() self.updateTimer.join() self.updateTimer = RepeatTimer(1.000, self.update) self.updateTimer.start() set_property('IBUSCOMMUNICATOR_OBC_LOADED', '1') def onMouseLeftClick(self, controlId): [definition='1','0']log[/definition]('ONCLICK: %s' % controlId, 3) if controlId == 201: # left [definition='1','0']log[/definition]('event left') elif controlId == 202: # right [definition='1','0']log[/definition]('event right') elif 111 <= controlId <= 118: # Buttons [definition='1','0']log[/definition]('event select button') def onAction(self, Action): if Action in [self.ACTION_PREVIOUS_MENU, self.ACTION_CLOSE_DIALOG, self.ACTION_NAV_BACK, self.ACTION_BACKSPACE, self.ACTION_SHOW_FULLSCREEN]: self.onStop() if Action == self.ACTION_MOUSE_LEFT_CLICK: [definition='1','0']log[/definition]('MOUSE CLICKED') self.onMouseLeftClick(self.getFocusId()) return if Action == self.ACTION_MOVE_LEFT: # left [definition='1','0']log[/definition]('event left') elif Action == self.ACTION_MOVE_RIGHT: # right [definition='1','0']log[/definition]('event right') elif Action == self.ACTION_SELECT_ITEM: [definition='1','0']log[/definition]('event select') elif Action == self.ACTION_MOVE_UP: [definition='1','0']log[/definition]('event up') elif Action == self.ACTION_MOVE_DOWN: [definition='1','0']log[/definition]('event down') def onFocus(self, controlId): pass def onStop(self, close_window=True): [definition='1','0']log[/definition]('OBC: GUI Closing') self.isActive = False self.updateTimer.join() [definition='1','0']log[/definition]('Timers joined') if close_window: self.close() set_property('IBUSCOMMUNICATOR_OBC_LOADED', '0') def set_default_navigation(self): self.BUTTON111.setNavigation(self.BUTTON111, self.BUTTON112, self.BUTTON111, self.BUTTON111) self.BUTTON112.setNavigation(self.BUTTON111, self.BUTTON113, self.BUTTON112, self.BUTTON112) self.BUTTON113.setNavigation(self.BUTTON112, self.BUTTON114, self.BUTTON113, self.BUTTON113) self.BUTTON114.setNavigation(self.BUTTON113, self.BUTTON115, self.BUTTON114, self.BUTTON114) self.BUTTON115.setNavigation(self.BUTTON114, self.BUTTON116, self.BUTTON115, self.BUTTON115) self.BUTTON116.setNavigation(self.BUTTON115, self.BUTTON117, self.BUTTON116, self.BUTTON116) self.BUTTON117.setNavigation(self.BUTTON116, self.BUTTON118, self.BUTTON117, self.BUTTON117) self.BUTTON118.setNavigation(self.BUTTON117, self.BUTTON118, self.BUTTON118, self.BUTTON118) def update(self): # update your controls pass def [definition='1','0']log[/definition](string, level=1): xbmc.[definition='1','0']log[/definition]('IBUSCOMMUNICATOR: %s' % string, xbmc.LOGNOTICE) def note(heading, message=None, time=-1, icon=None): if time == -1: xbmcgui.Dialog().notification(heading='%s' % heading, message='%s' % message if message else ' ', icon='%s' % (icon if icon else ADDON_ICON)) else: xbmcgui.Dialog().notification(heading='%s' % heading, message='%s' % message if message else ' ', icon='%s' % (icon if icon else ADDON_ICON), time=time) [definition='1','0']log[/definition]('NOTIFICATION: "%s%s"' % (heading, ' - %s' % message if message else '')) def dialog_ok(label1, label2=None, label3=None): [definition='1','0']log[/definition]('DIALOG_OK: "%s%s%s"' % (label1, ' - %s' % label2 if label2 else '', ' - %s' % label3 if label3 else '')) xbmcgui.Dialog().ok(ADDON_NAME, label1, label2, label3) def dialog_yesno(label1, label2=None, label3=None, nolabel='', yeslabel='', autoclose=0): return xbmcgui.Dialog().yesno(ADDON_NAME, line1=label1, line2=label2, line3=label3, nolabel=nolabel, yeslabel=yeslabel, autoclose=autoclose) def get_addon_setting(id): setting = ADDON.getSetting(id) if setting.upper() == 'TRUE': return True if setting.upper() == 'FALSE': return False return '%s' % setting def set_addon_setting(id, value): if type(value) == 'bool': ADDON.setSetting(id, 'true' if value else 'false') else: ADDON.setSetting(id, '%s' % value) def get_property(property, id=10000): value = xbmcgui.Window(id).getProperty(property) return value def set_property(property, value, id=10000): xbmcgui.Window(id).setProperty(property, value) def clear_property(property, id=10000): xbmcgui.Window(id).clearProperty(property) def get_addon_string(id): return ADDON.getLocalizedString(id) def addon_skin_path(): current_skin_name = xbmc.getSkinDir() if os.path.exists(os.path.join(ADDON_PATH, 'resources', 'skins', current_skin_name)): return '%s' % current_skin_name else: return 'default' def text_color(text, color=None): if color: return '[COLOR %s]%s[/COLOR]' % (color, text) else: return text def main(): xbmc.[definition='1','0']log[/definition]('IBUSCOMMUNICATOR: Service Started', xbmc.LOGNOTICE) obc_gui = ObcGuiClass("OBC_SKIN.xml", ADDON_PATH, addon_skin_path(), '720p') obc_gui.doModal() xbmc.[definition='1','0']log[/definition]('IBUSCOMMUNICATOR: Service Stopped', xbmc.LOGNOTICE) if __name__ == '__main__': main()
-
ok, werds mal auf den pi testen. vllt. ist es dann ein windows problem.
-
am ende will ich es mal mit LibreElec oder OSMC parsen. windows ist erstmal nur das mittel zum zweck.
-
puh kein plan, ob man das überhaupt auf anderen platformen compiliert bekommt, auch wenn es die option pc gibt. hab es bisher nur für den rasp2/3 compiliert.
nein, es hat sich zwar über den ram drive gebessert, aber zum fahren immer noch zu viel verzögerung.
die beste lösung wäre, wenn man direkt ein bild aus der memory schreiben kann, ohne umweg mit abspeichern.
wenn man das video in kodi abspielen will, dann hat man eben das problem mit der aktuellen wiedergabe.
oder man kann irgendwie ein zusätzliches unabhängiges fenster einblenden. nur da weiß ich keine lösung.hatte mir mal paar links zur seite gelegt, aber hab das thema erstmal vernachlässigt.
http://computationalphoto.mlog.taik.fi/2011/01/31/a-q…n-using-pygame/ -
LE ist ein readonly system. zusätzliche programme / module kann man über die console nur schwer oder gar nicht installieren.
aber es soll etwas flüssiger laufen. -
Das geht leider nicht. weil man für die addon-settings keine controls verwendet.
-
ich mag LibreElec nicht. das ist nich open genug, obwohl es sich open source schimpft.
osmc ist da besser. -
ich hatte solch ein webcam addon mal für den pi umgeschrieben, um es für rearcam zu nutzen. war nur leider doch etwas zu träge.
http://www.bmwraspcontrol.de/board/showthread.php?tid=53 -
Jetzt muss ich mal noch zu String Contains fragen. Bekomme es irgendwie nicht hin.
folgendes nutze ich:Wenn ich mir den string anzeigen lasse, dann ist "Windows 7" enthalten, also sollte doch auch True zurück gegeben werden.
Will es für Addon settings nutzen. -
das hast du nicht ganz richtig verstanden.
da muss ich eine schritt zurück gehen. ich habe ein addon plugin.script.ibuscommunicator.
in dem habe ich das modul pyserial aktuell im ordner lib drin.
nun wollte ich dies aber gern extern haben.
also nun der weg über das modul script.module.pyserial.
da jetzt nun die abhängigkeiten fehlten, die mein addon benötigt, musste dies in der addon.xml zusätzlich importiert werden.
im script verwende ich ganz normal "import serial"jetzt läuft alles wieder, wie es soll, nur dass ich das pyserial modul nun outgesourct habe.
ps. import und from musst du tasuchen --> from bs4 import BeautifulSoup
-
hallo zusammen,
ich hoffe ich kann mein anliegen hier platzieren.
für mein addon habe ich ein zusatz modul erzeugt mit der source von pyserial.
lies sich auch installieren.
jedoch bekomme ich von mein addon trotzdem den fehler, dass serial nicht importiert werden kann.
muss da noch was zusätzlich eingestellt werden, vllt. in meiner addon.xml?edit:
wie vermutet, ich muss in die addon.xml auch das modul importieren.