AnlaAnla hace 3 días
padre
commit
5e68067d99
Se han modificado 4 ficheros con 40 adiciones y 7 borrados
  1. 16 0
      Test/test01.py
  2. 12 6
      app/api/camera.py
  3. 10 0
      app/utils/init_network.py
  4. 2 1
      run_MonitorCameraServer.py

+ 16 - 0
Test/test01.py

@@ -0,0 +1,16 @@
+import cv2
+
+# 替换为你的摄像头真实账号密码
+rtsp_url = "rtsp://admin:password@192.168.77.10:554/live/ch0"
+
+cap = cv2.VideoCapture(rtsp_url)
+
+if cap.isOpened():
+    ret, frame = cap.read()
+    if ret:
+        # 保存图片
+        cv2.imwrite("snapshot.jpg", frame)
+        print("照片已保存为 snapshot.jpg")
+    cap.release()
+else:
+    print("无法打开视频流,请检查 RTSP 地址或账号密码")

+ 12 - 6
app/api/camera.py

@@ -3,6 +3,7 @@ import os
 import shutil
 import subprocess
 import time
+import platform
 from concurrent.futures import ThreadPoolExecutor
 from datetime import datetime
 from threading import Lock, Timer
@@ -13,6 +14,7 @@ from pydantic import BaseModel
 
 from app.core.config import settings
 from app.services.storage import get_storage_service, sanitize_name
+from app.utils.init_network import init_network
 
 logger = logging.getLogger(__name__)
 
@@ -28,6 +30,10 @@ active_statuses = {"starting", "recording", "stopping", "uploading"}
 router = APIRouter()
 
 
+# !!!!!!!!!!!!!!!!!!!!!这个网络路由要走usb配置!!!!!!!!!!!!!!!!!!!!!!!
+
+
+
 class TaskRequest(BaseModel):
     camera_id: str
     task_name: str
@@ -48,11 +54,7 @@ def _build_response(task_status: Dict[str, Any]) -> Dict[str, Any]:
         "camera_id": task_status.get("camera_id"),
         "task_name": task_status.get("task_name"),
         "start_time": task_status.get("start_time"),
-        "storage_type": task_status.get("storage_type"),
-        "local_file": task_status.get("local_file"),
-        "bucket": task_status.get("bucket"),
-        "object_name": task_status.get("object_name"),
-        "download_url": task_status.get("download_url"),
+        "video_url": task_status.get("download_url"),
         "stop_reason": task_status.get("stop_reason"),
         "error": task_status.get("error"),
         "local_file_deleted": task_status.get("local_file_deleted"),
@@ -185,7 +187,8 @@ def record_camera(camera_id: str, task_name: str, local_file: str) -> int:
                             process.stdin.write("q\n")
                             process.stdin.flush()
                         except OSError:
-                            logger.info("FFmpeg 标准输入已关闭,跳过优雅停止写入。摄像头: %s,任务: %s", camera_id, task_name)
+                            logger.info("FFmpeg 标准输入已关闭,跳过优雅停止写入。摄像头: %s,任务: %s", camera_id,
+                                        task_name)
                     break
 
             time.sleep(0.2)
@@ -281,6 +284,9 @@ def start_task(req: TaskRequest):
     camera_id = req.camera_id
     task_name = req.task_name
 
+    if platform.system() == 'Linux':
+        print("Linux 如果用usb转接网口, 就用这个")
+        init_network()
     logger.info("收到启动录像请求。摄像头: %s,任务: %s", camera_id, task_name)
 
     if camera_id not in settings.CAMERA_CONFIG:

+ 10 - 0
app/utils/init_network.py

@@ -0,0 +1,10 @@
+import subprocess
+
+def init_network():
+    # 设置路由,让 192.168.77.10 走 USB 网口
+    '''
+    sudo ip route add 192.168.77.10/32 dev enx00e04c680042
+    '''
+    subprocess.run([
+        "sudo", "ip", "route", "add", "192.168.77.10/32", "dev", "enx00e04c680042"
+    ])

+ 2 - 1
run_MonitorCameraServer.py

@@ -4,9 +4,10 @@ import socket
 import uvicorn
 
 from app.core.logging_config import setup_logging
-
+from app.utils.init_network import init_network
 
 if __name__ == "__main__":
+    init_network()
     setup_logging()
     logger = logging.getLogger(__name__)