def recode(url, duration=None, vfmt=2, outpath='./', npf=3, freq=10, tmin=5, tmax=20, proxy=None, log=None): assert duration is None or duration > 0 name = '%s.%s.ts' % (_util.get_time_string(), hash(url)) outfile = pjoin(outpath, name) log.info("|=> begin: %s", url) if duration: log.info("|=>duration: %d", duration) log.info("|=> output: %s", outfile) _util.assure_path(outpath) axel = WorkShop(tmin=tmin, tmax=tmax, log=log) m3u8 = M3u8Stream(axel=axel, proxy=proxy, log=log) fetcher = HttpFetcher() start_at = time.time() try: with open(outfile, 'wb') as fp: if url.find('m3u8') > 0 or __is_url_file(url): axel.serve() m3u8.recode(url=url, duration=duration, vfmt=vfmt, fp=fp, npf=npf, freq=cfg.freq) else: fetcher.fetch(url=url, fp=fp) log.info("|=> end: total=%.2fs, out=%s", time.time() - start_at, outfile) finally: if axel.isAlive(): axel.setToStop() axel.join()
def __init__(self, url, fp, data_range, parent, headers=None, proxy=None, callback=None, log=None): threadutil.WorkBase.__init__(self, parent=parent) self.url = url self.fp = fp self.data_range = data_range self.proxy = proxy self.headers = headers self.__callback = callback self.log = log self.__retry_count = 0 self.__http_fetcher = HttpFetcher(log=log) if self.proxy: self.__http_fetcher.set_proxy(self.proxy)