cap written ffmpeg error

This commit is contained in:
Alberto-Audrix committed 2026-08-27 11:25:35 +07:00
1 parent 706f9261fb
commit 47e9381269
1 file changed
+30 -1
+30 -1
View File
@@ -4,6 +4,7 @@ Runs on RK3588 hardware with RKNN model (320×320 input).
Uses ByteTrack (Kalman filter + two-stage IoU association) for tracking. Uses ByteTrack (Kalman filter + two-stage IoU association) for tracking.
""" """
import contextlib
import numpy as np import numpy as np
import cv2 import cv2
import csv import csv
@@ -12,6 +13,7 @@ import os
import shutil import shutil
import signal import signal
import socket import socket
import sys
import threading import threading
import time import time
from collections import deque from collections import deque
@@ -871,10 +873,37 @@ def start_control_socket():
return srv 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): def open_capture(source):
if source.lower().startswith(("rtsp://", "http://")): if source.lower().startswith(("rtsp://", "http://")):
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = RTSP_FFMPEG_OPTIONS 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) cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
return cap return cap