mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-20 12:19:06 +00:00
76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
import argparse
|
|
import asyncio
|
|
import signal
|
|
|
|
from aiortc.contrib.signaling import add_signaling_arguments, create_signaling
|
|
|
|
from utils.log_utils import LOGGER
|
|
from stream_client import StreamClient
|
|
from typing import NoReturn
|
|
|
|
|
|
async def main() -> NoReturn:
|
|
"""
|
|
Reflector's entry point to the python client for WebRTC streaming if not
|
|
using the browser based UI-application
|
|
:return:
|
|
"""
|
|
parser = argparse.ArgumentParser(description="Data channels ping/pong")
|
|
|
|
parser.add_argument(
|
|
"--url", type=str, nargs="?", default="http://0.0.0.0:1250/offer"
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--ping-pong",
|
|
help="Benchmark data channel with ping pong",
|
|
type=eval,
|
|
choices=[True, False],
|
|
default="False",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--play-from",
|
|
type=str,
|
|
default="",
|
|
)
|
|
add_signaling_arguments(parser)
|
|
|
|
args = parser.parse_args()
|
|
|
|
signaling = create_signaling(args)
|
|
|
|
async def shutdown(signal, loop):
|
|
"""Cleanup tasks tied to the service's shutdown."""
|
|
LOGGER.info(f"Received exit signal {signal.name}...")
|
|
LOGGER.info("Closing database connections")
|
|
LOGGER.info("Nacking outstanding messages")
|
|
tasks = [t for t in asyncio.all_tasks() if t is not asyncio.current_task()]
|
|
|
|
[task.cancel() for task in tasks]
|
|
|
|
LOGGER.info(f"Cancelling {len(tasks)} outstanding tasks")
|
|
await asyncio.gather(*tasks, return_exceptions=True)
|
|
LOGGER.info(f'{"Flushing metrics"}')
|
|
loop.stop()
|
|
|
|
signals = (signal.SIGHUP, signal.SIGTERM, signal.SIGINT)
|
|
loop = asyncio.get_event_loop()
|
|
for s in signals:
|
|
loop.add_signal_handler(s, lambda s=s: asyncio.create_task(shutdown(s, loop)))
|
|
|
|
# Init client
|
|
sc = StreamClient(
|
|
signaling=signaling,
|
|
url=args.url,
|
|
play_from=args.play_from,
|
|
ping_pong=args.ping_pong,
|
|
)
|
|
await sc.start()
|
|
async for msg in sc.get_reader():
|
|
print(msg)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|