From b8d3a7f3c5adfdf4dff2b370b03a69cc8a9d580a Mon Sep 17 00:00:00 2001 From: Jason Wallace Date: Thu, 5 Jan 2023 17:18:37 +0200 Subject: [PATCH 1/2] Backport video-service module from TinyPilot-Pro. --- app/video_service.py | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 app/video_service.py diff --git a/app/video_service.py b/app/video_service.py new file mode 100644 index 000000000..c81e5822e --- /dev/null +++ b/app/video_service.py @@ -0,0 +1,53 @@ +import logging +import subprocess + +import flask + +logger = logging.getLogger(__name__) + + +def restart(): + """Restarts the video streaming services for the remote screen. + + It only triggers the restart, but it doesn’t actually wait for it to + complete. + """ + _restart_ustreamer() + if flask.current_app.config.get('USE_WEBRTC_REMOTE_SCREEN', False): + _restart_janus() + + +def _restart_ustreamer(): + """Restarts uStreamer in a best-effort manner. + + In case the restart invocation failed, it ignores (but logs) the error. + """ + logger.info('Triggering ustreamer restart...') + try: + subprocess.check_output( + ['sudo', '/usr/sbin/service', 'ustreamer', 'restart'], + stderr=subprocess.STDOUT, + universal_newlines=True) + except subprocess.CalledProcessError as e: + logger.error('Failed to restart ustreamer: %s', e) + return + + logger.info('Successfully restarted ustreamer') + + +def _restart_janus(): + """Restarts Janus in a best-effort manner. + + In case the restart invocation failed, it ignores (but logs) the error. + """ + logger.info('Triggering janus restart...') + try: + subprocess.check_output( + ['sudo', '/usr/sbin/service', 'janus', 'restart'], + stderr=subprocess.STDOUT, + universal_newlines=True) + except subprocess.CalledProcessError as e: + logger.error('Failed to restart janus: %s', e) + return + + logger.info('Successfully restarted janus') From 24cb3f91cb8bfba3a71d5e407032e0073a768300 Mon Sep 17 00:00:00 2001 From: Jason Wallace Date: Mon, 9 Jan 2023 15:26:19 +0200 Subject: [PATCH 2/2] Remove reference to USE_WEBRTC_REMOTE_SCREEN. --- app/video_service.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/video_service.py b/app/video_service.py index c81e5822e..a09a01838 100644 --- a/app/video_service.py +++ b/app/video_service.py @@ -1,7 +1,7 @@ import logging import subprocess -import flask +import db.settings logger = logging.getLogger(__name__) @@ -13,7 +13,9 @@ def restart(): complete. """ _restart_ustreamer() - if flask.current_app.config.get('USE_WEBRTC_REMOTE_SCREEN', False): + use_webrtc = db.settings.Settings().get_streaming_mode( + ) == db.settings.StreamingMode.H264 + if use_webrtc: _restart_janus()