Skip to content

Instantly share code, notes, and snippets.

@dasl-
Last active May 24, 2022 03:55
Show Gist options
  • Save dasl-/9ed9d160384a8dd77382ce6a07c43eb6 to your computer and use it in GitHub Desktop.
Save dasl-/9ed9d160384a8dd77382ce6a07c43eb6 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import sys
import argparse
import os
import time
# This is necessary for the imports below to work
root_dir = os.path.abspath(os.path.dirname(__file__) + '/..')
sys.path.append(root_dir)
from piwall2.logger import Logger
def parseArgs():
parser = argparse.ArgumentParser(description='Piwall2 delay buffer. Delay output by specified number of seconds.')
parser.add_argument('--log-uuid', dest='log_uuid', action='store',
help='Logger UUID')
parser.add_argument('--delay', dest='delay_s', action='store', type=float, help='Delay in seconds')
args = parser.parse_args()
return args
args = parseArgs()
log_level = Logger.get_level()
if args.log_uuid:
Logger.set_uuid(args.log_uuid)
logger = Logger(dont_log_to_stdout = True).set_namespace(os.path.basename(__file__))
logger.debug("Starting delay_buffer...")
start = time.time()
buffer = b''
has_sent_any_data = False
while True:
data = sys.stdin.buffer.read(4096)
is_delay_over = (time.time() - start) > args.delay_s
if is_delay_over:
if buffer:
if not has_sent_any_data:
logger.debug("Sending initial bytes...")
has_sent_any_data = True
sys.stdout.buffer.write(buffer)
buffer = b''
if data:
if not has_sent_any_data:
logger.debug("Sending initial bytes...")
has_sent_any_data = True
sys.stdout.buffer.write(data)
else:
break
else:
if data:
buffer += data
logger.debug("Finished delay_buffer.")
video_broadcast_cmd = ("set -o pipefail && " +
f"{DirectoryUtils().root_dir}/delay_buffer --delay 2 --log-uuid {shlex.quote(Logger.get_uuid())} | " +
f"tee >({burst_throttling_clause}) >({broadcasting_clause}) >/dev/null")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment