From 47e9381269acf2aa7fd5e533f8be93a1cf22549a Mon Sep 17 00:00:00 2001 From: Alberto-Audrix Date: Thu, 27 Aug 2026 11:25:35 +0700 Subject: [PATCH] cap written ffmpeg error --- counter_live_rknn.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/counter_live_rknn.py b/counter_live_rknn.py index e9e9f43..d7069c8 100644 --- a/counter_live_rknn.py +++ b/counter_live_rknn.py @@ -4,6 +4,7 @@ Runs on RK3588 hardware with RKNN model (320×320 input). Uses ByteTrack (Kalman filter + two-stage IoU association) for tracking. """ +import contextlib import numpy as np import cv2 import csv @@ -12,6 +13,7 @@ import os import shutil import signal import socket +import sys import threading import time from collections import deque @@ -871,10 +873,37 @@ def start_control_socket(): return srv +@contextlib.contextmanager +def _quiet_opencv_stderr(): + """Silence OpenCV/FFmpeg stderr (DESCRIBE failed, cap.cpp WARN, etc.).""" + saved_fd = None + devnull_fd = None + try: + stderr_fd = sys.stderr.fileno() + saved_fd = os.dup(stderr_fd) + devnull_fd = os.open(os.devnull, os.O_WRONLY) + os.dup2(devnull_fd, stderr_fd) + except (AttributeError, OSError, ValueError): + yield + return + try: + yield + finally: + os.dup2(saved_fd, stderr_fd) + os.close(saved_fd) + os.close(devnull_fd) + + def open_capture(source): if source.lower().startswith(("rtsp://", "http://")): os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = RTSP_FFMPEG_OPTIONS - cap = cv2.VideoCapture(source, cv2.CAP_FFMPEG) + # When STREAM_ERROR_LOG_MAX > 0, native OpenCV/FFmpeg stderr is suppressed; + # stream_error_log emits at most that many user-facing messages per outage. + if STREAM_ERROR_LOG_MAX > 0: + with _quiet_opencv_stderr(): + cap = cv2.VideoCapture(source, cv2.CAP_FFMPEG) + else: + cap = cv2.VideoCapture(source, cv2.CAP_FFMPEG) cap.set(cv2.CAP_PROP_BUFFERSIZE, 1) return cap