def __init__(self): printDBG('M3U8Downloader.__init__ ----------------------------------') BaseDownloader.__init__(self) self.wgetStatus = self.WGET_STS.NONE # instance of E2 console self.console = eConsoleAppContainer() self.iptv_sys = None # M3U8 list updater self.M3U8Updater = eConsoleAppContainer() self.M3U8Updater_appClosed_conn = eConnectCallback( self.M3U8Updater.appClosed, self._updateM3U8Finished) self.M3U8Updater_stdoutAvail_conn = eConnectCallback( self.M3U8Updater.stdoutAvail, self._updateM3U8DataAvail) self.M3U8ListData = '' self.M3U8UpdaterRefreshDelay = 0 self.refreshDelay = M3U8Downloader.MIN_REFRESH_DELAY # get only last fragments from first list, to satisfy specified duration in seconds # -1 means, starts from beginning self.startLiveDuration = M3U8Downloader.LIVE_START_OFFSET # 0 means, starts from beginning self.skipFirstSegFromList = 0 self.addStampToUrl = False self.totalDuration = -1 self.downloadDuration = 0 self.fragmentDurationList = [] self.maxTriesAtStart = 0
def __init__(self, session, currDir, title="Directory browser"): printDBG("IPTVDirectorySelectorWidget.__init__ -------------------------------") Screen.__init__(self, session) self["key_red"] = Label(_("Cancel")) #self["key_yellow"] = Label(_("Odśwież")) self["key_blue"] = Label(_("New dir")) self["key_green"] = Label(_("Apply")) self["curr_dir"] = Label(_(" ")) self["list"] = IPTVDirBrowserList() self["FilelistActions"] = ActionMap(["SetupActions", "ColorActions"], { "green" : self.requestApply, "red" : self.requestCancel, "yellow": self.requestRefresh, "blue" : self.requestNewDir, "ok" : self.requestOk, "cancel": self.requestBack }) self.title = title self.onLayoutFinish.append(self.layoutFinished) self.onClose.append(self.__onClose) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self.refreshFinished) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self.refreshNewData) self.underRefreshing = False self.underClosing = False self.deferredAction = None self.currDir = currDir self.currList = [] self.tmpData = '' self.tmpList = []
def _startFragment(self, tryAgain=False): printDBG("_startFragment tryAgain[%r]" % tryAgain) self.outData = '' self.remoteFragmentSize = -1 self.remoteFragmentType = 'unknown' if 0 > self.localFileSize: self.m3u8_prevLocalFileSize = 0 else: self.m3u8_prevLocalFileSize = self.localFileSize ############################################################################## # frist download nextFragment conntent ############################################################################## self.downloadType = self.DOWNLOAD_TYPE.SEGMENT if None != self.console: self.console_appClosed_conn = None self.console_stderrAvail_conn = None #self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished ) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail ) if tryAgain and self.tries >= self.MAX_RETRIES: if not self.liveStream: return DMHelper.STS.INTERRUPTED else: # even if fragment is lost this is not big problem, download next one, # this is a live stream this can happen :) tryAgain = False currentFragment = None if False == tryAgain: self.tries = 0 if (self.currentFragment + 1) < len(self.fragmentList): self.currentFragment += 1 currentFragment = self.fragmentList[self.currentFragment] else: self.tries += 1 currentFragment = self.fragmentList[self.currentFragment] if None != currentFragment: self.wgetStatus = self.WGET_STS.CONNECTING cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=1 --timeout=%d ' % self._getTimeout()) + '"' + currentFragment + '" -O - >> "' + self.filePath + '"' printDBG("Download cmd[%s]" % cmd) self.console.execute( E2PrioFix( cmd ) ) #with open("/home/sulge/tmp/m3u8.txt", "a") as myfile: #with open("/hdd/dbg_m3u8.txt", "a") as myfile: # myfile.write(currentFragment+"\n") return DMHelper.STS.DOWNLOADING else: if self.liveStream: # we are in live so wait for new fragments printDBG("m3u8 downloader - wait for new fragments ----------------------------------------------------------------") self.downloadType = self.DOWNLOAD_TYPE.WAITTING self.console.execute( E2PrioFix( "sleep 2" ) ) return DMHelper.STS.DOWNLOADING else: return DMHelper.STS.DOWNLOADED
def start(self, url, filePath, params = {}): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future if 'ustream.tv' in url: self.streamSelector = strwithmeta(url).meta.get('iptv_chank_url', '') else: self.streamSelector = strwithmeta(url).meta.get('iptv_bitrate', 0) self.outData = '' self.contentType = 'unknown' baseWgetCmd = DMHelper.getBaseWgetCmd(self.downloaderParams) cmd = DMHelper.GET_F4M_PATH() + (" '%s'" % baseWgetCmd) + (' "%s"' % self.url) + (' "%s"' % self.filePath) + (' %s' % self.streamSelector) + ' > /dev/null' printDBG("F4mDownloader::start cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail) self.console.execute( cmd ) self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def startExecution(self): login = config.plugins.iptvplayer.myjd_login.value password = config.plugins.iptvplayer.myjd_password.value jdname = config.plugins.iptvplayer.myjd_jdname.value captcha = { 'siteKey': self.sitekey, 'sameOrigin': True, 'siteUrl': self.referer, 'contextUrl': '/'.join(self.referer.split('/')[:3]), 'boundToDomain': True, 'stoken': None } try: captcha = base64.b64encode(json.dumps(captcha)) except Exception: printExc() if getDebugMode() == '': debug = 0 else: debug = 1 cmd = GetPyScriptCmd('fakejd') + ' "%s" "%s" "%s" "%s" "%s" %d' % ( GetPluginDir('libs/'), login, password, jdname, captcha, debug) self["console"].setText(_('JDownloader script execution')) self.workconsole['console'] = eConsoleAppContainer() self.workconsole['close_conn'] = eConnectCallback( self.workconsole['console'].appClosed, self._scriptClosed) self.workconsole['stderr_conn'] = eConnectCallback( self.workconsole['console'].stderrAvail, self._scriptStderrAvail) self.workconsole['stdout_conn'] = eConnectCallback( self.workconsole['console'].stdoutAvail, self._scriptStdoutAvail) self.workconsole["console"].execute(E2PrioFix(cmd, 0)) printDBG(">>> EXEC CMD [%s]" % cmd)
def start(self, url, filePath, params={}): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future self.outData = '' self.contentType = 'unknown' cmd = "python " + DMHelper.GET_PWGET_PATH( ) + ' "' + self.url + '" "' + self.filePath + '" > /dev/null' printDBG("Download cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback( self.console.stderrAvail, self._dataAvail) self.console.execute(E2PrioFix(cmd)) self.wgetStatus = self.WGET_STS.CONNECTING self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def __init__(self): printDBG('M3U8Downloader.__init__ ----------------------------------') BaseDownloader.__init__(self) self.wgetStatus = self.WGET_STS.NONE # instance of E2 console self.console = eConsoleAppContainer() self.iptv_sys = None # M3U8 list updater self.M3U8Updater = eConsoleAppContainer() self.M3U8Updater_appClosed_conn = eConnectCallback(self.M3U8Updater.appClosed, self._updateM3U8Finished) self.M3U8Updater_stdoutAvail_conn = eConnectCallback(self.M3U8Updater.stdoutAvail, self._updateM3U8DataAvail) self.M3U8ListData = '' self.M3U8UpdaterRefreshDelay = 0 self.refreshDelay = M3U8Downloader.MIN_REFRESH_DELAY # get only last fragments from first list, to satisfy specified duration in seconds # -1 means, starts from beginning self.startLiveDuration = M3U8Downloader.LIVE_START_OFFSET # 0 means, starts from beginning self.skipFirstSegFromList = 0 self.addStampToUrl = False self.totalDuration = -1 self.downloadDuration = 0 self.fragmentDurationList = []
def start(self, url, filePath, params={}, info_from=None, retries=0): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future self.outData = '' self.contentType = 'unknown' if None == info_from: info_from = WgetDownloader.INFO.FROM_FILE self.infoFrom = info_from cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + ( ' --progress=dot:default -t %d ' % retries ) + '"' + self.url + '" -O "' + self.filePath + '" > /dev/null' printDBG("Download cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback( self.console.stderrAvail, self._dataAvail) self.console.execute(cmd) self.wgetStatus = self.WGET_STS.CONNECTING self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def start(self, url, filePath, params={}): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future if 'ustream.tv' in url: self.streamSelector = strwithmeta(url).meta.get('iptv_chank_url', '') else: self.streamSelector = strwithmeta(url).meta.get('iptv_bitrate', 0) self.outData = '' self.contentType = 'unknown' baseWgetCmd = DMHelper.getBaseWgetCmd(self.downloaderParams) cmd = DMHelper.GET_F4M_PATH() + (" '%s'" % baseWgetCmd) + (' "%s"' % self.url) + (' "%s"' % self.filePath) + (' %s' % self.streamSelector) + ' > /dev/null' printDBG("F4mDownloader::start cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail) self.console.execute(E2PrioFix(cmd)) self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def onStart(self): self.onLayoutFinish.remove(self.onStart) self['progressBar'].value = 0 self['bufferingBar'].range = (0, 100000) self['bufferingBar'].value = 0 self.initGuiComponentsPos() if 'gstplayer' == self.player: gstplayerPath = config.plugins.iptvplayer.gstplayerpath.value #'export GST_DEBUG="*:6" &&' + cmd = gstplayerPath + ' "%s"' % self.fileSRC if "://" in self.fileSRC: cmd += ' "%s" "%s" "%s" "%s" ' % (self.gstAdditionalParams['download-buffer-path'], self.gstAdditionalParams['ring-buffer-max-size'], self.gstAdditionalParams['buffer-duration'], self.gstAdditionalParams['buffer-size']) tmp = strwithmeta(self.fileSRC) url,httpParams = DMHelper.getDownloaderParamFromUrl(tmp) for key in httpParams: cmd += (' "%s=%s" ' % (key, httpParams[key]) ) if 'http_proxy' in tmp.meta: tmp = tmp.meta['http_proxy'] if '://' in tmp: if '@' in tmp: tmp = re.search('([^:]+?://)([^:]+?):([^@]+?)@(.+?)$', tmp) if tmp: cmd += (' "proxy=%s" "proxy-id=%s" "proxy-pw=%s" ' % (tmp.group(1)+tmp.group(4), tmp.group(2), tmp.group(3)) ) else: cmd += (' "proxy=%s" ' % tmp) else: cmd = 'exteplayer3 "%s"' % self.fileSRC + " > /dev/null" self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self.eplayer3Finished) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self.eplayer3DataAvailable) #if 'gstplayer' == self.player: # self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self.eplayer3DataAvailable2 ) # work around to catch EOF event after seeking, pause .etc printDBG("onStart cmd[%s]" % cmd) self.console.execute( cmd ) self['statusIcon'].setPixmap( self.playback['statusIcons']['Play'] ) # sulge for test
def start(self, url, filePath, params = {}): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future self.outData = '' self.contentType = 'unknown' cmd = "python " + DMHelper.GET_PWGET_PATH() + ' "' + self.url + '" "' + self.filePath + '" > /dev/null' printDBG("Download cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail) self.console.execute( cmd ) self.wgetStatus = self.WGET_STS.CONNECTING self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def start(self, url, filePath, params = {}, info_from=None, retries=0): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future self.outData = '' self.contentType = 'unknown' if None == info_from: info_from = WgetDownloader.INFO.FROM_FILE self.infoFrom = info_from if self.infoFrom == WgetDownloader.INFO.FROM_DOTS: info = "--progress=dot:default" else: info = "" cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' %s -t %d ' % (info, retries)) + '"' + self.url + '" -O "' + self.filePath + '" > /dev/null' printDBG("Download cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail) self.console.execute( E2PrioFix( cmd ) ) self.wgetStatus = self.WGET_STS.CONNECTING self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def start(self, url, filePath, params = {}): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future self.outData = '' self.contentType = 'unknown' # baseWgetCmd = DMHelper.getBaseWgetCmd(self.downloaderParams) # TODO: add all HTTP parameters addParams = '' meta = strwithmeta(url).meta if 'iptv_m3u8_key_uri_replace_old' in meta and 'iptv_m3u8_key_uri_replace_new' in meta: addParams = ' -k "%s" -n "%s" ' % (meta['iptv_m3u8_key_uri_replace_old'], meta['iptv_m3u8_key_uri_replace_new']) cmd = DMHelper.getBaseHLSDLCmd(self.downloaderParams) + (' "%s"' % self.url) + addParams + (' -o "%s"' % self.filePath) + ' > /dev/null' printDBG("HLSDownloader::start cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail) self.console.execute( E2PrioFix( cmd ) ) self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def doStartDownload(self): self.outData = '' self.contentType = 'unknown' filePath = self.multi['files'][self.currIdx] url = self.multi['urls'][self.currIdx] info = "" retries = 0 cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + ( ' %s -t %d ' % (info, retries) ) + '"' + url + '" -O "' + filePath + '" > /dev/null' printDBG("doStartDownload cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback( self.console.stderrAvail, self._dataAvail) self.console.execute(E2PrioFix(cmd)) self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def _startFragment(self, tryAgain=False): printDBG("_startFragment tryAgain[%r]" % tryAgain) self.outData = '' self.remoteFragmentSize = -1 self.remoteFragmentType = 'unknown' if 0 > self.localFileSize: self.m3u8_prevLocalFileSize = 0 else: self.m3u8_prevLocalFileSize = self.localFileSize ############################################################################## # frist download nextFragment conntent ############################################################################## self.downloadType = self.DOWNLOAD_TYPE.SEGMENT if None != self.console: self.console_appClosed_conn = None self.console_stderrAvail_conn = None #self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished ) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail ) if tryAgain and self.tries >= self.MAX_RETRIES: if not self.liveStream: return DMHelper.STS.INTERRUPTED else: # even if fragment is lost this is not big problem, download next one, # this is a live stream this can happen :) tryAgain = False currentFragment = None if False == tryAgain: self.tries = 0 if (self.currentFragment + 1) < len(self.fragmentList): self.currentFragment += 1 currentFragment = self.fragmentList[self.currentFragment] else: self.tries += 1 currentFragment = self.fragmentList[self.currentFragment] if None != currentFragment: self.wgetStatus = self.WGET_STS.CONNECTING cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=1 --timeout=%d ' % self._getTimeout()) + '"' + currentFragment + '" -O - >> "' + self.filePath + '"' printDBG("Download cmd[%s]" % cmd) self.console.execute( cmd ) #with open("/home/sulge/tmp/m3u8.txt", "a") as myfile: # myfile.write(currentFragment+"\n") return DMHelper.STS.DOWNLOADING else: if self.liveStream: # we are in live so wait for new fragments printDBG("m3u8 downloader - wait for new fragments ----------------------------------------------------------------") self.downloadType = self.DOWNLOAD_TYPE.WAITTING self.console.execute( "sleep 2" ) return DMHelper.STS.DOWNLOADING else: return DMHelper.STS.DOWNLOADED
def __init__(self, session, downloadmanager): self.session = session Screen.__init__(self, session) self.currentService = self.session.nav.getCurrentlyPlayingServiceReference( ) self.session.nav.event.append(self.__event) self["key_red"] = StaticText(_("Stop")) self["key_green"] = StaticText(_("Start")) self["key_yellow"] = StaticText(_("Archive")) self["key_blue"] = StaticText(_("Downloads")) self["list"] = IPTVDownloadManagerList() self["list"].connectSelChanged(self.onSelectionChanged) self["actions"] = ActionMap( ["WizardActions", "DirectionActions", "ColorActions"], { "ok": self.ok_pressed, "back": self.back_pressed, "red": self.red_pressed, "green": self.green_pressed, "yellow": self.yellow_pressed, "blue": self.blue_pressed, }, -1) self["titel"] = Label() self.DM = downloadmanager self.DM.connectListChanged(self.onListChanged) self.DM.setUpdateProgress(True) self.setManagerStatus() self.started = 0 global gIPTVDM_listChanged gIPTVDM_listChanged = True self.onClose.append(self.__onClose) self.onShow.append(self.onStart) #main Timer to refresh liar self.mainTimer = eTimer() self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.reloadList) # every 500ms Proxy Queue will be checked self.mainTimer.start(500) self.localMode = False self.localFiles = [] self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self.refreshFinished) self.console_stderrAvail_conn = eConnectCallback( self.console.stderrAvail, self.refreshNewData) self.underRefreshing = False self.iptvclosing = False self.currList = []
def __init__(self, session, downloadmanager): self.session = session Screen.__init__(self, session) self.currentService = self.session.nav.getCurrentlyPlayingServiceReference() self.session.nav.event.append(self.__event) self["key_red"] = StaticText(_("Stop")) self["key_green"] = StaticText(_("Start")) self["key_yellow"] = StaticText(_("Archive")) self["key_blue"] = StaticText(_("Downloads")) self["list"] = IPTVDownloadManagerList() self["list"].connectSelChanged(self.onSelectionChanged) self["actions"] = ActionMap( ["WizardActions", "DirectionActions", "ColorActions"], { "ok": self.ok_pressed, "back": self.back_pressed, "red": self.red_pressed, "green": self.green_pressed, "yellow": self.yellow_pressed, "blue": self.blue_pressed, }, -1, ) self["titel"] = Label() self.DM = downloadmanager self.DM.connectListChanged(self.onListChanged) self.DM.setUpdateProgress(True) self.setManagerStatus() self.started = 0 global gIPTVDM_listChanged gIPTVDM_listChanged = True self.onClose.append(self.__onClose) self.onShow.append(self.onStart) # main Timer to refresh liar self.mainTimer = eTimer() self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.reloadList) # every 500ms Proxy Queue will be checked self.mainTimer.start(500) self.localMode = False self.localFiles = [] self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self.refreshFinished) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self.refreshNewData) self.underRefreshing = False self.iptvclosing = False self.currList = []
def _startM3U8(self, m3u8Url): self.m3u8Url = m3u8Url self.outData = '' ############################################################################## # frist download m3u8 conntent ############################################################################## self.downloadType = self.DOWNLOAD_TYPE.M3U8 m3u8Url = self._addTimeStampToUrl( self.m3u8Url ) cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=0 --timeout=%d ' % self._getTimeout()) + '"' + m3u8Url + '" -O - 2> /dev/null' printDBG("Download cmd[%s]" % cmd) self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished ) self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self._dataAvail ) self.console.execute( E2PrioFix( cmd ) )
def __init__(self, session, currDir, title="Directory browser"): printDBG( "IPTVDirectorySelectorWidget.__init__ -------------------------------" ) Screen.__init__(self, session) if isinstance(self, IPTVDirectorySelectorWidget): self["key_red"] = Label(_("Cancel")) #self["key_yellow"] = Label(_("Odśwież")) self["key_blue"] = Label(_("New dir")) self["key_green"] = Label(_("Apply")) self["curr_dir"] = Label(_(" ")) self["list"] = IPTVDirBrowserList() self["FilelistActions"] = ActionMap( ["ColorActions", "SetupActions"], { "red": self.requestCancel, "green": self.requestApply, "yellow": self.requestRefresh, "blue": self.requestNewDir, "ok": self.requestOk, "cancel": self.requestBack }) self.title = title self.onLayoutFinish.append(self.layoutFinished) self.onClose.append(self.__onClose) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self.refreshFinished) self.console_stderrAvail_conn = eConnectCallback( self.console.stderrAvail, self.refreshNewData) self.underRefreshing = False self.underClosing = False self.deferredAction = None try: while not os_path.isdir(currDir): tmp = os_path.dirname(currDir) if tmp == currDir: break currDir = tmp except Exception: currDir = '' printExc() self.currDir = currDir self.currList = [] self.tmpData = '' self.tmpList = []
def _startM3U8(self, wait=0): self.outData = '' ############################################################################## # frist download m3u8 conntent ############################################################################## self.downloadType = self.DOWNLOAD_TYPE.M3U8 m3u8Url = self._addTimeStampToUrl( self.m3u8Url ) cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=0 --timeout=%d ' % self._getTimeout()) + '"' + m3u8Url + '" -O ' if wait > 0: cmd = (' sleep %s && ' % wait) + cmd printDBG("Download cmd[%s]" % cmd) self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished ) self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self._dataAvail ) self.console.execute( E2PrioFix( cmd ) )
def start(self, url, filePath, params={}): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future self.outData = '' self.contentType = 'unknown' # baseWgetCmd = DMHelper.getBaseWgetCmd(self.downloaderParams) # TODO: add all HTTP parameters addParams = '' meta = strwithmeta(url).meta if 'iptv_m3u8_key_uri_replace_old' in meta and 'iptv_m3u8_key_uri_replace_new' in meta: addParams = ' -k "%s" -n "%s" ' % ( meta['iptv_m3u8_key_uri_replace_old'], meta['iptv_m3u8_key_uri_replace_new']) if 'iptv_m3u8_seg_download_retry' in meta: addParams += ' -w %s ' % meta['iptv_m3u8_seg_download_retry'] if self.url.startswith("merge://"): try: urlsKeys = self.url.split('merge://', 1)[1].split('|') url = meta[urlsKeys[-1]] addParams += ' -a "%s" ' % meta[urlsKeys[0]] except Exception: printExc() else: url = self.url cmd = DMHelper.getBaseHLSDLCmd(self.downloaderParams) + ( ' "%s"' % url) + addParams + (' -o "%s"' % self.filePath) printDBG("HLSDownloader::start cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback( self.console.stderrAvail, self._dataAvail) self.console.execute(E2PrioFix(cmd)) self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def __init__(self): printDBG('EM3U8Downloader.__init__ ----------------------------------') HLSDownloader.__init__(self) # M3U8list link provider self.EM3U8linkProv = eConsoleAppContainer() self.EM3U8linkProv_appClosed_conn = eConnectCallback(self.EM3U8linkProv.appClosed, self._updateEM3U8Finished) #self.EM3U8linkProv_stdoutAvail_conn = eConnectCallback(self.EM3U8linkProv.stdoutAvail, self._updateEM3U8DataAvail) self.EM3U8linkProv_stderrAvail_conn = eConnectCallback(self.EM3U8linkProv.stderrAvail, self._updateEM3U8DataAvail) self.EM3U8ListData = '' self.em3u8Started = False self.em3u8_url = '' self.em3u8_filePath = '' self.em3i8_params = {}
def _startM3U8(self, m3u8Url): self.m3u8Url = m3u8Url self.outData = '' ############################################################################## # frist download m3u8 conntent ############################################################################## self.downloadType = self.DOWNLOAD_TYPE.M3U8 m3u8Url = self.m3u8Url if '?' in m3u8Url: m3u8Url += '&iptv_stamp=' else: m3u8Url += '?iptv_stamp=' m3u8Url += ('%s' % time()) cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' --tries=0 --timeout=%d ' % self._getTimeout()) + '"' + m3u8Url + '" -O - 2> /dev/null' printDBG("Download cmd[%s]" % cmd) self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished ) self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self._dataAvail ) self.console.execute( cmd )
def start(self, callback): if self.workThread == None: self.workThread = AsyncMethod(self._process)(self.provider) self.callback = callback self.timer_conn = eConnectCallback(self.timer.timeout, self._poll) return True return False
def start(self, uri, mode='loop'): self.uri = uri self.playMode = mode #'export GST_DEBUG="*:6" &&' + cmd = '/usr/bin/gstplayer' + ' "%s"' % self.uri if "://" in self.uri: cmd += ' "%s" "%s" "%s" "%s" ' % (self.gstAdditionalParams['download-buffer-path'], self.gstAdditionalParams['ring-buffer-max-size'], self.gstAdditionalParams['buffer-duration'], self.gstAdditionalParams['buffer-size']) tmp = strwithmeta(self.uri) url, httpParams = DMHelper.getDownloaderParamFromUrl(tmp) for key in httpParams: cmd += (' "%s=%s" ' % (key, httpParams[key])) if 'http_proxy' in tmp.meta: tmp = tmp.meta['http_proxy'] if '://' in tmp: if '@' in tmp: tmp = re.search('([^:]+?://)([^:]+?):([^@]+?)@(.+?)$', tmp) if tmp: cmd += (' "proxy=%s" "proxy-id=%s" "proxy-pw=%s" ' % (tmp.group(1) + tmp.group(4), tmp.group(2), tmp.group(3))) else: cmd += (' "proxy=%s" ' % tmp) else: cmd = 'exteplayer3 "%s"' % self.uri + " > /dev/null" self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._playerFinished) printDBG("IPTVSimpleAudioPlayer.start cmd[%s]" % cmd) self.console.execute(E2PrioFix(cmd)) self.stopped = False
def __init__(self, session, title, sitekey, referer): self.session = session Screen.__init__(self, session) self.sitekey = sitekey self.referer = referer sz_w = 504 #getDesktop(0).size().width() - 190 sz_h = 300 #getDesktop(0).size().height() - 195 if sz_h < 500: sz_h += 4 self.skin = """ <screen position="center,center" title="%s" size="%d,%d"> <ePixmap position="5,9" zPosition="4" size="30,30" pixmap="%s" transparent="1" alphatest="on" /> <widget name="label_red" position="45,9" zPosition="5" size="175,27" valign="center" halign="left" backgroundColor="black" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" /> <widget name="title" position="5,47" zPosition="1" size="%d,23" font="Regular;20" transparent="1" backgroundColor="#00000000"/> <widget name="console" position="10,%d" zPosition="2" size="%d,160" valign="center" halign="center" font="Regular;24" transparent="0" foregroundColor="white" backgroundColor="black"/> </screen>""" % ( title, sz_w, sz_h, # size GetIconDir('red' + '.png'), sz_w - 135, # size title (sz_h - 160) / 2, sz_w - 20, # console ) self.onShown.append(self.onStart) self.onClose.append(self.__onClose) self["title"] = Label(" ") self["console"] = Label(" ") self["label_red"] = Label(_("Cancel")) self["actions"] = ActionMap( [ "ColorActions", "SetupActions", "WizardActions", "ListboxActions" ], { "cancel": self.keyExit, #"ok" : self.keyOK, "red": self.keyRed, }, -2) self.workconsole = { 'console': None, 'close_conn': None, 'stderr_conn': None, 'stdout_conn': None, 'stderr': '', 'stdout': '' } self.result = '' self.timer = {'timer': eTimer(), 'is_started': False} self.timer['callback_conn'] = eConnectCallback( self.timer['timer'].timeout, self._timoutCallback) self.errorCodeSet = False
def start(self, uri, mode='loop'): self.uri = uri self.playMode = mode gstplayerPath = config.plugins.iptvplayer.gstplayerpath.value #'export GST_DEBUG="*:6" &&' + cmd = gstplayerPath + ' "%s"' % self.uri if "://" in self.uri: cmd += ' "%s" "%s" "%s" "%s" ' % (self.gstAdditionalParams['download-buffer-path'], self.gstAdditionalParams['ring-buffer-max-size'], self.gstAdditionalParams['buffer-duration'], self.gstAdditionalParams['buffer-size']) tmp = strwithmeta(self.uri) url,httpParams = DMHelper.getDownloaderParamFromUrl(tmp) for key in httpParams: cmd += (' "%s=%s" ' % (key, httpParams[key]) ) if 'http_proxy' in tmp.meta: tmp = tmp.meta['http_proxy'] if '://' in tmp: if '@' in tmp: tmp = re.search('([^:]+?://)([^:]+?):([^@]+?)@(.+?)$', tmp) if tmp: cmd += (' "proxy=%s" "proxy-id=%s" "proxy-pw=%s" ' % (tmp.group(1)+tmp.group(4), tmp.group(2), tmp.group(3)) ) else: cmd += (' "proxy=%s" ' % tmp) else: cmd = 'exteplayer3 "%s"' % self.uri + " > /dev/null" self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._playerFinished) printDBG("IPTVSimpleAudioPlayer.start cmd[%s]" % cmd) self.console.execute( cmd ) self.stopped = False
def __init__(self, refreshDelay=2, parallelDownloadNum=1, finishNotifyCallback=None): self.running = False self.downloadIdx = 0 self.downloading = False self.updateProgress = False self.sleepDelay = refreshDelay #self.currDMItem = None # under download queue self.queueUD = [] self.MAX_DOWNLOAD_ITEM = parallelDownloadNum # already downloaded self.queueAA = [] # waiting for download queue self.queueDQ = [] self.onlistChanged = [] #main Queue self.mainTimer = eTimer() self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.processDQ) self.finishNotifyCallback = finishNotifyCallback return
def start(self, url, filePath, params = {}, info_from=None, retries=0): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future self.outData = '' self.contentType = 'unknown' if None == info_from: info_from = WgetDownloader.INFO.FROM_FILE self.infoFrom = info_from cmd = 'wget ' + '"' + self.url + '" -O "' + self.filePath + '" > /dev/null' printDBG("Download cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console.execute( cmd ) self.wgetStatus = self.WGET_STS.CONNECTING self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def decodeCover(self, filename, callBackFun, ident): printDBG("_______________decodeCover") #checking if decoding is needed self.waitIcon = { "CallBackFun": callBackFun, "FileName": filename, "Ident": ident } if filename != self.currIcon.get('FileName', ''): if not self.paramsSet: self.picload.setPara((self.instance.size().width(), self.instance.size().height(), 1, 1, False, 1, "#00000000")) self.paramsSet = True if not self.decoding: printDBG("_______________start decodeCover") self.decoding = True prevIcon = self.currIcon self.currIcon = self.waitIcon self.waitIcon = {} self.picload_conn = eConnectCallback(self.picload.PictureData, self.decodeCallBack) ret = self.picload.startDecode(filename) if ret != 0: printDBG("_______________error start decodeCover[%d]" % ret) self.picload_conn = None self.decoding = False self.currIcon = prevIcon return -1 return True else: printDBG("___________________________decodeCover not need (%s)" % filename) return False
def onStart(self): self.onLayoutFinish.remove(self.onStart) self['progressBar'].value = 0 self['bufferingBar'].range = (0, 100000) self['bufferingBar'].value = 0 self.initGuiComponentsPos() if 'gstplayer' == self.player: gstplayerPath = config.plugins.iptvplayer.gstplayerpath.value #'export GST_DEBUG="*:6" &&' + cmd = gstplayerPath + ' "%s"' % self.fileSRC if "://" in self.fileSRC: cmd += ' "%s" "%s" "%s" "%s" ' % ( self.gstAdditionalParams['download-buffer-path'], self.gstAdditionalParams['ring-buffer-max-size'], self.gstAdditionalParams['buffer-duration'], self.gstAdditionalParams['buffer-size']) tmp = strwithmeta(self.fileSRC) url, httpParams = DMHelper.getDownloaderParamFromUrl(tmp) for key in httpParams: cmd += (' "%s=%s" ' % (key, httpParams[key])) if 'http_proxy' in tmp.meta: tmp = tmp.meta['http_proxy'] if '://' in tmp: if '@' in tmp: tmp = re.search( '([^:]+?://)([^:]+?):([^@]+?)@(.+?)$', tmp) if tmp: cmd += ( ' "proxy=%s" "proxy-id=%s" "proxy-pw=%s" ' % (tmp.group(1) + tmp.group(4), tmp.group(2), tmp.group(3))) else: cmd += (' "proxy=%s" ' % tmp) else: cmd = 'exteplayer3 "%s"' % self.fileSRC + " > /dev/null" self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self.eplayer3Finished) self.console_stderrAvail_conn = eConnectCallback( self.console.stderrAvail, self.eplayer3DataAvailable) #if 'gstplayer' == self.player: # self.console_stdoutAvail_conn = eConnectCallback(self.console.stdoutAvail, self.eplayer3DataAvailable2 ) # work around to catch EOF event after seeking, pause .etc printDBG("onStart cmd[%s]" % cmd) self.console.execute(cmd) self['statusIcon'].setPixmap( self.playback['statusIcons']['Play']) # sulge for test
def updateIcon(self, filename): if not self.paramsSet: self.picload.setPara((self.instance.size().width(), self.instance.size().height(), 1, 1, False, 1, "#00000000")) self.paramsSet = True self.picload_conn = eConnectCallback(self.picload.PictureData, self.paintIconPixmapCB) ret = self.picload.startDecode(filename) if ret != 0: self.picload_conn = None
def __init__(self, session, url, pathForRecordings, movieTitle, activMoviePlayer, requestedBuffSize, playerAdditionalParams={}): self.session = session Screen.__init__(self, session) self.onStartCalled = False self.recordingPath = pathForRecordings self.filePath = pathForRecordings + '/.iptv_buffering.flv' self.url = url self.movieTitle = movieTitle self.currentService = self.session.nav.getCurrentlyPlayingServiceReference( ) self.activMoviePlayer = activMoviePlayer self.onClose.append(self.__onClose) #self.onLayoutFinish.append(self.doStart) self.onShow.append(self.onWindowShow) #self.onHide.append(self.onWindowHide) self["actions"] = ActionMap( ["WizardActions", "MoviePlayerActions"], { "ok": self.ok_pressed, "back": self.back_pressed, "leavePlayer": self.back_pressed, }, -1) self["console"] = Label() self["percentage"] = Label() self["icon"] = SimpleAnimatedCover() # prepare icon frames path frames = [] for idx in range(1, self.NUM_OF_ICON_FRAMES + 1): frames.append( resolveFilename( SCOPE_PLUGINS, 'Extensions/IPTVPlayer/icons/buffering/buffering_%d.png' % idx)) self["icon"].loadFrames(frames) self.inMoviePlayer = False self.canRunMoviePlayer = False # used in function updateDisplay, so must be first initialized #main Timer self.mainTimer = eTimer() self.mainTimerEnabled = False self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.updateDisplay) self.mainTimerInterval = 1000 # by default 1s self.requestedBuffSize = requestedBuffSize self.playerAdditionalParams = playerAdditionalParams
def doStartPostProcess(self): cmd = DMHelper.GET_FFMPEG_PATH() + ' ' for item in self.multi['files']: cmd += ' -i "{0}" '.format(item) cmd += ' -map 0:0 -map 1:0 -vcodec copy -acodec copy "{0}" >/dev/null 2>&1 '.format(self.filePath) printDBG("doStartPostProcess cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console.execute( E2PrioFix( cmd ) )
def doStartPostProcess(self): cmd = 'ffmpeg ' for item in self.multi['files']: cmd += ' -i "{0}" '.format(item) cmd += ' -map 0:0 -map 1:0 -vcodec copy -acodec copy "{0}" >/dev/null 2>&1 '.format(self.filePath) printDBG("doStartPostProcess cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console.execute( E2PrioFix( cmd ) )
def __init__(self): printDBG('EM3U8Downloader.__init__ ----------------------------------') M3U8Downloader.__init__(self) # M3U8list link provider self.EM3U8linkProv = eConsoleAppContainer() self.EM3U8linkProv_appClosed_conn = eConnectCallback(self.EM3U8linkProv.appClosed, self._updateEM3U8Finished) #self.EM3U8linkProv_stdoutAvail_conn = eConnectCallback(self.EM3U8linkProv.stdoutAvail, self._updateEM3U8DataAvail) self.EM3U8linkProv_stderrAvail_conn = eConnectCallback(self.EM3U8linkProv.stderrAvail, self._updateEM3U8DataAvail ) self.EM3U8ListData = '' self.em3u8Started = False self.em3u8_url = '' self.em3u8_filePath = '' self.em3i8_params = {} self.maxTriesAtStart = 12
def start(self, url, filePath, params={}, info_from=None, retries=0): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future self.outData = '' self.contentType = 'unknown' if None == info_from: info_from = WgetDownloader.INFO.FROM_FILE self.infoFrom = info_from if self.infoFrom == WgetDownloader.INFO.FROM_DOTS: info = "--progress=dot:default" else: info = "" # remove file if exists if fileExists(self.filePath): rm(self.filePath) self.downloadCmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + ( ' %s -t %d ' % (info, retries)) + '"' + self.url + '" -O "' + self.filePath + '"' printDBG("Download cmd[%s]" % self.downloadCmd) if self.downloaderParams.get('iptv_wget_continue', False): self.maxContinueRetry = 3 self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback( self.console.stderrAvail, self._dataAvail) self.console.execute(E2PrioFix(self.downloadCmd)) self.wgetStatus = self.WGET_STS.CONNECTING self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def __init__(self, session, url, pathForRecordings, pictureTitle): self.session = session Screen.__init__(self, session) self.onStartCalled = False self.recordingPath = pathForRecordings try: self.filePath = os.path.join(pathForRecordings, '.iptv_buffering.jpg') except: self.filePath = '' printExc() self.url = url self.pictureTitle = pictureTitle self.audioUrl = strwithmeta(url).meta.get("iptv_audio_url", '') self["actions"] = ActionMap(['IPTVAlternateVideoPlayer', 'MoviePlayerActions', 'MediaPlayerActions', 'WizardActions', 'DirectionActions'], { 'leavePlayer' : self.key_exit, 'play' : self.key_play, 'pause' : self.key_pause, 'exit' : self.key_exit, 'back' : self.key_exit, 'ok' : self.key_ok, }, -1) self["status"] = Label() self["console"] = Label() self["icon"] = SimpleAnimatedCover() self["picture"] = Cover() # prepare icon frames path frames = [] for idx in range(1,self.NUM_OF_ICON_FRAMES+1): frames.append( GetIconDir('/buffering/buffering_%d.png' % idx) ) self["icon"].loadFrames(frames) #main Timer self.mainTimer = eTimer() self.mainTimerEnabled = False self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.updateDisplay) self.mainTimerInterval = 100 # by default 0,1s # download self.downloader = DownloaderCreator(self.url) self.onClose.append(self.__onClose) self.onShow.append(self.doStart) #self.onLayoutFinish.append(self.doStart) self.autoRefresh = False self.refreshPostfixes = ['_0', '_1'] self.refreshCount = 0 self.refreshing = False if len(self.audioUrl) and len(config.plugins.iptvplayer.gstplayerpath.value): self.audioPlayer = IPTVSimpleAudioPlayer() else: self.audioPlayer = None
def __init__(self, session, url, pathForRecordings, pictureTitle): self.session = session Screen.__init__(self, session) self.onStartCalled = False self.recordingPath = pathForRecordings try: self.filePath = os.path.join(pathForRecordings, '.iptv_buffering.jpg') except: self.filePath = '' printExc() self.url = url self.pictureTitle = pictureTitle self.audioUrl = strwithmeta(url).meta.get("iptv_audio_url", '') self["actions"] = ActionMap(['IPTVAlternateVideoPlayer', 'MoviePlayerActions', 'MediaPlayerActions', 'WizardActions', 'DirectionActions'], { 'leavePlayer' : self.key_exit, 'play' : self.key_play, 'pause' : self.key_pause, 'exit' : self.key_exit, 'back' : self.key_exit, 'ok' : self.key_ok, }, -1) self["status"] = Label() self["console"] = Label() self["icon"] = SimpleAnimatedCover() self["picture"] = Cover() # prepare icon frames path frames = [] for idx in range(1,self.NUM_OF_ICON_FRAMES+1): frames.append( GetIconDir('/buffering/buffering_%d.png' % idx) ) self["icon"].loadFrames(frames) #main Timer self.mainTimer = eTimer() self.mainTimerEnabled = False self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.updateDisplay) self.mainTimerInterval = 100 # by default 0,1s # download self.downloader = DownloaderCreator(self.url) self.onClose.append(self.__onClose) self.onLayoutFinish.append(self.doStart) self.autoRefresh = False self.refreshPostfixes = ['_0', '_1'] self.refreshCount = 0 self.refreshing = False if len(self.audioUrl) and len(config.plugins.iptvplayer.gstplayerpath.value): self.audioPlayer = IPTVSimpleAudioPlayer() else: self.audioPlayer = None
def start(self, url, filePath, params={}, info_from=None, retries=0): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future rtmpdump_url = self._getCMD(url) if 0: #rtmpdump -r rtmp://5.79.71.195/stream/ --playpath=3001_goldvod --swfUrl=http://goldvod.tv:81/j/jwplayer/jwplayer.flash.swf --pageUrl=http://goldvod.tv/tv-online/tvp1.html -o tvp1.flv tmpTab = url.split(' ') rtmpdump_url = '"' + tmpTab[0].strip() + '"' del tmpTab[0] prevflashVer = '' for item in tmpTab: item = item.strip() # ignore empty and live params if '' != prevflashVer: rtmpdump_url += ' --' + prevflashVer[ 0:-1] + ' ' + item + '"' prevflashVer = '' continue idx = item.find('=') if -1 == idx: continue argName = item[:idx] argValue = item[idx + 1:] if 'live' in argName: item = 'live' else: item = '%s="%s"' % (argName, argValue) if 'flashVer' == argName: prevflashVer = item continue rtmpdump_url += ' --' + item cmd = DMHelper.GET_RTMPDUMP_PATH( ) + " " + rtmpdump_url + ' --realtime -o "' + self.filePath + '" > /dev/null 2>&1' printDBG("rtmpdump cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) #self.console.stderrAvail.append( self._dataAvail ) self.console.execute(E2PrioFix(cmd)) self.rtmpStatus = self.RTMP_STS.CONNECTING self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def updateIcon(self, filename): if not self.paramsSet: self.picload.setPara( (self.instance.size().width(), self.instance.size().height(), 1, 1, False, 1, "#00000000")) self.paramsSet = True self.picload_conn = eConnectCallback(self.picload.PictureData, self.paintIconPixmapCB) ret = self.picload.startDecode(filename) if ret != 0: self.picload_conn = None
def doStartDownload(self): self.outData = '' self.contentType = 'unknown' filePath = self.multi['files'][self.currIdx] url = self.multi['urls'][self.currIdx] info = "" retries = 0 cmd = DMHelper.getBaseWgetCmd(self.downloaderParams) + (' %s -t %d ' % (info, retries)) + '"' + url + '" -O "' + filePath + '" > /dev/null' printDBG("doStartDownload cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback(self.console.stderrAvail, self._dataAvail) self.console.execute( E2PrioFix( cmd ) ) self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def start(self, url, filePath, params = {}, info_from=None, retries=0): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future rtmpdump_url = self._getCMD(url) if 0: #rtmpdump -r rtmp://5.79.71.195/stream/ --playpath=3001_goldvod --swfUrl=http://goldvod.tv:81/j/jwplayer/jwplayer.flash.swf --pageUrl=http://goldvod.tv/tv-online/tvp1.html -o tvp1.flv tmpTab = url.split(' ') rtmpdump_url = '"' + tmpTab[0].strip() + '"' del tmpTab[0] prevflashVer = '' for item in tmpTab: item = item.strip() # ignore empty and live params if '' != prevflashVer: rtmpdump_url += ' --' + prevflashVer[0:-1] + ' ' + item + '"' prevflashVer = '' continue idx = item.find('=') if -1 == idx: continue argName = item[:idx] argValue = item[idx+1:] if 'live' in argName: item = 'live' else: item = '%s="%s"' % (argName, argValue) if 'flashVer' == argName: prevflashVer = item continue rtmpdump_url += ' --' + item cmd = DMHelper.GET_RTMPDUMP_PATH() + " " + rtmpdump_url + ' --realtime -o "' + self.filePath + '" > /dev/null 2>&1' printDBG("rtmpdump cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) #self.console.stderrAvail.append( self._dataAvail ) self.console.execute( E2PrioFix( cmd ) ) self.rtmpStatus = self.RTMP_STS.CONNECTING self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def __init__(self, session, service, lastPosition=None, bugEOFworkaround=0): Screen.__init__(self, session) self.skinName = "MoviePlayer" self.__event_tracker = ServiceEventTracker(screen=self, eventmap={ iPlayableService.evEOF: self.__evEOF, iPlayableService.evSOF: self.__evEOF, }) self["actions"] = HelpableActionMap( self, "MoviePlayerActions", { "leavePlayer": (self.leavePlayer, _("leave movie player...")), "leavePlayerOnExit": (self.leavePlayer, _("leave movie player...")), }, -5) for x in HelpableScreen, InfoBarShowHide, InfoBarSeek, InfoBarAudioSelection, InfoBarSubtitleSupport, InfoBarNotifications: x.__init__(self) # InfoBarServiceNotifications self.onClose.append(self.__onClose) self.mainTimer = eTimer() self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.timerCallBack) self.mainTimer.start(1000) self.bugEOFworkaround = bugEOFworkaround self.session.nav.playService(service) if lastPosition != None and (lastPosition / 90000) > 10: self.position = 0 self.lastPosition = lastPosition self.doSeekToLastPosition = True else: self.position = 0 self.lastPosition = 0 self.doSeekToLastPosition = False self.waitForSeekToLastPosition = 0 self.stopTimeFix = 0 self.returning = False self.aspectratiomode = "1" self.isClosing = False
def __init__(self, session, url, pathForRecordings, movieTitle, activMoviePlayer, requestedBuffSize, playerAdditionalParams={}): self.session = session Screen.__init__(self, session) self.onStartCalled = False self.recordingPath = pathForRecordings self.filePath = pathForRecordings + '/.iptv_buffering.flv' self.url = url self.movieTitle = movieTitle self.currentService = self.session.nav.getCurrentlyPlayingServiceReference() self.activMoviePlayer = activMoviePlayer self.onClose.append(self.__onClose) #self.onLayoutFinish.append(self.doStart) self.onShow.append(self.onWindowShow) #self.onHide.append(self.onWindowHide) self["actions"] = ActionMap(["WizardActions", "MoviePlayerActions"], { "ok": self.ok_pressed, "back": self.back_pressed, "leavePlayer": self.back_pressed, }, -1) self["console"] = Label() self["percentage"] = Label() self["icon"] = SimpleAnimatedCover() # prepare icon frames path frames = [] for idx in range(1,self.NUM_OF_ICON_FRAMES+1): frames.append( resolveFilename(SCOPE_PLUGINS, 'Extensions/IPTVPlayer/icons/buffering/buffering_%d.png' % idx) ) self["icon"].loadFrames(frames) self.inMoviePlayer = False self.canRunMoviePlayer = False # used in function updateDisplay, so must be first initialized #main Timer self.mainTimer = eTimer() self.mainTimerEnabled = False self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.updateDisplay) self.mainTimerInterval = 1000 # by default 1s self.requestedBuffSize = requestedBuffSize self.playerAdditionalParams = playerAdditionalParams
def __init__(self, session, service, lastPosition=None, bugEOFworkaround=0): Screen.__init__(self, session) self.skinName = "MoviePlayer" self.__event_tracker = ServiceEventTracker(screen = self, eventmap = { iPlayableService.evEOF: self.__evEOF, iPlayableService.evSOF: self.__evEOF, }) self["actions"] = HelpableActionMap(self, "MoviePlayerActions", { "leavePlayer": (self.leavePlayer, _("leave movie player...")), }, -5) for x in HelpableScreen, InfoBarShowHide, InfoBarSeek, InfoBarAudioSelection, InfoBarNotifications: x.__init__(self) # InfoBarServiceNotifications self.onClose.append(self.__onClose) self.mainTimer = eTimer() self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.timerCallBack) self.mainTimer.start(1000) self.bugEOFworkaround = bugEOFworkaround self.session.nav.playService(service) if lastPosition != None and (lastPosition / 90000) > 10: self.position = 0 self.lastPosition = lastPosition self.doSeekToLastPosition = True else: self.position = 0 self.lastPosition = 0 self.doSeekToLastPosition = False self.waitForSeekToLastPosition = 0 self.stopTimeFix = 0 self.returning = False self.aspectratiomode = "1" self.isClosing = False
def decodedCallBack(self, picInfo=None): if self.iptv_images_data != None: self.picload_conn = None self.iptv_images_data.append(self.picload.getData()) else: self.iptv_images_data = [] while len(self.iptv_images_data) < len(self.iptv_images): idx = len(self.iptv_images_data) self.picload_conn = eConnectCallback(self.picload.PictureData, self.decodedCallBack) ret = self.picload.startDecode(self.iptv_images[idx]['path']) if ret != 0: printDBG('startDecode failed for "%s"' % self.iptv_images[idx]['path']) self.picload_conn = None self.iptv_images_data.append(None) else: return i = 0 for y in range(self.iptv_row_num): for x in range(self.iptv_col_num): item = { 'pixmap': None, 'id': None, 'width': self.iptv_image_width, 'height': self.iptv_image_height, 'selected': False } if i < len(self.iptv_images): item['id'] = self.iptv_images[i]['id'] item['pixmap'] = self.iptv_images_data[i] self.iptv_grid[x][y] = item i += 1 for i in range(self.iptv_col_num): item = self["col_%d" % i] item.setList([(x, ) for x in self.iptv_grid[i]]) self.changeColumnSelection()
def decodeCover(self, filename, callBackFun, ident): printDBG("_______________decodeCover") #checking if decoding is needed self.waitIcon = {"CallBackFun": callBackFun, "FileName": filename, "Ident": ident} if filename != self.currIcon.get('FileName', ''): if not self.paramsSet: self.picload.setPara((self.instance.size().width(), self.instance.size().height(), 1, 1, False, 1, "#00000000")) self.paramsSet = True if not self.decoding: printDBG("_______________start decodeCover") self.decoding = True self.currIcon = self.waitIcon self.waitIcon = {} self.picload_conn = eConnectCallback(self.picload.PictureData, self.decodeCallBack) ret = self.picload.startDecode(filename) if ret != 0: printDBG("_______________error start decodeCover[%d]" % ret) self.picload_conn = None self.decoding = False return True else: printDBG("___________________________decodeCover not need (%s)" % filename) return False
def __init__(self, refreshDelay = 2, parallelDownloadNum = 1): self.running = False self.downloadIdx = 0 self.downloading = False self.updateProgress = False self.sleepDelay = refreshDelay #self.currDMItem = None # under download queue self.queueUD = [] self.MAX_DOWNLOAD_ITEM = parallelDownloadNum # already downloaded self.queueAA = [] # waiting for download queue self.queueDQ = [] self.onlistChanged = [] #main Queue self.mainTimer = eTimer() self.mainTimer_conn = eConnectCallback(self.mainTimer.timeout, self.processDQ) return
def __init__(self, session, filesrcLocation, FileName, lastPosition=None, player='eplayer', additionalParams={}): # 'gstplayer' Screen.__init__(self, session) self.skinName = "IPTVExtMoviePlayer" self.player = player if 'gstplayer' == self.player: self.playerName = _("external gstplayer") self.gstAdditionalParams = {} self.gstAdditionalParams['download-buffer-path'] = additionalParams.get('download-buffer-path', '') # File template to store temporary files in, should contain directory and XXXXXX self.gstAdditionalParams['ring-buffer-max-size'] = additionalParams.get('ring-buffer-max-size', 0) # in MB self.gstAdditionalParams['buffer-duration'] = additionalParams.get('buffer-duration', -1) # in s self.gstAdditionalParams['buffer-size'] = additionalParams.get('buffer-size', 0) # in KB else: self.playerName = _("external eplayer3") self.session.nav.playService(None) # current service must be None to give free access to DVB Audio and Video Sinks self.fileSRC = filesrcLocation self.title = FileName if lastPosition: self.lastPosition = lastPosition else: self.lastPosition = 0 self.downloader = additionalParams.get('downloader', None) printDBG('IPTVExtMoviePlayer.__init__ lastPosition[%r]' % self.lastPosition) self.extPlayerCmddDispatcher = ExtPlayerCommandsDispatcher(self) self["actions"] = ActionMap(['IPTVAlternateVideoPlayer', 'MoviePlayerActions', 'MediaPlayerActions', 'MediaPlayerSeekActions', 'WizardActions'], { "leavePlayer" : self.key_stop, 'play' : self.key_play, 'pause' : self.key_pause, 'exit' : self.key_exit, 'back' : self.key_exit, 'info' : self.key_info, 'seekdef:1' : self.key_seek1, 'seekdef:3' : self.key_seek3, 'seekdef:4' : self.key_seek4, 'seekdef:6' : self.key_seek6, 'seekdef:7' : self.key_seek7, 'seekdef:9' : self.key_seek9, 'seekFwd' : self.key_seekFwd, 'seekBack' : self.key_seekBack, 'left_press' : self.key_left_press, 'left_repeat' : self.key_left_repeat, 'rigth_press' : self.key_rigth_press, 'rigth_repeat' : self.key_rigth_repeat, 'ok' : self.key_ok, }, -1) self.onClose.append(self.__onClose) #self.onShow.append(self.__onShow) self.onLayoutFinish.append(self.onStart) self.console = None self.isClosing = False self.responseData = "" # playback info # GUI self.updateInfoTimer = eTimer() self.updateInfoTimer_conn = eConnectCallback(self.updateInfoTimer.timeout, self.updateInfo) # playback info bar gui elements self['playbackInfoBaner'] = Cover3() self['statusIcon'] = Cover3() self['progressBar'] = ProgressBar() self['bufferingBar'] = ProgressBar() self['goToSeekPointer'] = Cover3() self['infoBarTitle'] = Label(self.title) self['goToSeekLabel'] = Label("0:00:00") self['currTimeLabel'] = Label("0:00:00") self['remainedLabel'] = Label("-0:00:00") self['lengthTimeLabel'] = Label("0:00:00") # goto seek timer self.playback = {} self.playback['GoToSeekTimer'] = eTimer() self.playback['GoToSeekTimer_conn'] = eConnectCallback(self.playback['GoToSeekTimer'].timeout, self.doGoToSeek) self.playback.update( {'CurrentTime': 0, 'Length': 0, 'LengthFromPlayerReceived': False, 'GoToSeekTime': 0, 'StartGoToSeekTime': 0, 'GoToSeeking': False, 'IsLive': False, 'Status': None } ) # load pixmaps for statusIcon self.playback['statusIcons'] = {'Play':None, 'Pause':None, 'FastForward':None, 'SlowMotion':None} try: self.playback['statusIcons']['Play'] = LoadPixmap( GetIPTVDMImgDir("playback_a_play.png") ) self.playback['statusIcons']['Pause'] = LoadPixmap( GetIPTVDMImgDir("playback_a_pause.png") ) self.playback['statusIcons']['FastForward'] = LoadPixmap( GetIPTVDMImgDir("playback_a_ff.png") ) self.playback['statusIcons']['SlowMotion'] = self.playback['statusIcons']['FastForward'] except: printExc() # show hide info bar functionality self.goToSeekRepeatCount = 0 self.goToSeekStep = 0 self.playbackInfoBar = {'visible':False, 'blocked':False, 'guiElemNames':['playbackInfoBaner', 'progressBar', 'bufferingBar', 'goToSeekPointer', 'goToSeekLabel', 'infoBarTitle', 'currTimeLabel', 'remainedLabel', 'lengthTimeLabel', 'statusIcon'] } self.playbackInfoBar['timer'] = eTimer() self.playbackInfoBar['timer_conn'] = eConnectCallback(self.playbackInfoBar['timer'].timeout, self.hidePlaybackInfoBar) self.isStarted = False self.hidePlaybackInfoBar() self.waitEOSAbortedFix = {'EOSaborted_received': False, 'poll_received': False, 'timer': None} self.waitEOSAbortedFix['timer'] = eTimer() self.waitEOSAbortedFix['timer_conn'] = eConnectCallback(self.waitEOSAbortedFix['timer'].timeout, self.waitEOSAbortedFixTimeoutCallback) self.waitCloseFix = {'waiting':False} self.waitCloseFix['timer'] = eTimer() self.waitCloseFix['timer_conn'] = eConnectCallback(self.waitCloseFix['timer'].timeout, self.waitCloseTimeoutCallback) self.isCloseRequestedByUser = False self.playerBinaryInfo = {'version':None, 'data':''} self.messageQueue = [] self.underMessage = False try: self.autoHideTime = 1000 * int(config.plugins.iptvplayer.extplayer_infobar_timeout.value) except: self.autoHideTime = 1000
def postWidgetCreate(self, instance): instance.setContent(self.l) self.selectionChanged_conn = eConnectCallback(instance.selectionChanged, self.selectionChanged) self.onCreate()
def __init__(self, session, artItem, addParams): self.session = session self.artItem = artItem ############################################# # calculate num of rich desc items and pages ############################################# self.richDesc = {'items_count': 0, 'pages_count': 0, 'page': 0, 'avalable_params':[] } for item in ArticleContent.RICH_DESC_PARAMS: if item in artItem.richDescParams: self.richDesc['items_count'] += 1 self.richDesc['avalable_params'].append(item) # yes I know, len(self.richDesc['avalable_params']) == self.richDesc['items_count'] self.richDesc['pages_count'] = self.richDesc['items_count'] / self.MAX_RICH_DESC_ROW_NUM if self.richDesc['items_count'] % self.MAX_RICH_DESC_ROW_NUM > 0: self.richDesc['pages_count'] += 1 if self.richDesc['items_count'] < self.MAX_RICH_DESC_ROW_NUM: self.richDesc['rows_count'] = self.richDesc['items_count'] else: self.richDesc['rows_count'] = self.MAX_RICH_DESC_ROW_NUM ############################################# self.__prepareSkin() Screen.__init__(self, session) for idx in range(self.richDesc['rows_count']): self["dsc_label_{0}".format(idx+1)] = Label("") self["dsc_text_{0}".format(idx+1)] = Label("") self["title"] = Label("") self["text"] = ScrollLabel(" ") self["page_marker"] = Cover3() ############################################# # COVER ############################################# self["cover"] = Cover() self.cover = {'src':'', 'downloader':None, 'files_to_remove':[], 'image_path':''} try: self.cover['image_path'] = os.path.join(addParams['buffering_path'], '.iptv_buffering.jpg') except: printExc() ############################################# ############################################# # SPINER ############################################# try: for idx in range(5): spinnerName = "spinner" if idx: spinnerName += '_%d' % idx self[spinnerName] = Cover3() except: printExc() self.spinner = {} self.spinner["pixmap"] = [LoadPixmap(GetIconDir('radio_button_on.png')), LoadPixmap(GetIconDir('radio_button_off.png'))] # spinner timer self.spinner["timer"] = eTimer() self.spinner["timer_conn"] = eConnectCallback(self.spinner["timer"].timeout, self.updateSpinner) self.spinner["timer_interval"] = 200 self.spinner["enabled"] = False ############################################# self["actions"] = ActionMap(['IPTVAlternateVideoPlayer', 'MoviePlayerActions', 'MediaPlayerActions', 'WizardActions', 'DirectionActions'], { "ok": self.key_ok, "back": self.key_back, "left": self.key_left, "right": self.key_right, "up": self.key_up, "down": self.key_down, }, -1) self.onClose.append(self.__onClose) #self.onShow.append(self.onStart) self.onLayoutFinish.append(self.onStart)
def start(self, url, filePath, params={}): ''' Owervrite start from BaseDownloader ''' self.url = url self.filePath = filePath self.downloaderParams = params self.fileExtension = '' # should be implemented in future self.outData = '' self.contentType = 'unknown' cmdTab = [DMHelper.GET_FFMPEG_PATH(), '-y'] tmpUri = strwithmeta(url) if 'iptv_video_rep_idx' in tmpUri.meta: cmdTab.extend( ['-video_rep_index', str(tmpUri.meta['iptv_video_rep_idx'])]) if 'iptv_audio_rep_idx' in tmpUri.meta: cmdTab.extend( ['-audio_rep_index', str(tmpUri.meta['iptv_audio_rep_idx'])]) if 'iptv_m3u8_live_start_index' in tmpUri.meta: cmdTab.extend([ '-live_start_index', str(tmpUri.meta['iptv_m3u8_live_start_index']) ]) if 'iptv_m3u8_key_uri_replace_old' in tmpUri.meta and 'iptv_m3u8_key_uri_replace_new' in tmpUri.meta: cmdTab.extend([ '-key_uri_old', str(tmpUri.meta['iptv_m3u8_key_uri_replace_old']), '-key_uri_new', str(tmpUri.meta['iptv_m3u8_key_uri_replace_new']) ]) if "://" in self.url: url, httpParams = DMHelper.getDownloaderParamFromUrlWithMeta( tmpUri, True) headers = [] for key in httpParams: if key == 'Range': #Range is always used by ffmpeg continue elif key == 'User-Agent': cmdTab.extend(['-user-agent', httpParams[key]]) else: headers.append('%s: %s' % (key, httpParams[key])) if len(headers): cmdTab.extend(['-headers', '\r\n'.join(headers)]) if self.url.startswith("merge://"): try: urlsKeys = self.url.split('merge://', 1)[1].split('|') for item in urlsKeys: cmdTab.extend(['-i', self.url.meta[item]]) except Exception: printExc() else: cmdTab.extend(['-i', url]) cmdTab.extend([ '-c:v', 'copy', '-c:a', 'copy', '-f', self.ffmpegOutputContener, self.filePath ]) self.fileCmdPath = self.filePath + '.iptv.cmd' rm(self.fileCmdPath) WriteTextFile(self.fileCmdPath, '|'.join(cmdTab)) cmd = GetCmdwrapPath() + (' "%s" "|" %s ' % (self.fileCmdPath, GetNice() + 2)) printDBG("FFMPEGDownloader::start cmd[%s]" % cmd) self.console = eConsoleAppContainer() self.console_appClosed_conn = eConnectCallback(self.console.appClosed, self._cmdFinished) self.console_stderrAvail_conn = eConnectCallback( self.console.stderrAvail, self._dataAvail) self.console.execute(cmd) self.status = DMHelper.STS.DOWNLOADING self.onStart() return BaseDownloader.CODE_OK
def postWidgetCreate(self, instance): instance.setContent(self.l) self.selectionChanged_conn = eConnectCallback( instance.selectionChanged, self.selectionChanged) self.onCreate()