Esempio n. 1
0
    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