Esempio n. 1
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('file', type=str, help='video file')
    parser.add_argument('title', type=str, nargs='?', help='post title')
    parser.add_argument('time',
                        type=int,
                        nargs='?',
                        help='time for pre segment',
                        default=0)
    parser.add_argument('-c, --config',
                        type=str,
                        dest='config',
                        help='change the configuration file path')
    args = parser.parse_args()

    load_dotenv(args.config)
    tmpdir = path.dirname(path.abspath(__file__)) + '/tmp'
    command = genslice(path.abspath(args.file), args.time)

    if sameparams(tmpdir, command):
        os.chdir(tmpdir)
    else:
        os.mkdir(tmpdir)
        os.chdir(tmpdir)
        os.system(command)
        open('command.sh', 'w').write(command)

    failures, completions = 0, 0
    lines = encrypt(repairer(open('out.m3u8', 'r').read()))
    executor = ThreadPoolExecutor(max_workers=15)
    futures = {
        executor.submit(uploader().handle, chunk): chunk
        for chunk in tsfiles(lines)
    }

    for future in as_completed(futures):
        completions += 1
        result = future.result()

        if not result:
            failures += 1
            print('[%s/%s] Uploaded failed: %s' %
                  (completions, len(futures), futures[future]))
            continue

        lines = lines.replace(futures[future], result)
        print('[%s/%s] Uploaded %s to %s' %
              (completions, len(futures), futures[future], result))

    #Write to file
    open('out.m3u8', 'w').write(lines)
    open('params.json', 'w').write(json.dumps(uploader().params()))

    if failures:
        print('Partially successful: %d/%d' %
              (completions - failures, completions))
        print('You can re-execute this program with the same parameters')
        exit(2)

    publish(lines, args.title or path.splitext(path.basename(args.file))[0])
Esempio n. 2
0
def upload(lines, uploadList):
    failures, completions = 0, 0
    executor = ThreadPoolExecutor(max_workers=15)
    futures = {
        executor.submit(uploader().handle, chunk): chunk
        for chunk in uploadList
    }
    uploadList = []

    for future in as_completed(futures):
        completions += 1
        result = future.result()

        if not result:
            failures += 1
            print('[%s/%s] Uploaded failed: %s' %
                  (completions, len(futures), futures[future]))
            uploadList.append(futures[future])
            continue

        lines = lines.replace(futures[future], result)
        print('[%s/%s] Uploaded %s to %s' %
              (completions, len(futures), futures[future], result))

    if (len(uploadList) > 0):
        print('retry upload')
        lines = upload(lines, uploadList)
    return lines
Esempio n. 3
0
def upload(lines, uploadList):
  failures, completions = 0, 0
  executor = ThreadPoolExecutor(max_workers=15)
  futures = {executor.submit(uploader().handle, chunk): chunk for chunk in uploadList}
  uploadList = []

  for future in as_completed(futures):
    completions += 1
    result = future.result()

    if not result:
      failures += 1
      print('[%s/%s] Uploaded failed: %s' % (completions, len(futures), futures[future]))
      uploadList.append(futures[future])
      continue
    if _('PROXY') == 'YES':
      result = str(base64.b64encode(result.encode('utf-8')), 'utf8')
      lines = lines.replace(futures[future], _('APIURL')+'/p/'+result)
    else:
      lines = lines.replace(futures[future], result)
    print('[%s/%s] Uploaded %s to %s' % (completions, len(futures), futures[future], result))

  if(len(uploadList)>0):
    print('retry upload')
    lines = upload(lines, uploadList)
  return lines
Esempio n. 4
0
def main():
  tmpdir = os.path.dirname(os.path.abspath(__file__)) + '/tmp'
  os.chdir(tmpdir)

  lines    = open('outtiny.m3u8', 'r').read()

  llen = len(lines)+64
  wh = math.ceil(llen/3)
  print('文本大小:%s,图片尺寸:%s' % (llen, wh))

  new_img_file_name = new_image(wh, wh, 'out', show_image=False)
  print('生成图片:%s' % (new_img_file_name))

  in_img = cv2.imread(new_img_file_name)
  steg = LSBSteg(in_img)
  done = base64.b64encode(lines.encode('utf-8'))
  done = zlib.compress(done)
  res = steg.encode_binary(done)
  cv2.imwrite('outtiny.png', res)

  m3u8url = uploader().handle('outtiny.png')
  if _('PROXY') == 'YES':
    m3u8url = str(base64.b64encode(m3u8url.encode('utf-8')),'utf8')
    print('This video\'s m3u8 has been published to: %s/p/%s' % (_('APIURL'),m3u8url))
  else:
    print('This video\'s m3u8 has been published to: %s/p/%s' % (_('APIURL'),m3u8url))
