Initial commit for tst
This commit is contained in:
38
AIMonitor/static_server.py
Normal file
38
AIMonitor/static_server.py
Normal file
@@ -0,0 +1,38 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from flask import Flask, send_from_directory, abort
|
||||
|
||||
# 静态视频根目录,应与 rtsp_service_ws.py 中的 VIDEO_OUTPUT_DIR 保持一致
|
||||
BASE_DIR = Path(__file__).resolve().parent
|
||||
VIDEO_ROOT = BASE_DIR / "videos"
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
@app.route("/<int:camera_id>/<path:filename>")
|
||||
def serve_video(camera_id: int, filename: str):
|
||||
"""按 /<id>/<videofile>.mp4 形式访问视频文件。
|
||||
|
||||
这里简单地从 VIDEO_ROOT 下按文件名查找并返回文件。
|
||||
如果你希望严格校验 id 与文件名中的 cam{id} 一致,可以在这里加一层判断。
|
||||
"""
|
||||
# 可选的安全检查:不允许跳出目录
|
||||
if ".." in filename or filename.startswith("/"):
|
||||
abort(400, "invalid filename")
|
||||
|
||||
if not VIDEO_ROOT.exists():
|
||||
abort(404, "video root not found")
|
||||
|
||||
# 这里没有强制校验 camera_id 与文件名对应关系,只按文件名返回
|
||||
# 例如:http://host:5000/1/20251209_101010_cam1.mp4
|
||||
# 实际文件路径为 ./videos/20251209_101010_cam1.mp4
|
||||
if not (VIDEO_ROOT / filename).exists():
|
||||
abort(404)
|
||||
|
||||
return send_from_directory(VIDEO_ROOT, filename)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 默认监听 5000 端口,你可以按需修改 host/port
|
||||
app.run(host="0.0.0.0", port=5000, debug=False)
|
||||
Reference in New Issue
Block a user