使用flask将服务器端的视频通过网页在本地查看

原理:把视频变成一个网页直播流,使用 Flask 框架将 OpenCV 的每一帧图片通过 HTTP 协议发给浏览器。

  1. 服务器安装Flask:

    pip install flask

  2. 编写并运行"推流脚本"

在服务器上创建一个新文件,例如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)
  1. 在本地(wins)观看

步骤运行后,终端会显示:

我们在本地浏览器网址输入:http://10.3.86.255:5000

就能看到视频了!!

相关推荐
海上彼尚5 小时前
Cursor 模型的强度实测排行
前端·人工智能·后端
YCOSA20255 小时前
系统工具使用检测.exe (仅供娱乐)
python·microsoft
2601_962295335 小时前
如何python实现网页的自动化
python·selenium·beautifulsoup·requests·网页自动化
ofoxcoding5 小时前
GPT Image 2.5 API 实战:Python 调用实现图片生成与编辑
人工智能·python·gpt·ai
GoGeekBaird6 小时前
从「跑完即销毁」到「用完再销毁」:云沙箱的一次进化
后端·github·ai编程
张小姐的猫6 小时前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
孫治AllenSun6 小时前
【LangChain4J-09】开发学习知识点
spring boot·后端·学习
Elastic 中国社区官方博客6 小时前
Elasticsearch Python DSL 客户端开发
大数据·数据库·python·elasticsearch·搜索引擎·全文检索
lisin-lee-cooper7 小时前
简单聊聊 Spring 框架源码
java·后端·spring
复方金银花颗粒7 小时前
reactor和proactor的好处和坏处。为什么要用reactor而不用 proactor?
后端·信号处理