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.
"""
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