74 lines
2.0 KiB
Python
Executable File
74 lines
2.0 KiB
Python
Executable File
#!/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
|