import cv2
from datetime import datetime


def main():
    # 0 — встроенная USB/веб-камера
    # Для RTSP можно указать строку:
    # camera_url = "rtsp://login:password@192.168.1.100:554/Streaming/Channels/101"
    camera_url = 0

    cap = cv2.VideoCapture(camera_url)

    if not cap.isOpened():
        print("Ошибка: не удалось открыть камеру")
        return

    # Настройки камеры
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = cap.get(cv2.CAP_PROP_FPS)

    if fps <= 0 or fps > 120:
        fps = 25

    print(f"Камера открыта: {width}x{height}, FPS={fps}")

    filename = datetime.now().strftime("record_%Y-%m-%d_%H-%M-%S.mp4")

    # Кодек для MP4
    fourcc = cv2.VideoWriter_fourcc(*"mp4v")

    writer = cv2.VideoWriter(
        filename,
        fourcc,
        fps,
        (width, height)
    )

    if not writer.isOpened():
        print("Ошибка: не удалось создать файл записи")
        cap.release()
        return

    print(f"Запись началась: {filename}")
    print("Нажми Q для остановки")

    while True:
        ret, frame = cap.read()

        if not ret:
            print("Ошибка: кадр не получен")
            break

        writer.write(frame)

        cv2.imshow("Camera recording", frame)

        if cv2.waitKey(1) & 0xFF == ord("q"):
            print("Остановка записи")
            break

    cap.release()
    writer.release()
    cv2.destroyAllWindows()

    print(f"Видео сохранено: {filename}")


if __name__ == "__main__":
    main()
