diff --git a/web_server/blueprints/streams.py b/web_server/blueprints/streams.py index a0f306c..a0a13c1 100644 --- a/web_server/blueprints/streams.py +++ b/web_server/blueprints/streams.py @@ -12,7 +12,7 @@ from utils.path_manager import PathManager stream_bp = Blueprint("stream", __name__) # Constants -THUMBNAIL_GENERATION_INTERVAL = 180 +THUMBNAIL_GENERATION_INTERVAL = 10 ## Path Manager path_manager = PathManager() @@ -182,12 +182,14 @@ def publish_stream(): db.execute("""UPDATE users SET is_live = 1 WHERE user_id = ?""", (user_info["user_id"],)) username = user_info["username"] + user_id = user_info["user_id"] # Local file creation create_local_directories(username) # Update thumbnail periodically - update_thumbnail.delay(path_manager.get_stream_file_path(username), + update_thumbnail.delay(user_id, + path_manager.get_stream_file_path(username), path_manager.get_thumbnail_file_path(username), THUMBNAIL_GENERATION_INTERVAL) diff --git a/web_server/celery_tasks/__init__.py b/web_server/celery_tasks/__init__.py index 12ad953..bb00459 100644 --- a/web_server/celery_tasks/__init__.py +++ b/web_server/celery_tasks/__init__.py @@ -18,14 +18,17 @@ def celery_init_app(app) -> Celery: return celery_app @shared_task -def update_thumbnail(stream_file, thumbnail_file, sleep_time) -> None: +def update_thumbnail(user_id, stream_file, thumbnail_file, sleep_time) -> None: """ Updates the thumbnail of a stream periodically """ - while True: + if get_streamer_live_status(user_id)['is_live']: + print("Updating thumbnail...") generate_thumbnail(stream_file, thumbnail_file) - sleep(sleep_time) + update_thumbnail.apply_async((user_id, stream_file, thumbnail_file, sleep_time), countdown=sleep_time) + else: + print("Stream has ended, stopping thumbnail updates") @shared_task def combine_ts_stream(stream_path, vods_path, vod_file_name): diff --git a/web_server/utils/stream_utils.py b/web_server/utils/stream_utils.py index 8918b5b..eaa8e0a 100644 --- a/web_server/utils/stream_utils.py +++ b/web_server/utils/stream_utils.py @@ -109,12 +109,13 @@ def generate_thumbnail(stream_file: str, thumbnail_file: str, retry_time=5, retr break except subprocess.CalledProcessError as e: attempts -= 1 - print("FFmpeg failed with an error:") - print(e.stderr.decode()) # Print detailed error message - print(f"Retrying in {retry_time} seconds...") + print(f"No information available, retrying in {retry_time} seconds...") sleep(retry_time) continue + if attempts == 0: + print(f"Failed to generate thumbnail for {stream_file}, skipping...") + def get_stream_tags(user_id: int) -> Optional[List[str]]: """ Given a stream return tags associated with the user's stream