Загрузка данных


import os
import cv2
import time

# --- НАСТРОЙКИ FFMPEG (Делаем OpenCV похожим на VLC) ---
# rtsp_transport;tcp - жестко форсируем TCP (надежная доставка)
# stimeout;5000000 - тайм-аут сокета (5 секунд), чтобы не отваливался сразу
# max_delay;500000 - даем буферу время на сборку кадра
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;tcp|stimeout;5000000|max_delay;500000"

camera_url = "rtsp://admin:PKQEEY@192.168.0.101:8000/H.264"

print("Подключение к камере...")
cap = cv2.VideoCapture(camera_url, cv2.CAP_FFMPEG)

if not cap.isOpened():
    print("[ОШИБКА] Не удалось открыть поток вообще.")
    exit()

print("Поток открыт. Нажмите 'q' на окне с видео для выхода.")

empty_count = 0

while True:
    ret, frame = cap.read()
    
    if not ret:
        empty_count += 1
        print(f"[ОШИБКА] Пустой кадр ({empty_count}). Объект VideoCapture сломался.")
        
        # Если OpenCV поймал пустой кадр, ждать бессмысленно - надо пересоздавать подключение
        print("Перезапускаем подключение к камере...")
        cap.release()
        time.sleep(2) # Даем камере "отдохнуть"
        cap = cv2.VideoCapture(camera_url, cv2.CAP_FFMPEG)
        continue

    # Если кадр есть - сбрасываем счетчик ошибок
    empty_count = 0
    
    # Уменьшаем для предпросмотра, чтобы влезло на экран
    frame_preview = cv2.resize(frame, (640, 480))
    cv2.imshow("VLC Style Test", frame_preview)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()