fastapi对视频播放加速方法

from fastapi import FastAPI, Request, HTTPException, Query

from fastapi.responses import StreamingResponse

import os

import aiofiles

app = FastAPI()

@app.get("/video")

async def stream_video(request: Request, name: str = Query(..., description="Name of the video file")):

file_path = f"videos/{name}"

if not os.path.isfile(file_path):

raise HTTPException(status_code=404, detail="Video not found")

file_size = os.path.getsize(file_path)

range_header = request.headers.get('Range')

start, end = parse_range_header(range_header, file_size)

async def iterfile(file_path, start: int, end: int):

async with aiofiles.open(file_path, mode='rb') as file:

await file.seek(start)

yield await file.read(end - start + 1)

headers = {

'Content-Range': f'bytes {start}-{end}/{file_size}',

'Accept-Ranges': 'bytes',

'Content-Length': str(end - start + 1),

'Content-Type': 'video/mp4',

}

return StreamingResponse(iterfile(file_path, start, end), headers=headers, status_code=206)

def parse_range_header(range_header: str, file_size: int):

if range_header is None:

return 0, file_size - 1

ranges = range_header.strip().split("=")[-1]

start, end = ranges.split("-")

start = int(start) if start else 0

end = int(end) if end else file_size - 1

if start >= file_size or end >= file_size or start > end:

raise HTTPException(status_code=416, detail="Requested Range Not Satisfiable")

return start, end

if name == "main":

import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)

相关推荐
一勺菠萝丶几秒前
如何在 Linux 服务器上使用 Speedtest 官方 CLI 测试带宽(小白教程)
java·服务器·前端
原来是猿4 分钟前
TCP Echo Server 深度解析:从单进程到线程池的演进之路(中)
linux·服务器·数据库
leoZ2318 分钟前
Linux 环境常用服务一键部署文档(Docker 版)
运维·docker·容器
fTiN CAPA25 分钟前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
落魄实习生1 小时前
Jenkins安装及使用
运维·jenkins
QuestLab1 小时前
让AI真正“看见“界面:纯视觉GUI自动化编排器开源了
运维·人工智能·自动化
imuliuliang1 小时前
五大编程语言核心对比:特性与应用全解析
运维·spring boot·nginx
xlq223221 小时前
52.TcpSocket
linux·服务器·网络
Agent产品评测局1 小时前
制造业考勤智能管理系统,主流AI Agent方案横评:2026年企业级自动化选型深度指南
运维·人工智能·ai·chatgpt·自动化
bukeyiwanshui1 小时前
20260509 docker项目总结
运维·docker·容器