#!/usr/bin/python import sys import os import signal import subprocess import shutil import re import time def on_term(signum, frame): global ffmpeg global record_enabled record_enabled = False if ffmpeg != None and ffmpeg.poll() == None: ffmpeg.terminate() try: os.remove(os.path.join(record_path, "current.mp4")) except: pass sys.exit(0) elif ffmpeg == None: sys.exit(0) if len(sys.argv) != 3: sys.stderr.write("Error : Bad arguments count\n") sys.exit(1) ffmpeg = None record_enabled = True rtmp_link = sys.argv[1] + "?login=root&password=99c9bef14824f6a9b7e6ee4229660827a4a4c751" stream_name = sys.argv[2] fragment_time = 3600 fragment_max_count = 48 record_path = os.path.join(os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), "../webplatform/www/Content/records")), stream_name) if not os.path.exists(record_path): try: os.mkdir(record_path) except OSError: sys.stderr.write("Error : Unable to create the record directory\n") sys.exit(2) signal.signal(signal.SIGINT, on_term) while record_enabled: files = os.listdir(record_path) for filename in files: filepath = os.path.join(record_path, filename) if os.path.isfile(filepath): match = re.search("^([0-9]|[1-9][0-9]*)_([0-9]|[1-9][0-9]*)\.mp4$", filename) if match: if (int(time.time()) - int(match.group(1))) / fragment_time > fragment_max_count: try: os.remove(filepath) except OSError: sys.stderr.write("Error : Unable to delete video backup file\n") sys.exit(3) start_time = str(int(time.time())) ffmpeg = subprocess.Popen(["/usr/bin/ffmpeg", "-re", "-y", "-i", rtmp_link, "-an", "-vcodec", "copy", "-movflags", "faststart", "-f", "mp4", "-t", str(fragment_time), os.path.join(record_path, "current.mp4")]) ffmpeg.wait() try: os.rename(os.path.join(record_path, "current.mp4"), os.path.join(record_path, "{}_{}.mp4".format(start_time, str(int(time.time()))))) except OSError: sys.stderr.write("Error : Unable to rename the current video backup file\n") sys.exit(4) ffmpeg = None