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)

相关推荐
又来敲代码了10 分钟前
k8s的部署
linux·运维·云原生·容器·kubernetes
梦·D·21 分钟前
安全运维工具箱sskit_v1.0.3 部署
运维
CDN36021 分钟前
DNS 负载均衡技术架构与调度策略解析
运维·架构·负载均衡
忡黑梨22 分钟前
eNSP_路由策略
运维·服务器·网络·华为·智能路由器·负载均衡
日取其半万世不竭26 分钟前
PostgreSQL 云服务器安装配置指南:从零开始搭建生产数据库
服务器·数据库·postgresql
IT WorryFree34 分钟前
FGT-KVM 完整部署极简教程(CentOS 7 + KVM 环境)
linux·运维·centos
上海云盾安全满满36 分钟前
网站被攻击了,高防CDN相比与高防服务器有什么优点
运维·服务器
一袋米扛几楼9839 分钟前
【报错问题】彻底解决 TypeScript 报错 TS2769: No overload matches this call (JWT 篇)
linux·javascript·typescript
@encryption39 分钟前
计算机网络 --- NAT
运维·服务器·计算机网络
goyeer42 分钟前
【ITIL4】32服务实践 - 服务变更管理
linux·运维·服务器·数字化·价值·itil