Esempio n. 5
0
def publish(code, title=None):
  if _('NOSERVER') == 'YES':
    return print('The m3u8 file has been dumped to tmp/out.m3u8')

  r = api('POST', 'publish', data={'code': code, 'title': title,
                                   'params': json.dumps(uploader().params())})
  if r:
    url = '%s/play/%s' % (_('APIURL'), r)
    print('This video has been published to: %s' % url)
    print('You can also download it directly: %s.m3u8' % url)
Esempio n. 6
0
def checker(code):
  flag  = False
  limit = uploader().MAX_BYTES

  for file in pngfiles(code):
    if os.path.getsize(file) >= limit:
      flag = True
      print('File too large: tmp/%s' % file)

  return exit(1) if flag else code
Esempio n. 7
0
File: up.py Progetto: pdool/free-hls
def main():

    title = argv[2] if argv[2] else os.path.splitext(os.path.basename(
        argv[1]))[0]
    tmpdir = os.path.dirname(os.path.abspath(__file__)) + '/tmp'
    command = command_generator(os.path.abspath(argv[1]))

    if sameparams(tmpdir, command):
        os.chdir(tmpdir)
    else:
        os.mkdir(tmpdir)
        os.chdir(tmpdir)
        os.system(command)
        open('command.sh', 'w').write(command)

    failures, completions = 0, 0
    lines = encrypt(open('out.m3u8', 'r').read())

    #TODO
    for file in tsfiles(lines):
        if os.path.getsize(file) >= upload_limit[_('UPLOAD_DRIVE')]:
            print('file too large: %s' % file)
            exit(1)

    executor = ThreadPoolExecutor(max_workers=10)
    futures = {
        executor.submit(uploader(), chunk): chunk
        for chunk in tsfiles(lines)
    }

    for future in as_completed(futures):
        completions += 1
        result = future.result()

        if not result:
            failures += 1
            print('[%s/%s] Uploaded failed: %s' %
                  (completions, len(futures), futures[future]))
            continue

        lines = lines.replace(futures[future], result)
        print('[%s/%s] Uploaded %s to %s' %
              (completions, len(futures), futures[future], result))

    print('\n')

    #Write to file
    open('out.m3u8', 'w').write(lines)

    if not failures:
        publish(lines, title)
    else:
        print('Partially successful: %d/%d' %
              (completions, completions - failures))
        print('You can re-execute this program with the same parameters')
Esempio n. 8
0
def publish(code, title=None):
    if _('NOSERVER') == 'YES':
        return print('The m3u8 file has been dumped to tmp/out.m3u8')

    r = api('POST',
            'publish',
            data={
                'code': code,
                'title': title,
                'params': json.dumps(uploader().params())
            })
    if r:
        url = '%s/play/%s' % (_('APIURL'), r['slug'])
        print(f'This video has been published to: {url}')
        print(f'You can also download it directly: {url}.m3u8')
        print('---')
        print('Click here to edit the information for this video:\n%s' %
              manageurl(f'video/{r["id"]}'))
Esempio n. 9
0
def repairer(code):
    limit = uploader().MAX_BYTES

    for file in tsfiles(code):
        if path.getsize(file) > limit:
            tmp = 'rep.%s' % file
            os.system(genrepair(file, tmp, limit * 8))
            os.rename(tmp, file)

            if path.getsize(file) > limit:
                open('out.m3u8', 'w').write(code)
                print(f'File too large: tmp/{file}')
                print(
                    'Adjust parameters or continue execution with the same parameters'
                )
                exit(2)

    open('out.m3u8', 'w').write(code)
    return code
Esempio n. 10
0
def command_generator(file):

  sub          = ''
  rate         = bit_rate(file)
  vcodec       = video_codec(file)
  max_bits     = uploader().MAX_BYTES * 8
  segment_time = min(10, int(max_bits / (rate * 1.35)))


  #LIMITED
  if rate > 6e6 or argv[3] == 'LIMITED':
    maxrate = max_bits / 20 / 2.5
    sub    += ' -b:v %d -maxrate %d -bufsize %d' % (min(rate, maxrate*0.9), maxrate, maxrate/1.5)
    vcodec, segment_time = 'h264', 10

  #SEGMENT_TIME
  if argv[3].isnumeric():
    sub += ' -segment_time %d' % float(argv[3])
  else:
    sub += ' -segment_time %d' % segment_time

  return 'ffmpeg -i %s -vcodec %s -acodec aac -bsf:v h264_mp4toannexb -map 0:v:0 -map 0:a? -f segment -segment_list out.m3u8 %s out%%05d.ts' % (safename(file), vcodec, sub)
