原理:把视频变成一个网页直播流,使用 Flask 框架将 OpenCV 的每一帧图片通过 HTTP 协议发给浏览器。
-
服务器安装Flask:
pip install flask
-
编写并运行"推流脚本"
在服务器上创建一个新文件,例如web_show.py(记得修改成自己的视频地址):
python
import cv2
from flask import Flask, Response
import time
app = Flask(__name__)
# ================= 配置区 =================
# 如果你想测试摄像头,写 0
# 如果是视频文件,写文件路径,例如 'test_video.mp4'
VIDEO_SOURCE = 'test_video.mp4'
# =========================================
def generate_frames():
# 初始化视频源
cap = cv2.VideoCapture(VIDEO_SOURCE)
if not cap.isOpened():
print(f"无法打开视频源: {VIDEO_SOURCE}")
return
while True:
success, frame = cap.read()
if not success:
# 视频播完后,重置到开头循环播放(可选)
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
continue
cv2.putText(frame, "Running on Server", (50, 50),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# =================================================
# 将 OpenCV 图像编码为 JPEG 格式
ret, buffer = cv2.imencode('.jpg', frame)
if not ret:
continue
frame_bytes = buffer.tobytes()
# 使用生成器流式输出
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame_bytes + b'\r\n')
@app.route('/video_feed')
def video_feed():
return Response(generate_frames(),
mimetype='multipart/x-mixed-replace; boundary=frame')
@app.route('/')
def index():
return "<h1>视频流服务运行中...</h1><img src='/video_feed' width='640'>"
if __name__ == '__main__':
# host='0.0.0.0' 表示允许局域网/外网访问
print("服务已启动!请在浏览器访问 http://<服务器IP>:5000")
app.run(host='0.0.0.0', port=5000, debug=False)
- 在本地(wins)观看
步骤运行后,终端会显示:

我们在本地浏览器网址输入:http://10.3.86.255:5000
就能看到视频了!!