Advertisement
SlavikMIPT

Untitled

Nov 14th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.60 KB | None | 0 0
  1. import os
  2. import math
  3. import re
  4. import subprocess
  5.  
  6. call_state = None
  7. debug_log = ''
  8.  
  9.  
  10. def run_subprocess(command):
  11.     pipe = subprocess.Popen(command, stdout=subprocess.PIPE,
  12.                             stderr=subprocess.STDOUT, shell=True, universal_newlines=True)
  13.     while True:
  14.         line = pipe.stdout.readline().strip()
  15.         if line == '' and pipe.poll() is not None:
  16.             break
  17.  
  18.  
  19. def run_session(command_run, command_play, command_convert, status_handler=None):
  20.     global debug_log
  21.     global call_state
  22.     re_call_state = re.compile(r'V/tgvoip: Call state changed to (\d)', re.U)
  23.     re_debug_log = re.compile(r'D/tgvoipcall: statistics: (.+)$', re.U | re.I)
  24.     pipe = subprocess.Popen(command_run, shell=True,
  25.                             stdout=subprocess.PIPE,
  26.                             stderr=subprocess.STDOUT,
  27.                             universal_newlines=True)
  28.     while True:
  29.         line = pipe.stdout.readline().strip()
  30.         if line == '' and pipe.poll() is not None:
  31.             break
  32.         call_debug_log_match = re_debug_log.match(line)
  33.         if call_debug_log_match:
  34.             debug_log = str(call_debug_log_match.group(1))
  35.         call_state_match = re_call_state.match(line)
  36.         if call_state_match:
  37.             call_state = int(call_state_match.group(1))
  38.             # print(call_state)
  39.             if call_state == 3:
  40.                 run_subprocess(command_play)
  41.                 run_subprocess(command_convert)
  42.     print(debug_log)
  43.  
  44.  
  45. if __name__ == '__main__':
  46.     import argparse
  47.  
  48.     parser = argparse.ArgumentParser(description='tgvoipcall runner')
  49.     parser.add_argument('address', type=str)
  50.     parser.add_argument('tag', type=str)
  51.     parser.add_argument('-k', '--key', type=str)
  52.     parser.add_argument('-i', '--input', type=str)
  53.     parser.add_argument('-o', '--output', type=str)
  54.     parser.add_argument('-c', '--config', type=str)
  55.     parser.add_argument('-r', '--role', type=str)
  56.     args = parser.parse_args()
  57.     ADDRESS = args.address
  58.     TAG = args.tag
  59.     KEY = args.key
  60.     INPUT_FILE_PATH = args.input
  61.     OUTPUT_FILE_PATH = args.output
  62.     CONFIG_FILE_PATH = args.config
  63.     ROLE = args.role
  64.     INPUT_FILE_NAME = os.path.basename(INPUT_FILE_PATH)
  65.     OUTPUT_FILE_NAME = os.path.basename(OUTPUT_FILE_PATH)
  66.     CONFIG_FILE_NAME = os.path.basename(CONFIG_FILE_PATH)
  67.     INPUT_FILE_DIR = os.path.dirname(INPUT_FILE_PATH)
  68.     INPUT_FILE_DIR = os.path.abspath('.') if INPUT_FILE_DIR == '' else os.path.abspath(INPUT_FILE_DIR)
  69.     OUTPUT_FILE_DIR = os.path.dirname(OUTPUT_FILE_PATH)
  70.     OUTPUT_FILE_DIR = os.path.abspath('.') if OUTPUT_FILE_DIR == '' else os.path.abspath(OUTPUT_FILE_DIR)
  71.     CONFIG_FILE_DIR = os.path.dirname(CONFIG_FILE_PATH)
  72.     CONFIG_FILE_DIR = os.path.abspath('.') if CONFIG_FILE_DIR == '' else os.path.abspath(CONFIG_FILE_DIR)
  73.     INPUT_FILE_PATH_LOCAL = "/mnt/input/{0}".format(INPUT_FILE_NAME)
  74.     OUTPUT_FILE_PATH_LOCAL = "/mnt/output/{0}".format(OUTPUT_FILE_NAME)
  75.     CONFIG_FILE_PATH_LOCAL = "/mnt/config/{0}".format(CONFIG_FILE_NAME)
  76.     # print(ADDRESS, TAG, KEY, INPUT_FILE_PATH, OUTPUT_FILE_PATH, CONFIG_FILE_PATH, ROLE)
  77.  
  78.     docker_run_cmd = "docker run --rm -v {0}:/mnt/input: -v {1}:/mnt/output: -v {2}:/mnt/config: " \
  79.                      "--name tgvoipcall{3} slavikmipt/tgvoip_env:debian " \
  80.         .format(INPUT_FILE_DIR, OUTPUT_FILE_DIR, CONFIG_FILE_DIR, ROLE)
  81.     start_script_param = "/bin/bash /root/start.sh {0} {1} {2} {3} {4} {5} {6}".format(
  82.         ADDRESS, TAG, KEY, INPUT_FILE_PATH_LOCAL, OUTPUT_FILE_PATH_LOCAL, CONFIG_FILE_PATH_LOCAL, ROLE)
  83.  
  84.     command_run = docker_run_cmd + start_script_param
  85.  
  86.     command_play = "docker exec tgvoipcall{0} ffmpeg -y -re -i \"{1}\" " \
  87.                    "-f s16le -ac 1 -ar 48000 -acodec pcm_s16le /home/callmic.pipe".format(ROLE, INPUT_FILE_PATH_LOCAL)
  88.  
  89.     command_convert = "docker exec tgvoipcall{0} ffmpeg -y -i /home/callout.wav " \
  90.                       "-af \"silenceremove=start_periods=1:start_duration=1:start_threshold=0:detection=peak, " \
  91.                       "aformat=dblp,areverse," \
  92.                       "silenceremove=start_periods=1:start_duration=1:start_threshold=0:detection=peak," \
  93.                       "aformat=dblp,areverse\" " \
  94.                       "-acodec libopus -b:a 64000 -vbr off " \
  95.                       "-compression_level 0 -frame_duration 60 -ac 1 -ar 48000 -vn {1}" \
  96.         .format(ROLE, OUTPUT_FILE_PATH_LOCAL)
  97.  
  98.     run_subprocess("docker pull slavikmipt/tgvoip_env:debian")
  99.     run_subprocess("docker stop tgvoipcall{0}".format(ROLE))
  100.  
  101.     run_session(command_run, command_play, command_convert)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement