You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask中播放非静态目录下的MP4视频文件

在Flask中播放非静态目录下的MP4视频

要播放Flask默认静态目录外的MP4文件,你需要自定义路由来处理视频文件的请求,同时要支持浏览器的分段加载需求(Range请求),具体实现如下:

1. 后端路由实现

在你的Flask应用中添加以下路由代码,记得替换ALLOWED_VIDEO_DIR为你的视频实际所在目录:

from flask import Flask, request, send_file, abort
import os
from werkzeug.security import safe_join

app = Flask(__name__)

# 指定允许访问的视频目录,替换为你的实际路径
ALLOWED_VIDEO_DIR = "/path/to/your/AnyDirectory"

@app.route('/video/<filename>')
def serve_video(filename):
    # 安全拼接路径,防止路径遍历攻击
    video_path = safe_join(ALLOWED_VIDEO_DIR, filename)
    
    # 检查文件是否存在且为MP4格式
    if not os.path.exists(video_path) or not filename.endswith('.mp4'):
        abort(404)
    
    # 处理Range请求(支持视频分段加载)
    range_header = request.headers.get('Range', None)
    if range_header:
        file_size = os.path.getsize(video_path)
        start, end = range_header.strip().split('=')[1].split('-')
        start = int(start) if start else 0
        end = int(end) if end else file_size - 1
        chunk_length = end - start + 1
        
        with open(video_path, 'rb') as f:
            f.seek(start)
            chunk_data = f.read(chunk_length)
        
        response = app.response_class(
            chunk_data,
            status=206,
            mimetype='video/mp4',
            direct_passthrough=True
        )
        response.headers.add('Content-Range', f'bytes {start}-{end}/{file_size}')
        response.headers.add('Accept-Ranges', 'bytes')
        response.headers.add('Content-Length', str(chunk_length))
        return response
    
    # 非Range请求返回完整视频文件
    return send_file(video_path, mimetype='video/mp4')

2. 前端模板调用

在HTML模板中,通过url_for指向自定义的视频路由,而非直接写物理路径:

<video width="800" height="450" controls>
   <source src="{{ url_for('serve_video', filename='hello.mp4') }}" type="video/mp4">
</video>

关键注意事项

  • 安全防护:必须使用safe_join拼接路径,同时限制允许访问的目录,避免恶意用户通过路径遍历访问服务器上的其他敏感文件。
  • 播放兼容性:支持Range请求是大视频正常播放的关键,否则浏览器可能无法加载或播放卡顿。
  • 权限控制:如果需要限制视频访问范围,可以在路由中添加身份验证逻辑(比如登录状态检查)。

内容的提问来源于stack exchange,提问作者user3792705

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:48:24