FRP驱动本地摄像头实现远程图传

1. 后端代码 (server.py)

from flask import Flask, Response, render_template_string
import cv2
import threading

app = Flask(__name__)

# 全局变量控制摄像头开关
camera_active = False
camera = None

def generate_frames():
    global camera
    while camera_active:
        success, frame = camera.read()
        if not success:
            break
        # 将帧转换为 JPEG 格式
        ret, buffer = cv2.imencode('.jpg', frame)
        if not ret:
            break
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + buffer.tobytes() + b'\r\n')

@app.route('/')
def index():
    return render_template_string('''
        

你好啊世界



''') @app.route('/video_feed') def video_feed(): return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame') @app.route('/control') def control(): global camera_active, camera action = request.args.get('action') if action == 'start' and not camera_active: camera = cv2.VideoCapture(0) if camera.isOpened(): camera_active = True return "摄像头已启动", 200 else: return "摄像头打开失败", 500 elif action == 'stop' and camera_active: camera_active = False camera.release() return "摄像头已关闭", 200 return "无效操作", 400 if __name__ == '__main__': app.run(host='0.0.0.0', port=3344, threaded=True)

2. 安装依赖
pip install flask opencv-python

核心功能说明

  1. 交互逻辑

    • 访问 http://你的IP:3344 会显示文字、按钮和隐藏的视频区域

    • 点击按钮发送请求控制摄像头开关

    • 实时视频流通过 MJPEG 格式传输(类似监控摄像头)

  2. 技术细节

    • 使用 multipart/x-mixed-replace 实现实时流

    • 全局变量控制摄像头状态

    • 前端通过 JavaScript 动态切换视频显示


使用步骤

  1. 运行程序

    python server.py
  2. 手机访问

    • 在手机浏览器输入 http://你的本地IP:3344(确保手机和电脑在同一网络)

    • 点击按钮即可开启/关闭摄像头


注意事项

  1. 硬件要求

    • 仅限本地设备运行(云服务器通常无物理摄像头)

    • 确保摄像头驱动正常(Windows/Mac/Linux 需权限)

  2. 网络配置

    • 本地测试需关闭电脑防火墙或允许 3344 端口

    • 公网访问需配置端口转发(建议搭配 frp 内网穿透)

你可能感兴趣的:(网络)