Esempio n. 11
0
def main():
    d = tempfile.mkdtemp()
    os.chdir(d)

    name = 'video%s' % os.path.splitext(argv[1])[1]
    shutil.copyfile(argv[1], name)

    bitrate = bit_rate(name)
    maxbitrate = maxbit_rate(name)
    duration = video_duration(name)
    repaircmd = genrepair(name, name, uploader().MAX_BYTES)
    os.system('clear')

    print('\n=================================')
    print('file: %s' % argv[1])
    print('size: %s' % os.path.getsize(name))
    print('bitrate: %s' % bitrate)
    print('max_bitrate: %s' % maxbitrate)
    print('duration: %s' % duration)
    print('genrepair: %s' % repaircmd)
    print('=================================\n')

    exec(['rm', '-rf', d])
Esempio n. 12
0
import os, tempfile, time
from os import getenv as _
from utils import uploader
from dotenv import load_dotenv
load_dotenv()

os.environ['UPLOAD_DRIVE'] = os.sys.argv[1]
handle, params = uploader().handle, uploader().params()

def upload(size):
  fd, path = tempfile.mkstemp()
  with open(path, 'wb') as f:
    f.write(os.urandom(size * 1048576 - params['padding']))

  r = handle(path)
  os.close(fd)
  os.unlink(path)
  return r

def test(curr, step):
  maps = {}
  reve = False
  reve_inc = None
  print('Starting test %s:' % _('UPLOAD_DRIVE'))

  while True:
    if curr in maps:
      result = maps[curr]
    else:
      result = maps[curr] = upload(curr)
      print('%dM\t%s\t%s' % (curr, 'OK' if result else 'FAIL', result))
Esempio n. 13
0
def main():

  title   = argv[2] if argv[2] else os.path.splitext(os.path.basename(argv[1]))[0]
  tmpdir  = os.path.dirname(os.path.abspath(__file__)) + '/tmp'
  command = command_generator(os.path.abspath(argv[1]))
  print('commend:%s'%command)


  if sameparams(tmpdir, command):
    os.chdir(tmpdir)
  else:
    os.mkdir(tmpdir)
    os.chdir(tmpdir)
    os.system(command)
    open('command.sh', 'w').write(command)


  lines    = checker(encrypt(open('out.m3u8', 'r').read()))
  #return

  # failures, completions = 0, 0
  # executor = ThreadPoolExecutor(max_workers=15)
  # futures  = {executor.submit(uploader().handle, chunk): chunk for chunk in pngfiles(lines)}
  #
  # for future in as_completed(futures):
  #   completions += 1
  #   result = future.result()
  #
  #   if not result:
  #     failures += 1
  #     print('[%s/%s] Uploaded failed: %s' % (completions, len(futures), futures[future]))
  #     continue
  #
  #   lines = lines.replace(futures[future], result)
  #   print('[%s/%s] Uploaded %s to %s' % (completions, len(futures), futures[future], result))

  # 上传
  lines = upload(lines, pngfiles(lines))

  """
  head = read_bytes(os.path.dirname(os.path.abspath(__file__)) + '/dangdai-32x32.png')
  head1 = head[0:-12]
  head2 = head[-12:]
  done = base64.b64encode(lines.encode('utf-8'))
  done = zlib.compress(done)
  open('out.png', 'wb').write(head1 + done+head2)
  """
  llen = len(lines)+64
  wh = math.ceil(llen/3)
  print('文本大小:%s,图片尺寸:%s' % (llen, wh))

  new_img_file_name = new_image(wh, wh, 'out', show_image=False)
  print('生成图片:%s' % (new_img_file_name))

  in_img = cv2.imread(new_img_file_name)
  steg = LSBSteg(in_img)
  done = base64.b64encode(lines.encode('utf-8'))
  done = zlib.compress(done)
  res = steg.encode_binary(done)
  cv2.imwrite('out.png', res)

  m3u8url = uploader().handle('out.png')
  if _('PROXY') == 'YES':
    m3u8url = str(base64.b64encode(m3u8url.encode('utf-8')), 'utf8')
    print('This video\'s m3u8 has been published to: %s/p/%s' % (_('APIURL'),m3u8url))
  else:
    print('This video\'s m3u8 has been published to: %s/p/%s' % (_('APIURL'),m3u8url))
  publish(lines, title)
Esempio n. 14
0
from utils import uploader
from dotenv import load_dotenv
load_dotenv()

if __name__ == '__main__':
    handle = uploader().handle

    print(handle('/Users/ika/Desktop/9913509E9DE4492E0E903B4C2C66E98D.gif'))
    # print(handle('/Users/ika/Desktop/ACFC928140EE4FA072F4D6EB7CB35245.jpg'))
    # print(handle('/Users/ika/Desktop/out00006.ts'))
Esempio n. 15
0
from utils import uploader
from dotenv import load_dotenv
load_dotenv()

if __name__ == '__main__':
    upload = uploader()

    print(upload('/Users/ika/Desktop/9913509E9DE4492E0E903B4C2C66E98D.gif'))
    print(upload('/Users/ika/Desktop/ACFC928140EE4FA072F4D6EB7CB35245.jpg'))
    print(upload('/Users/ika/Desktop/out00006.ts'))