diff --git a/app.js b/app.js index a175017..0298e6a 100644 --- a/app.js +++ b/app.js @@ -85,6 +85,15 @@ function startStream() { if (state !== 'PLAYING') return; if (typeof event.data === 'string') { + if (event.data.startsWith('Error:')) { + statusEl.textContent = event.data; + statusEl.style.color = '#ff0000'; + state = 'IDLE'; + if (ws) ws.close(); + setTimeout(() => resetToIdle(), 3000); + return; + } + if (event.data.startsWith('INIT:')) { const p = event.data.split(':'); targetFps = parseFloat(p[1]); diff --git a/ascii_video_player2.py b/ascii_video_player2.py index b2e99f4..7c962f3 100644 --- a/ascii_video_player2.py +++ b/ascii_video_player2.py @@ -37,7 +37,7 @@ class VideoDecoder: def __init__(self, path: str, cols: int, rows: int) -> None: self._cap = cv2.VideoCapture(path) if not self._cap.isOpened(): - raise FileNotFoundError(f"Video açılamadı: {path!r}") + raise FileNotFoundError(f"Could not open video file: {path!r}") self.fps : float = self._cap.get(cv2.CAP_PROP_FPS) or 24.0 self.frame_count : int = int(self._cap.get(cv2.CAP_PROP_FRAME_COUNT)) @@ -294,9 +294,13 @@ if __name__ == "__main__": custom_palette = args.palette.split() if args.palette else None - renderer = TerminalRenderer( - path = args.video, - palette = custom_palette, - quantize_bits = args.quality, - ) - renderer.play() + try: + renderer = TerminalRenderer( + path = args.video, + palette = custom_palette, + quantize_bits = args.quality, + ) + renderer.play() + except FileNotFoundError as e: + print(f"\n[Error] {e}") + sys.exit(1) diff --git a/stream_server.py b/stream_server.py index 05bee6a..e668609 100644 --- a/stream_server.py +++ b/stream_server.py @@ -125,7 +125,12 @@ if __name__ == "__main__": app.state.cols = args.cols app.state.rows = args.rows - print(f"[{args.video}] ready to stream. Mode: {args.mode}, Res: {args.cols}x{args.rows}") + if not os.path.exists(args.video): + print(f"\n[WARNING] Video file '{args.video}' not found!") + print("The server will start, but streaming will fail until the file is provided.\n") + else: + print(f"[{args.video}] ready to stream. Mode: {args.mode}, Res: {args.cols}x{args.rows}") + print(f"Starting server... Please go to http://localhost:{args.port} in your browser.") uvicorn.run(app, host="0.0.0.0", port=args.port, ws_ping_interval=None, ws_ping_timeout=None)